ng-hub-ui-utils 22.8.0 → 22.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1398,6 +1398,14 @@ class OverlayRef {
1398
1398
  ? `${this._config.height}px`
1399
1399
  : this._config.height;
1400
1400
  }
1401
+ // A content-sized overlay must never clip: with no configured size the
1402
+ // container computes to 0x0 whenever its content is absolutely positioned
1403
+ // (connected-position dropdowns), and the stylesheet's `overflow: auto`
1404
+ // would clip that content into invisibility. Explicitly sized overlays
1405
+ // keep the scrollable box.
1406
+ if (!this._config.width && !this._config.height) {
1407
+ this._containerElement.style.overflow = 'visible';
1408
+ }
1401
1409
  this._containerElement.style.position = 'fixed';
1402
1410
  // Resolve the layer through the theme token so a consumer can re-stack the
1403
1411
  // overlay (e.g. above a modal) without `!important`; the literal fallback
@@ -2160,6 +2168,13 @@ function provideHubTooltip(adapter) {
2160
2168
  /**
2161
2169
  * Lightweight tooltip directive.
2162
2170
  *
2171
+ * @deprecated Use {@link HubTooltipDirective} (`[hubTooltip]`) instead. The bare
2172
+ * attribute and the bare input names `placement`, `delay` and `offset` are not this
2173
+ * directive's to hold: Angular feeds one attribute to every directive on the element
2174
+ * that declares an input of that name, so `[hubDropdown] placement` fails to compile
2175
+ * beside a tooltip, and `[tooltip]` on a `<hub-badge>` — which owns an input of that
2176
+ * name — renders two. Kept working, unchanged, until the next major.
2177
+ *
2163
2178
  * Apply `[tooltip]` to any element to show a positioned label on hover/focus.
2164
2179
  * The tooltip element is appended to `<body>` so it is never clipped by an
2165
2180
  * overflow container, and every visual aspect is themeable through
@@ -2209,6 +2224,75 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
2209
2224
  }]
2210
2225
  }], ctorParameters: () => [], propDecorators: { tooltipTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip", required: true }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], delay: [{ type: i0.Input, args: [{ isSignal: true, alias: "delay", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "offset", required: false }] }] } });
2211
2226
 
2227
+ /**
2228
+ * Tooltip directive, named the way the rest of the family names itself.
2229
+ *
2230
+ * Apply `[hubTooltip]` to any element to show a positioned label on hover/focus.
2231
+ * The tooltip element is appended to `<body>` so it is never clipped by an overflow
2232
+ * container, and every visual aspect is themeable through `--hub-tooltip-*` CSS
2233
+ * variables.
2234
+ *
2235
+ * ## Why this exists beside {@link TooltipDirective}
2236
+ *
2237
+ * The older directive claims the bare attribute `[tooltip]` and the bare input names
2238
+ * `placement`, `delay` and `offset`. Angular feeds one attribute to **every** directive
2239
+ * on the element that declares an input of that name, so those bare names are not this
2240
+ * directive's to hold:
2241
+ *
2242
+ * - `[hubDropdown]` declares its own `placement`, typed over eight values where a
2243
+ * tooltip understands four. A menu trigger that also wanted a tooltip did not merely
2244
+ * misbehave — it failed to compile, and there was no way to give each directive its
2245
+ * own placement, because there is only one attribute.
2246
+ * - `<hub-badge>` declares a `tooltip` input of its own. Writing `[tooltip]` on one fed
2247
+ * the input *and* attached the directive, so the badge showed two.
2248
+ *
2249
+ * Prefixing settles both: an attribute named for its owner cannot be claimed by anyone
2250
+ * else. `[hubOverflowTooltip]` next door was already named this way.
2251
+ *
2252
+ * Styles ship in `styles/tooltip.scss`. Import it once in your app:
2253
+ * `@use 'ng-hub-ui-utils/styles/tooltip';`.
2254
+ *
2255
+ * @example
2256
+ * ```html
2257
+ * <button hubDropdown placement="bottom-end" [hubTooltip]="'ACTIONS.MORE' | transloco">…</button>
2258
+ * <span [hubTooltip]="label" hubTooltipPlacement="right" [hubTooltipDelay]="0">…</span>
2259
+ * ```
2260
+ */
2261
+ class HubTooltipDirective {
2262
+ /** Tooltip text content. An empty string leaves the host without a tooltip. */
2263
+ text = input.required({ ...(ngDevMode ? { debugName: "text" } : /* istanbul ignore next */ {}), alias: 'hubTooltip' });
2264
+ /** Placement of the tooltip relative to the host. */
2265
+ placement = input('top', { ...(ngDevMode ? { debugName: "placement" } : /* istanbul ignore next */ {}), alias: 'hubTooltipPlacement' });
2266
+ /** Fade duration in milliseconds, also used as the removal delay on hide. */
2267
+ delay = input(150, { ...(ngDevMode ? { debugName: "delay" } : /* istanbul ignore next */ {}), alias: 'hubTooltipDelay' });
2268
+ /** Gap in pixels between the host and the tooltip. */
2269
+ offset = input(8, { ...(ngDevMode ? { debugName: "offset" } : /* istanbul ignore next */ {}), alias: 'hubTooltipOffset' });
2270
+ host = inject(ElementRef);
2271
+ controller = new HubTooltipController(this.host.nativeElement);
2272
+ constructor() {
2273
+ effect(() => {
2274
+ this.controller.setOptions({
2275
+ placement: this.placement(),
2276
+ delay: this.delay(),
2277
+ offset: this.offset()
2278
+ });
2279
+ this.controller.setText(this.text());
2280
+ });
2281
+ }
2282
+ /** @inheritDoc */
2283
+ ngOnDestroy() {
2284
+ this.controller.destroy();
2285
+ }
2286
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HubTooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2287
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: HubTooltipDirective, isStandalone: true, selector: "[hubTooltip]", inputs: { text: { classPropertyName: "text", publicName: "hubTooltip", isSignal: true, isRequired: true, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "hubTooltipPlacement", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "hubTooltipDelay", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "hubTooltipOffset", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
2288
+ }
2289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HubTooltipDirective, decorators: [{
2290
+ type: Directive,
2291
+ args: [{
2292
+ selector: '[hubTooltip]'
2293
+ }]
2294
+ }], ctorParameters: () => [], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "hubTooltip", required: true }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "hubTooltipPlacement", required: false }] }], delay: [{ type: i0.Input, args: [{ isSignal: true, alias: "hubTooltipDelay", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "hubTooltipOffset", required: false }] }] } });
2295
+
2212
2296
  /**
2213
2297
  * Shows a tooltip with the given text **only while the host element is truncated**
2214
2298
  * (its content is wider than its box).
@@ -2299,5 +2383,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
2299
2383
  * Generated bundle index. Do not edit.
2300
2384
  */
2301
2385
 
2302
- export { ContentRef, FOCUSABLE_ELEMENTS_SELECTOR, GetPipe, HUB_TOOLTIP_ADAPTER, HUB_TRANSLATION_CONFIG, HUB_TRANSLATION_PREFIX, HUB_TRANSLATION_SOURCE, HubDragDropService, HubOverflowTooltipDirective, HubTooltipController, HubTranslationService, IsObjectPipe, IsObservablePipe, IsStringPipe, OverlayPosition, OverlayRef, OverlayService, PopupService, ScrollBar, TooltipDirective, TranslatePipe, UcfirstPipe, UnwrapAsyncPipe, clamp, closest, computeTargetIndex, containsNode, copyArrayItem, createNativeDragImage, createPointerDragSession, debouncedSignal, equals, generateUniqueId, getActiveElement, getFocusableBoundaryElements, getValue, getValueInRange, hubCompleteTransition, hubFocusTrap, hubRunTransition, hubTooltipAdapter, interpolateString, isDefined, isInteger, isNumber, isObject, isPromise, isString, mergeDeep, moveItemInArray, padNumber, provideHubTooltip, provideHubTranslation, provideHubTranslationAdapter, reflow, regExpEscape, removeAccents, resolveDropPosition, resolveHubAccent, runInZone, toAbsoluteIndex, toInteger, toString, transferArrayItem };
2386
+ export { ContentRef, FOCUSABLE_ELEMENTS_SELECTOR, GetPipe, HUB_TOOLTIP_ADAPTER, HUB_TRANSLATION_CONFIG, HUB_TRANSLATION_PREFIX, HUB_TRANSLATION_SOURCE, HubDragDropService, HubOverflowTooltipDirective, HubTooltipController, HubTooltipDirective, HubTranslationService, IsObjectPipe, IsObservablePipe, IsStringPipe, OverlayPosition, OverlayRef, OverlayService, PopupService, ScrollBar, TooltipDirective, TranslatePipe, UcfirstPipe, UnwrapAsyncPipe, clamp, closest, computeTargetIndex, containsNode, copyArrayItem, createNativeDragImage, createPointerDragSession, debouncedSignal, equals, generateUniqueId, getActiveElement, getFocusableBoundaryElements, getValue, getValueInRange, hubCompleteTransition, hubFocusTrap, hubRunTransition, hubTooltipAdapter, interpolateString, isDefined, isInteger, isNumber, isObject, isPromise, isString, mergeDeep, moveItemInArray, padNumber, provideHubTooltip, provideHubTranslation, provideHubTranslationAdapter, reflow, regExpEscape, removeAccents, resolveDropPosition, resolveHubAccent, runInZone, toAbsoluteIndex, toInteger, toString, transferArrayItem };
2303
2387
  //# sourceMappingURL=ng-hub-ui-utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ng-hub-ui-utils.mjs","sources":["../../../projects/utils/src/lib/accent.ts","../../../projects/utils/src/lib/drag-drop/array-utils.ts","../../../projects/utils/src/lib/drag-drop/drop-position.ts","../../../projects/utils/src/lib/drag-drop/drag-image.ts","../../../projects/utils/src/lib/drag-drop/pointer-drag.ts","../../../projects/utils/src/lib/drag-drop/drag-drop.service.ts","../../../projects/utils/src/lib/drag-drop/index.ts","../../../projects/utils/src/lib/focus-trap.ts","../../../projects/utils/src/lib/util.ts","../../../projects/utils/src/lib/i18n/translation.tokens.ts","../../../projects/utils/src/lib/i18n/translation.service.ts","../../../projects/utils/src/lib/i18n/translation.provider.ts","../../../projects/utils/src/lib/i18n/translation-adapter.ts","../../../projects/utils/src/lib/overlay/overlay-position.ts","../../../projects/utils/src/lib/overlay/overlay-ref.ts","../../../projects/utils/src/lib/overlay/overlay-service.ts","../../../projects/utils/src/lib/pipes/get.pipe.ts","../../../projects/utils/src/lib/pipes/is-object.pipe.ts","../../../projects/utils/src/lib/pipes/is-observable.pipe.ts","../../../projects/utils/src/lib/pipes/is-string.pipe.ts","../../../projects/utils/src/lib/pipes/translate.pipe.ts","../../../projects/utils/src/lib/pipes/ucfirst.pipe.ts","../../../projects/utils/src/lib/pipes/unwrap-async.pipe.ts","../../../projects/utils/src/lib/transitions/util.ts","../../../projects/utils/src/lib/transitions/transition.ts","../../../projects/utils/src/lib/popup.ts","../../../projects/utils/src/lib/scrollbar.ts","../../../projects/utils/src/lib/tooltip/tooltip-controller.ts","../../../projects/utils/src/lib/tooltip/tooltip-adapter.ts","../../../projects/utils/src/lib/tooltip/tooltip.token.ts","../../../projects/utils/src/lib/tooltip/tooltip.provider.ts","../../../projects/utils/src/lib/tooltip/tooltip.directive.ts","../../../projects/utils/src/lib/tooltip/overflow-tooltip.directive.ts","../../../projects/utils/src/public-api.ts","../../../projects/utils/src/ng-hub-ui-utils.ts"],"sourcesContent":["/**\n * Resolves a component `color` / `variant` input to a paintable CSS value for a\n * `--hub-*-accent` slot, accepting ANY colour with a single rule:\n *\n * - a **bareword** — a built-in or registered semantic accent name (`primary`, `brand`…) or a CSS\n * named colour (`rebeccapurple`) — resolves to its design-system token\n * `var(--hub-sys-color-<name>, <name>)`: the token when it exists, with the raw word as fallback\n * so unregistered names / CSS named colours still paint;\n * - a **literal** colour (`#ff0000`, `rgb(...)`, `oklch(...)`, `var(...)`) is returned unchanged;\n * - an empty / nullish value returns `null`, so the component's default accent stays in effect.\n *\n * Bind the result to the component's single accent slot via the `host` metadata, e.g.\n * `host: { '[style.--hub-btn-accent]': 'accent()' }` with `accent = computed(() => resolveHubAccent(this.color()))`.\n *\n * @param value the raw `color` / `variant` input value\n * @returns the value for `[style.--hub-*-accent]`, or `null`\n */\nexport function resolveHubAccent(value: string | null | undefined): string | null {\n\tconst color = value?.trim();\n\tif (!color) {\n\t\treturn null;\n\t}\n\treturn /^[a-zA-Z][\\w-]*$/.test(color) ? `var(--hub-sys-color-${color}, ${color})` : color;\n}\n","/**\n * Clamps a value into the `[0, max]` range.\n *\n * @param value Value to clamp.\n * @param max Maximum allowed value.\n * @returns The clamped value.\n */\nexport function clamp(value: number, max: number): number {\n\treturn Math.max(0, Math.min(max, value));\n}\n\n/**\n * Moves an item within an array in place (mirrors `@angular/cdk`'s `moveItemInArray`).\n *\n * @param array Array to mutate.\n * @param fromIndex Current index of the item.\n * @param toIndex Target index of the item.\n */\nexport function moveItemInArray<T>(array: T[], fromIndex: number, toIndex: number): void {\n\tconst from = clamp(fromIndex, array.length - 1);\n\tconst to = clamp(toIndex, array.length - 1);\n\tif (from === to) {\n\t\treturn;\n\t}\n\tconst target = array[from];\n\tconst delta = to < from ? -1 : 1;\n\tfor (let i = from; i !== to; i += delta) {\n\t\tarray[i] = array[i + delta];\n\t}\n\tarray[to] = target;\n}\n\n/**\n * Transfers an item from one array to another in place (mirrors `transferArrayItem`).\n *\n * @param source Source array.\n * @param target Target array.\n * @param fromIndex Index of the item in the source array.\n * @param toIndex Insertion index in the target array.\n */\nexport function transferArrayItem<T>(source: T[], target: T[], fromIndex: number, toIndex: number): void {\n\tconst from = clamp(fromIndex, source.length - 1);\n\tconst to = clamp(toIndex, target.length);\n\tif (source.length) {\n\t\ttarget.splice(to, 0, source.splice(from, 1)[0]);\n\t}\n}\n\n/**\n * Copies an item from one array into another in place, leaving the source untouched.\n *\n * @param source Source array.\n * @param target Target array.\n * @param fromIndex Index of the item in the source array.\n * @param toIndex Insertion index in the target array.\n */\nexport function copyArrayItem<T>(source: ReadonlyArray<T>, target: T[], fromIndex: number, toIndex: number): void {\n\tif (!source.length) {\n\t\treturn;\n\t}\n\tconst from = clamp(fromIndex, source.length - 1);\n\tconst to = clamp(toIndex, target.length);\n\ttarget.splice(to, 0, source[from]);\n}\n\n/**\n * Computes the destination index in the underlying collection from the hovered target index\n * and the drop side. When reordering within the same container, the index is adjusted to\n * account for the gap left by removing the dragged item.\n *\n * @param targetIndex Absolute index of the hovered target item.\n * @param after Whether the item is dropped after (vs before) the target.\n * @param sameContainer Whether source and target collections are the same.\n * @param fromIndex Absolute index the dragged item occupied in the source collection.\n * @returns The resolved destination index.\n */\nexport function computeTargetIndex(targetIndex: number, after: boolean, sameContainer: boolean, fromIndex: number): number {\n\tlet index = after ? targetIndex + 1 : targetIndex;\n\tif (sameContainer && fromIndex < index) {\n\t\tindex -= 1;\n\t}\n\treturn Math.max(0, index);\n}\n\n/**\n * Maps a paginated visible index to its absolute index in the underlying collection.\n *\n * @param visibleIndex Index within the currently rendered slice.\n * @param sliceStart Absolute index of the first item in the slice.\n * @returns The absolute index.\n */\nexport function toAbsoluteIndex(visibleIndex: number, sliceStart: number): number {\n\treturn sliceStart + visibleIndex;\n}\n\n/**\n * Determines whether `target` is `node` or any of its descendants in a tree, where children\n * are stored under the `childrenKey` property. Used to forbid dropping a node into its own\n * subtree (which would create a cycle).\n *\n * @param node Root node of the subtree to search.\n * @param target Item to look for (e.g. the parent of a candidate drop container).\n * @param childrenKey Property name holding the children collection.\n * @returns `true` when `target` is `node` or one of its descendants.\n */\nexport function containsNode(node: any, target: any, childrenKey: string): boolean {\n\tif (target == null) {\n\t\treturn false;\n\t}\n\tif (node === target) {\n\t\treturn true;\n\t}\n\tconst children = node?.[childrenKey];\n\tif (!Array.isArray(children)) {\n\t\treturn false;\n\t}\n\treturn children.some((child) => containsNode(child, target, childrenKey));\n}\n","import { DropPosition } from './types';\n\n/**\n * Minimal rectangle shape (a subset of `DOMRect`) used for drop-position math.\n */\nexport interface DropRect {\n\ttop: number;\n\tbottom: number;\n\tleft: number;\n\tright: number;\n\twidth: number;\n\theight: number;\n}\n\n/**\n * Layout axis of a draggable collection, used to decide the drop side.\n *\n * - `vertical`: rows stacked top-to-bottom (default lists, board cards).\n * - `horizontal`: items laid left-to-right (board columns).\n * - `grid`: wrapping grid (list `cards` layout) — vertical band first, then horizontal.\n */\nexport type DragAxis = 'vertical' | 'horizontal' | 'grid';\n\n/**\n * Resolves whether a dragged item should drop before or after the hovered target, based on\n * the pointer position relative to the target's bounding rectangle and the layout axis.\n *\n * For `vertical` the Y axis decides; for `horizontal` the X axis decides (mirrored in RTL);\n * for `grid` the vertical band decides across rows and the horizontal axis decides within\n * the same row (mirrored in RTL).\n *\n * @param pointerX Pointer X in viewport coordinates.\n * @param pointerY Pointer Y in viewport coordinates.\n * @param rect Bounding rectangle of the target item.\n * @param axis Layout axis of the collection.\n * @param isRtl Whether the collection is in right-to-left mode.\n * @returns `'before'` or `'after'`.\n */\nexport function resolveDropPosition(\n\tpointerX: number,\n\tpointerY: number,\n\trect: DropRect,\n\taxis: DragAxis,\n\tisRtl: boolean\n): DropPosition {\n\tif (axis === 'horizontal') {\n\t\tconst midX = rect.left + rect.width / 2;\n\t\tconst before = isRtl ? pointerX > midX : pointerX < midX;\n\t\treturn before ? 'before' : 'after';\n\t}\n\n\tconst midY = rect.top + rect.height / 2;\n\tif (axis === 'vertical') {\n\t\treturn pointerY < midY ? 'before' : 'after';\n\t}\n\n\t// grid\n\tif (pointerY < rect.top) {\n\t\treturn 'before';\n\t}\n\tif (pointerY > rect.bottom) {\n\t\treturn 'after';\n\t}\n\tconst midX = rect.left + rect.width / 2;\n\tconst before = isRtl ? pointerX > midX : pointerX < midX;\n\treturn before ? 'before' : 'after';\n}\n","import { TemplateRef } from '@angular/core';\n\n/**\n * A rendered drag image, plus a disposer to tear it down once the drag ends.\n */\nexport interface DragImageResult {\n\t/** The root element to pass to `dataTransfer.setDragImage`. */\n\tnode: HTMLElement;\n\t/** Destroys the embedded view and removes the rendered nodes. */\n\tdestroy(): void;\n}\n\n/**\n * Renders a template off-screen so it can be used as a native drag image\n * (`dataTransfer.setDragImage`). The caller is responsible for calling `setDragImage` and,\n * on `dragend`, the returned `destroy()`.\n *\n * @param template Template to render as the drag preview.\n * @param context Template context (e.g. `{ item }`).\n * @param container Optional host element to mount into; when omitted, an off-screen holder is\n * appended to `document.body`.\n * @returns The rendered image and its disposer, or `null` when nothing renders (e.g. SSR or\n * an empty template).\n */\nexport function createNativeDragImage(\n\ttemplate: TemplateRef<any>,\n\tcontext: Record<string, unknown>,\n\tcontainer?: HTMLElement\n): DragImageResult | null {\n\tif (typeof document === 'undefined') {\n\t\treturn null;\n\t}\n\tconst view = template.createEmbeddedView(context);\n\tview.detectChanges();\n\tconst node = view.rootNodes.find((candidate: Node) => candidate.nodeType === Node.ELEMENT_NODE) as\n\t\t| HTMLElement\n\t\t| undefined;\n\tif (!node) {\n\t\tview.destroy();\n\t\treturn null;\n\t}\n\n\tconst mountedNodes: Node[] = [...view.rootNodes];\n\tlet holder: HTMLElement | null = null;\n\tif (container) {\n\t\tmountedNodes.forEach((rootNode: Node) => container.appendChild(rootNode));\n\t} else {\n\t\tholder = document.createElement('div');\n\t\tholder.style.position = 'fixed';\n\t\tholder.style.top = '-9999px';\n\t\tholder.style.left = '-9999px';\n\t\tholder.style.pointerEvents = 'none';\n\t\tmountedNodes.forEach((rootNode: Node) => holder!.appendChild(rootNode));\n\t\tdocument.body.appendChild(holder);\n\t}\n\n\treturn {\n\t\tnode,\n\t\tdestroy: () => {\n\t\t\t// Angular's `EmbeddedViewRef.destroy()` tears down the view but does NOT remove the\n\t\t\t// DOM nodes it produced, so remove them explicitly to keep the helper self-contained\n\t\t\t// (no caller-side `innerHTML` clearing needed). The off-screen holder is removed whole.\n\t\t\tview.destroy();\n\t\t\tif (holder) {\n\t\t\t\tholder.remove();\n\t\t\t} else {\n\t\t\t\tmountedNodes.forEach((rootNode: Node) => (rootNode as ChildNode).remove?.());\n\t\t\t}\n\t\t}\n\t};\n}\n","/**\n * Configuration for a Pointer Events drag session — the touch/pen fallback for native\n * HTML5 drag-and-drop, used where native dragging is unavailable (mobile/tablet).\n */\nexport interface PointerDragSessionConfig {\n\t/** The `pointerdown` event that initiated the gesture. */\n\tstartEvent: PointerEvent;\n\t/** The element being dragged. */\n\tsourceEl: HTMLElement;\n\t/** Builds the floating ghost content (custom preview render or a clone). */\n\tghostFactory: () => HTMLElement;\n\t/** Distance in pixels the pointer must travel before a drag begins (default 8). */\n\tthreshold?: number;\n\t/** Called once the gesture passes the threshold and becomes a drag. */\n\tonStart: () => void;\n\t/** Called on every move while dragging, with viewport coordinates. */\n\tonMove: (clientX: number, clientY: number) => void;\n\t/** Called on drop (pointer up after a real drag), with viewport coordinates. */\n\tonDrop: (clientX: number, clientY: number) => void;\n\t/** Called when the gesture is cancelled (e.g. `pointercancel`). */\n\tonCancel: () => void;\n\t/** Always called last for cleanup, regardless of outcome. */\n\tonEnd: () => void;\n}\n\n/**\n * Handle to an in-progress Pointer Events drag session.\n */\nexport interface PointerDragSession {\n\t/** Aborts the session and runs cleanup. */\n\tdestroy(): void;\n}\n\nconst EDGE_MARGIN = 48;\nconst MAX_SCROLL_SPEED = 16;\n\n/**\n * Creates a Pointer Events drag session that mirrors native drag-and-drop on touch devices.\n *\n * The session waits for the pointer to pass a movement threshold (so taps still behave as\n * taps), then renders a floating ghost that follows the finger, reports hover positions via\n * `onMove`, autoscrolls when near a scroll container's edges, and commits on pointer up.\n *\n * @param config Session configuration.\n * @returns A handle whose `destroy()` aborts the session.\n */\nexport function createPointerDragSession(config: PointerDragSessionConfig): PointerDragSession {\n\tconst threshold = config.threshold ?? 8;\n\tconst pointerId = config.startEvent.pointerId;\n\tconst startX = config.startEvent.clientX;\n\tconst startY = config.startEvent.clientY;\n\n\tconst rect = config.sourceEl.getBoundingClientRect();\n\tconst grabOffsetX = startX - rect.left;\n\tconst grabOffsetY = startY - rect.top;\n\n\tlet started = false;\n\tlet ghost: HTMLElement | null = null;\n\tlet scrollContainer: HTMLElement | Window = window;\n\tlet rafId: number | null = null;\n\tlet scrollVelocity = 0;\n\n\t/**\n\t * Positions the ghost under the pointer.\n\t *\n\t * @param x Pointer X.\n\t * @param y Pointer Y.\n\t */\n\tconst positionGhost = (x: number, y: number): void => {\n\t\tif (ghost) {\n\t\t\tghost.style.transform = `translate(${x - grabOffsetX}px, ${y - grabOffsetY}px)`;\n\t\t}\n\t};\n\n\t/**\n\t * Runs the autoscroll animation loop while the pointer sits in an edge zone.\n\t */\n\tconst scrollStep = (): void => {\n\t\tif (scrollVelocity !== 0) {\n\t\t\tif (scrollContainer === window) {\n\t\t\t\twindow.scrollBy(0, scrollVelocity);\n\t\t\t} else {\n\t\t\t\t(scrollContainer as HTMLElement).scrollTop += scrollVelocity;\n\t\t\t}\n\t\t\trafId = requestAnimationFrame(scrollStep);\n\t\t} else {\n\t\t\trafId = null;\n\t\t}\n\t};\n\n\t/**\n\t * Updates the autoscroll velocity from the pointer's proximity to the container edges.\n\t *\n\t * @param y Pointer Y.\n\t */\n\tconst updateAutoscroll = (y: number): void => {\n\t\tconst bounds =\n\t\t\tscrollContainer === window\n\t\t\t\t? { top: 0, bottom: window.innerHeight }\n\t\t\t\t: (scrollContainer as HTMLElement).getBoundingClientRect();\n\t\tif (y < bounds.top + EDGE_MARGIN) {\n\t\t\tscrollVelocity = -Math.ceil((MAX_SCROLL_SPEED * (bounds.top + EDGE_MARGIN - y)) / EDGE_MARGIN);\n\t\t} else if (y > bounds.bottom - EDGE_MARGIN) {\n\t\t\tscrollVelocity = Math.ceil((MAX_SCROLL_SPEED * (y - (bounds.bottom - EDGE_MARGIN))) / EDGE_MARGIN);\n\t\t} else {\n\t\t\tscrollVelocity = 0;\n\t\t}\n\t\tif (scrollVelocity !== 0 && rafId === null) {\n\t\t\trafId = requestAnimationFrame(scrollStep);\n\t\t}\n\t};\n\n\t/**\n\t * Begins the actual drag once the threshold is exceeded.\n\t *\n\t * @param x Pointer X.\n\t * @param y Pointer Y.\n\t */\n\tconst beginDrag = (x: number, y: number): void => {\n\t\tstarted = true;\n\t\tscrollContainer = findScrollContainer(config.sourceEl);\n\t\tghost = config.ghostFactory();\n\t\tghost.classList.add('hub-drag-ghost');\n\t\tghost.style.position = 'fixed';\n\t\tghost.style.top = '0';\n\t\tghost.style.left = '0';\n\t\tghost.style.width = `${rect.width}px`;\n\t\tghost.style.pointerEvents = 'none';\n\t\tghost.style.zIndex = '2147483647';\n\t\tghost.style.margin = '0';\n\t\tpositionGhost(x, y);\n\t\tdocument.body.appendChild(ghost);\n\t\tconfig.onStart();\n\t};\n\n\t/**\n\t * Handles pointer movement: starts the drag past threshold, then tracks and autoscrolls.\n\t *\n\t * @param event Pointer move event.\n\t */\n\tconst onPointerMove = (event: PointerEvent): void => {\n\t\tif (event.pointerId !== pointerId) {\n\t\t\treturn;\n\t\t}\n\t\tconst { clientX, clientY } = event;\n\t\tif (!started) {\n\t\t\tif (Math.abs(clientX - startX) < threshold && Math.abs(clientY - startY) < threshold) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbeginDrag(clientX, clientY);\n\t\t}\n\t\tevent.preventDefault();\n\t\tpositionGhost(clientX, clientY);\n\t\tconfig.onMove(clientX, clientY);\n\t\tupdateAutoscroll(clientY);\n\t};\n\n\t/**\n\t * Handles pointer up: commits the drop when a drag actually happened.\n\t *\n\t * @param event Pointer up event.\n\t */\n\tconst onPointerUp = (event: PointerEvent): void => {\n\t\tif (event.pointerId !== pointerId) {\n\t\t\treturn;\n\t\t}\n\t\tif (started) {\n\t\t\tconfig.onDrop(event.clientX, event.clientY);\n\t\t}\n\t\tcleanup();\n\t};\n\n\t/**\n\t * Handles pointer cancellation.\n\t *\n\t * @param event Pointer cancel event.\n\t */\n\tconst onPointerCancel = (event: PointerEvent): void => {\n\t\tif (event.pointerId !== pointerId) {\n\t\t\treturn;\n\t\t}\n\t\tif (started) {\n\t\t\tconfig.onCancel();\n\t\t}\n\t\tcleanup();\n\t};\n\n\t/**\n\t * Removes listeners, the ghost and any pending animation frame, then notifies the owner.\n\t */\n\tconst cleanup = (): void => {\n\t\twindow.removeEventListener('pointermove', onPointerMove);\n\t\twindow.removeEventListener('pointerup', onPointerUp);\n\t\twindow.removeEventListener('pointercancel', onPointerCancel);\n\t\tif (rafId !== null) {\n\t\t\tcancelAnimationFrame(rafId);\n\t\t\trafId = null;\n\t\t}\n\t\tscrollVelocity = 0;\n\t\tghost?.remove();\n\t\tghost = null;\n\t\ttry {\n\t\t\tconfig.sourceEl.releasePointerCapture(pointerId);\n\t\t} catch {\n\t\t\t// Pointer capture may not be held; ignore.\n\t\t}\n\t\tconfig.onEnd();\n\t};\n\n\ttry {\n\t\tconfig.sourceEl.setPointerCapture(pointerId);\n\t} catch {\n\t\t// Environments without pointer capture (e.g. tests) can still proceed.\n\t}\n\twindow.addEventListener('pointermove', onPointerMove, { passive: false });\n\twindow.addEventListener('pointerup', onPointerUp);\n\twindow.addEventListener('pointercancel', onPointerCancel);\n\n\treturn { destroy: cleanup };\n}\n\n/**\n * Finds the nearest vertically scrollable ancestor of an element, falling back to `window`.\n *\n * @param el Starting element.\n * @returns The scroll container (an element) or `window`.\n */\nfunction findScrollContainer(el: HTMLElement | null): HTMLElement | Window {\n\tlet node = el?.parentElement ?? null;\n\twhile (node && node !== document.body && node !== document.documentElement) {\n\t\tconst style = getComputedStyle(node);\n\t\tconst overflowY = style.overflowY;\n\t\tif ((overflowY === 'auto' || overflowY === 'scroll') && node.scrollHeight > node.clientHeight) {\n\t\t\treturn node;\n\t\t}\n\t\tnode = node.parentElement;\n\t}\n\treturn window;\n}\n","import { computed, Injectable, signal } from '@angular/core';\nimport { ActiveDrag, DragRegistration, DragTarget } from './types';\n\n/**\n * Singleton coordinator that backs native HTML5 drag-and-drop reordering and cross-instance\n * transfers (e.g. between two lists, or any two owners that share a drag group).\n *\n * A drag spans two component instances (source and target) and the native `dataTransfer`\n * payload is unreadable during `dragover`, so a shared, root-provided service is the only\n * reliable channel to know what is being dragged and from where while hovering. The service\n * only coordinates state; it never mutates the underlying collections.\n */\n@Injectable({ providedIn: 'root' })\nexport class HubDragDropService {\n\treadonly #registrations = new Map<string, DragRegistration>();\n\treadonly #active = signal<ActiveDrag | null>(null);\n\treadonly #target = signal<DragTarget | null>(null);\n\n\t/** The drag currently in progress, or `null`. */\n\treadonly active = this.#active.asReadonly();\n\t/** The current drop target, or `null`. */\n\treadonly target = this.#target.asReadonly();\n\t/** Whether a drag is in progress. */\n\treadonly isDragging = computed(() => this.#active() !== null);\n\n\t/**\n\t * Registers an owner so it can participate in (and be a target of) cross-owner transfers.\n\t *\n\t * @param registration The owner registration.\n\t */\n\tregister(registration: DragRegistration): void {\n\t\tthis.#registrations.set(registration.ownerId, registration);\n\t}\n\n\t/**\n\t * Removes an owner registration (call on destroy).\n\t *\n\t * @param ownerId Identifier of the owner to remove.\n\t */\n\tunregister(ownerId: string): void {\n\t\tthis.#registrations.delete(ownerId);\n\t}\n\n\t/**\n\t * Starts a drag, recording the active item and clearing any previous target.\n\t *\n\t * @param drag The active drag snapshot.\n\t */\n\tbegin(drag: ActiveDrag): void {\n\t\tthis.#active.set(drag);\n\t\tthis.#target.set(null);\n\t}\n\n\t/**\n\t * Updates the transient drop target while hovering.\n\t *\n\t * @param target The hovered target, or `null` to clear it.\n\t */\n\tsetTarget(target: DragTarget | null): void {\n\t\tthis.#target.set(target);\n\t}\n\n\t/**\n\t * Ends the current drag and clears all transient state.\n\t */\n\tend(): void {\n\t\tthis.#active.set(null);\n\t\tthis.#target.set(null);\n\t}\n\n\t/**\n\t * Determines whether the active drag may be dropped on the given owner. An owner always\n\t * accepts its own items (in-owner reorder); a different owner accepts only when both\n\t * share the same non-null drag group.\n\t *\n\t * @param targetOwnerId Identifier of the candidate target owner.\n\t * @returns `true` when the drop is allowed.\n\t */\n\tcanDrop(targetOwnerId: string): boolean {\n\t\tconst active = this.#active();\n\t\tif (!active) {\n\t\t\treturn false;\n\t\t}\n\t\tif (targetOwnerId === active.sourceId) {\n\t\t\treturn true;\n\t\t}\n\t\tconst registration = this.#registrations.get(targetOwnerId);\n\t\tif (!registration) {\n\t\t\treturn false;\n\t\t}\n\t\tconst targetGroup = registration.group();\n\t\treturn active.sourceGroup != null && targetGroup != null && active.sourceGroup === targetGroup;\n\t}\n\n\t/**\n\t * Re-renders an owner on demand (used by the destination owner to refresh the source owner\n\t * after a cross-owner transfer).\n\t *\n\t * @param ownerId Identifier of the owner to refresh.\n\t */\n\trefreshSource(ownerId: string): void {\n\t\tthis.#registrations.get(ownerId)?.refresh?.();\n\t}\n\n\t/**\n\t * Asks an owner to commit the pending drop as the destination (Pointer Events fallback,\n\t * where the source component drives the gesture but the destination must commit/emit).\n\t *\n\t * @param ownerId Identifier of the destination owner.\n\t */\n\trequestCommit(ownerId: string): void {\n\t\tthis.#registrations.get(ownerId)?.commit?.();\n\t}\n\n\t/**\n\t * Resolves the drop target under a viewport point by hit-testing the DOM and delegating to\n\t * the owning component (which knows its own collections). Used by the Pointer Events\n\t * fallback, including cross-owner hovers where the target is a different component.\n\t *\n\t * @param clientX Viewport X coordinate.\n\t * @param clientY Viewport Y coordinate.\n\t * @returns The resolved target, or `null` when the point is not over a droppable owner.\n\t */\n\tresolveTargetAt(clientX: number, clientY: number): DragTarget | null {\n\t\tif (typeof document === 'undefined') {\n\t\t\treturn null;\n\t\t}\n\t\tconst element = document.elementFromPoint(clientX, clientY) as HTMLElement | null;\n\t\tconst hostEl = element?.closest('[data-hub-drag-owner]') as HTMLElement | null;\n\t\tconst ownerId = hostEl?.getAttribute('data-hub-drag-owner');\n\t\tif (!element || !ownerId || !this.canDrop(ownerId)) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.#registrations.get(ownerId)?.resolveTarget?.(element, clientX, clientY) ?? null;\n\t}\n}\n","/**\n * Native HTML5 drag-and-drop core shared across ng-hub-ui libraries.\n *\n * Provides the engine-agnostic, reusable pieces of a native drag-and-drop implementation:\n * pure array helpers, drop-position geometry, drag-image rendering, a Pointer Events touch\n * fallback, a singleton coordinator service (cross-instance transfers) and shared types.\n * UI primitives (handle/placeholder/preview directives) stay per-library, since their\n * selectors and data models differ.\n */\nexport * from './array-utils';\nexport * from './drop-position';\nexport * from './drag-image';\nexport * from './pointer-drag';\nexport * from './drag-drop.service';\nexport * from './types';\n","import { NgZone } from '@angular/core';\n\nimport { fromEvent, Observable } from 'rxjs';\nimport { filter, map, takeUntil, withLatestFrom } from 'rxjs/operators';\n\nexport const FOCUSABLE_ELEMENTS_SELECTOR = [\n\t'a[href]',\n\t'button:not([disabled])',\n\t'input:not([disabled]):not([type=\"hidden\"])',\n\t'select:not([disabled])',\n\t'textarea:not([disabled])',\n\t'[contenteditable]',\n\t'[tabindex]:not([tabindex=\"-1\"])'\n].join(', ');\n\n/**\n * Returns first and last focusable elements inside of a given element based on specific CSS selector\n */\nexport function getFocusableBoundaryElements(\n\telement: HTMLElement\n): HTMLElement[] {\n\tconst list: HTMLElement[] = Array.from(\n\t\telement.querySelectorAll(\n\t\t\tFOCUSABLE_ELEMENTS_SELECTOR\n\t\t) as NodeListOf<HTMLElement>\n\t).filter((el) => el.tabIndex !== -1);\n\treturn [list[0], list[list.length - 1]];\n}\n\n/**\n * Function that enforces browser focus to be trapped inside a DOM element.\n *\n * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element\n *\n * @param zone Angular zone\n * @param element The element around which focus will be trapped inside\n * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners\n * and free internal resources\n * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to\n * false)\n */\nexport const hubFocusTrap = (\n\tzone: NgZone,\n\telement: HTMLElement,\n\tstopFocusTrap$: Observable<any>,\n\trefocusOnClick = false\n) => {\n\tzone.runOutsideAngular(() => {\n\t\t// last focused element\n\t\tconst lastFocusedElement$ = fromEvent<FocusEvent>(\n\t\t\telement,\n\t\t\t'focusin'\n\t\t).pipe(\n\t\t\ttakeUntil(stopFocusTrap$),\n\t\t\tmap((e) => e.target)\n\t\t);\n\n\t\t// 'tab' / 'shift+tab' stream\n\t\tfromEvent<KeyboardEvent>(element, 'keydown')\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(stopFocusTrap$),\n\t\t\t\tfilter((e) => e.key === 'Tab'),\n\t\t\t\twithLatestFrom(lastFocusedElement$)\n\t\t\t)\n\t\t\t.subscribe(([tabEvent, focusedElement]) => {\n\t\t\t\tconst [first, last] = getFocusableBoundaryElements(element);\n\n\t\t\t\tif (\n\t\t\t\t\t(focusedElement === first || focusedElement === element) &&\n\t\t\t\t\ttabEvent.shiftKey\n\t\t\t\t) {\n\t\t\t\t\tlast.focus();\n\t\t\t\t\ttabEvent.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tif (focusedElement === last && !tabEvent.shiftKey) {\n\t\t\t\t\tfirst.focus();\n\t\t\t\t\ttabEvent.preventDefault();\n\t\t\t\t}\n\t\t\t});\n\n\t\t// inside click\n\t\tif (refocusOnClick) {\n\t\t\tfromEvent(element, 'click')\n\t\t\t\t.pipe(\n\t\t\t\t\ttakeUntil(stopFocusTrap$),\n\t\t\t\t\twithLatestFrom(lastFocusedElement$),\n\t\t\t\t\tmap((arr) => arr[1] as HTMLElement)\n\t\t\t\t)\n\t\t\t\t.subscribe((lastFocusedElement) => lastFocusedElement.focus());\n\t\t}\n\t});\n};\n","import { effect, NgZone, Signal, signal } from '@angular/core';\nimport { Observable, OperatorFunction } from 'rxjs';\n\n/**\n * Converts a value to an integer using parseInt.\n *\n * @param {any} value - The `value` parameter in the `toInteger` function is the input value that needs to be converted to an\n * integer.\n *\n * @returns Is returning the parsed integer value of the input `value`.\n */\nexport function toInteger(value: any): number {\n\treturn parseInt(`${value}`, 10);\n}\n\nexport function toString(value: any): string {\n\treturn value !== undefined && value !== null ? `${value}` : '';\n}\n\nexport function getValueInRange(value: number, max: number, min = 0): number {\n\treturn Math.max(Math.min(value, max), min);\n}\n\nexport function isString(value: any): value is string {\n\treturn typeof value === 'string';\n}\n\nexport function isNumber(value: any): value is number {\n\treturn !isNaN(toInteger(value));\n}\n\nexport function isInteger(value: any): value is number {\n\treturn (\n\t\ttypeof value === 'number' &&\n\t\tisFinite(value) &&\n\t\tMath.floor(value) === value\n\t);\n}\n\nexport function isDefined(value: any): boolean {\n\treturn value !== undefined && value !== null;\n}\n\n/**\n * Determines if two objects or values are equivalent.\n *\n * @param o1 Object or value to compare.\n * @param o2 Object or value to compare.\n * @returns true if arguments are equal.\n */\nexport function equals(o1: any, o2: any): boolean {\n\tif (o1 === o2) {\n\t\treturn true;\n\t}\n\tif (o1 === null || o2 === null) {\n\t\treturn false;\n\t}\n\tif (o1 !== o1 && o2 !== o2) {\n\t\treturn true;\n\t} // NaN === NaN\n\tlet t1 = typeof o1,\n\t\tt2 = typeof o2,\n\t\tlength: number,\n\t\tkey: any,\n\t\tkeySet: any;\n\tif (t1 == t2 && t1 == 'object') {\n\t\tif (Array.isArray(o1)) {\n\t\t\tif (!Array.isArray(o2)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif ((length = o1.length) == o2.length) {\n\t\t\t\tfor (key = 0; key < length; key++) {\n\t\t\t\t\tif (!equals(o1[key], o2[key])) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else {\n\t\t\tif (Array.isArray(o2)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tkeySet = Object.create(null);\n\t\t\tfor (key in o1) {\n\t\t\t\tif (!equals(o1[key], o2[key])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tkeySet[key] = true;\n\t\t\t}\n\t\t\tfor (key in o2) {\n\t\t\t\tif (!(key in keySet) && typeof o2[key] !== 'undefined') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Checks if a value is a Promise.\n *\n * @param {any} v - The parameter `v` in the `isPromise` function represents any value that is being checked to determine if it is\n * a Promise.\n *\n * @returns A boolean value indicating whether the input `v` is a Promise or not. If `v` has a `then` property, it is considered\n * a Promise and the function returns `true`. Otherwise, it returns `false`.\n */\nexport function isPromise<T>(v: any): v is Promise<T> {\n\treturn v && v.then;\n}\n\n/**\n * Pads a number with a leading zero if it is a valid number.\n *\n * @param {number} value - The `padNumber` function takes a number as input and pads it with a leading zero if it is a valid\n * number. If the input is not a number, it returns an empty string.\n *\n * @returns Takes a number as input and pads it with a leading zero if it is a valid number. If the input is a number, the function\n * returns the input value padded with a leading zero and sliced to keep only the last two characters. If the input is not a number,\n * an empty string is returned.\n */\nexport function padNumber(value: number) {\n\tif (isNumber(value)) {\n\t\treturn `0${value}`.slice(-2);\n\t} else {\n\t\treturn '';\n\t}\n}\n\n/**\n * Escapes special characters in a given text to be used in a regular expression.\n *\n * @param text - The `regExpEscape` function takes a `text` parameter as input. This function is designed to escape special\n * characters in a given text so that it can be safely used within a regular expression pattern.\n *\n * @returns A new string with any special characters in the input `text` escaped with a backslash.\n */\nexport function regExpEscape(text: string): string {\n\treturn text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\nexport function closest(\n\telement: HTMLElement,\n\tselector?: string\n): HTMLElement | null {\n\tif (!selector) {\n\t\treturn null;\n\t}\n\n\t/*\n\t * In certain browsers (e.g. Edge 44.18362.449.0) HTMLDocument does\n\t * not support `Element.prototype.closest`. To emulate the correct behaviour\n\t * we return null when the method is missing.\n\t *\n\t * Note that in evergreen browsers `closest(document.documentElement, 'html')`\n\t * will return the document element whilst in Edge null will be returned. This\n\t * compromise was deemed good enough.\n\t */\n\tif (typeof element.closest === 'undefined') {\n\t\treturn null;\n\t}\n\n\treturn element.closest(selector);\n}\n\n/**\n * Force a browser reflow\n *\n * @param element element where to apply the reflow\n */\nexport function reflow(element: HTMLElement) {\n\treturn (element || document.body).getBoundingClientRect();\n}\n\n/**\n * Creates an observable where all callbacks are executed inside a given zone\n *\n * @param zone\n */\nexport function runInZone<T>(zone: NgZone): OperatorFunction<T, T> {\n\treturn (source) => {\n\t\treturn new Observable((observer) => {\n\t\t\tconst next = (value: T) => zone.run(() => observer.next(value));\n\t\t\tconst error = (e: any) => zone.run(() => observer.error(e));\n\t\t\tconst complete = () => zone.run(() => observer.complete());\n\t\t\treturn source.subscribe({ next, error, complete });\n\t\t});\n\t};\n}\n\nexport function removeAccents(str: string): string {\n\treturn str.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n}\n\n/**\n * Replaces placeholders in a string with corresponding values from a given object.\n *\n * @param expr a string that represents the expression to be interpolated.\n * @param params an optional object that contains the values to be interpolated into the expr string.\n * @returns the interpolated string.\n */\nexport function interpolateString(\n\texpr: string = '',\n\tparams: any = {},\n\ttemplateMatcher: RegExp = /{{\\s?([^{}\\s]*)\\s?}}/g\n) {\n\tif (!params) {\n\t\treturn expr;\n\t}\n\n\treturn expr.replace(templateMatcher, (substring: string, b: string) => {\n\t\tlet r = getValue(params, b);\n\t\treturn isDefined(r) ? r : substring;\n\t});\n}\n\n/**\n * Retrieves the value of a nested property from an object using dot notation.\n *\n * @param target the object from which you want to retrieve a value.\n * @param key a string that represents the property or nested properties of the target object.\n * @returns the value of the specified key in the target object.\n */\nexport function getValue(target: any, key: string): any {\n\tlet keys = typeof key === 'string' ? key.split('.') : [key];\n\tkey = '';\n\tdo {\n\t\tkey += keys.shift();\n\t\tif (\n\t\t\tisDefined(target) &&\n\t\t\tisDefined(target[key]) &&\n\t\t\t(typeof target[key] === 'object' || !keys.length)\n\t\t) {\n\t\t\ttarget = target[key];\n\t\t\tkey = '';\n\t\t} else if (!keys.length) {\n\t\t\ttarget = undefined;\n\t\t} else {\n\t\t\tkey += '.';\n\t\t}\n\t} while (keys.length);\n\n\treturn target;\n}\n\n/**\n * Checks if the given item is a plain object (not an array, null, or primitive).\n *\n * @param item Value to test.\n * @returns true when item is a non-null, non-array object.\n */\nexport function isObject(item: any): boolean {\n\treturn item !== null && typeof item === 'object' && !Array.isArray(item);\n}\n\n/**\n * Recursively deep-merges source into target, producing a new object.\n * Arrays are replaced, not merged. Primitives from source win.\n *\n * @param target Base object.\n * @param source Overrides to apply on top of target.\n * @returns New merged object.\n */\nexport function mergeDeep(target: any, source: any): any {\n\tconst output = Object.assign({}, target);\n\tif (isObject(target) && isObject(source)) {\n\t\tObject.keys(source).forEach((key: any) => {\n\t\t\tif (isObject(source[key])) {\n\t\t\t\tif (!(key in target)) {\n\t\t\t\t\tObject.assign(output, { [key]: source[key] });\n\t\t\t\t} else {\n\t\t\t\t\toutput[key] = mergeDeep(target[key], source[key]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tObject.assign(output, { [key]: source[key] });\n\t\t\t}\n\t\t});\n\t}\n\treturn output;\n}\n\n/**\n * Generates a random alphanumeric string of the requested length.\n * Not cryptographically secure — intended for transient DOM ids and keys.\n *\n * @param length Desired character count.\n * @returns Random alphanumeric string.\n */\nexport function generateUniqueId(length: number): string {\n\tconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\tlet result = '';\n\tfor (let i = 0; i < length; i++) {\n\t\tresult += chars.charAt(Math.floor(Math.random() * chars.length));\n\t}\n\treturn result;\n}\n\n/**\n * Creates a read-only signal that mirrors sourceSignal but only updates\n * after debounceDelay ms have elapsed since the last emission.\n * Cleans up the pending timer via the Angular effect cleanup mechanism.\n *\n * @template T Type of the signal value.\n * @param sourceSignal Signal to debounce.\n * @param debounceDelay Milliseconds to wait, or a signal that provides the delay.\n * @returns Debounced read-only signal.\n */\nexport function debouncedSignal<T>(sourceSignal: Signal<T>, debounceDelay: number | Signal<number> = 0): Signal<T> {\n\tconst debounced = signal(sourceSignal());\n\n\teffect((onCleanup) => {\n\t\tconst delay = typeof debounceDelay === 'number' ? debounceDelay : debounceDelay();\n\t\tconst value = sourceSignal();\n\n\t\tconst timeout = setTimeout(() => {\n\t\t\tdebounced.set(value);\n\t\t}, delay);\n\n\t\tonCleanup(() => clearTimeout(timeout));\n\t});\n\n\treturn debounced;\n}\n\n/**\n * Returns the active element in the given root.\n *\n * If the active element is inside a shadow root, it is searched recursively.\n */\nexport function getActiveElement(\n\troot: Document | ShadowRoot = document\n): Element | null {\n\tconst activeEl = root?.activeElement;\n\n\tif (!activeEl) {\n\t\treturn null;\n\t}\n\n\treturn activeEl.shadowRoot\n\t\t? getActiveElement(activeEl.shadowRoot)\n\t\t: activeEl;\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface HubTranslationConfig {\n\tdictionaries?: Record<string, Record<string, any>>;\n\tlanguage?: string;\n\tfallbackLanguage?: string;\n}\n\nexport const HUB_TRANSLATION_CONFIG = new InjectionToken<HubTranslationConfig>(\n\t'HUB_TRANSLATION_CONFIG'\n);\n\n/** Optional library namespace resolved before legacy unscoped translation keys. */\nexport const HUB_TRANSLATION_PREFIX = new InjectionToken<string>('HUB_TRANSLATION_PREFIX');\n","import { Injectable, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { getValue } from '../util';\nimport { HUB_TRANSLATION_CONFIG, HubTranslationConfig } from './translation.tokens';\n\n@Injectable()\nexport class HubTranslationService {\n\t#config: HubTranslationConfig =\n\t\tinject(HUB_TRANSLATION_CONFIG, { optional: true }) ?? {};\n\n\tdefaultTranslations: Record<string, string | any> =\n\t\tthis.#config.dictionaries ?? {};\n\n\ttranslations!: Record<string, string>;\n\n\tprivate translationSource = new Subject<any>();\n\n\ttranslationObserver = this.translationSource.asObservable();\n\n\tconstructor() {\n\t\tthis.initialize();\n\t}\n\n\tinitialize() {\n\t\tconst language = this.#config.language ?? this.#config.fallbackLanguage ?? 'en';\n\t\tconst fallbackLanguage = this.#config.fallbackLanguage ?? 'en';\n\t\tconst fallbackTranslations =\n\t\t\tthis.defaultTranslations[fallbackLanguage] ?? {};\n\t\tconst selectedTranslations =\n\t\t\tthis.defaultTranslations[language] ?? fallbackTranslations;\n\n\t\tthis.setTranslations(selectedTranslations);\n\t}\n\n\t/**\n\t * Retrieves a value from a translations object based on a given key.\n\t */\n\tgetTranslation(key: string): any {\n\t\treturn getValue(this.translations, key);\n\t}\n\n\t/**\n\t * Merges fallback translations with the provided translations and updates observers.\n\t */\n\tsetTranslations(translations: Record<string, string> | any = {}) {\n\t\tconst fallbackLanguage = this.#config.fallbackLanguage ?? 'en';\n\t\tconst fallbackTranslations =\n\t\t\tthis.defaultTranslations[fallbackLanguage] ?? {};\n\t\tconst nextTranslations = translations ?? {};\n\n\t\tthis.translations = { ...fallbackTranslations, ...nextTranslations };\n\t\tthis.translationSource.next(this.translations);\n\t}\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { HubTranslationService } from './translation.service';\nimport { HUB_TRANSLATION_CONFIG, HubTranslationConfig } from './translation.tokens';\n\n/**\n * Helper function to provide HubTranslationService and its configuration.\n * @param config Optional configuration for translations.\n * @returns EnvironmentProviders\n */\nexport function provideHubTranslation(config: HubTranslationConfig = {}): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\tHubTranslationService,\n\t\t{\n\t\t\tprovide: HUB_TRANSLATION_CONFIG,\n\t\t\tuseValue: config\n\t\t}\n\t]);\n}\n","import {\n\tDestroyRef,\n\tEnvironmentProviders,\n\tinject,\n\tInjectionToken,\n\tmakeEnvironmentProviders,\n\tprovideAppInitializer\n} from '@angular/core';\nimport { HubTranslationService } from './translation.service';\n\n/** Reactive source accepted from an application translation framework. */\nexport interface HubTranslationSource<T = Record<string, unknown>> {\n\t/** Subscribes to translation updates and returns a cleanup handle. */\n\tsubscribe(next: (translations: T) => void): { unsubscribe(): void };\n}\n\n/** A literal override, reactive label source, or a nested group of either. */\nexport type HubTranslationOverrides = {\n\t[key: string]: string | HubTranslationSource<string> | HubTranslationOverrides;\n};\n\n/**\n * Describes a namespaced application dictionary and optional explicit library-label mappings.\n * Overrides win over values emitted by `dictionary` while preserving reactive language changes.\n */\nexport interface HubTranslationAdapterConfig {\n\t/** Complete reactive dictionary supplied by the application i18n framework. */\n\tdictionary: HubTranslationSource;\n\t/** Namespace added around the selected dictionary, such as `HUB`. */\n\tnamespace?: string;\n\t/** Deliberate library-label mappings, for applications whose keys differ from Hub UI's defaults. */\n\toverrides?: HubTranslationOverrides;\n}\n\n/** Factory evaluated in Angular's injection context to connect an external translation service. */\nexport type HubTranslationAdapterFactory = () => HubTranslationSource | HubTranslationAdapterConfig;\n\n/** Internal token holding the application's external dictionary source. */\nexport const HUB_TRANSLATION_SOURCE = new InjectionToken<HubTranslationSource | HubTranslationAdapterConfig>(\n\t'HUB_TRANSLATION_SOURCE'\n);\n\n/** Identifies the extended configuration while retaining the concise source-only provider form. */\nfunction isAdapterConfig(source: HubTranslationSource | HubTranslationAdapterConfig): source is HubTranslationAdapterConfig {\n\treturn 'dictionary' in source;\n}\n\n/** Distinguishes a reactive label stream from a nested group of label mappings. */\nfunction isTranslationValueSource(\n\tvalue: HubTranslationSource<string> | HubTranslationOverrides\n): value is HubTranslationSource<string> {\n\treturn typeof value.subscribe === 'function';\n}\n\n/** Sets a nested value without mutating the dictionary emitted by the application service. */\nfunction setNestedValue(target: Record<string, unknown>, path: string[], value: string): void {\n\tlet current = target;\n\tpath.forEach((key, index) => {\n\t\tif (index === path.length - 1) {\n\t\t\tcurrent[key] = value;\n\t\t\treturn;\n\t\t}\n\t\tconst next = current[key];\n\t\tconst nested =\n\t\t\ttypeof next === 'object' && next !== null && !Array.isArray(next) ? (next as Record<string, unknown>) : {};\n\t\tcurrent[key] = nested;\n\t\tcurrent = nested;\n\t});\n}\n\n/** Deeply overlays explicit label values while retaining unrelated dictionary branches. */\nfunction mergeDictionaries(base: Record<string, unknown>, overrides: Record<string, unknown>): Record<string, unknown> {\n\tconst result = { ...base };\n\tObject.entries(overrides).forEach(([key, value]) => {\n\t\tconst current = result[key];\n\t\tresult[key] =\n\t\t\ttypeof current === 'object' && current !== null && typeof value === 'object' && value !== null\n\t\t\t\t? mergeDictionaries(current as Record<string, unknown>, value as Record<string, unknown>)\n\t\t\t\t: value;\n\t});\n\treturn result;\n}\n\n/**\n * Connects an external reactive translation source to every Hub UI library using HubTranslationService.\n * The provider owns the subscription lifetime. A complete `HUB` dictionary is the simple default;\n * `overrides` lets applications deliberately connect individual labels to arbitrary service streams.\n *\n * @param factory - Creates a reactive dictionary or a namespaced dictionary with explicit overrides.\n * @returns Environment providers for the Hub UI translation bridge.\n */\nexport function provideHubTranslationAdapter(factory: HubTranslationAdapterFactory): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\tHubTranslationService,\n\t\t{ provide: HUB_TRANSLATION_SOURCE, useFactory: factory },\n\t\tprovideAppInitializer(() => {\n\t\t\tconst providedSource = inject(HUB_TRANSLATION_SOURCE);\n\t\t\tconst translations = inject(HubTranslationService);\n\t\t\tconst destroyRef = inject(DestroyRef);\n\t\t\tconst config = isAdapterConfig(providedSource) ? providedSource : { dictionary: providedSource };\n\t\t\tlet dictionary: Record<string, unknown> = {};\n\t\t\tconst overrides: Record<string, unknown> = {};\n\t\t\tconst subscriptions: Array<{ unsubscribe(): void }> = [];\n\n\t\t\tconst publish = () => {\n\t\t\t\tconst merged = mergeDictionaries(dictionary, overrides);\n\t\t\t\ttranslations.setTranslations(config.namespace ? { [config.namespace]: merged } : merged);\n\t\t\t};\n\t\t\tconst connectOverrides = (items: HubTranslationOverrides, path: string[] = []) => {\n\t\t\t\tObject.entries(items).forEach(([key, value]) => {\n\t\t\t\t\tconst currentPath = [...path, key];\n\t\t\t\t\tif (typeof value === 'string') {\n\t\t\t\t\t\tsetNestedValue(overrides, currentPath, value);\n\t\t\t\t\t} else if (isTranslationValueSource(value)) {\n\t\t\t\t\t\tsubscriptions.push(\n\t\t\t\t\t\t\tvalue.subscribe((translated) => {\n\t\t\t\t\t\t\t\tsetNestedValue(overrides, currentPath, translated);\n\t\t\t\t\t\t\t\tpublish();\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconnectOverrides(value, currentPath);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tsubscriptions.push(\n\t\t\t\tconfig.dictionary.subscribe((nextDictionary) => {\n\t\t\t\t\tdictionary = nextDictionary;\n\t\t\t\t\tpublish();\n\t\t\t\t})\n\t\t\t);\n\t\t\tif (config.overrides) connectOverrides(config.overrides);\n\t\t\tpublish();\n\t\t\tdestroyRef.onDestroy(() => subscriptions.forEach((subscription) => subscription.unsubscribe()));\n\t\t})\n\t]);\n}\n","import { ElementRef } from '@angular/core';\nimport type { ConnectionPosition } from './connection-position';\nimport type { HorizontalConnectionPos } from './horizontal-connection-pos';\nimport type { VerticalConnectionPos } from './vertical-connection-pos';\n\n/**\n * Positions an overlay container relative to an origin element.\n * The first configured position that fits within the viewport is applied.\n */\nexport class OverlayPosition {\n\tprivate _origin: ElementRef | HTMLElement | null = null;\n\tprivate _positions: ConnectionPosition[] = [];\n\n\t/**\n\t * Sets the origin element used to position the overlay.\n\t *\n\t * @param origin Element reference or HTMLElement.\n\t * @returns This position instance for chaining.\n\t */\n\tflexibleConnectedTo(origin: ElementRef | HTMLElement): this {\n\t\tthis._origin = origin;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the preferred positions for the overlay.\n\t * The order of the array determines the fallback priority.\n\t *\n\t * @param positions Array of position configurations.\n\t * @returns This position instance for chaining.\n\t */\n\twithPositions(positions: ConnectionPosition[]): this {\n\t\tthis._positions = positions;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Applies the calculated position to the overlay element.\n\t *\n\t * @param overlayElement The overlay container element.\n\t */\n\tapply(overlayElement: HTMLElement): void {\n\t\tif (!this._origin) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst originElement = this._origin instanceof ElementRef ? this._origin.nativeElement : this._origin;\n\t\tconst originRect = originElement.getBoundingClientRect();\n\n\t\t// Try each position until we find one that fits in the viewport\n\t\tfor (const position of this._positions) {\n\t\t\tconst coords = this._calculatePosition(originRect, overlayElement, position);\n\n\t\t\tif (this._fitsInViewport(coords, overlayElement)) {\n\t\t\t\tthis._applyPosition(overlayElement, coords);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// If no position fits perfectly, use the first one\n\t\tif (this._positions.length > 0) {\n\t\t\tconst coords = this._calculatePosition(originRect, overlayElement, this._positions[0]);\n\t\t\tthis._applyPosition(overlayElement, coords);\n\t\t}\n\t}\n\n\t/**\n\t * Calculates the position coordinates based on the configuration.\n\t *\n\t * @param originRect Bounding rectangle of the origin element.\n\t * @param overlayElement The overlay element.\n\t * @param position Position configuration.\n\t * @returns Calculated x and y coordinates.\n\t */\n\tprivate _calculatePosition(originRect: DOMRect, overlayElement: HTMLElement, position: ConnectionPosition): { x: number; y: number } {\n\t\tconst overlayRect = overlayElement.getBoundingClientRect();\n\n\t\t// Calculate origin point\n\t\tlet x = this._getOriginX(originRect, position.originX);\n\t\tlet y = this._getOriginY(originRect, position.originY);\n\n\t\t// Adjust for overlay alignment\n\t\tx -= this._getOverlayX(overlayRect, position.overlayX);\n\t\ty -= this._getOverlayY(overlayRect, position.overlayY);\n\n\t\t// Apply offsets\n\t\tif (position.offsetX) {\n\t\t\tx += position.offsetX;\n\t\t}\n\t\tif (position.offsetY) {\n\t\t\ty += position.offsetY;\n\t\t}\n\n\t\treturn { x, y };\n\t}\n\n\t/**\n\t * Gets the X coordinate for the origin point.\n\t */\n\tprivate _getOriginX(rect: DOMRect, position: HorizontalConnectionPos): number {\n\t\tswitch (position) {\n\t\t\tcase 'start':\n\t\t\t\treturn rect.left;\n\t\t\tcase 'center':\n\t\t\t\treturn rect.left + rect.width / 2;\n\t\t\tcase 'end':\n\t\t\t\treturn rect.right;\n\t\t}\n\t}\n\n\t/**\n\t * Gets the Y coordinate for the origin point.\n\t */\n\tprivate _getOriginY(rect: DOMRect, position: VerticalConnectionPos): number {\n\t\tswitch (position) {\n\t\t\tcase 'top':\n\t\t\t\treturn rect.top;\n\t\t\tcase 'center':\n\t\t\t\treturn rect.top + rect.height / 2;\n\t\t\tcase 'bottom':\n\t\t\t\treturn rect.bottom;\n\t\t}\n\t}\n\n\t/**\n\t * Gets the X offset for the overlay alignment.\n\t */\n\tprivate _getOverlayX(rect: DOMRect, position: HorizontalConnectionPos): number {\n\t\tswitch (position) {\n\t\t\tcase 'start':\n\t\t\t\treturn 0;\n\t\t\tcase 'center':\n\t\t\t\treturn rect.width / 2;\n\t\t\tcase 'end':\n\t\t\t\treturn rect.width;\n\t\t}\n\t}\n\n\t/**\n\t * Gets the Y offset for the overlay alignment.\n\t */\n\tprivate _getOverlayY(rect: DOMRect, position: VerticalConnectionPos): number {\n\t\tswitch (position) {\n\t\t\tcase 'top':\n\t\t\t\treturn 0;\n\t\t\tcase 'center':\n\t\t\t\treturn rect.height / 2;\n\t\t\tcase 'bottom':\n\t\t\t\treturn rect.height;\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the overlay fits within the viewport at the given coordinates.\n\t */\n\tprivate _fitsInViewport(\n\t\tcoords: { x: number; y: number },\n\t\toverlayElement: HTMLElement\n\t): boolean {\n\t\tconst overlayRect = overlayElement.getBoundingClientRect();\n\t\tconst viewportWidth = window.innerWidth;\n\t\tconst viewportHeight = window.innerHeight;\n\n\t\treturn (\n\t\t\tcoords.x >= 0 &&\n\t\t\tcoords.y >= 0 &&\n\t\t\tcoords.x + overlayRect.width <= viewportWidth &&\n\t\t\tcoords.y + overlayRect.height <= viewportHeight\n\t\t);\n\t}\n\n\t/**\n\t * Applies the calculated position to the overlay element.\n\t */\n\tprivate _applyPosition(\n\t\toverlayElement: HTMLElement,\n\t\tcoords: { x: number; y: number }\n\t): void {\n\t\toverlayElement.style.left = `${coords.x}px`;\n\t\toverlayElement.style.top = `${coords.y}px`;\n\t}\n}\n","import {\n\tApplicationRef,\n\tComponentRef,\n\tcreateComponent,\n\tEmbeddedViewRef,\n\tTemplateRef,\n\tType,\n\tViewContainerRef\n} from '@angular/core';\nimport type { OverlayConfig } from './overlay-config';\n\n/**\n * Manages a single overlay instance created by {@link OverlayService}.\n * Creates a container and optional backdrop in `document.body` and attaches\n * either a template or component as the overlay content.\n */\nexport class OverlayRef {\n\tprivate _backdropElement: HTMLElement | null = null;\n\tprivate _containerElement: HTMLElement | null = null;\n\tprivate _contentElement: HTMLElement | null = null;\n\tprivate _viewRef: EmbeddedViewRef<unknown> | null = null;\n\tprivate _componentRef: ComponentRef<unknown> | null = null;\n\tprivate _isAttached = false;\n\tprivate _backdropClickCallback?: () => void;\n\tprivate _backdropClickHandler?: () => void;\n\n\tconstructor(\n\t\tprivate _config: OverlayConfig,\n\t\tprivate _appRef: ApplicationRef\n\t) {}\n\n\t/**\n\t * Attaches content to the overlay.\n\t *\n\t * If the overlay is already attached, it only updates the position strategy\n\t * and returns the existing content element.\n\t *\n\t * @param content Template or component type to attach.\n\t * @param viewContainerRef View container used to create embedded views for templates.\n\t * @returns The attached content element (first root node).\n\t * @throws When a {@link TemplateRef} is provided without a {@link ViewContainerRef}.\n\t */\n\tattach(\n\t\tcontent: TemplateRef<unknown> | Type<unknown>,\n\t\tviewContainerRef?: ViewContainerRef\n\t): HTMLElement {\n\t\t// If already attached, just update position and return existing element\n\t\tif (this._isAttached && this._contentElement) {\n\t\t\tif (this._config.positionStrategy) {\n\t\t\t\tthis._config.positionStrategy.apply(this._containerElement!);\n\t\t\t}\n\t\t\treturn this._contentElement;\n\t\t}\n\n\t\tthis._createContainer();\n\t\tthis._createBackdrop();\n\n\t\tlet contentElement: HTMLElement;\n\n\t\tif (content instanceof TemplateRef) {\n\t\t\tif (!viewContainerRef) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'ViewContainerRef is required when attaching a TemplateRef'\n\t\t\t\t);\n\t\t\t}\n\t\t\t// Only create and attach view if not already created\n\t\t\tif (!this._viewRef) {\n\t\t\t\tthis._viewRef = viewContainerRef.createEmbeddedView(content);\n\t\t\t\tthis._viewRef.detectChanges();\n\t\t\t}\n\t\t\tcontentElement = this._viewRef.rootNodes[0] as HTMLElement;\n\t\t} else {\n\t\t\tif (this._componentRef) {\n\t\t\t\tthis._appRef.detachView(this._componentRef.hostView);\n\t\t\t\tthis._componentRef.destroy();\n\t\t\t}\n\t\t\tthis._componentRef = createComponent(content, {\n\t\t\t\tenvironmentInjector: this._appRef.injector\n\t\t\t});\n\t\t\tthis._appRef.attachView(this._componentRef.hostView);\n\t\t\tcontentElement = (this._componentRef.hostView as EmbeddedViewRef<unknown>)\n\t\t\t\t.rootNodes[0] as HTMLElement;\n\t\t}\n\n\t\tthis._contentElement = contentElement;\n\n\t\t// Only append if not already in container\n\t\tif (!this._containerElement!.contains(contentElement)) {\n\t\t\tthis._containerElement!.appendChild(contentElement);\n\t\t}\n\n\t\tthis._isAttached = true;\n\n\t\t// Apply position strategy\n\t\tif (this._config.positionStrategy) {\n\t\t\tthis._config.positionStrategy.apply(this._containerElement!);\n\t\t}\n\n\t\treturn contentElement;\n\t}\n\n\t/**\n\t * Detaches the content from the overlay container without disposing the overlay.\n\t */\n\tdetach(): void {\n\t\tif (!this._isAttached) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._contentElement && this._containerElement) {\n\t\t\tthis._containerElement.removeChild(this._contentElement);\n\t\t}\n\n\t\tthis._isAttached = false;\n\t}\n\n\t/**\n\t * Disposes the overlay and cleans up all allocated resources.\n\t */\n\tdispose(): void {\n\t\tthis.detach();\n\n\t\t// Destroy view ref if exists\n\t\tif (this._viewRef) {\n\t\t\tthis._viewRef.destroy();\n\t\t\tthis._viewRef = null;\n\t\t}\n\n\t\tif (this._componentRef) {\n\t\t\tthis._appRef.detachView(this._componentRef.hostView);\n\t\t\tthis._componentRef.destroy();\n\t\t\tthis._componentRef = null;\n\t\t}\n\n\t\tif (this._containerElement) {\n\t\t\tdocument.body.removeChild(this._containerElement);\n\t\t\tthis._containerElement = null;\n\t\t}\n\n\t\tif (this._backdropElement) {\n\t\t\t// Remove event listener before removing element from DOM\n\t\t\tif (this._backdropClickHandler) {\n\t\t\t\tthis._backdropElement.removeEventListener(\n\t\t\t\t\t'click',\n\t\t\t\t\tthis._backdropClickHandler\n\t\t\t\t);\n\t\t\t\tthis._backdropClickHandler = undefined;\n\t\t\t}\n\t\t\tdocument.body.removeChild(this._backdropElement);\n\t\t\tthis._backdropElement = null;\n\t\t}\n\n\t\tthis._contentElement = null;\n\t\tthis._backdropClickCallback = undefined;\n\t}\n\n\t/**\n\t * Checks whether content is currently attached to the overlay.\n\t */\n\thasAttached(): boolean {\n\t\treturn this._isAttached;\n\t}\n\n\t/**\n\t * Registers a callback for backdrop clicks.\n\t * The last registered callback replaces any previous one.\n\t *\n\t * @param callback Function to call when the backdrop is clicked.\n\t */\n\tonBackdropClick(callback: () => void): void {\n\t\tthis._backdropClickCallback = callback;\n\t}\n\n\t/**\n\t * Re-applies the configured position strategy to the overlay container.\n\t */\n\tupdatePosition(): void {\n\t\tif (this._config.positionStrategy && this._containerElement) {\n\t\t\tthis._config.positionStrategy.apply(this._containerElement);\n\t\t}\n\t}\n\n\t/**\n\t * Creates the overlay container element and appends it to the document.\n\t */\n\tprivate _createContainer(): void {\n\t\tif (this._containerElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._containerElement = document.createElement('div');\n\t\tthis._containerElement.classList.add('hub-overlay-container');\n\n\t\tif (this._config.panelClass) {\n\t\t\tconst classes = Array.isArray(this._config.panelClass)\n\t\t\t\t? this._config.panelClass\n\t\t\t\t: [this._config.panelClass];\n\t\t\tclasses.forEach((cls) => this._containerElement!.classList.add(cls));\n\t\t}\n\n\t\tif (this._config.width) {\n\t\t\tthis._containerElement.style.width =\n\t\t\t\ttypeof this._config.width === 'number'\n\t\t\t\t\t? `${this._config.width}px`\n\t\t\t\t\t: this._config.width;\n\t\t}\n\n\t\tif (this._config.height) {\n\t\t\tthis._containerElement.style.height =\n\t\t\t\ttypeof this._config.height === 'number'\n\t\t\t\t\t? `${this._config.height}px`\n\t\t\t\t\t: this._config.height;\n\t\t}\n\n\t\tthis._containerElement.style.position = 'fixed';\n\t\t// Resolve the layer through the theme token so a consumer can re-stack the\n\t\t// overlay (e.g. above a modal) without `!important`; the literal fallback\n\t\t// keeps today's behavior when the overlay stylesheet is not imported.\n\t\tthis._containerElement.style.zIndex =\n\t\t\tthis._config.zIndex != null\n\t\t\t\t? String(this._config.zIndex)\n\t\t\t\t: 'var(--hub-overlay-zindex, 1000)';\n\n\t\tdocument.body.appendChild(this._containerElement);\n\t}\n\n\t/**\n\t * Creates the backdrop element if enabled and appends it to the document.\n\t */\n\tprivate _createBackdrop(): void {\n\t\tif (!this._config.hasBackdrop || this._backdropElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._backdropElement = document.createElement('div');\n\t\tthis._backdropElement.classList.add('hub-overlay-backdrop');\n\n\t\tif (this._config.backdropClass) {\n\t\t\tthis._backdropElement.classList.add(this._config.backdropClass);\n\t\t}\n\n\t\tthis._backdropElement.style.position = 'fixed';\n\t\tthis._backdropElement.style.top = '0';\n\t\tthis._backdropElement.style.left = '0';\n\t\tthis._backdropElement.style.width = '100%';\n\t\tthis._backdropElement.style.height = '100%';\n\t\tthis._backdropElement.style.zIndex = 'var(--hub-overlay-backdrop-zindex, 999)';\n\n\t\t// Store reference to the handler for cleanup\n\t\tthis._backdropClickHandler = () => {\n\t\t\tif (this._backdropClickCallback) {\n\t\t\t\tthis._backdropClickCallback();\n\t\t\t}\n\t\t};\n\n\t\tthis._backdropElement.addEventListener('click', this._backdropClickHandler);\n\n\t\tdocument.body.appendChild(this._backdropElement);\n\t}\n}\n","import { ApplicationRef, inject, Injectable } from '@angular/core';\nimport { OverlayPosition } from './overlay-position';\nimport { OverlayRef } from './overlay-ref';\nimport type { OverlayConfig } from './overlay-config';\n\n/**\n * Service for creating and managing overlay instances.\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class OverlayService {\n\tprivate readonly _appRef = inject(ApplicationRef);\n\n\t/**\n\t * Creates a new overlay with the specified configuration.\n\t *\n\t * @param config Configuration options for the overlay.\n\t * @returns A reference to the created overlay.\n\t */\n\tcreate(config: OverlayConfig = {}): OverlayRef {\n\t\treturn new OverlayRef(config, this._appRef);\n\t}\n\n\t/**\n\t * Creates a position strategy builder for connected overlays.\n\t *\n\t * @returns A new {@link OverlayPosition} instance.\n\t */\n\tposition(): OverlayPosition {\n\t\treturn new OverlayPosition();\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'get',\n\tstandalone: true\n})\nexport class GetPipe implements PipeTransform {\n\t/**\n\t * @param value The object to retrieve the property from.\n\t * @param path The dot-separated path string to the property.\n\t * @param defaultValue The value to return if the property is not found.\n\t */\n\ttransform(value: any, path: string, defaultValue?: any): any {\n\t\tif (typeof path !== 'string') {\n\t\t\treturn value;\n\t\t}\n\t\treturn path\n\t\t\t.split('.')\n\t\t\t.reduce(\n\t\t\t\t(a, c) =>\n\t\t\t\t\ta && a[c] !== null && a[c] !== undefined\n\t\t\t\t\t\t? a[c]\n\t\t\t\t\t\t: defaultValue || null,\n\t\t\t\tvalue\n\t\t\t);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'isObject'\n})\nexport class IsObjectPipe implements PipeTransform {\n\n\ttransform(value: any): boolean {\n\t\treturn typeof value === 'object';\n\t}\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isObservable, Observable } from 'rxjs';\n\n@Pipe({\n\tname: 'isObservable',\n\tstandalone: true\n})\nexport class IsObservablePipe<T = any> implements PipeTransform {\n\ttransform(value: T | Observable<T>): boolean {\n\t\treturn isObservable(value);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'isString'\n})\nexport class IsStringPipe implements PipeTransform {\n\n\ttransform(value: any): boolean {\n\t\treturn typeof value === 'string';\n\t}\n\n}\n","import { ChangeDetectorRef, OnDestroy, Pipe, PipeTransform, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { HubTranslationService } from '../i18n/translation.service';\nimport { HUB_TRANSLATION_PREFIX } from '../i18n/translation.tokens';\nimport { equals, interpolateString, isDefined } from '../util';\n\n@Pipe({\n\tname: 'translate',\n\tstandalone: true,\n\tpure: false\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n\tprivate _ref = inject(ChangeDetectorRef);\n\tprivate _translationSvc = inject(HubTranslationService);\n\tprivate readonly prefix = inject(HUB_TRANSLATION_PREFIX, { optional: true });\n\n\tvalue: string = '';\n\tlastKey: string | null = null;\n\tlastParams: any[] = [];\n\n\ttranslationSubscription: Subscription | undefined;\n\n\t/**\n\t * Updates the value of a key by interpolating the translation and marking for change detection.\n\t */\n\tupdateValue(key: string, interpolateParams?: Object): void {\n\t\tconst scopedKey = this.prefix ? `${this.prefix}.${key}` : key;\n\t\tconst translated = this._translationSvc.getTranslation(scopedKey) ?? this._translationSvc.getTranslation(key);\n\t\tconst value = interpolateString(translated, interpolateParams);\n\t\tthis.value = value !== undefined ? value : key;\n\t\tthis.lastKey = key;\n\t\tthis._ref.markForCheck();\n\t}\n\n\t/**\n\t * Transforms a translation key with optional interpolation params.\n\t */\n\ttransform(query: string, ...args: any[]): any {\n\t\tif (!query || !query.length) {\n\t\t\treturn query;\n\t\t}\n\n\t\t// If we ask another time for the same key, return the last value.\n\t\tif (equals(query, this.lastKey) && equals(args, this.lastParams)) {\n\t\t\treturn this.value;\n\t\t}\n\n\t\tlet interpolateParams: Object | undefined = undefined;\n\t\tif (isDefined(args[0]) && args.length) {\n\t\t\tif (typeof args[0] === 'string' && args[0].length) {\n\t\t\t\t// We accept objects written in the template such as {n:1}, {'n':1}, {n:'v'}.\n\t\t\t\t// This converts them to valid JSON.\n\t\t\t\tlet validArgs: string = args[0]\n\t\t\t\t\t.replace(/(\\')?([a-zA-Z0-9_]+)(\\')?(\\s)?:/g, '\"$2\":')\n\t\t\t\t\t.replace(/:(\\s)?(\\')(.*?)(\\')/g, ':\"$3\"');\n\t\t\t\ttry {\n\t\t\t\t\tinterpolateParams = JSON.parse(validArgs);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthrow new SyntaxError(`Wrong parameter in TranslatePipe. Expected a valid Object, received: ${args[0]}`);\n\t\t\t\t}\n\t\t\t} else if (typeof args[0] === 'object' && !Array.isArray(args[0])) {\n\t\t\t\tinterpolateParams = args[0];\n\t\t\t}\n\t\t}\n\n\t\t// Store the query, in case it changes.\n\t\tthis.lastKey = query;\n\n\t\t// Store the params, in case they change.\n\t\tthis.lastParams = args;\n\n\t\t// Set the value.\n\t\tthis.updateValue(query, interpolateParams);\n\n\t\t// Clean any existing subscription.\n\t\tthis._dispose();\n\n\t\tif (!this.translationSubscription) {\n\t\t\tthis.translationSubscription = this._translationSvc.translationObserver.subscribe(() => {\n\t\t\t\tif (this.lastKey) {\n\t\t\t\t\tthis.lastKey = null;\n\t\t\t\t\tthis.updateValue(query, interpolateParams);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn this.value;\n\t}\n\n\t/**\n\t * Clean any existing subscription to change events.\n\t */\n\tprivate _dispose(): void {\n\t\tif (typeof this.translationSubscription !== 'undefined') {\n\t\t\tthis.translationSubscription.unsubscribe();\n\t\t\tthis.translationSubscription = undefined;\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._dispose();\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'ucfirst',\n\tstandalone: true\n})\nexport class UcfirstPipe implements PipeTransform {\n\ttransform(value: string = ''): string {\n\t\treturn value.charAt(0).toUpperCase() + value.slice(1);\n\t}\n}\n","import {\n\tChangeDetectorRef,\n\tinject,\n\tOnDestroy,\n\tPipe,\n\tPipeTransform\n} from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\n\n/**\n * A standalone pipe that unwraps the value of an observable or returns the value directly if it's not an observable.\n *\n * @description\n * The `UnwrapAsyncPipe` is used to unwrap the value emitted by an observable or return the value directly if it's not an observable.\n * It subscribes to the observable and returns the emitted value. If the input is not an observable, it simply returns the value.\n *\n * @usageNotes\n * ```html\n * <div>{{ observableOrValue | unwrapAsync }}</div>\n * ```\n *\n * @publicApi\n */\n@Pipe({\n\tname: 'unwrapAsync',\n\tstandalone: true,\n\tpure: false\n})\nexport class UnwrapAsyncPipe<T = any> implements PipeTransform, OnDestroy {\n\t#cdr = inject(ChangeDetectorRef);\n\n\t/**\n\t * The unwrapped value of the observable or the direct value.\n\t */\n\tvalue: T | null = null;\n\n\t/**\n\t * The subscription to the observable.\n\t */\n\tsubscription: Subscription | null = null;\n\n\t/**\n\t * Performs cleanup tasks when the pipe is destroyed.\n\t */\n\tngOnDestroy(): void {\n\t\tthis.unsubscribe();\n\t}\n\n\t/**\n\t * Transforms the input value.\n\t *\n\t * @param value The input value to transform. It can be an observable or a direct value.\n\t * @returns The unwrapped value of the observable or the direct value.\n\t */\n\ttransform(value: T | Observable<T>): T | null {\n\t\tif (value instanceof Observable) {\n\t\t\tthis.unsubscribe();\n\t\t\tthis.subscription = value.subscribe((result) => {\n\t\t\t\tthis.value = result;\n\t\t\t\tthis.#cdr.markForCheck();\n\t\t\t});\n\t\t} else {\n\t\t\t// Clean up subscription when switching to direct value\n\t\t\tthis.unsubscribe();\n\t\t\tthis.value = value;\n\t\t}\n\t\treturn this.value;\n\t}\n\n\t/**\n\t * Unsubscribes from the current subscription.\n\t */\n\tprivate unsubscribe(): void {\n\t\tif (this.subscription) {\n\t\t\tthis.subscription.unsubscribe();\n\t\t\tthis.subscription = null;\n\t\t}\n\t}\n}\n","export function getTransitionDurationMs(element: HTMLElement) {\n\tconst { transitionDelay, transitionDuration } = window.getComputedStyle(element);\n\tconst transitionDelaySec = parseFloat(transitionDelay);\n\tconst transitionDurationSec = parseFloat(transitionDuration);\n\n\treturn (transitionDelaySec + transitionDurationSec) * 1000;\n}\n","import { NgZone } from '@angular/core';\nimport { EMPTY, fromEvent, Observable, of, race, Subject, timer } from 'rxjs';\nimport { endWith, filter, takeUntil } from 'rxjs/operators';\nimport { runInZone } from '../util';\nimport { getTransitionDurationMs } from './util';\n\nconst transitionTimerDelayMs = 5;\n\nexport type TransitionStartFn<T = any> = (\n\telement: HTMLElement,\n\tanimation: boolean,\n\tcontext: T\n) => TransitionEndFn | void;\nexport type TransitionEndFn = () => void;\n\nexport interface TransitionOptions<T> {\n\tanimation: boolean;\n\trunningTransition: 'continue' | 'stop';\n\tcontext?: T;\n}\n\nexport interface TransitionCtx<T> {\n\ttransition$: Subject<any>;\n\tcomplete: () => void;\n\tcontext: T;\n}\n\nconst noopFn: TransitionEndFn = () => {};\n\nconst runningTransitions = new Map<HTMLElement, TransitionCtx<any>>();\n\nexport const hubRunTransition = <T>(\n\tzone: NgZone,\n\telement: HTMLElement,\n\tstartFn: TransitionStartFn<T>,\n\toptions: TransitionOptions<T>\n): Observable<void> => {\n\t// Getting initial context from options\n\tlet context = options.context || <T>{};\n\n\t// Checking if there are already running transitions on the given element.\n\tconst running = runningTransitions.get(element);\n\tif (running) {\n\t\tswitch (options.runningTransition) {\n\t\t\t// If there is one running and we want for it to 'continue' to run, we have to cancel the new one.\n\t\t\t// We're not emitting any values, but simply completing the observable (EMPTY).\n\t\t\tcase 'continue':\n\t\t\t\treturn EMPTY;\n\t\t\t// If there is one running and we want for it to 'stop', we have to complete the running one.\n\t\t\t// We're simply completing the running one and not emitting any values and merging newly provided context\n\t\t\t// with the one coming from currently running transition.\n\t\t\tcase 'stop':\n\t\t\t\tzone.run(() => running.transition$.complete());\n\t\t\t\tcontext = Object.assign(running.context, context);\n\t\t\t\trunningTransitions.delete(element);\n\t\t}\n\t}\n\n\t// Running the start function\n\tconst endFn = startFn(element, options.animation, context) || noopFn;\n\n\t// If 'prefer-reduced-motion' is enabled, the 'transition' will be set to 'none'.\n\t// If animations are disabled, we have to emit a value and complete the observable\n\t// In this case we have to call the end function, but can finish immediately by emitting a value,\n\t// completing the observable and executing end functions synchronously.\n\tif (\n\t\t!options.animation ||\n\t\twindow.getComputedStyle(element).transitionProperty === 'none'\n\t) {\n\t\tzone.run(() => endFn());\n\t\treturn of(undefined).pipe(runInZone(zone));\n\t}\n\n\t// Starting a new transition\n\tconst transition$ = new Subject<void>();\n\tconst finishTransition$ = new Subject<void>();\n\tconst stop$ = transition$.pipe(endWith(true));\n\trunningTransitions.set(element, {\n\t\ttransition$,\n\t\tcomplete: () => {\n\t\t\tfinishTransition$.next();\n\t\t\tfinishTransition$.complete();\n\t\t},\n\t\tcontext\n\t});\n\n\tconst transitionDurationMs = getTransitionDurationMs(element);\n\n\t// 1. We have to both listen for the 'transitionend' event and have a 'just-in-case' timer,\n\t// because 'transitionend' event might not be fired in some browsers, if the transitioning\n\t// element becomes invisible (ex. when scrolling, making browser tab inactive, etc.). The timer\n\t// guarantees, that we'll release the DOM element and complete 'hubRunTransition'.\n\t// 2. We need to filter transition end events, because they might bubble from shorter transitions\n\t// on inner DOM elements. We're only interested in the transition on the 'element' itself.\n\tzone.runOutsideAngular(() => {\n\t\tconst transitionEnd$ = fromEvent(element, 'transitionend').pipe(\n\t\t\ttakeUntil(stop$),\n\t\t\tfilter(({ target }) => target === element)\n\t\t);\n\t\tconst timer$ = timer(\n\t\t\ttransitionDurationMs + transitionTimerDelayMs\n\t\t).pipe(takeUntil(stop$));\n\n\t\trace(timer$, transitionEnd$, finishTransition$)\n\t\t\t.pipe(takeUntil(stop$))\n\t\t\t.subscribe(() => {\n\t\t\t\trunningTransitions.delete(element);\n\t\t\t\tzone.run(() => {\n\t\t\t\t\tendFn();\n\t\t\t\t\ttransition$.next();\n\t\t\t\t\ttransition$.complete();\n\t\t\t\t});\n\t\t\t});\n\t});\n\n\treturn transition$.asObservable();\n};\n\nexport const hubCompleteTransition = (element: HTMLElement) => {\n\trunningTransitions.get(element)?.complete();\n};\n","import {\n\tApplicationRef,\n\tComponentRef,\n\tinject,\n\tInjector,\n\tNgZone,\n\tTemplateRef,\n\tType,\n\tViewContainerRef,\n\tViewRef\n} from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { mergeMap, take, tap } from 'rxjs/operators';\nimport { DOCUMENT } from '@angular/common';\nimport { hubRunTransition } from './transitions';\n\nexport class ContentRef {\n\tconstructor(\n\t\tpublic nodes: Node[][],\n\t\tpublic viewRef?: ViewRef,\n\t\tpublic componentRef?: ComponentRef<any>\n\t) {}\n}\n\nexport class PopupService<T> {\n\tprivate _windowRef: ComponentRef<T> | null = null;\n\tprivate _contentRef: ContentRef | null = null;\n\n\tprivate _document = inject(DOCUMENT);\n\tprivate _applicationRef = inject(ApplicationRef);\n\tprivate _injector = inject(Injector);\n\tprivate _viewContainerRef = inject(ViewContainerRef);\n\tprivate _ngZone = inject(NgZone);\n\n\tconstructor(private _componentType: Type<T>) {}\n\n\topen(\n\t\tcontent?: string | TemplateRef<any>,\n\t\ttemplateContext?: any,\n\t\tanimation = false\n\t): { windowRef: ComponentRef<T>; transition$: Observable<void> } {\n\t\tif (!this._windowRef) {\n\t\t\tthis._contentRef = this._getContentRef(content, templateContext);\n\t\t\tthis._windowRef = this._viewContainerRef.createComponent(\n\t\t\t\tthis._componentType,\n\t\t\t\t{\n\t\t\t\t\tinjector: this._injector,\n\t\t\t\t\tprojectableNodes: this._contentRef.nodes\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tconst { nativeElement } = this._windowRef.location;\n\t\tconst transition$ = this._ngZone.onStable.pipe(\n\t\t\ttake(1),\n\t\t\tmergeMap(() =>\n\t\t\t\thubRunTransition(\n\t\t\t\t\tthis._ngZone,\n\t\t\t\t\tnativeElement,\n\t\t\t\t\t({ classList }) => classList.add('show'),\n\t\t\t\t\t{\n\t\t\t\t\t\tanimation,\n\t\t\t\t\t\trunningTransition: 'continue'\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\n\t\treturn { windowRef: this._windowRef, transition$ };\n\t}\n\n\tclose(animation = false): Observable<void> {\n\t\tif (!this._windowRef) {\n\t\t\treturn of(undefined);\n\t\t}\n\n\t\treturn hubRunTransition(\n\t\t\tthis._ngZone,\n\t\t\tthis._windowRef.location.nativeElement,\n\t\t\t({ classList }) => classList.remove('show'),\n\t\t\t{ animation, runningTransition: 'stop' }\n\t\t).pipe(\n\t\t\ttap(() => {\n\t\t\t\tthis._windowRef?.destroy();\n\t\t\t\tthis._contentRef?.viewRef?.destroy();\n\t\t\t\tthis._windowRef = null;\n\t\t\t\tthis._contentRef = null;\n\t\t\t})\n\t\t);\n\t}\n\n\tprivate _getContentRef(\n\t\tcontent?: string | TemplateRef<any>,\n\t\ttemplateContext?: any\n\t): ContentRef {\n\t\tif (!content) {\n\t\t\treturn new ContentRef([]);\n\t\t} else if (content instanceof TemplateRef) {\n\t\t\tconst viewRef = content.createEmbeddedView(templateContext);\n\t\t\tthis._applicationRef.attachView(viewRef);\n\t\t\treturn new ContentRef([viewRef.rootNodes], viewRef);\n\t\t} else {\n\t\t\treturn new ContentRef([\n\t\t\t\t[this._document.createTextNode(`${content}`)]\n\t\t\t]);\n\t\t}\n\t}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/** Type for the callback used to revert the scrollbar. */\nexport type ScrollbarReverter = () => void;\n\n/**\n * Utility to handle the scrollbar.\n *\n * It allows to hide the scrollbar and compensate the lack of a vertical scrollbar\n * by adding an equivalent padding on the right of the body, and to revert this change.\n */\n@Injectable({ providedIn: 'root' })\nexport class ScrollBar {\n\tprivate _document = inject(DOCUMENT);\n\n\t/**\n\t * To be called to hide a potential vertical scrollbar:\n\t * - if a scrollbar is there and has a width greater than 0, adds some compensation\n\t * padding to the body to keep the same layout as when the scrollbar is there\n\t * - adds overflow: hidden\n\t *\n\t * @return a callback used to revert the change\n\t */\n\thide(): ScrollbarReverter {\n\t\tconst scrollbarWidth = Math.abs(window.innerWidth - this._document.documentElement.clientWidth);\n\t\tconst body = this._document.body;\n\t\tconst bodyStyle = body.style;\n\t\tconst { overflow, paddingRight } = bodyStyle;\n\t\tif (scrollbarWidth > 0) {\n\t\t\tconst actualPadding = parseFloat(window.getComputedStyle(body).paddingRight);\n\t\t\tbodyStyle.paddingRight = `${actualPadding + scrollbarWidth}px`;\n\t\t}\n\t\tbodyStyle.overflow = 'hidden';\n\t\treturn () => {\n\t\t\tif (scrollbarWidth > 0) {\n\t\t\t\tbodyStyle.paddingRight = paddingRight;\n\t\t\t}\n\t\t\tbodyStyle.overflow = overflow;\n\t\t};\n\t}\n}\n","import { HubTooltipOptions, HubTooltipPlacement } from './tooltip.types';\n\n/**\n * Themeable custom properties forwarded from the host to the tooltip element.\n *\n * The tooltip is appended to `<body>`, so it cannot inherit scoped variables set\n * on an ancestor of the host. We resolve them on the host (which *does* inherit\n * from its scope) and copy any defined value onto the tooltip inline style, so\n * both `:root`-level and scoped theming work.\n */\nconst TOOLTIP_THEME_VARS = [\n\t'--hub-tooltip-bg',\n\t'--hub-tooltip-color',\n\t'--hub-tooltip-opacity',\n\t'--hub-tooltip-padding-x',\n\t'--hub-tooltip-padding-y',\n\t'--hub-tooltip-border-radius',\n\t'--hub-tooltip-font-size',\n\t'--hub-tooltip-font-weight',\n\t'--hub-tooltip-line-height',\n\t'--hub-tooltip-max-width',\n\t'--hub-tooltip-zindex',\n\t'--hub-tooltip-transition-duration',\n\t'--hub-tooltip-shadow',\n\t'--hub-tooltip-font-family'\n];\n\n/**\n * Framework-agnostic tooltip engine.\n *\n * Binds hover/focus listeners to a host element and renders a body-portaled,\n * `--hub-tooltip-*`-themeable label on demand. It owns no Angular dependency, so\n * it can be reused both by the `[tooltip]` directive and by other primitives\n * (e.g. a badge overflow tooltip) that want the exact same visual contract\n * without re-implementing the DOM logic.\n *\n * Styles ship in `styles/tooltip.scss`. Import once in your app:\n * `@use 'ng-hub-ui-utils/styles/tooltip';`.\n */\nexport class HubTooltipController {\n\tprivate tooltipEl: HTMLElement | null = null;\n\tprivate hideTimeout: ReturnType<typeof setTimeout> | null = null;\n\n\tprivate text = '';\n\tprivate placement: HubTooltipPlacement = 'top';\n\tprivate delay = 150;\n\tprivate offset = 8;\n\n\tprivate readonly doc: Document;\n\tprivate readonly view: (Window & typeof globalThis) | null;\n\n\tprivate readonly onShow = (): void => this.show();\n\tprivate readonly onHide = (): void => this.hide();\n\n\t/**\n\t * @param host Element the tooltip is anchored to and whose pointer/focus\n\t * events trigger the tooltip.\n\t * @param options Initial placement, delay and offset.\n\t */\n\tconstructor(private readonly host: HTMLElement, options?: HubTooltipOptions) {\n\t\tthis.doc = host.ownerDocument;\n\t\tthis.view = this.doc.defaultView as (Window & typeof globalThis) | null;\n\t\tthis.setOptions(options);\n\n\t\tthis.host.addEventListener('mouseenter', this.onShow);\n\t\tthis.host.addEventListener('focus', this.onShow);\n\t\tthis.host.addEventListener('mouseleave', this.onHide);\n\t\tthis.host.addEventListener('blur', this.onHide);\n\t\tthis.host.addEventListener('click', this.onHide);\n\t}\n\n\t/**\n\t * Updates the tooltip label. An empty value disables the tooltip and hides any\n\t * currently visible instance.\n\t * @param text New tooltip content.\n\t */\n\tsetText(text: string): void {\n\t\tthis.text = text ?? '';\n\t\tif (!this.text) {\n\t\t\tthis.hide();\n\t\t\treturn;\n\t\t}\n\t\tif (this.tooltipEl) {\n\t\t\tthis.tooltipEl.textContent = this.text;\n\t\t\tthis.position();\n\t\t}\n\t}\n\n\t/**\n\t * Updates placement/delay/offset. Only provided keys are overwritten.\n\t * @param options Partial tooltip options.\n\t */\n\tsetOptions(options?: HubTooltipOptions): void {\n\t\tif (!options) {\n\t\t\treturn;\n\t\t}\n\t\tif (options.placement) {\n\t\t\tthis.placement = options.placement;\n\t\t}\n\t\tif (options.delay != null) {\n\t\t\tthis.delay = options.delay;\n\t\t}\n\t\tif (options.offset != null) {\n\t\t\tthis.offset = options.offset;\n\t\t}\n\t}\n\n\t/** Detaches listeners and removes any live tooltip element. */\n\tdestroy(): void {\n\t\tthis.host.removeEventListener('mouseenter', this.onShow);\n\t\tthis.host.removeEventListener('focus', this.onShow);\n\t\tthis.host.removeEventListener('mouseleave', this.onHide);\n\t\tthis.host.removeEventListener('blur', this.onHide);\n\t\tthis.host.removeEventListener('click', this.onHide);\n\t\tthis.removeElement();\n\t}\n\n\t/** Creates, positions and reveals the tooltip element. */\n\tprivate show(): void {\n\t\tif (this.tooltipEl || !this.text) {\n\t\t\treturn;\n\t\t}\n\t\tthis.clearHideTimeout();\n\n\t\tconst el = this.doc.createElement('span');\n\t\tel.textContent = this.text;\n\t\tel.classList.add('hub-tooltip', `hub-tooltip--${this.placement}`);\n\t\tel.style.transitionDuration = `${this.delay}ms`;\n\t\tthis.forwardThemeVars(el);\n\t\tthis.doc.body.appendChild(el);\n\t\tthis.tooltipEl = el;\n\n\t\tthis.position();\n\t\tel.classList.add('hub-tooltip--show');\n\t}\n\n\t/** Fades the tooltip out and removes it after the fade completes. */\n\tprivate hide(): void {\n\t\tif (!this.tooltipEl) {\n\t\t\treturn;\n\t\t}\n\t\tthis.tooltipEl.classList.remove('hub-tooltip--show');\n\t\tthis.clearHideTimeout();\n\t\tthis.hideTimeout = setTimeout(() => this.removeElement(), this.delay);\n\t}\n\n\t/** Removes the tooltip element immediately. */\n\tprivate removeElement(): void {\n\t\tthis.clearHideTimeout();\n\t\tif (this.tooltipEl) {\n\t\t\tthis.tooltipEl.remove();\n\t\t\tthis.tooltipEl = null;\n\t\t}\n\t}\n\n\t/**\n\t * Copies any `--hub-tooltip-*` value defined on the host (or its scope) onto\n\t * the body-portaled tooltip, so scoped theming applies despite the portal.\n\t */\n\tprivate forwardThemeVars(el: HTMLElement): void {\n\t\tif (!this.view) {\n\t\t\treturn;\n\t\t}\n\t\tconst hostStyles = this.view.getComputedStyle(this.host);\n\t\tfor (const name of TOOLTIP_THEME_VARS) {\n\t\t\tconst value = hostStyles.getPropertyValue(name).trim();\n\t\t\tif (value) {\n\t\t\t\tel.style.setProperty(name, value);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate clearHideTimeout(): void {\n\t\tif (this.hideTimeout !== null) {\n\t\t\tclearTimeout(this.hideTimeout);\n\t\t\tthis.hideTimeout = null;\n\t\t}\n\t}\n\n\t/** Positions the tooltip around the host according to the current placement. */\n\tprivate position(): void {\n\t\tif (!this.tooltipEl) {\n\t\t\treturn;\n\t\t}\n\t\tconst hostRect = this.host.getBoundingClientRect();\n\t\tconst tipRect = this.tooltipEl.getBoundingClientRect();\n\t\tconst scrollY = this.view?.scrollY ?? 0;\n\t\tconst scrollX = this.view?.scrollX ?? 0;\n\t\tconst offset = this.offset;\n\n\t\tlet top = 0;\n\t\tlet left = 0;\n\n\t\tswitch (this.placement) {\n\t\t\tcase 'bottom':\n\t\t\t\ttop = hostRect.bottom + offset;\n\t\t\t\tleft = hostRect.left + (hostRect.width - tipRect.width) / 2;\n\t\t\t\tbreak;\n\t\t\tcase 'left':\n\t\t\t\ttop = hostRect.top + (hostRect.height - tipRect.height) / 2;\n\t\t\t\tleft = hostRect.left - tipRect.width - offset;\n\t\t\t\tbreak;\n\t\t\tcase 'right':\n\t\t\t\ttop = hostRect.top + (hostRect.height - tipRect.height) / 2;\n\t\t\t\tleft = hostRect.right + offset;\n\t\t\t\tbreak;\n\t\t\tcase 'top':\n\t\t\tdefault:\n\t\t\t\ttop = hostRect.top - tipRect.height - offset;\n\t\t\t\tleft = hostRect.left + (hostRect.width - tipRect.width) / 2;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tthis.tooltipEl.style.top = `${top + scrollY}px`;\n\t\tthis.tooltipEl.style.left = `${left + scrollX}px`;\n\t}\n}\n","import { HubTooltipController } from './tooltip-controller';\nimport { HubTooltipAdapter, HubTooltipHandle, HubTooltipOptions } from './tooltip.types';\n\n/**\n * Ready-made {@link HubTooltipAdapter} backed by {@link HubTooltipController}.\n *\n * Wire it into any ng-hub-ui primitive that exposes an optional tooltip token,\n * e.g. `provideHubBadgeTooltip(hubTooltipAdapter)`.\n */\nexport const hubTooltipAdapter: HubTooltipAdapter = {\n\tattach(host: HTMLElement, text: string, options?: HubTooltipOptions): HubTooltipHandle {\n\t\tconst controller = new HubTooltipController(host, options);\n\t\tcontroller.setText(text);\n\n\t\treturn {\n\t\t\tupdate: (next: string) => controller.setText(next),\n\t\t\tdestroy: () => controller.destroy()\n\t\t};\n\t}\n};\n","import { InjectionToken } from '@angular/core';\nimport { hubTooltipAdapter } from './tooltip-adapter';\nimport { HubTooltipAdapter } from './tooltip.types';\n\n/**\n * Injection token resolving the tooltip adapter used by `[hubOverflowTooltip]`\n * (and any other utils consumer that wants a swappable tooltip).\n *\n * It defaults — via a root factory — to the built-in {@link hubTooltipAdapter},\n * so the hub-ui tooltip works out of the box with no wiring. Override it with\n * {@link provideHubTooltip} to plug in **any** tooltip implementation (a custom\n * one, a Material tooltip wrapper, etc.) app-wide or per subtree, keeping the\n * tooltip **agnostic** even for libraries that already depend on utils.\n */\nexport const HUB_TOOLTIP_ADAPTER = new InjectionToken<HubTooltipAdapter>('HUB_TOOLTIP_ADAPTER', {\n\tprovidedIn: 'root',\n\tfactory: () => hubTooltipAdapter\n});\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { HUB_TOOLTIP_ADAPTER } from './tooltip.token';\nimport { HubTooltipAdapter } from './tooltip.types';\n\n/**\n * Overrides the tooltip adapter used by `[hubOverflowTooltip]` (and other\n * token-driven tooltip consumers), so the hub-ui tooltip can be swapped for any\n * implementation without touching the components that show it.\n *\n * ```ts\n * // app.config.ts — use a custom tooltip everywhere instead of the built-in one.\n * providers: [provideHubTooltip(myTooltipAdapter)];\n * ```\n *\n * Omit it and the built-in `hubTooltipAdapter` is used by default.\n *\n * @param adapter Tooltip adapter implementation.\n * @returns Environment providers to add to the application config (or a route).\n */\nexport function provideHubTooltip(adapter: HubTooltipAdapter): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: HUB_TOOLTIP_ADAPTER,\n\t\t\tuseValue: adapter\n\t\t}\n\t]);\n}\n","import { Directive, ElementRef, effect, inject, input, OnDestroy } from '@angular/core';\nimport { HubTooltipController } from './tooltip-controller';\nimport { HubTooltipPlacement } from './tooltip.types';\n\n/**\n * Lightweight tooltip directive.\n *\n * Apply `[tooltip]` to any element to show a positioned label on hover/focus.\n * The tooltip element is appended to `<body>` so it is never clipped by an\n * overflow container, and every visual aspect is themeable through\n * `--hub-tooltip-*` CSS variables.\n *\n * All DOM work is delegated to {@link HubTooltipController}, so the directive and\n * any imperative consumer (e.g. a badge overflow tooltip) share the exact same\n * behaviour and styling.\n *\n * Styles ship in `styles/tooltip.scss` (mirroring `styles/overlay.scss`). Import\n * it once in your app: `@use 'ng-hub-ui-utils/styles/tooltip';`.\n */\n@Directive({\n\tselector: '[tooltip]'\n})\nexport class TooltipDirective implements OnDestroy {\n\t/** Tooltip text content. */\n\treadonly tooltipTitle = input.required<string>({ alias: 'tooltip' });\n\n\t/** Placement of the tooltip relative to the host. */\n\treadonly placement = input<HubTooltipPlacement>('top');\n\n\t/** Fade duration in milliseconds, also used as the removal delay on hide. */\n\treadonly delay = input<number>(150);\n\n\t/** Gap in pixels between the host and the tooltip. */\n\treadonly offset = input<number>(8);\n\n\tprivate readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprivate readonly controller = new HubTooltipController(this.host.nativeElement);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis.controller.setOptions({\n\t\t\t\tplacement: this.placement(),\n\t\t\t\tdelay: this.delay(),\n\t\t\t\toffset: this.offset()\n\t\t\t});\n\t\t\tthis.controller.setText(this.tooltipTitle());\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.controller.destroy();\n\t}\n}\n","import { afterNextRender, Directive, effect, ElementRef, inject, input, OnDestroy, signal } from '@angular/core';\nimport { HUB_TOOLTIP_ADAPTER } from './tooltip.token';\nimport { HubTooltipHandle, HubTooltipPlacement } from './tooltip.types';\n\n/**\n * Shows a tooltip with the given text **only while the host element is truncated**\n * (its content is wider than its box).\n *\n * Unlike `[tooltip]`, which always shows on hover, this directive is meant for\n * ellipsised labels: the tooltip appears solely when the text doesn't fit, so it\n * never duplicates already-visible content. Truncation is tracked live with a\n * `ResizeObserver` (host/container resizes) and a `MutationObserver` (text\n * changes).\n *\n * The tooltip implementation is **agnostic**: it resolves through the injectable\n * {@link HUB_TOOLTIP_ADAPTER} token, which defaults to the built-in hub-ui\n * tooltip. Swap it app-wide (or per subtree) with `provideHubTooltip(...)`.\n *\n * Requires the tooltip styles once in your app:\n * `@use 'ng-hub-ui-utils/styles/tooltip';`.\n *\n * @example\n * ```html\n * <span class=\"label\" [hubOverflowTooltip]=\"item.label\">{{ item.label }}</span>\n * ```\n */\n@Directive({\n\tselector: '[hubOverflowTooltip]'\n})\nexport class HubOverflowTooltipDirective implements OnDestroy {\n\t/** Tooltip text; shown only while the host overflows. */\n\treadonly text = input<string>('', { alias: 'hubOverflowTooltip' });\n\n\t/** Placement of the tooltip relative to the host. */\n\treadonly placement = input<HubTooltipPlacement>('top');\n\n\tprivate readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprivate readonly adapter = inject(HUB_TOOLTIP_ADAPTER);\n\n\tprivate handle: HubTooltipHandle | null = null;\n\tprivate resizeObserver: ResizeObserver | null = null;\n\tprivate mutationObserver: MutationObserver | null = null;\n\n\tprivate readonly overflowing = signal(false);\n\tprivate readonly ready = signal(false);\n\n\tconstructor() {\n\t\tafterNextRender(() => this.init());\n\n\t\teffect(() => {\n\t\t\tif (!this.ready() || !this.handle) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.handle.update(this.overflowing() ? this.text() : '');\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.resizeObserver?.disconnect();\n\t\tthis.mutationObserver?.disconnect();\n\t\tthis.handle?.destroy();\n\t\tthis.handle = null;\n\t}\n\n\t/** Wires the tooltip handle and the browser-only truncation observers. */\n\tprivate init(): void {\n\t\tconst el = this.host.nativeElement;\n\t\t// Attach with no text; the effect feeds the label only while truncated.\n\t\tthis.handle = this.adapter.attach(el, '', { placement: this.placement() });\n\t\tthis.measure(el);\n\n\t\tif (typeof ResizeObserver !== 'undefined') {\n\t\t\tthis.resizeObserver = new ResizeObserver(() => this.measure(el));\n\t\t\tthis.resizeObserver.observe(el);\n\t\t}\n\n\t\tif (typeof MutationObserver !== 'undefined') {\n\t\t\tthis.mutationObserver = new MutationObserver(() => this.measure(el));\n\t\t\tthis.mutationObserver.observe(el, { childList: true, characterData: true, subtree: true });\n\t\t}\n\n\t\tthis.ready.set(true);\n\t}\n\n\t/** Updates the truncation state from the host's layout. */\n\tprivate measure(el: HTMLElement): void {\n\t\tthis.overflowing.set(el.scrollWidth > el.clientWidth + 1);\n\t}\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './lib/accent';\nexport * from './lib/drag-drop';\nexport * from './lib/focus-trap';\nexport * from './lib/i18n/translation.provider';\nexport * from './lib/i18n/translation-adapter';\nexport * from './lib/i18n/translation.service';\nexport * from './lib/i18n/translation.tokens';\nexport * from './lib/overlay';\nexport { GetPipe } from './lib/pipes/get.pipe';\nexport { IsObjectPipe } from './lib/pipes/is-object.pipe';\nexport { IsObservablePipe } from './lib/pipes/is-observable.pipe';\nexport { IsStringPipe } from './lib/pipes/is-string.pipe';\nexport * from './lib/pipes/translate.pipe';\nexport { UcfirstPipe } from './lib/pipes/ucfirst.pipe';\nexport { UnwrapAsyncPipe } from './lib/pipes/unwrap-async.pipe';\nexport * from './lib/popup';\nexport * from './lib/scrollbar';\nexport * from './lib/tooltip/tooltip.types';\nexport * from './lib/tooltip/tooltip-controller';\nexport * from './lib/tooltip/tooltip-adapter';\nexport * from './lib/tooltip/tooltip.token';\nexport * from './lib/tooltip/tooltip.provider';\nexport * from './lib/tooltip/tooltip.directive';\nexport * from './lib/tooltip/overflow-tooltip.directive';\nexport * from './lib/transitions';\nexport * from './lib/util';\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":"ng-hub-ui-utils.mjs","sources":["../../../projects/utils/src/lib/accent.ts","../../../projects/utils/src/lib/drag-drop/array-utils.ts","../../../projects/utils/src/lib/drag-drop/drop-position.ts","../../../projects/utils/src/lib/drag-drop/drag-image.ts","../../../projects/utils/src/lib/drag-drop/pointer-drag.ts","../../../projects/utils/src/lib/drag-drop/drag-drop.service.ts","../../../projects/utils/src/lib/drag-drop/index.ts","../../../projects/utils/src/lib/focus-trap.ts","../../../projects/utils/src/lib/util.ts","../../../projects/utils/src/lib/i18n/translation.tokens.ts","../../../projects/utils/src/lib/i18n/translation.service.ts","../../../projects/utils/src/lib/i18n/translation.provider.ts","../../../projects/utils/src/lib/i18n/translation-adapter.ts","../../../projects/utils/src/lib/overlay/overlay-position.ts","../../../projects/utils/src/lib/overlay/overlay-ref.ts","../../../projects/utils/src/lib/overlay/overlay-service.ts","../../../projects/utils/src/lib/pipes/get.pipe.ts","../../../projects/utils/src/lib/pipes/is-object.pipe.ts","../../../projects/utils/src/lib/pipes/is-observable.pipe.ts","../../../projects/utils/src/lib/pipes/is-string.pipe.ts","../../../projects/utils/src/lib/pipes/translate.pipe.ts","../../../projects/utils/src/lib/pipes/ucfirst.pipe.ts","../../../projects/utils/src/lib/pipes/unwrap-async.pipe.ts","../../../projects/utils/src/lib/transitions/util.ts","../../../projects/utils/src/lib/transitions/transition.ts","../../../projects/utils/src/lib/popup.ts","../../../projects/utils/src/lib/scrollbar.ts","../../../projects/utils/src/lib/tooltip/tooltip-controller.ts","../../../projects/utils/src/lib/tooltip/tooltip-adapter.ts","../../../projects/utils/src/lib/tooltip/tooltip.token.ts","../../../projects/utils/src/lib/tooltip/tooltip.provider.ts","../../../projects/utils/src/lib/tooltip/tooltip.directive.ts","../../../projects/utils/src/lib/tooltip/hub-tooltip.directive.ts","../../../projects/utils/src/lib/tooltip/overflow-tooltip.directive.ts","../../../projects/utils/src/public-api.ts","../../../projects/utils/src/ng-hub-ui-utils.ts"],"sourcesContent":["/**\n * Resolves a component `color` / `variant` input to a paintable CSS value for a\n * `--hub-*-accent` slot, accepting ANY colour with a single rule:\n *\n * - a **bareword** — a built-in or registered semantic accent name (`primary`, `brand`…) or a CSS\n * named colour (`rebeccapurple`) — resolves to its design-system token\n * `var(--hub-sys-color-<name>, <name>)`: the token when it exists, with the raw word as fallback\n * so unregistered names / CSS named colours still paint;\n * - a **literal** colour (`#ff0000`, `rgb(...)`, `oklch(...)`, `var(...)`) is returned unchanged;\n * - an empty / nullish value returns `null`, so the component's default accent stays in effect.\n *\n * Bind the result to the component's single accent slot via the `host` metadata, e.g.\n * `host: { '[style.--hub-btn-accent]': 'accent()' }` with `accent = computed(() => resolveHubAccent(this.color()))`.\n *\n * @param value the raw `color` / `variant` input value\n * @returns the value for `[style.--hub-*-accent]`, or `null`\n */\nexport function resolveHubAccent(value: string | null | undefined): string | null {\n\tconst color = value?.trim();\n\tif (!color) {\n\t\treturn null;\n\t}\n\treturn /^[a-zA-Z][\\w-]*$/.test(color) ? `var(--hub-sys-color-${color}, ${color})` : color;\n}\n","/**\n * Clamps a value into the `[0, max]` range.\n *\n * @param value Value to clamp.\n * @param max Maximum allowed value.\n * @returns The clamped value.\n */\nexport function clamp(value: number, max: number): number {\n\treturn Math.max(0, Math.min(max, value));\n}\n\n/**\n * Moves an item within an array in place (mirrors `@angular/cdk`'s `moveItemInArray`).\n *\n * @param array Array to mutate.\n * @param fromIndex Current index of the item.\n * @param toIndex Target index of the item.\n */\nexport function moveItemInArray<T>(array: T[], fromIndex: number, toIndex: number): void {\n\tconst from = clamp(fromIndex, array.length - 1);\n\tconst to = clamp(toIndex, array.length - 1);\n\tif (from === to) {\n\t\treturn;\n\t}\n\tconst target = array[from];\n\tconst delta = to < from ? -1 : 1;\n\tfor (let i = from; i !== to; i += delta) {\n\t\tarray[i] = array[i + delta];\n\t}\n\tarray[to] = target;\n}\n\n/**\n * Transfers an item from one array to another in place (mirrors `transferArrayItem`).\n *\n * @param source Source array.\n * @param target Target array.\n * @param fromIndex Index of the item in the source array.\n * @param toIndex Insertion index in the target array.\n */\nexport function transferArrayItem<T>(source: T[], target: T[], fromIndex: number, toIndex: number): void {\n\tconst from = clamp(fromIndex, source.length - 1);\n\tconst to = clamp(toIndex, target.length);\n\tif (source.length) {\n\t\ttarget.splice(to, 0, source.splice(from, 1)[0]);\n\t}\n}\n\n/**\n * Copies an item from one array into another in place, leaving the source untouched.\n *\n * @param source Source array.\n * @param target Target array.\n * @param fromIndex Index of the item in the source array.\n * @param toIndex Insertion index in the target array.\n */\nexport function copyArrayItem<T>(source: ReadonlyArray<T>, target: T[], fromIndex: number, toIndex: number): void {\n\tif (!source.length) {\n\t\treturn;\n\t}\n\tconst from = clamp(fromIndex, source.length - 1);\n\tconst to = clamp(toIndex, target.length);\n\ttarget.splice(to, 0, source[from]);\n}\n\n/**\n * Computes the destination index in the underlying collection from the hovered target index\n * and the drop side. When reordering within the same container, the index is adjusted to\n * account for the gap left by removing the dragged item.\n *\n * @param targetIndex Absolute index of the hovered target item.\n * @param after Whether the item is dropped after (vs before) the target.\n * @param sameContainer Whether source and target collections are the same.\n * @param fromIndex Absolute index the dragged item occupied in the source collection.\n * @returns The resolved destination index.\n */\nexport function computeTargetIndex(targetIndex: number, after: boolean, sameContainer: boolean, fromIndex: number): number {\n\tlet index = after ? targetIndex + 1 : targetIndex;\n\tif (sameContainer && fromIndex < index) {\n\t\tindex -= 1;\n\t}\n\treturn Math.max(0, index);\n}\n\n/**\n * Maps a paginated visible index to its absolute index in the underlying collection.\n *\n * @param visibleIndex Index within the currently rendered slice.\n * @param sliceStart Absolute index of the first item in the slice.\n * @returns The absolute index.\n */\nexport function toAbsoluteIndex(visibleIndex: number, sliceStart: number): number {\n\treturn sliceStart + visibleIndex;\n}\n\n/**\n * Determines whether `target` is `node` or any of its descendants in a tree, where children\n * are stored under the `childrenKey` property. Used to forbid dropping a node into its own\n * subtree (which would create a cycle).\n *\n * @param node Root node of the subtree to search.\n * @param target Item to look for (e.g. the parent of a candidate drop container).\n * @param childrenKey Property name holding the children collection.\n * @returns `true` when `target` is `node` or one of its descendants.\n */\nexport function containsNode(node: any, target: any, childrenKey: string): boolean {\n\tif (target == null) {\n\t\treturn false;\n\t}\n\tif (node === target) {\n\t\treturn true;\n\t}\n\tconst children = node?.[childrenKey];\n\tif (!Array.isArray(children)) {\n\t\treturn false;\n\t}\n\treturn children.some((child) => containsNode(child, target, childrenKey));\n}\n","import { DropPosition } from './types';\n\n/**\n * Minimal rectangle shape (a subset of `DOMRect`) used for drop-position math.\n */\nexport interface DropRect {\n\ttop: number;\n\tbottom: number;\n\tleft: number;\n\tright: number;\n\twidth: number;\n\theight: number;\n}\n\n/**\n * Layout axis of a draggable collection, used to decide the drop side.\n *\n * - `vertical`: rows stacked top-to-bottom (default lists, board cards).\n * - `horizontal`: items laid left-to-right (board columns).\n * - `grid`: wrapping grid (list `cards` layout) — vertical band first, then horizontal.\n */\nexport type DragAxis = 'vertical' | 'horizontal' | 'grid';\n\n/**\n * Resolves whether a dragged item should drop before or after the hovered target, based on\n * the pointer position relative to the target's bounding rectangle and the layout axis.\n *\n * For `vertical` the Y axis decides; for `horizontal` the X axis decides (mirrored in RTL);\n * for `grid` the vertical band decides across rows and the horizontal axis decides within\n * the same row (mirrored in RTL).\n *\n * @param pointerX Pointer X in viewport coordinates.\n * @param pointerY Pointer Y in viewport coordinates.\n * @param rect Bounding rectangle of the target item.\n * @param axis Layout axis of the collection.\n * @param isRtl Whether the collection is in right-to-left mode.\n * @returns `'before'` or `'after'`.\n */\nexport function resolveDropPosition(\n\tpointerX: number,\n\tpointerY: number,\n\trect: DropRect,\n\taxis: DragAxis,\n\tisRtl: boolean\n): DropPosition {\n\tif (axis === 'horizontal') {\n\t\tconst midX = rect.left + rect.width / 2;\n\t\tconst before = isRtl ? pointerX > midX : pointerX < midX;\n\t\treturn before ? 'before' : 'after';\n\t}\n\n\tconst midY = rect.top + rect.height / 2;\n\tif (axis === 'vertical') {\n\t\treturn pointerY < midY ? 'before' : 'after';\n\t}\n\n\t// grid\n\tif (pointerY < rect.top) {\n\t\treturn 'before';\n\t}\n\tif (pointerY > rect.bottom) {\n\t\treturn 'after';\n\t}\n\tconst midX = rect.left + rect.width / 2;\n\tconst before = isRtl ? pointerX > midX : pointerX < midX;\n\treturn before ? 'before' : 'after';\n}\n","import { TemplateRef } from '@angular/core';\n\n/**\n * A rendered drag image, plus a disposer to tear it down once the drag ends.\n */\nexport interface DragImageResult {\n\t/** The root element to pass to `dataTransfer.setDragImage`. */\n\tnode: HTMLElement;\n\t/** Destroys the embedded view and removes the rendered nodes. */\n\tdestroy(): void;\n}\n\n/**\n * Renders a template off-screen so it can be used as a native drag image\n * (`dataTransfer.setDragImage`). The caller is responsible for calling `setDragImage` and,\n * on `dragend`, the returned `destroy()`.\n *\n * @param template Template to render as the drag preview.\n * @param context Template context (e.g. `{ item }`).\n * @param container Optional host element to mount into; when omitted, an off-screen holder is\n * appended to `document.body`.\n * @returns The rendered image and its disposer, or `null` when nothing renders (e.g. SSR or\n * an empty template).\n */\nexport function createNativeDragImage(\n\ttemplate: TemplateRef<any>,\n\tcontext: Record<string, unknown>,\n\tcontainer?: HTMLElement\n): DragImageResult | null {\n\tif (typeof document === 'undefined') {\n\t\treturn null;\n\t}\n\tconst view = template.createEmbeddedView(context);\n\tview.detectChanges();\n\tconst node = view.rootNodes.find((candidate: Node) => candidate.nodeType === Node.ELEMENT_NODE) as\n\t\t| HTMLElement\n\t\t| undefined;\n\tif (!node) {\n\t\tview.destroy();\n\t\treturn null;\n\t}\n\n\tconst mountedNodes: Node[] = [...view.rootNodes];\n\tlet holder: HTMLElement | null = null;\n\tif (container) {\n\t\tmountedNodes.forEach((rootNode: Node) => container.appendChild(rootNode));\n\t} else {\n\t\tholder = document.createElement('div');\n\t\tholder.style.position = 'fixed';\n\t\tholder.style.top = '-9999px';\n\t\tholder.style.left = '-9999px';\n\t\tholder.style.pointerEvents = 'none';\n\t\tmountedNodes.forEach((rootNode: Node) => holder!.appendChild(rootNode));\n\t\tdocument.body.appendChild(holder);\n\t}\n\n\treturn {\n\t\tnode,\n\t\tdestroy: () => {\n\t\t\t// Angular's `EmbeddedViewRef.destroy()` tears down the view but does NOT remove the\n\t\t\t// DOM nodes it produced, so remove them explicitly to keep the helper self-contained\n\t\t\t// (no caller-side `innerHTML` clearing needed). The off-screen holder is removed whole.\n\t\t\tview.destroy();\n\t\t\tif (holder) {\n\t\t\t\tholder.remove();\n\t\t\t} else {\n\t\t\t\tmountedNodes.forEach((rootNode: Node) => (rootNode as ChildNode).remove?.());\n\t\t\t}\n\t\t}\n\t};\n}\n","/**\n * Configuration for a Pointer Events drag session — the touch/pen fallback for native\n * HTML5 drag-and-drop, used where native dragging is unavailable (mobile/tablet).\n */\nexport interface PointerDragSessionConfig {\n\t/** The `pointerdown` event that initiated the gesture. */\n\tstartEvent: PointerEvent;\n\t/** The element being dragged. */\n\tsourceEl: HTMLElement;\n\t/** Builds the floating ghost content (custom preview render or a clone). */\n\tghostFactory: () => HTMLElement;\n\t/** Distance in pixels the pointer must travel before a drag begins (default 8). */\n\tthreshold?: number;\n\t/** Called once the gesture passes the threshold and becomes a drag. */\n\tonStart: () => void;\n\t/** Called on every move while dragging, with viewport coordinates. */\n\tonMove: (clientX: number, clientY: number) => void;\n\t/** Called on drop (pointer up after a real drag), with viewport coordinates. */\n\tonDrop: (clientX: number, clientY: number) => void;\n\t/** Called when the gesture is cancelled (e.g. `pointercancel`). */\n\tonCancel: () => void;\n\t/** Always called last for cleanup, regardless of outcome. */\n\tonEnd: () => void;\n}\n\n/**\n * Handle to an in-progress Pointer Events drag session.\n */\nexport interface PointerDragSession {\n\t/** Aborts the session and runs cleanup. */\n\tdestroy(): void;\n}\n\nconst EDGE_MARGIN = 48;\nconst MAX_SCROLL_SPEED = 16;\n\n/**\n * Creates a Pointer Events drag session that mirrors native drag-and-drop on touch devices.\n *\n * The session waits for the pointer to pass a movement threshold (so taps still behave as\n * taps), then renders a floating ghost that follows the finger, reports hover positions via\n * `onMove`, autoscrolls when near a scroll container's edges, and commits on pointer up.\n *\n * @param config Session configuration.\n * @returns A handle whose `destroy()` aborts the session.\n */\nexport function createPointerDragSession(config: PointerDragSessionConfig): PointerDragSession {\n\tconst threshold = config.threshold ?? 8;\n\tconst pointerId = config.startEvent.pointerId;\n\tconst startX = config.startEvent.clientX;\n\tconst startY = config.startEvent.clientY;\n\n\tconst rect = config.sourceEl.getBoundingClientRect();\n\tconst grabOffsetX = startX - rect.left;\n\tconst grabOffsetY = startY - rect.top;\n\n\tlet started = false;\n\tlet ghost: HTMLElement | null = null;\n\tlet scrollContainer: HTMLElement | Window = window;\n\tlet rafId: number | null = null;\n\tlet scrollVelocity = 0;\n\n\t/**\n\t * Positions the ghost under the pointer.\n\t *\n\t * @param x Pointer X.\n\t * @param y Pointer Y.\n\t */\n\tconst positionGhost = (x: number, y: number): void => {\n\t\tif (ghost) {\n\t\t\tghost.style.transform = `translate(${x - grabOffsetX}px, ${y - grabOffsetY}px)`;\n\t\t}\n\t};\n\n\t/**\n\t * Runs the autoscroll animation loop while the pointer sits in an edge zone.\n\t */\n\tconst scrollStep = (): void => {\n\t\tif (scrollVelocity !== 0) {\n\t\t\tif (scrollContainer === window) {\n\t\t\t\twindow.scrollBy(0, scrollVelocity);\n\t\t\t} else {\n\t\t\t\t(scrollContainer as HTMLElement).scrollTop += scrollVelocity;\n\t\t\t}\n\t\t\trafId = requestAnimationFrame(scrollStep);\n\t\t} else {\n\t\t\trafId = null;\n\t\t}\n\t};\n\n\t/**\n\t * Updates the autoscroll velocity from the pointer's proximity to the container edges.\n\t *\n\t * @param y Pointer Y.\n\t */\n\tconst updateAutoscroll = (y: number): void => {\n\t\tconst bounds =\n\t\t\tscrollContainer === window\n\t\t\t\t? { top: 0, bottom: window.innerHeight }\n\t\t\t\t: (scrollContainer as HTMLElement).getBoundingClientRect();\n\t\tif (y < bounds.top + EDGE_MARGIN) {\n\t\t\tscrollVelocity = -Math.ceil((MAX_SCROLL_SPEED * (bounds.top + EDGE_MARGIN - y)) / EDGE_MARGIN);\n\t\t} else if (y > bounds.bottom - EDGE_MARGIN) {\n\t\t\tscrollVelocity = Math.ceil((MAX_SCROLL_SPEED * (y - (bounds.bottom - EDGE_MARGIN))) / EDGE_MARGIN);\n\t\t} else {\n\t\t\tscrollVelocity = 0;\n\t\t}\n\t\tif (scrollVelocity !== 0 && rafId === null) {\n\t\t\trafId = requestAnimationFrame(scrollStep);\n\t\t}\n\t};\n\n\t/**\n\t * Begins the actual drag once the threshold is exceeded.\n\t *\n\t * @param x Pointer X.\n\t * @param y Pointer Y.\n\t */\n\tconst beginDrag = (x: number, y: number): void => {\n\t\tstarted = true;\n\t\tscrollContainer = findScrollContainer(config.sourceEl);\n\t\tghost = config.ghostFactory();\n\t\tghost.classList.add('hub-drag-ghost');\n\t\tghost.style.position = 'fixed';\n\t\tghost.style.top = '0';\n\t\tghost.style.left = '0';\n\t\tghost.style.width = `${rect.width}px`;\n\t\tghost.style.pointerEvents = 'none';\n\t\tghost.style.zIndex = '2147483647';\n\t\tghost.style.margin = '0';\n\t\tpositionGhost(x, y);\n\t\tdocument.body.appendChild(ghost);\n\t\tconfig.onStart();\n\t};\n\n\t/**\n\t * Handles pointer movement: starts the drag past threshold, then tracks and autoscrolls.\n\t *\n\t * @param event Pointer move event.\n\t */\n\tconst onPointerMove = (event: PointerEvent): void => {\n\t\tif (event.pointerId !== pointerId) {\n\t\t\treturn;\n\t\t}\n\t\tconst { clientX, clientY } = event;\n\t\tif (!started) {\n\t\t\tif (Math.abs(clientX - startX) < threshold && Math.abs(clientY - startY) < threshold) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbeginDrag(clientX, clientY);\n\t\t}\n\t\tevent.preventDefault();\n\t\tpositionGhost(clientX, clientY);\n\t\tconfig.onMove(clientX, clientY);\n\t\tupdateAutoscroll(clientY);\n\t};\n\n\t/**\n\t * Handles pointer up: commits the drop when a drag actually happened.\n\t *\n\t * @param event Pointer up event.\n\t */\n\tconst onPointerUp = (event: PointerEvent): void => {\n\t\tif (event.pointerId !== pointerId) {\n\t\t\treturn;\n\t\t}\n\t\tif (started) {\n\t\t\tconfig.onDrop(event.clientX, event.clientY);\n\t\t}\n\t\tcleanup();\n\t};\n\n\t/**\n\t * Handles pointer cancellation.\n\t *\n\t * @param event Pointer cancel event.\n\t */\n\tconst onPointerCancel = (event: PointerEvent): void => {\n\t\tif (event.pointerId !== pointerId) {\n\t\t\treturn;\n\t\t}\n\t\tif (started) {\n\t\t\tconfig.onCancel();\n\t\t}\n\t\tcleanup();\n\t};\n\n\t/**\n\t * Removes listeners, the ghost and any pending animation frame, then notifies the owner.\n\t */\n\tconst cleanup = (): void => {\n\t\twindow.removeEventListener('pointermove', onPointerMove);\n\t\twindow.removeEventListener('pointerup', onPointerUp);\n\t\twindow.removeEventListener('pointercancel', onPointerCancel);\n\t\tif (rafId !== null) {\n\t\t\tcancelAnimationFrame(rafId);\n\t\t\trafId = null;\n\t\t}\n\t\tscrollVelocity = 0;\n\t\tghost?.remove();\n\t\tghost = null;\n\t\ttry {\n\t\t\tconfig.sourceEl.releasePointerCapture(pointerId);\n\t\t} catch {\n\t\t\t// Pointer capture may not be held; ignore.\n\t\t}\n\t\tconfig.onEnd();\n\t};\n\n\ttry {\n\t\tconfig.sourceEl.setPointerCapture(pointerId);\n\t} catch {\n\t\t// Environments without pointer capture (e.g. tests) can still proceed.\n\t}\n\twindow.addEventListener('pointermove', onPointerMove, { passive: false });\n\twindow.addEventListener('pointerup', onPointerUp);\n\twindow.addEventListener('pointercancel', onPointerCancel);\n\n\treturn { destroy: cleanup };\n}\n\n/**\n * Finds the nearest vertically scrollable ancestor of an element, falling back to `window`.\n *\n * @param el Starting element.\n * @returns The scroll container (an element) or `window`.\n */\nfunction findScrollContainer(el: HTMLElement | null): HTMLElement | Window {\n\tlet node = el?.parentElement ?? null;\n\twhile (node && node !== document.body && node !== document.documentElement) {\n\t\tconst style = getComputedStyle(node);\n\t\tconst overflowY = style.overflowY;\n\t\tif ((overflowY === 'auto' || overflowY === 'scroll') && node.scrollHeight > node.clientHeight) {\n\t\t\treturn node;\n\t\t}\n\t\tnode = node.parentElement;\n\t}\n\treturn window;\n}\n","import { computed, Injectable, signal } from '@angular/core';\nimport { ActiveDrag, DragRegistration, DragTarget } from './types';\n\n/**\n * Singleton coordinator that backs native HTML5 drag-and-drop reordering and cross-instance\n * transfers (e.g. between two lists, or any two owners that share a drag group).\n *\n * A drag spans two component instances (source and target) and the native `dataTransfer`\n * payload is unreadable during `dragover`, so a shared, root-provided service is the only\n * reliable channel to know what is being dragged and from where while hovering. The service\n * only coordinates state; it never mutates the underlying collections.\n */\n@Injectable({ providedIn: 'root' })\nexport class HubDragDropService {\n\treadonly #registrations = new Map<string, DragRegistration>();\n\treadonly #active = signal<ActiveDrag | null>(null);\n\treadonly #target = signal<DragTarget | null>(null);\n\n\t/** The drag currently in progress, or `null`. */\n\treadonly active = this.#active.asReadonly();\n\t/** The current drop target, or `null`. */\n\treadonly target = this.#target.asReadonly();\n\t/** Whether a drag is in progress. */\n\treadonly isDragging = computed(() => this.#active() !== null);\n\n\t/**\n\t * Registers an owner so it can participate in (and be a target of) cross-owner transfers.\n\t *\n\t * @param registration The owner registration.\n\t */\n\tregister(registration: DragRegistration): void {\n\t\tthis.#registrations.set(registration.ownerId, registration);\n\t}\n\n\t/**\n\t * Removes an owner registration (call on destroy).\n\t *\n\t * @param ownerId Identifier of the owner to remove.\n\t */\n\tunregister(ownerId: string): void {\n\t\tthis.#registrations.delete(ownerId);\n\t}\n\n\t/**\n\t * Starts a drag, recording the active item and clearing any previous target.\n\t *\n\t * @param drag The active drag snapshot.\n\t */\n\tbegin(drag: ActiveDrag): void {\n\t\tthis.#active.set(drag);\n\t\tthis.#target.set(null);\n\t}\n\n\t/**\n\t * Updates the transient drop target while hovering.\n\t *\n\t * @param target The hovered target, or `null` to clear it.\n\t */\n\tsetTarget(target: DragTarget | null): void {\n\t\tthis.#target.set(target);\n\t}\n\n\t/**\n\t * Ends the current drag and clears all transient state.\n\t */\n\tend(): void {\n\t\tthis.#active.set(null);\n\t\tthis.#target.set(null);\n\t}\n\n\t/**\n\t * Determines whether the active drag may be dropped on the given owner. An owner always\n\t * accepts its own items (in-owner reorder); a different owner accepts only when both\n\t * share the same non-null drag group.\n\t *\n\t * @param targetOwnerId Identifier of the candidate target owner.\n\t * @returns `true` when the drop is allowed.\n\t */\n\tcanDrop(targetOwnerId: string): boolean {\n\t\tconst active = this.#active();\n\t\tif (!active) {\n\t\t\treturn false;\n\t\t}\n\t\tif (targetOwnerId === active.sourceId) {\n\t\t\treturn true;\n\t\t}\n\t\tconst registration = this.#registrations.get(targetOwnerId);\n\t\tif (!registration) {\n\t\t\treturn false;\n\t\t}\n\t\tconst targetGroup = registration.group();\n\t\treturn active.sourceGroup != null && targetGroup != null && active.sourceGroup === targetGroup;\n\t}\n\n\t/**\n\t * Re-renders an owner on demand (used by the destination owner to refresh the source owner\n\t * after a cross-owner transfer).\n\t *\n\t * @param ownerId Identifier of the owner to refresh.\n\t */\n\trefreshSource(ownerId: string): void {\n\t\tthis.#registrations.get(ownerId)?.refresh?.();\n\t}\n\n\t/**\n\t * Asks an owner to commit the pending drop as the destination (Pointer Events fallback,\n\t * where the source component drives the gesture but the destination must commit/emit).\n\t *\n\t * @param ownerId Identifier of the destination owner.\n\t */\n\trequestCommit(ownerId: string): void {\n\t\tthis.#registrations.get(ownerId)?.commit?.();\n\t}\n\n\t/**\n\t * Resolves the drop target under a viewport point by hit-testing the DOM and delegating to\n\t * the owning component (which knows its own collections). Used by the Pointer Events\n\t * fallback, including cross-owner hovers where the target is a different component.\n\t *\n\t * @param clientX Viewport X coordinate.\n\t * @param clientY Viewport Y coordinate.\n\t * @returns The resolved target, or `null` when the point is not over a droppable owner.\n\t */\n\tresolveTargetAt(clientX: number, clientY: number): DragTarget | null {\n\t\tif (typeof document === 'undefined') {\n\t\t\treturn null;\n\t\t}\n\t\tconst element = document.elementFromPoint(clientX, clientY) as HTMLElement | null;\n\t\tconst hostEl = element?.closest('[data-hub-drag-owner]') as HTMLElement | null;\n\t\tconst ownerId = hostEl?.getAttribute('data-hub-drag-owner');\n\t\tif (!element || !ownerId || !this.canDrop(ownerId)) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.#registrations.get(ownerId)?.resolveTarget?.(element, clientX, clientY) ?? null;\n\t}\n}\n","/**\n * Native HTML5 drag-and-drop core shared across ng-hub-ui libraries.\n *\n * Provides the engine-agnostic, reusable pieces of a native drag-and-drop implementation:\n * pure array helpers, drop-position geometry, drag-image rendering, a Pointer Events touch\n * fallback, a singleton coordinator service (cross-instance transfers) and shared types.\n * UI primitives (handle/placeholder/preview directives) stay per-library, since their\n * selectors and data models differ.\n */\nexport * from './array-utils';\nexport * from './drop-position';\nexport * from './drag-image';\nexport * from './pointer-drag';\nexport * from './drag-drop.service';\nexport * from './types';\n","import { NgZone } from '@angular/core';\n\nimport { fromEvent, Observable } from 'rxjs';\nimport { filter, map, takeUntil, withLatestFrom } from 'rxjs/operators';\n\nexport const FOCUSABLE_ELEMENTS_SELECTOR = [\n\t'a[href]',\n\t'button:not([disabled])',\n\t'input:not([disabled]):not([type=\"hidden\"])',\n\t'select:not([disabled])',\n\t'textarea:not([disabled])',\n\t'[contenteditable]',\n\t'[tabindex]:not([tabindex=\"-1\"])'\n].join(', ');\n\n/**\n * Returns first and last focusable elements inside of a given element based on specific CSS selector\n */\nexport function getFocusableBoundaryElements(\n\telement: HTMLElement\n): HTMLElement[] {\n\tconst list: HTMLElement[] = Array.from(\n\t\telement.querySelectorAll(\n\t\t\tFOCUSABLE_ELEMENTS_SELECTOR\n\t\t) as NodeListOf<HTMLElement>\n\t).filter((el) => el.tabIndex !== -1);\n\treturn [list[0], list[list.length - 1]];\n}\n\n/**\n * Function that enforces browser focus to be trapped inside a DOM element.\n *\n * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element\n *\n * @param zone Angular zone\n * @param element The element around which focus will be trapped inside\n * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners\n * and free internal resources\n * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to\n * false)\n */\nexport const hubFocusTrap = (\n\tzone: NgZone,\n\telement: HTMLElement,\n\tstopFocusTrap$: Observable<any>,\n\trefocusOnClick = false\n) => {\n\tzone.runOutsideAngular(() => {\n\t\t// last focused element\n\t\tconst lastFocusedElement$ = fromEvent<FocusEvent>(\n\t\t\telement,\n\t\t\t'focusin'\n\t\t).pipe(\n\t\t\ttakeUntil(stopFocusTrap$),\n\t\t\tmap((e) => e.target)\n\t\t);\n\n\t\t// 'tab' / 'shift+tab' stream\n\t\tfromEvent<KeyboardEvent>(element, 'keydown')\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(stopFocusTrap$),\n\t\t\t\tfilter((e) => e.key === 'Tab'),\n\t\t\t\twithLatestFrom(lastFocusedElement$)\n\t\t\t)\n\t\t\t.subscribe(([tabEvent, focusedElement]) => {\n\t\t\t\tconst [first, last] = getFocusableBoundaryElements(element);\n\n\t\t\t\tif (\n\t\t\t\t\t(focusedElement === first || focusedElement === element) &&\n\t\t\t\t\ttabEvent.shiftKey\n\t\t\t\t) {\n\t\t\t\t\tlast.focus();\n\t\t\t\t\ttabEvent.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tif (focusedElement === last && !tabEvent.shiftKey) {\n\t\t\t\t\tfirst.focus();\n\t\t\t\t\ttabEvent.preventDefault();\n\t\t\t\t}\n\t\t\t});\n\n\t\t// inside click\n\t\tif (refocusOnClick) {\n\t\t\tfromEvent(element, 'click')\n\t\t\t\t.pipe(\n\t\t\t\t\ttakeUntil(stopFocusTrap$),\n\t\t\t\t\twithLatestFrom(lastFocusedElement$),\n\t\t\t\t\tmap((arr) => arr[1] as HTMLElement)\n\t\t\t\t)\n\t\t\t\t.subscribe((lastFocusedElement) => lastFocusedElement.focus());\n\t\t}\n\t});\n};\n","import { effect, NgZone, Signal, signal } from '@angular/core';\nimport { Observable, OperatorFunction } from 'rxjs';\n\n/**\n * Converts a value to an integer using parseInt.\n *\n * @param {any} value - The `value` parameter in the `toInteger` function is the input value that needs to be converted to an\n * integer.\n *\n * @returns Is returning the parsed integer value of the input `value`.\n */\nexport function toInteger(value: any): number {\n\treturn parseInt(`${value}`, 10);\n}\n\nexport function toString(value: any): string {\n\treturn value !== undefined && value !== null ? `${value}` : '';\n}\n\nexport function getValueInRange(value: number, max: number, min = 0): number {\n\treturn Math.max(Math.min(value, max), min);\n}\n\nexport function isString(value: any): value is string {\n\treturn typeof value === 'string';\n}\n\nexport function isNumber(value: any): value is number {\n\treturn !isNaN(toInteger(value));\n}\n\nexport function isInteger(value: any): value is number {\n\treturn (\n\t\ttypeof value === 'number' &&\n\t\tisFinite(value) &&\n\t\tMath.floor(value) === value\n\t);\n}\n\nexport function isDefined(value: any): boolean {\n\treturn value !== undefined && value !== null;\n}\n\n/**\n * Determines if two objects or values are equivalent.\n *\n * @param o1 Object or value to compare.\n * @param o2 Object or value to compare.\n * @returns true if arguments are equal.\n */\nexport function equals(o1: any, o2: any): boolean {\n\tif (o1 === o2) {\n\t\treturn true;\n\t}\n\tif (o1 === null || o2 === null) {\n\t\treturn false;\n\t}\n\tif (o1 !== o1 && o2 !== o2) {\n\t\treturn true;\n\t} // NaN === NaN\n\tlet t1 = typeof o1,\n\t\tt2 = typeof o2,\n\t\tlength: number,\n\t\tkey: any,\n\t\tkeySet: any;\n\tif (t1 == t2 && t1 == 'object') {\n\t\tif (Array.isArray(o1)) {\n\t\t\tif (!Array.isArray(o2)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif ((length = o1.length) == o2.length) {\n\t\t\t\tfor (key = 0; key < length; key++) {\n\t\t\t\t\tif (!equals(o1[key], o2[key])) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else {\n\t\t\tif (Array.isArray(o2)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tkeySet = Object.create(null);\n\t\t\tfor (key in o1) {\n\t\t\t\tif (!equals(o1[key], o2[key])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tkeySet[key] = true;\n\t\t\t}\n\t\t\tfor (key in o2) {\n\t\t\t\tif (!(key in keySet) && typeof o2[key] !== 'undefined') {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Checks if a value is a Promise.\n *\n * @param {any} v - The parameter `v` in the `isPromise` function represents any value that is being checked to determine if it is\n * a Promise.\n *\n * @returns A boolean value indicating whether the input `v` is a Promise or not. If `v` has a `then` property, it is considered\n * a Promise and the function returns `true`. Otherwise, it returns `false`.\n */\nexport function isPromise<T>(v: any): v is Promise<T> {\n\treturn v && v.then;\n}\n\n/**\n * Pads a number with a leading zero if it is a valid number.\n *\n * @param {number} value - The `padNumber` function takes a number as input and pads it with a leading zero if it is a valid\n * number. If the input is not a number, it returns an empty string.\n *\n * @returns Takes a number as input and pads it with a leading zero if it is a valid number. If the input is a number, the function\n * returns the input value padded with a leading zero and sliced to keep only the last two characters. If the input is not a number,\n * an empty string is returned.\n */\nexport function padNumber(value: number) {\n\tif (isNumber(value)) {\n\t\treturn `0${value}`.slice(-2);\n\t} else {\n\t\treturn '';\n\t}\n}\n\n/**\n * Escapes special characters in a given text to be used in a regular expression.\n *\n * @param text - The `regExpEscape` function takes a `text` parameter as input. This function is designed to escape special\n * characters in a given text so that it can be safely used within a regular expression pattern.\n *\n * @returns A new string with any special characters in the input `text` escaped with a backslash.\n */\nexport function regExpEscape(text: string): string {\n\treturn text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\nexport function closest(\n\telement: HTMLElement,\n\tselector?: string\n): HTMLElement | null {\n\tif (!selector) {\n\t\treturn null;\n\t}\n\n\t/*\n\t * In certain browsers (e.g. Edge 44.18362.449.0) HTMLDocument does\n\t * not support `Element.prototype.closest`. To emulate the correct behaviour\n\t * we return null when the method is missing.\n\t *\n\t * Note that in evergreen browsers `closest(document.documentElement, 'html')`\n\t * will return the document element whilst in Edge null will be returned. This\n\t * compromise was deemed good enough.\n\t */\n\tif (typeof element.closest === 'undefined') {\n\t\treturn null;\n\t}\n\n\treturn element.closest(selector);\n}\n\n/**\n * Force a browser reflow\n *\n * @param element element where to apply the reflow\n */\nexport function reflow(element: HTMLElement) {\n\treturn (element || document.body).getBoundingClientRect();\n}\n\n/**\n * Creates an observable where all callbacks are executed inside a given zone\n *\n * @param zone\n */\nexport function runInZone<T>(zone: NgZone): OperatorFunction<T, T> {\n\treturn (source) => {\n\t\treturn new Observable((observer) => {\n\t\t\tconst next = (value: T) => zone.run(() => observer.next(value));\n\t\t\tconst error = (e: any) => zone.run(() => observer.error(e));\n\t\t\tconst complete = () => zone.run(() => observer.complete());\n\t\t\treturn source.subscribe({ next, error, complete });\n\t\t});\n\t};\n}\n\nexport function removeAccents(str: string): string {\n\treturn str.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n}\n\n/**\n * Replaces placeholders in a string with corresponding values from a given object.\n *\n * @param expr a string that represents the expression to be interpolated.\n * @param params an optional object that contains the values to be interpolated into the expr string.\n * @returns the interpolated string.\n */\nexport function interpolateString(\n\texpr: string = '',\n\tparams: any = {},\n\ttemplateMatcher: RegExp = /{{\\s?([^{}\\s]*)\\s?}}/g\n) {\n\tif (!params) {\n\t\treturn expr;\n\t}\n\n\treturn expr.replace(templateMatcher, (substring: string, b: string) => {\n\t\tlet r = getValue(params, b);\n\t\treturn isDefined(r) ? r : substring;\n\t});\n}\n\n/**\n * Retrieves the value of a nested property from an object using dot notation.\n *\n * @param target the object from which you want to retrieve a value.\n * @param key a string that represents the property or nested properties of the target object.\n * @returns the value of the specified key in the target object.\n */\nexport function getValue(target: any, key: string): any {\n\tlet keys = typeof key === 'string' ? key.split('.') : [key];\n\tkey = '';\n\tdo {\n\t\tkey += keys.shift();\n\t\tif (\n\t\t\tisDefined(target) &&\n\t\t\tisDefined(target[key]) &&\n\t\t\t(typeof target[key] === 'object' || !keys.length)\n\t\t) {\n\t\t\ttarget = target[key];\n\t\t\tkey = '';\n\t\t} else if (!keys.length) {\n\t\t\ttarget = undefined;\n\t\t} else {\n\t\t\tkey += '.';\n\t\t}\n\t} while (keys.length);\n\n\treturn target;\n}\n\n/**\n * Checks if the given item is a plain object (not an array, null, or primitive).\n *\n * @param item Value to test.\n * @returns true when item is a non-null, non-array object.\n */\nexport function isObject(item: any): boolean {\n\treturn item !== null && typeof item === 'object' && !Array.isArray(item);\n}\n\n/**\n * Recursively deep-merges source into target, producing a new object.\n * Arrays are replaced, not merged. Primitives from source win.\n *\n * @param target Base object.\n * @param source Overrides to apply on top of target.\n * @returns New merged object.\n */\nexport function mergeDeep(target: any, source: any): any {\n\tconst output = Object.assign({}, target);\n\tif (isObject(target) && isObject(source)) {\n\t\tObject.keys(source).forEach((key: any) => {\n\t\t\tif (isObject(source[key])) {\n\t\t\t\tif (!(key in target)) {\n\t\t\t\t\tObject.assign(output, { [key]: source[key] });\n\t\t\t\t} else {\n\t\t\t\t\toutput[key] = mergeDeep(target[key], source[key]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tObject.assign(output, { [key]: source[key] });\n\t\t\t}\n\t\t});\n\t}\n\treturn output;\n}\n\n/**\n * Generates a random alphanumeric string of the requested length.\n * Not cryptographically secure — intended for transient DOM ids and keys.\n *\n * @param length Desired character count.\n * @returns Random alphanumeric string.\n */\nexport function generateUniqueId(length: number): string {\n\tconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\tlet result = '';\n\tfor (let i = 0; i < length; i++) {\n\t\tresult += chars.charAt(Math.floor(Math.random() * chars.length));\n\t}\n\treturn result;\n}\n\n/**\n * Creates a read-only signal that mirrors sourceSignal but only updates\n * after debounceDelay ms have elapsed since the last emission.\n * Cleans up the pending timer via the Angular effect cleanup mechanism.\n *\n * @template T Type of the signal value.\n * @param sourceSignal Signal to debounce.\n * @param debounceDelay Milliseconds to wait, or a signal that provides the delay.\n * @returns Debounced read-only signal.\n */\nexport function debouncedSignal<T>(sourceSignal: Signal<T>, debounceDelay: number | Signal<number> = 0): Signal<T> {\n\tconst debounced = signal(sourceSignal());\n\n\teffect((onCleanup) => {\n\t\tconst delay = typeof debounceDelay === 'number' ? debounceDelay : debounceDelay();\n\t\tconst value = sourceSignal();\n\n\t\tconst timeout = setTimeout(() => {\n\t\t\tdebounced.set(value);\n\t\t}, delay);\n\n\t\tonCleanup(() => clearTimeout(timeout));\n\t});\n\n\treturn debounced;\n}\n\n/**\n * Returns the active element in the given root.\n *\n * If the active element is inside a shadow root, it is searched recursively.\n */\nexport function getActiveElement(\n\troot: Document | ShadowRoot = document\n): Element | null {\n\tconst activeEl = root?.activeElement;\n\n\tif (!activeEl) {\n\t\treturn null;\n\t}\n\n\treturn activeEl.shadowRoot\n\t\t? getActiveElement(activeEl.shadowRoot)\n\t\t: activeEl;\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface HubTranslationConfig {\n\tdictionaries?: Record<string, Record<string, any>>;\n\tlanguage?: string;\n\tfallbackLanguage?: string;\n}\n\nexport const HUB_TRANSLATION_CONFIG = new InjectionToken<HubTranslationConfig>(\n\t'HUB_TRANSLATION_CONFIG'\n);\n\n/** Optional library namespace resolved before legacy unscoped translation keys. */\nexport const HUB_TRANSLATION_PREFIX = new InjectionToken<string>('HUB_TRANSLATION_PREFIX');\n","import { Injectable, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { getValue } from '../util';\nimport { HUB_TRANSLATION_CONFIG, HubTranslationConfig } from './translation.tokens';\n\n@Injectable()\nexport class HubTranslationService {\n\t#config: HubTranslationConfig =\n\t\tinject(HUB_TRANSLATION_CONFIG, { optional: true }) ?? {};\n\n\tdefaultTranslations: Record<string, string | any> =\n\t\tthis.#config.dictionaries ?? {};\n\n\ttranslations!: Record<string, string>;\n\n\tprivate translationSource = new Subject<any>();\n\n\ttranslationObserver = this.translationSource.asObservable();\n\n\tconstructor() {\n\t\tthis.initialize();\n\t}\n\n\tinitialize() {\n\t\tconst language = this.#config.language ?? this.#config.fallbackLanguage ?? 'en';\n\t\tconst fallbackLanguage = this.#config.fallbackLanguage ?? 'en';\n\t\tconst fallbackTranslations =\n\t\t\tthis.defaultTranslations[fallbackLanguage] ?? {};\n\t\tconst selectedTranslations =\n\t\t\tthis.defaultTranslations[language] ?? fallbackTranslations;\n\n\t\tthis.setTranslations(selectedTranslations);\n\t}\n\n\t/**\n\t * Retrieves a value from a translations object based on a given key.\n\t */\n\tgetTranslation(key: string): any {\n\t\treturn getValue(this.translations, key);\n\t}\n\n\t/**\n\t * Merges fallback translations with the provided translations and updates observers.\n\t */\n\tsetTranslations(translations: Record<string, string> | any = {}) {\n\t\tconst fallbackLanguage = this.#config.fallbackLanguage ?? 'en';\n\t\tconst fallbackTranslations =\n\t\t\tthis.defaultTranslations[fallbackLanguage] ?? {};\n\t\tconst nextTranslations = translations ?? {};\n\n\t\tthis.translations = { ...fallbackTranslations, ...nextTranslations };\n\t\tthis.translationSource.next(this.translations);\n\t}\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { HubTranslationService } from './translation.service';\nimport { HUB_TRANSLATION_CONFIG, HubTranslationConfig } from './translation.tokens';\n\n/**\n * Helper function to provide HubTranslationService and its configuration.\n * @param config Optional configuration for translations.\n * @returns EnvironmentProviders\n */\nexport function provideHubTranslation(config: HubTranslationConfig = {}): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\tHubTranslationService,\n\t\t{\n\t\t\tprovide: HUB_TRANSLATION_CONFIG,\n\t\t\tuseValue: config\n\t\t}\n\t]);\n}\n","import {\n\tDestroyRef,\n\tEnvironmentProviders,\n\tinject,\n\tInjectionToken,\n\tmakeEnvironmentProviders,\n\tprovideAppInitializer\n} from '@angular/core';\nimport { HubTranslationService } from './translation.service';\n\n/** Reactive source accepted from an application translation framework. */\nexport interface HubTranslationSource<T = Record<string, unknown>> {\n\t/** Subscribes to translation updates and returns a cleanup handle. */\n\tsubscribe(next: (translations: T) => void): { unsubscribe(): void };\n}\n\n/** A literal override, reactive label source, or a nested group of either. */\nexport type HubTranslationOverrides = {\n\t[key: string]: string | HubTranslationSource<string> | HubTranslationOverrides;\n};\n\n/**\n * Describes a namespaced application dictionary and optional explicit library-label mappings.\n * Overrides win over values emitted by `dictionary` while preserving reactive language changes.\n */\nexport interface HubTranslationAdapterConfig {\n\t/** Complete reactive dictionary supplied by the application i18n framework. */\n\tdictionary: HubTranslationSource;\n\t/** Namespace added around the selected dictionary, such as `HUB`. */\n\tnamespace?: string;\n\t/** Deliberate library-label mappings, for applications whose keys differ from Hub UI's defaults. */\n\toverrides?: HubTranslationOverrides;\n}\n\n/** Factory evaluated in Angular's injection context to connect an external translation service. */\nexport type HubTranslationAdapterFactory = () => HubTranslationSource | HubTranslationAdapterConfig;\n\n/** Internal token holding the application's external dictionary source. */\nexport const HUB_TRANSLATION_SOURCE = new InjectionToken<HubTranslationSource | HubTranslationAdapterConfig>(\n\t'HUB_TRANSLATION_SOURCE'\n);\n\n/** Identifies the extended configuration while retaining the concise source-only provider form. */\nfunction isAdapterConfig(source: HubTranslationSource | HubTranslationAdapterConfig): source is HubTranslationAdapterConfig {\n\treturn 'dictionary' in source;\n}\n\n/** Distinguishes a reactive label stream from a nested group of label mappings. */\nfunction isTranslationValueSource(\n\tvalue: HubTranslationSource<string> | HubTranslationOverrides\n): value is HubTranslationSource<string> {\n\treturn typeof value.subscribe === 'function';\n}\n\n/** Sets a nested value without mutating the dictionary emitted by the application service. */\nfunction setNestedValue(target: Record<string, unknown>, path: string[], value: string): void {\n\tlet current = target;\n\tpath.forEach((key, index) => {\n\t\tif (index === path.length - 1) {\n\t\t\tcurrent[key] = value;\n\t\t\treturn;\n\t\t}\n\t\tconst next = current[key];\n\t\tconst nested =\n\t\t\ttypeof next === 'object' && next !== null && !Array.isArray(next) ? (next as Record<string, unknown>) : {};\n\t\tcurrent[key] = nested;\n\t\tcurrent = nested;\n\t});\n}\n\n/** Deeply overlays explicit label values while retaining unrelated dictionary branches. */\nfunction mergeDictionaries(base: Record<string, unknown>, overrides: Record<string, unknown>): Record<string, unknown> {\n\tconst result = { ...base };\n\tObject.entries(overrides).forEach(([key, value]) => {\n\t\tconst current = result[key];\n\t\tresult[key] =\n\t\t\ttypeof current === 'object' && current !== null && typeof value === 'object' && value !== null\n\t\t\t\t? mergeDictionaries(current as Record<string, unknown>, value as Record<string, unknown>)\n\t\t\t\t: value;\n\t});\n\treturn result;\n}\n\n/**\n * Connects an external reactive translation source to every Hub UI library using HubTranslationService.\n * The provider owns the subscription lifetime. A complete `HUB` dictionary is the simple default;\n * `overrides` lets applications deliberately connect individual labels to arbitrary service streams.\n *\n * @param factory - Creates a reactive dictionary or a namespaced dictionary with explicit overrides.\n * @returns Environment providers for the Hub UI translation bridge.\n */\nexport function provideHubTranslationAdapter(factory: HubTranslationAdapterFactory): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\tHubTranslationService,\n\t\t{ provide: HUB_TRANSLATION_SOURCE, useFactory: factory },\n\t\tprovideAppInitializer(() => {\n\t\t\tconst providedSource = inject(HUB_TRANSLATION_SOURCE);\n\t\t\tconst translations = inject(HubTranslationService);\n\t\t\tconst destroyRef = inject(DestroyRef);\n\t\t\tconst config = isAdapterConfig(providedSource) ? providedSource : { dictionary: providedSource };\n\t\t\tlet dictionary: Record<string, unknown> = {};\n\t\t\tconst overrides: Record<string, unknown> = {};\n\t\t\tconst subscriptions: Array<{ unsubscribe(): void }> = [];\n\n\t\t\tconst publish = () => {\n\t\t\t\tconst merged = mergeDictionaries(dictionary, overrides);\n\t\t\t\ttranslations.setTranslations(config.namespace ? { [config.namespace]: merged } : merged);\n\t\t\t};\n\t\t\tconst connectOverrides = (items: HubTranslationOverrides, path: string[] = []) => {\n\t\t\t\tObject.entries(items).forEach(([key, value]) => {\n\t\t\t\t\tconst currentPath = [...path, key];\n\t\t\t\t\tif (typeof value === 'string') {\n\t\t\t\t\t\tsetNestedValue(overrides, currentPath, value);\n\t\t\t\t\t} else if (isTranslationValueSource(value)) {\n\t\t\t\t\t\tsubscriptions.push(\n\t\t\t\t\t\t\tvalue.subscribe((translated) => {\n\t\t\t\t\t\t\t\tsetNestedValue(overrides, currentPath, translated);\n\t\t\t\t\t\t\t\tpublish();\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconnectOverrides(value, currentPath);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tsubscriptions.push(\n\t\t\t\tconfig.dictionary.subscribe((nextDictionary) => {\n\t\t\t\t\tdictionary = nextDictionary;\n\t\t\t\t\tpublish();\n\t\t\t\t})\n\t\t\t);\n\t\t\tif (config.overrides) connectOverrides(config.overrides);\n\t\t\tpublish();\n\t\t\tdestroyRef.onDestroy(() => subscriptions.forEach((subscription) => subscription.unsubscribe()));\n\t\t})\n\t]);\n}\n","import { ElementRef } from '@angular/core';\nimport type { ConnectionPosition } from './connection-position';\nimport type { HorizontalConnectionPos } from './horizontal-connection-pos';\nimport type { VerticalConnectionPos } from './vertical-connection-pos';\n\n/**\n * Positions an overlay container relative to an origin element.\n * The first configured position that fits within the viewport is applied.\n */\nexport class OverlayPosition {\n\tprivate _origin: ElementRef | HTMLElement | null = null;\n\tprivate _positions: ConnectionPosition[] = [];\n\n\t/**\n\t * Sets the origin element used to position the overlay.\n\t *\n\t * @param origin Element reference or HTMLElement.\n\t * @returns This position instance for chaining.\n\t */\n\tflexibleConnectedTo(origin: ElementRef | HTMLElement): this {\n\t\tthis._origin = origin;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the preferred positions for the overlay.\n\t * The order of the array determines the fallback priority.\n\t *\n\t * @param positions Array of position configurations.\n\t * @returns This position instance for chaining.\n\t */\n\twithPositions(positions: ConnectionPosition[]): this {\n\t\tthis._positions = positions;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Applies the calculated position to the overlay element.\n\t *\n\t * @param overlayElement The overlay container element.\n\t */\n\tapply(overlayElement: HTMLElement): void {\n\t\tif (!this._origin) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst originElement = this._origin instanceof ElementRef ? this._origin.nativeElement : this._origin;\n\t\tconst originRect = originElement.getBoundingClientRect();\n\n\t\t// Try each position until we find one that fits in the viewport\n\t\tfor (const position of this._positions) {\n\t\t\tconst coords = this._calculatePosition(originRect, overlayElement, position);\n\n\t\t\tif (this._fitsInViewport(coords, overlayElement)) {\n\t\t\t\tthis._applyPosition(overlayElement, coords);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// If no position fits perfectly, use the first one\n\t\tif (this._positions.length > 0) {\n\t\t\tconst coords = this._calculatePosition(originRect, overlayElement, this._positions[0]);\n\t\t\tthis._applyPosition(overlayElement, coords);\n\t\t}\n\t}\n\n\t/**\n\t * Calculates the position coordinates based on the configuration.\n\t *\n\t * @param originRect Bounding rectangle of the origin element.\n\t * @param overlayElement The overlay element.\n\t * @param position Position configuration.\n\t * @returns Calculated x and y coordinates.\n\t */\n\tprivate _calculatePosition(originRect: DOMRect, overlayElement: HTMLElement, position: ConnectionPosition): { x: number; y: number } {\n\t\tconst overlayRect = overlayElement.getBoundingClientRect();\n\n\t\t// Calculate origin point\n\t\tlet x = this._getOriginX(originRect, position.originX);\n\t\tlet y = this._getOriginY(originRect, position.originY);\n\n\t\t// Adjust for overlay alignment\n\t\tx -= this._getOverlayX(overlayRect, position.overlayX);\n\t\ty -= this._getOverlayY(overlayRect, position.overlayY);\n\n\t\t// Apply offsets\n\t\tif (position.offsetX) {\n\t\t\tx += position.offsetX;\n\t\t}\n\t\tif (position.offsetY) {\n\t\t\ty += position.offsetY;\n\t\t}\n\n\t\treturn { x, y };\n\t}\n\n\t/**\n\t * Gets the X coordinate for the origin point.\n\t */\n\tprivate _getOriginX(rect: DOMRect, position: HorizontalConnectionPos): number {\n\t\tswitch (position) {\n\t\t\tcase 'start':\n\t\t\t\treturn rect.left;\n\t\t\tcase 'center':\n\t\t\t\treturn rect.left + rect.width / 2;\n\t\t\tcase 'end':\n\t\t\t\treturn rect.right;\n\t\t}\n\t}\n\n\t/**\n\t * Gets the Y coordinate for the origin point.\n\t */\n\tprivate _getOriginY(rect: DOMRect, position: VerticalConnectionPos): number {\n\t\tswitch (position) {\n\t\t\tcase 'top':\n\t\t\t\treturn rect.top;\n\t\t\tcase 'center':\n\t\t\t\treturn rect.top + rect.height / 2;\n\t\t\tcase 'bottom':\n\t\t\t\treturn rect.bottom;\n\t\t}\n\t}\n\n\t/**\n\t * Gets the X offset for the overlay alignment.\n\t */\n\tprivate _getOverlayX(rect: DOMRect, position: HorizontalConnectionPos): number {\n\t\tswitch (position) {\n\t\t\tcase 'start':\n\t\t\t\treturn 0;\n\t\t\tcase 'center':\n\t\t\t\treturn rect.width / 2;\n\t\t\tcase 'end':\n\t\t\t\treturn rect.width;\n\t\t}\n\t}\n\n\t/**\n\t * Gets the Y offset for the overlay alignment.\n\t */\n\tprivate _getOverlayY(rect: DOMRect, position: VerticalConnectionPos): number {\n\t\tswitch (position) {\n\t\t\tcase 'top':\n\t\t\t\treturn 0;\n\t\t\tcase 'center':\n\t\t\t\treturn rect.height / 2;\n\t\t\tcase 'bottom':\n\t\t\t\treturn rect.height;\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the overlay fits within the viewport at the given coordinates.\n\t */\n\tprivate _fitsInViewport(\n\t\tcoords: { x: number; y: number },\n\t\toverlayElement: HTMLElement\n\t): boolean {\n\t\tconst overlayRect = overlayElement.getBoundingClientRect();\n\t\tconst viewportWidth = window.innerWidth;\n\t\tconst viewportHeight = window.innerHeight;\n\n\t\treturn (\n\t\t\tcoords.x >= 0 &&\n\t\t\tcoords.y >= 0 &&\n\t\t\tcoords.x + overlayRect.width <= viewportWidth &&\n\t\t\tcoords.y + overlayRect.height <= viewportHeight\n\t\t);\n\t}\n\n\t/**\n\t * Applies the calculated position to the overlay element.\n\t */\n\tprivate _applyPosition(\n\t\toverlayElement: HTMLElement,\n\t\tcoords: { x: number; y: number }\n\t): void {\n\t\toverlayElement.style.left = `${coords.x}px`;\n\t\toverlayElement.style.top = `${coords.y}px`;\n\t}\n}\n","import {\n\tApplicationRef,\n\tComponentRef,\n\tcreateComponent,\n\tEmbeddedViewRef,\n\tTemplateRef,\n\tType,\n\tViewContainerRef\n} from '@angular/core';\nimport type { OverlayConfig } from './overlay-config';\n\n/**\n * Manages a single overlay instance created by {@link OverlayService}.\n * Creates a container and optional backdrop in `document.body` and attaches\n * either a template or component as the overlay content.\n */\nexport class OverlayRef {\n\tprivate _backdropElement: HTMLElement | null = null;\n\tprivate _containerElement: HTMLElement | null = null;\n\tprivate _contentElement: HTMLElement | null = null;\n\tprivate _viewRef: EmbeddedViewRef<unknown> | null = null;\n\tprivate _componentRef: ComponentRef<unknown> | null = null;\n\tprivate _isAttached = false;\n\tprivate _backdropClickCallback?: () => void;\n\tprivate _backdropClickHandler?: () => void;\n\n\tconstructor(\n\t\tprivate _config: OverlayConfig,\n\t\tprivate _appRef: ApplicationRef\n\t) {}\n\n\t/**\n\t * Attaches content to the overlay.\n\t *\n\t * If the overlay is already attached, it only updates the position strategy\n\t * and returns the existing content element.\n\t *\n\t * @param content Template or component type to attach.\n\t * @param viewContainerRef View container used to create embedded views for templates.\n\t * @returns The attached content element (first root node).\n\t * @throws When a {@link TemplateRef} is provided without a {@link ViewContainerRef}.\n\t */\n\tattach(\n\t\tcontent: TemplateRef<unknown> | Type<unknown>,\n\t\tviewContainerRef?: ViewContainerRef\n\t): HTMLElement {\n\t\t// If already attached, just update position and return existing element\n\t\tif (this._isAttached && this._contentElement) {\n\t\t\tif (this._config.positionStrategy) {\n\t\t\t\tthis._config.positionStrategy.apply(this._containerElement!);\n\t\t\t}\n\t\t\treturn this._contentElement;\n\t\t}\n\n\t\tthis._createContainer();\n\t\tthis._createBackdrop();\n\n\t\tlet contentElement: HTMLElement;\n\n\t\tif (content instanceof TemplateRef) {\n\t\t\tif (!viewContainerRef) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'ViewContainerRef is required when attaching a TemplateRef'\n\t\t\t\t);\n\t\t\t}\n\t\t\t// Only create and attach view if not already created\n\t\t\tif (!this._viewRef) {\n\t\t\t\tthis._viewRef = viewContainerRef.createEmbeddedView(content);\n\t\t\t\tthis._viewRef.detectChanges();\n\t\t\t}\n\t\t\tcontentElement = this._viewRef.rootNodes[0] as HTMLElement;\n\t\t} else {\n\t\t\tif (this._componentRef) {\n\t\t\t\tthis._appRef.detachView(this._componentRef.hostView);\n\t\t\t\tthis._componentRef.destroy();\n\t\t\t}\n\t\t\tthis._componentRef = createComponent(content, {\n\t\t\t\tenvironmentInjector: this._appRef.injector\n\t\t\t});\n\t\t\tthis._appRef.attachView(this._componentRef.hostView);\n\t\t\tcontentElement = (this._componentRef.hostView as EmbeddedViewRef<unknown>)\n\t\t\t\t.rootNodes[0] as HTMLElement;\n\t\t}\n\n\t\tthis._contentElement = contentElement;\n\n\t\t// Only append if not already in container\n\t\tif (!this._containerElement!.contains(contentElement)) {\n\t\t\tthis._containerElement!.appendChild(contentElement);\n\t\t}\n\n\t\tthis._isAttached = true;\n\n\t\t// Apply position strategy\n\t\tif (this._config.positionStrategy) {\n\t\t\tthis._config.positionStrategy.apply(this._containerElement!);\n\t\t}\n\n\t\treturn contentElement;\n\t}\n\n\t/**\n\t * Detaches the content from the overlay container without disposing the overlay.\n\t */\n\tdetach(): void {\n\t\tif (!this._isAttached) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._contentElement && this._containerElement) {\n\t\t\tthis._containerElement.removeChild(this._contentElement);\n\t\t}\n\n\t\tthis._isAttached = false;\n\t}\n\n\t/**\n\t * Disposes the overlay and cleans up all allocated resources.\n\t */\n\tdispose(): void {\n\t\tthis.detach();\n\n\t\t// Destroy view ref if exists\n\t\tif (this._viewRef) {\n\t\t\tthis._viewRef.destroy();\n\t\t\tthis._viewRef = null;\n\t\t}\n\n\t\tif (this._componentRef) {\n\t\t\tthis._appRef.detachView(this._componentRef.hostView);\n\t\t\tthis._componentRef.destroy();\n\t\t\tthis._componentRef = null;\n\t\t}\n\n\t\tif (this._containerElement) {\n\t\t\tdocument.body.removeChild(this._containerElement);\n\t\t\tthis._containerElement = null;\n\t\t}\n\n\t\tif (this._backdropElement) {\n\t\t\t// Remove event listener before removing element from DOM\n\t\t\tif (this._backdropClickHandler) {\n\t\t\t\tthis._backdropElement.removeEventListener(\n\t\t\t\t\t'click',\n\t\t\t\t\tthis._backdropClickHandler\n\t\t\t\t);\n\t\t\t\tthis._backdropClickHandler = undefined;\n\t\t\t}\n\t\t\tdocument.body.removeChild(this._backdropElement);\n\t\t\tthis._backdropElement = null;\n\t\t}\n\n\t\tthis._contentElement = null;\n\t\tthis._backdropClickCallback = undefined;\n\t}\n\n\t/**\n\t * Checks whether content is currently attached to the overlay.\n\t */\n\thasAttached(): boolean {\n\t\treturn this._isAttached;\n\t}\n\n\t/**\n\t * Registers a callback for backdrop clicks.\n\t * The last registered callback replaces any previous one.\n\t *\n\t * @param callback Function to call when the backdrop is clicked.\n\t */\n\tonBackdropClick(callback: () => void): void {\n\t\tthis._backdropClickCallback = callback;\n\t}\n\n\t/**\n\t * Re-applies the configured position strategy to the overlay container.\n\t */\n\tupdatePosition(): void {\n\t\tif (this._config.positionStrategy && this._containerElement) {\n\t\t\tthis._config.positionStrategy.apply(this._containerElement);\n\t\t}\n\t}\n\n\t/**\n\t * Creates the overlay container element and appends it to the document.\n\t */\n\tprivate _createContainer(): void {\n\t\tif (this._containerElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._containerElement = document.createElement('div');\n\t\tthis._containerElement.classList.add('hub-overlay-container');\n\n\t\tif (this._config.panelClass) {\n\t\t\tconst classes = Array.isArray(this._config.panelClass)\n\t\t\t\t? this._config.panelClass\n\t\t\t\t: [this._config.panelClass];\n\t\t\tclasses.forEach((cls) => this._containerElement!.classList.add(cls));\n\t\t}\n\n\t\tif (this._config.width) {\n\t\t\tthis._containerElement.style.width =\n\t\t\t\ttypeof this._config.width === 'number'\n\t\t\t\t\t? `${this._config.width}px`\n\t\t\t\t\t: this._config.width;\n\t\t}\n\n\t\tif (this._config.height) {\n\t\t\tthis._containerElement.style.height =\n\t\t\t\ttypeof this._config.height === 'number'\n\t\t\t\t\t? `${this._config.height}px`\n\t\t\t\t\t: this._config.height;\n\t\t}\n\n\t\t// A content-sized overlay must never clip: with no configured size the\n\t\t// container computes to 0x0 whenever its content is absolutely positioned\n\t\t// (connected-position dropdowns), and the stylesheet's `overflow: auto`\n\t\t// would clip that content into invisibility. Explicitly sized overlays\n\t\t// keep the scrollable box.\n\t\tif (!this._config.width && !this._config.height) {\n\t\t\tthis._containerElement.style.overflow = 'visible';\n\t\t}\n\n\t\tthis._containerElement.style.position = 'fixed';\n\t\t// Resolve the layer through the theme token so a consumer can re-stack the\n\t\t// overlay (e.g. above a modal) without `!important`; the literal fallback\n\t\t// keeps today's behavior when the overlay stylesheet is not imported.\n\t\tthis._containerElement.style.zIndex =\n\t\t\tthis._config.zIndex != null\n\t\t\t\t? String(this._config.zIndex)\n\t\t\t\t: 'var(--hub-overlay-zindex, 1000)';\n\n\t\tdocument.body.appendChild(this._containerElement);\n\t}\n\n\t/**\n\t * Creates the backdrop element if enabled and appends it to the document.\n\t */\n\tprivate _createBackdrop(): void {\n\t\tif (!this._config.hasBackdrop || this._backdropElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._backdropElement = document.createElement('div');\n\t\tthis._backdropElement.classList.add('hub-overlay-backdrop');\n\n\t\tif (this._config.backdropClass) {\n\t\t\tthis._backdropElement.classList.add(this._config.backdropClass);\n\t\t}\n\n\t\tthis._backdropElement.style.position = 'fixed';\n\t\tthis._backdropElement.style.top = '0';\n\t\tthis._backdropElement.style.left = '0';\n\t\tthis._backdropElement.style.width = '100%';\n\t\tthis._backdropElement.style.height = '100%';\n\t\tthis._backdropElement.style.zIndex = 'var(--hub-overlay-backdrop-zindex, 999)';\n\n\t\t// Store reference to the handler for cleanup\n\t\tthis._backdropClickHandler = () => {\n\t\t\tif (this._backdropClickCallback) {\n\t\t\t\tthis._backdropClickCallback();\n\t\t\t}\n\t\t};\n\n\t\tthis._backdropElement.addEventListener('click', this._backdropClickHandler);\n\n\t\tdocument.body.appendChild(this._backdropElement);\n\t}\n}\n","import { ApplicationRef, inject, Injectable } from '@angular/core';\nimport { OverlayPosition } from './overlay-position';\nimport { OverlayRef } from './overlay-ref';\nimport type { OverlayConfig } from './overlay-config';\n\n/**\n * Service for creating and managing overlay instances.\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class OverlayService {\n\tprivate readonly _appRef = inject(ApplicationRef);\n\n\t/**\n\t * Creates a new overlay with the specified configuration.\n\t *\n\t * @param config Configuration options for the overlay.\n\t * @returns A reference to the created overlay.\n\t */\n\tcreate(config: OverlayConfig = {}): OverlayRef {\n\t\treturn new OverlayRef(config, this._appRef);\n\t}\n\n\t/**\n\t * Creates a position strategy builder for connected overlays.\n\t *\n\t * @returns A new {@link OverlayPosition} instance.\n\t */\n\tposition(): OverlayPosition {\n\t\treturn new OverlayPosition();\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'get',\n\tstandalone: true\n})\nexport class GetPipe implements PipeTransform {\n\t/**\n\t * @param value The object to retrieve the property from.\n\t * @param path The dot-separated path string to the property.\n\t * @param defaultValue The value to return if the property is not found.\n\t */\n\ttransform(value: any, path: string, defaultValue?: any): any {\n\t\tif (typeof path !== 'string') {\n\t\t\treturn value;\n\t\t}\n\t\treturn path\n\t\t\t.split('.')\n\t\t\t.reduce(\n\t\t\t\t(a, c) =>\n\t\t\t\t\ta && a[c] !== null && a[c] !== undefined\n\t\t\t\t\t\t? a[c]\n\t\t\t\t\t\t: defaultValue || null,\n\t\t\t\tvalue\n\t\t\t);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'isObject'\n})\nexport class IsObjectPipe implements PipeTransform {\n\n\ttransform(value: any): boolean {\n\t\treturn typeof value === 'object';\n\t}\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isObservable, Observable } from 'rxjs';\n\n@Pipe({\n\tname: 'isObservable',\n\tstandalone: true\n})\nexport class IsObservablePipe<T = any> implements PipeTransform {\n\ttransform(value: T | Observable<T>): boolean {\n\t\treturn isObservable(value);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'isString'\n})\nexport class IsStringPipe implements PipeTransform {\n\n\ttransform(value: any): boolean {\n\t\treturn typeof value === 'string';\n\t}\n\n}\n","import { ChangeDetectorRef, OnDestroy, Pipe, PipeTransform, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { HubTranslationService } from '../i18n/translation.service';\nimport { HUB_TRANSLATION_PREFIX } from '../i18n/translation.tokens';\nimport { equals, interpolateString, isDefined } from '../util';\n\n@Pipe({\n\tname: 'translate',\n\tstandalone: true,\n\tpure: false\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n\tprivate _ref = inject(ChangeDetectorRef);\n\tprivate _translationSvc = inject(HubTranslationService);\n\tprivate readonly prefix = inject(HUB_TRANSLATION_PREFIX, { optional: true });\n\n\tvalue: string = '';\n\tlastKey: string | null = null;\n\tlastParams: any[] = [];\n\n\ttranslationSubscription: Subscription | undefined;\n\n\t/**\n\t * Updates the value of a key by interpolating the translation and marking for change detection.\n\t */\n\tupdateValue(key: string, interpolateParams?: Object): void {\n\t\tconst scopedKey = this.prefix ? `${this.prefix}.${key}` : key;\n\t\tconst translated = this._translationSvc.getTranslation(scopedKey) ?? this._translationSvc.getTranslation(key);\n\t\tconst value = interpolateString(translated, interpolateParams);\n\t\tthis.value = value !== undefined ? value : key;\n\t\tthis.lastKey = key;\n\t\tthis._ref.markForCheck();\n\t}\n\n\t/**\n\t * Transforms a translation key with optional interpolation params.\n\t */\n\ttransform(query: string, ...args: any[]): any {\n\t\tif (!query || !query.length) {\n\t\t\treturn query;\n\t\t}\n\n\t\t// If we ask another time for the same key, return the last value.\n\t\tif (equals(query, this.lastKey) && equals(args, this.lastParams)) {\n\t\t\treturn this.value;\n\t\t}\n\n\t\tlet interpolateParams: Object | undefined = undefined;\n\t\tif (isDefined(args[0]) && args.length) {\n\t\t\tif (typeof args[0] === 'string' && args[0].length) {\n\t\t\t\t// We accept objects written in the template such as {n:1}, {'n':1}, {n:'v'}.\n\t\t\t\t// This converts them to valid JSON.\n\t\t\t\tlet validArgs: string = args[0]\n\t\t\t\t\t.replace(/(\\')?([a-zA-Z0-9_]+)(\\')?(\\s)?:/g, '\"$2\":')\n\t\t\t\t\t.replace(/:(\\s)?(\\')(.*?)(\\')/g, ':\"$3\"');\n\t\t\t\ttry {\n\t\t\t\t\tinterpolateParams = JSON.parse(validArgs);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthrow new SyntaxError(`Wrong parameter in TranslatePipe. Expected a valid Object, received: ${args[0]}`);\n\t\t\t\t}\n\t\t\t} else if (typeof args[0] === 'object' && !Array.isArray(args[0])) {\n\t\t\t\tinterpolateParams = args[0];\n\t\t\t}\n\t\t}\n\n\t\t// Store the query, in case it changes.\n\t\tthis.lastKey = query;\n\n\t\t// Store the params, in case they change.\n\t\tthis.lastParams = args;\n\n\t\t// Set the value.\n\t\tthis.updateValue(query, interpolateParams);\n\n\t\t// Clean any existing subscription.\n\t\tthis._dispose();\n\n\t\tif (!this.translationSubscription) {\n\t\t\tthis.translationSubscription = this._translationSvc.translationObserver.subscribe(() => {\n\t\t\t\tif (this.lastKey) {\n\t\t\t\t\tthis.lastKey = null;\n\t\t\t\t\tthis.updateValue(query, interpolateParams);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn this.value;\n\t}\n\n\t/**\n\t * Clean any existing subscription to change events.\n\t */\n\tprivate _dispose(): void {\n\t\tif (typeof this.translationSubscription !== 'undefined') {\n\t\t\tthis.translationSubscription.unsubscribe();\n\t\t\tthis.translationSubscription = undefined;\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._dispose();\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'ucfirst',\n\tstandalone: true\n})\nexport class UcfirstPipe implements PipeTransform {\n\ttransform(value: string = ''): string {\n\t\treturn value.charAt(0).toUpperCase() + value.slice(1);\n\t}\n}\n","import {\n\tChangeDetectorRef,\n\tinject,\n\tOnDestroy,\n\tPipe,\n\tPipeTransform\n} from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\n\n/**\n * A standalone pipe that unwraps the value of an observable or returns the value directly if it's not an observable.\n *\n * @description\n * The `UnwrapAsyncPipe` is used to unwrap the value emitted by an observable or return the value directly if it's not an observable.\n * It subscribes to the observable and returns the emitted value. If the input is not an observable, it simply returns the value.\n *\n * @usageNotes\n * ```html\n * <div>{{ observableOrValue | unwrapAsync }}</div>\n * ```\n *\n * @publicApi\n */\n@Pipe({\n\tname: 'unwrapAsync',\n\tstandalone: true,\n\tpure: false\n})\nexport class UnwrapAsyncPipe<T = any> implements PipeTransform, OnDestroy {\n\t#cdr = inject(ChangeDetectorRef);\n\n\t/**\n\t * The unwrapped value of the observable or the direct value.\n\t */\n\tvalue: T | null = null;\n\n\t/**\n\t * The subscription to the observable.\n\t */\n\tsubscription: Subscription | null = null;\n\n\t/**\n\t * Performs cleanup tasks when the pipe is destroyed.\n\t */\n\tngOnDestroy(): void {\n\t\tthis.unsubscribe();\n\t}\n\n\t/**\n\t * Transforms the input value.\n\t *\n\t * @param value The input value to transform. It can be an observable or a direct value.\n\t * @returns The unwrapped value of the observable or the direct value.\n\t */\n\ttransform(value: T | Observable<T>): T | null {\n\t\tif (value instanceof Observable) {\n\t\t\tthis.unsubscribe();\n\t\t\tthis.subscription = value.subscribe((result) => {\n\t\t\t\tthis.value = result;\n\t\t\t\tthis.#cdr.markForCheck();\n\t\t\t});\n\t\t} else {\n\t\t\t// Clean up subscription when switching to direct value\n\t\t\tthis.unsubscribe();\n\t\t\tthis.value = value;\n\t\t}\n\t\treturn this.value;\n\t}\n\n\t/**\n\t * Unsubscribes from the current subscription.\n\t */\n\tprivate unsubscribe(): void {\n\t\tif (this.subscription) {\n\t\t\tthis.subscription.unsubscribe();\n\t\t\tthis.subscription = null;\n\t\t}\n\t}\n}\n","export function getTransitionDurationMs(element: HTMLElement) {\n\tconst { transitionDelay, transitionDuration } = window.getComputedStyle(element);\n\tconst transitionDelaySec = parseFloat(transitionDelay);\n\tconst transitionDurationSec = parseFloat(transitionDuration);\n\n\treturn (transitionDelaySec + transitionDurationSec) * 1000;\n}\n","import { NgZone } from '@angular/core';\nimport { EMPTY, fromEvent, Observable, of, race, Subject, timer } from 'rxjs';\nimport { endWith, filter, takeUntil } from 'rxjs/operators';\nimport { runInZone } from '../util';\nimport { getTransitionDurationMs } from './util';\n\nconst transitionTimerDelayMs = 5;\n\nexport type TransitionStartFn<T = any> = (\n\telement: HTMLElement,\n\tanimation: boolean,\n\tcontext: T\n) => TransitionEndFn | void;\nexport type TransitionEndFn = () => void;\n\nexport interface TransitionOptions<T> {\n\tanimation: boolean;\n\trunningTransition: 'continue' | 'stop';\n\tcontext?: T;\n}\n\nexport interface TransitionCtx<T> {\n\ttransition$: Subject<any>;\n\tcomplete: () => void;\n\tcontext: T;\n}\n\nconst noopFn: TransitionEndFn = () => {};\n\nconst runningTransitions = new Map<HTMLElement, TransitionCtx<any>>();\n\nexport const hubRunTransition = <T>(\n\tzone: NgZone,\n\telement: HTMLElement,\n\tstartFn: TransitionStartFn<T>,\n\toptions: TransitionOptions<T>\n): Observable<void> => {\n\t// Getting initial context from options\n\tlet context = options.context || <T>{};\n\n\t// Checking if there are already running transitions on the given element.\n\tconst running = runningTransitions.get(element);\n\tif (running) {\n\t\tswitch (options.runningTransition) {\n\t\t\t// If there is one running and we want for it to 'continue' to run, we have to cancel the new one.\n\t\t\t// We're not emitting any values, but simply completing the observable (EMPTY).\n\t\t\tcase 'continue':\n\t\t\t\treturn EMPTY;\n\t\t\t// If there is one running and we want for it to 'stop', we have to complete the running one.\n\t\t\t// We're simply completing the running one and not emitting any values and merging newly provided context\n\t\t\t// with the one coming from currently running transition.\n\t\t\tcase 'stop':\n\t\t\t\tzone.run(() => running.transition$.complete());\n\t\t\t\tcontext = Object.assign(running.context, context);\n\t\t\t\trunningTransitions.delete(element);\n\t\t}\n\t}\n\n\t// Running the start function\n\tconst endFn = startFn(element, options.animation, context) || noopFn;\n\n\t// If 'prefer-reduced-motion' is enabled, the 'transition' will be set to 'none'.\n\t// If animations are disabled, we have to emit a value and complete the observable\n\t// In this case we have to call the end function, but can finish immediately by emitting a value,\n\t// completing the observable and executing end functions synchronously.\n\tif (\n\t\t!options.animation ||\n\t\twindow.getComputedStyle(element).transitionProperty === 'none'\n\t) {\n\t\tzone.run(() => endFn());\n\t\treturn of(undefined).pipe(runInZone(zone));\n\t}\n\n\t// Starting a new transition\n\tconst transition$ = new Subject<void>();\n\tconst finishTransition$ = new Subject<void>();\n\tconst stop$ = transition$.pipe(endWith(true));\n\trunningTransitions.set(element, {\n\t\ttransition$,\n\t\tcomplete: () => {\n\t\t\tfinishTransition$.next();\n\t\t\tfinishTransition$.complete();\n\t\t},\n\t\tcontext\n\t});\n\n\tconst transitionDurationMs = getTransitionDurationMs(element);\n\n\t// 1. We have to both listen for the 'transitionend' event and have a 'just-in-case' timer,\n\t// because 'transitionend' event might not be fired in some browsers, if the transitioning\n\t// element becomes invisible (ex. when scrolling, making browser tab inactive, etc.). The timer\n\t// guarantees, that we'll release the DOM element and complete 'hubRunTransition'.\n\t// 2. We need to filter transition end events, because they might bubble from shorter transitions\n\t// on inner DOM elements. We're only interested in the transition on the 'element' itself.\n\tzone.runOutsideAngular(() => {\n\t\tconst transitionEnd$ = fromEvent(element, 'transitionend').pipe(\n\t\t\ttakeUntil(stop$),\n\t\t\tfilter(({ target }) => target === element)\n\t\t);\n\t\tconst timer$ = timer(\n\t\t\ttransitionDurationMs + transitionTimerDelayMs\n\t\t).pipe(takeUntil(stop$));\n\n\t\trace(timer$, transitionEnd$, finishTransition$)\n\t\t\t.pipe(takeUntil(stop$))\n\t\t\t.subscribe(() => {\n\t\t\t\trunningTransitions.delete(element);\n\t\t\t\tzone.run(() => {\n\t\t\t\t\tendFn();\n\t\t\t\t\ttransition$.next();\n\t\t\t\t\ttransition$.complete();\n\t\t\t\t});\n\t\t\t});\n\t});\n\n\treturn transition$.asObservable();\n};\n\nexport const hubCompleteTransition = (element: HTMLElement) => {\n\trunningTransitions.get(element)?.complete();\n};\n","import {\n\tApplicationRef,\n\tComponentRef,\n\tinject,\n\tInjector,\n\tNgZone,\n\tTemplateRef,\n\tType,\n\tViewContainerRef,\n\tViewRef\n} from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { mergeMap, take, tap } from 'rxjs/operators';\nimport { DOCUMENT } from '@angular/common';\nimport { hubRunTransition } from './transitions';\n\nexport class ContentRef {\n\tconstructor(\n\t\tpublic nodes: Node[][],\n\t\tpublic viewRef?: ViewRef,\n\t\tpublic componentRef?: ComponentRef<any>\n\t) {}\n}\n\nexport class PopupService<T> {\n\tprivate _windowRef: ComponentRef<T> | null = null;\n\tprivate _contentRef: ContentRef | null = null;\n\n\tprivate _document = inject(DOCUMENT);\n\tprivate _applicationRef = inject(ApplicationRef);\n\tprivate _injector = inject(Injector);\n\tprivate _viewContainerRef = inject(ViewContainerRef);\n\tprivate _ngZone = inject(NgZone);\n\n\tconstructor(private _componentType: Type<T>) {}\n\n\topen(\n\t\tcontent?: string | TemplateRef<any>,\n\t\ttemplateContext?: any,\n\t\tanimation = false\n\t): { windowRef: ComponentRef<T>; transition$: Observable<void> } {\n\t\tif (!this._windowRef) {\n\t\t\tthis._contentRef = this._getContentRef(content, templateContext);\n\t\t\tthis._windowRef = this._viewContainerRef.createComponent(\n\t\t\t\tthis._componentType,\n\t\t\t\t{\n\t\t\t\t\tinjector: this._injector,\n\t\t\t\t\tprojectableNodes: this._contentRef.nodes\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tconst { nativeElement } = this._windowRef.location;\n\t\tconst transition$ = this._ngZone.onStable.pipe(\n\t\t\ttake(1),\n\t\t\tmergeMap(() =>\n\t\t\t\thubRunTransition(\n\t\t\t\t\tthis._ngZone,\n\t\t\t\t\tnativeElement,\n\t\t\t\t\t({ classList }) => classList.add('show'),\n\t\t\t\t\t{\n\t\t\t\t\t\tanimation,\n\t\t\t\t\t\trunningTransition: 'continue'\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\n\t\treturn { windowRef: this._windowRef, transition$ };\n\t}\n\n\tclose(animation = false): Observable<void> {\n\t\tif (!this._windowRef) {\n\t\t\treturn of(undefined);\n\t\t}\n\n\t\treturn hubRunTransition(\n\t\t\tthis._ngZone,\n\t\t\tthis._windowRef.location.nativeElement,\n\t\t\t({ classList }) => classList.remove('show'),\n\t\t\t{ animation, runningTransition: 'stop' }\n\t\t).pipe(\n\t\t\ttap(() => {\n\t\t\t\tthis._windowRef?.destroy();\n\t\t\t\tthis._contentRef?.viewRef?.destroy();\n\t\t\t\tthis._windowRef = null;\n\t\t\t\tthis._contentRef = null;\n\t\t\t})\n\t\t);\n\t}\n\n\tprivate _getContentRef(\n\t\tcontent?: string | TemplateRef<any>,\n\t\ttemplateContext?: any\n\t): ContentRef {\n\t\tif (!content) {\n\t\t\treturn new ContentRef([]);\n\t\t} else if (content instanceof TemplateRef) {\n\t\t\tconst viewRef = content.createEmbeddedView(templateContext);\n\t\t\tthis._applicationRef.attachView(viewRef);\n\t\t\treturn new ContentRef([viewRef.rootNodes], viewRef);\n\t\t} else {\n\t\t\treturn new ContentRef([\n\t\t\t\t[this._document.createTextNode(`${content}`)]\n\t\t\t]);\n\t\t}\n\t}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/** Type for the callback used to revert the scrollbar. */\nexport type ScrollbarReverter = () => void;\n\n/**\n * Utility to handle the scrollbar.\n *\n * It allows to hide the scrollbar and compensate the lack of a vertical scrollbar\n * by adding an equivalent padding on the right of the body, and to revert this change.\n */\n@Injectable({ providedIn: 'root' })\nexport class ScrollBar {\n\tprivate _document = inject(DOCUMENT);\n\n\t/**\n\t * To be called to hide a potential vertical scrollbar:\n\t * - if a scrollbar is there and has a width greater than 0, adds some compensation\n\t * padding to the body to keep the same layout as when the scrollbar is there\n\t * - adds overflow: hidden\n\t *\n\t * @return a callback used to revert the change\n\t */\n\thide(): ScrollbarReverter {\n\t\tconst scrollbarWidth = Math.abs(window.innerWidth - this._document.documentElement.clientWidth);\n\t\tconst body = this._document.body;\n\t\tconst bodyStyle = body.style;\n\t\tconst { overflow, paddingRight } = bodyStyle;\n\t\tif (scrollbarWidth > 0) {\n\t\t\tconst actualPadding = parseFloat(window.getComputedStyle(body).paddingRight);\n\t\t\tbodyStyle.paddingRight = `${actualPadding + scrollbarWidth}px`;\n\t\t}\n\t\tbodyStyle.overflow = 'hidden';\n\t\treturn () => {\n\t\t\tif (scrollbarWidth > 0) {\n\t\t\t\tbodyStyle.paddingRight = paddingRight;\n\t\t\t}\n\t\t\tbodyStyle.overflow = overflow;\n\t\t};\n\t}\n}\n","import { HubTooltipOptions, HubTooltipPlacement } from './tooltip.types';\n\n/**\n * Themeable custom properties forwarded from the host to the tooltip element.\n *\n * The tooltip is appended to `<body>`, so it cannot inherit scoped variables set\n * on an ancestor of the host. We resolve them on the host (which *does* inherit\n * from its scope) and copy any defined value onto the tooltip inline style, so\n * both `:root`-level and scoped theming work.\n */\nconst TOOLTIP_THEME_VARS = [\n\t'--hub-tooltip-bg',\n\t'--hub-tooltip-color',\n\t'--hub-tooltip-opacity',\n\t'--hub-tooltip-padding-x',\n\t'--hub-tooltip-padding-y',\n\t'--hub-tooltip-border-radius',\n\t'--hub-tooltip-font-size',\n\t'--hub-tooltip-font-weight',\n\t'--hub-tooltip-line-height',\n\t'--hub-tooltip-max-width',\n\t'--hub-tooltip-zindex',\n\t'--hub-tooltip-transition-duration',\n\t'--hub-tooltip-shadow',\n\t'--hub-tooltip-font-family'\n];\n\n/**\n * Framework-agnostic tooltip engine.\n *\n * Binds hover/focus listeners to a host element and renders a body-portaled,\n * `--hub-tooltip-*`-themeable label on demand. It owns no Angular dependency, so\n * it can be reused both by the `[tooltip]` directive and by other primitives\n * (e.g. a badge overflow tooltip) that want the exact same visual contract\n * without re-implementing the DOM logic.\n *\n * Styles ship in `styles/tooltip.scss`. Import once in your app:\n * `@use 'ng-hub-ui-utils/styles/tooltip';`.\n */\nexport class HubTooltipController {\n\tprivate tooltipEl: HTMLElement | null = null;\n\tprivate hideTimeout: ReturnType<typeof setTimeout> | null = null;\n\n\tprivate text = '';\n\tprivate placement: HubTooltipPlacement = 'top';\n\tprivate delay = 150;\n\tprivate offset = 8;\n\n\tprivate readonly doc: Document;\n\tprivate readonly view: (Window & typeof globalThis) | null;\n\n\tprivate readonly onShow = (): void => this.show();\n\tprivate readonly onHide = (): void => this.hide();\n\n\t/**\n\t * @param host Element the tooltip is anchored to and whose pointer/focus\n\t * events trigger the tooltip.\n\t * @param options Initial placement, delay and offset.\n\t */\n\tconstructor(private readonly host: HTMLElement, options?: HubTooltipOptions) {\n\t\tthis.doc = host.ownerDocument;\n\t\tthis.view = this.doc.defaultView as (Window & typeof globalThis) | null;\n\t\tthis.setOptions(options);\n\n\t\tthis.host.addEventListener('mouseenter', this.onShow);\n\t\tthis.host.addEventListener('focus', this.onShow);\n\t\tthis.host.addEventListener('mouseleave', this.onHide);\n\t\tthis.host.addEventListener('blur', this.onHide);\n\t\tthis.host.addEventListener('click', this.onHide);\n\t}\n\n\t/**\n\t * Updates the tooltip label. An empty value disables the tooltip and hides any\n\t * currently visible instance.\n\t * @param text New tooltip content.\n\t */\n\tsetText(text: string): void {\n\t\tthis.text = text ?? '';\n\t\tif (!this.text) {\n\t\t\tthis.hide();\n\t\t\treturn;\n\t\t}\n\t\tif (this.tooltipEl) {\n\t\t\tthis.tooltipEl.textContent = this.text;\n\t\t\tthis.position();\n\t\t}\n\t}\n\n\t/**\n\t * Updates placement/delay/offset. Only provided keys are overwritten.\n\t * @param options Partial tooltip options.\n\t */\n\tsetOptions(options?: HubTooltipOptions): void {\n\t\tif (!options) {\n\t\t\treturn;\n\t\t}\n\t\tif (options.placement) {\n\t\t\tthis.placement = options.placement;\n\t\t}\n\t\tif (options.delay != null) {\n\t\t\tthis.delay = options.delay;\n\t\t}\n\t\tif (options.offset != null) {\n\t\t\tthis.offset = options.offset;\n\t\t}\n\t}\n\n\t/** Detaches listeners and removes any live tooltip element. */\n\tdestroy(): void {\n\t\tthis.host.removeEventListener('mouseenter', this.onShow);\n\t\tthis.host.removeEventListener('focus', this.onShow);\n\t\tthis.host.removeEventListener('mouseleave', this.onHide);\n\t\tthis.host.removeEventListener('blur', this.onHide);\n\t\tthis.host.removeEventListener('click', this.onHide);\n\t\tthis.removeElement();\n\t}\n\n\t/** Creates, positions and reveals the tooltip element. */\n\tprivate show(): void {\n\t\tif (this.tooltipEl || !this.text) {\n\t\t\treturn;\n\t\t}\n\t\tthis.clearHideTimeout();\n\n\t\tconst el = this.doc.createElement('span');\n\t\tel.textContent = this.text;\n\t\tel.classList.add('hub-tooltip', `hub-tooltip--${this.placement}`);\n\t\tel.style.transitionDuration = `${this.delay}ms`;\n\t\tthis.forwardThemeVars(el);\n\t\tthis.doc.body.appendChild(el);\n\t\tthis.tooltipEl = el;\n\n\t\tthis.position();\n\t\tel.classList.add('hub-tooltip--show');\n\t}\n\n\t/** Fades the tooltip out and removes it after the fade completes. */\n\tprivate hide(): void {\n\t\tif (!this.tooltipEl) {\n\t\t\treturn;\n\t\t}\n\t\tthis.tooltipEl.classList.remove('hub-tooltip--show');\n\t\tthis.clearHideTimeout();\n\t\tthis.hideTimeout = setTimeout(() => this.removeElement(), this.delay);\n\t}\n\n\t/** Removes the tooltip element immediately. */\n\tprivate removeElement(): void {\n\t\tthis.clearHideTimeout();\n\t\tif (this.tooltipEl) {\n\t\t\tthis.tooltipEl.remove();\n\t\t\tthis.tooltipEl = null;\n\t\t}\n\t}\n\n\t/**\n\t * Copies any `--hub-tooltip-*` value defined on the host (or its scope) onto\n\t * the body-portaled tooltip, so scoped theming applies despite the portal.\n\t */\n\tprivate forwardThemeVars(el: HTMLElement): void {\n\t\tif (!this.view) {\n\t\t\treturn;\n\t\t}\n\t\tconst hostStyles = this.view.getComputedStyle(this.host);\n\t\tfor (const name of TOOLTIP_THEME_VARS) {\n\t\t\tconst value = hostStyles.getPropertyValue(name).trim();\n\t\t\tif (value) {\n\t\t\t\tel.style.setProperty(name, value);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate clearHideTimeout(): void {\n\t\tif (this.hideTimeout !== null) {\n\t\t\tclearTimeout(this.hideTimeout);\n\t\t\tthis.hideTimeout = null;\n\t\t}\n\t}\n\n\t/** Positions the tooltip around the host according to the current placement. */\n\tprivate position(): void {\n\t\tif (!this.tooltipEl) {\n\t\t\treturn;\n\t\t}\n\t\tconst hostRect = this.host.getBoundingClientRect();\n\t\tconst tipRect = this.tooltipEl.getBoundingClientRect();\n\t\tconst scrollY = this.view?.scrollY ?? 0;\n\t\tconst scrollX = this.view?.scrollX ?? 0;\n\t\tconst offset = this.offset;\n\n\t\tlet top = 0;\n\t\tlet left = 0;\n\n\t\tswitch (this.placement) {\n\t\t\tcase 'bottom':\n\t\t\t\ttop = hostRect.bottom + offset;\n\t\t\t\tleft = hostRect.left + (hostRect.width - tipRect.width) / 2;\n\t\t\t\tbreak;\n\t\t\tcase 'left':\n\t\t\t\ttop = hostRect.top + (hostRect.height - tipRect.height) / 2;\n\t\t\t\tleft = hostRect.left - tipRect.width - offset;\n\t\t\t\tbreak;\n\t\t\tcase 'right':\n\t\t\t\ttop = hostRect.top + (hostRect.height - tipRect.height) / 2;\n\t\t\t\tleft = hostRect.right + offset;\n\t\t\t\tbreak;\n\t\t\tcase 'top':\n\t\t\tdefault:\n\t\t\t\ttop = hostRect.top - tipRect.height - offset;\n\t\t\t\tleft = hostRect.left + (hostRect.width - tipRect.width) / 2;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tthis.tooltipEl.style.top = `${top + scrollY}px`;\n\t\tthis.tooltipEl.style.left = `${left + scrollX}px`;\n\t}\n}\n","import { HubTooltipController } from './tooltip-controller';\nimport { HubTooltipAdapter, HubTooltipHandle, HubTooltipOptions } from './tooltip.types';\n\n/**\n * Ready-made {@link HubTooltipAdapter} backed by {@link HubTooltipController}.\n *\n * Wire it into any ng-hub-ui primitive that exposes an optional tooltip token,\n * e.g. `provideHubBadgeTooltip(hubTooltipAdapter)`.\n */\nexport const hubTooltipAdapter: HubTooltipAdapter = {\n\tattach(host: HTMLElement, text: string, options?: HubTooltipOptions): HubTooltipHandle {\n\t\tconst controller = new HubTooltipController(host, options);\n\t\tcontroller.setText(text);\n\n\t\treturn {\n\t\t\tupdate: (next: string) => controller.setText(next),\n\t\t\tdestroy: () => controller.destroy()\n\t\t};\n\t}\n};\n","import { InjectionToken } from '@angular/core';\nimport { hubTooltipAdapter } from './tooltip-adapter';\nimport { HubTooltipAdapter } from './tooltip.types';\n\n/**\n * Injection token resolving the tooltip adapter used by `[hubOverflowTooltip]`\n * (and any other utils consumer that wants a swappable tooltip).\n *\n * It defaults — via a root factory — to the built-in {@link hubTooltipAdapter},\n * so the hub-ui tooltip works out of the box with no wiring. Override it with\n * {@link provideHubTooltip} to plug in **any** tooltip implementation (a custom\n * one, a Material tooltip wrapper, etc.) app-wide or per subtree, keeping the\n * tooltip **agnostic** even for libraries that already depend on utils.\n */\nexport const HUB_TOOLTIP_ADAPTER = new InjectionToken<HubTooltipAdapter>('HUB_TOOLTIP_ADAPTER', {\n\tprovidedIn: 'root',\n\tfactory: () => hubTooltipAdapter\n});\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { HUB_TOOLTIP_ADAPTER } from './tooltip.token';\nimport { HubTooltipAdapter } from './tooltip.types';\n\n/**\n * Overrides the tooltip adapter used by `[hubOverflowTooltip]` (and other\n * token-driven tooltip consumers), so the hub-ui tooltip can be swapped for any\n * implementation without touching the components that show it.\n *\n * ```ts\n * // app.config.ts — use a custom tooltip everywhere instead of the built-in one.\n * providers: [provideHubTooltip(myTooltipAdapter)];\n * ```\n *\n * Omit it and the built-in `hubTooltipAdapter` is used by default.\n *\n * @param adapter Tooltip adapter implementation.\n * @returns Environment providers to add to the application config (or a route).\n */\nexport function provideHubTooltip(adapter: HubTooltipAdapter): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: HUB_TOOLTIP_ADAPTER,\n\t\t\tuseValue: adapter\n\t\t}\n\t]);\n}\n","import { Directive, ElementRef, effect, inject, input, OnDestroy } from '@angular/core';\nimport { HubTooltipController } from './tooltip-controller';\nimport { HubTooltipPlacement } from './tooltip.types';\n\n/**\n * Lightweight tooltip directive.\n *\n * @deprecated Use {@link HubTooltipDirective} (`[hubTooltip]`) instead. The bare\n * attribute and the bare input names `placement`, `delay` and `offset` are not this\n * directive's to hold: Angular feeds one attribute to every directive on the element\n * that declares an input of that name, so `[hubDropdown] placement` fails to compile\n * beside a tooltip, and `[tooltip]` on a `<hub-badge>` — which owns an input of that\n * name — renders two. Kept working, unchanged, until the next major.\n *\n * Apply `[tooltip]` to any element to show a positioned label on hover/focus.\n * The tooltip element is appended to `<body>` so it is never clipped by an\n * overflow container, and every visual aspect is themeable through\n * `--hub-tooltip-*` CSS variables.\n *\n * All DOM work is delegated to {@link HubTooltipController}, so the directive and\n * any imperative consumer (e.g. a badge overflow tooltip) share the exact same\n * behaviour and styling.\n *\n * Styles ship in `styles/tooltip.scss` (mirroring `styles/overlay.scss`). Import\n * it once in your app: `@use 'ng-hub-ui-utils/styles/tooltip';`.\n */\n@Directive({\n\tselector: '[tooltip]'\n})\nexport class TooltipDirective implements OnDestroy {\n\t/** Tooltip text content. */\n\treadonly tooltipTitle = input.required<string>({ alias: 'tooltip' });\n\n\t/** Placement of the tooltip relative to the host. */\n\treadonly placement = input<HubTooltipPlacement>('top');\n\n\t/** Fade duration in milliseconds, also used as the removal delay on hide. */\n\treadonly delay = input<number>(150);\n\n\t/** Gap in pixels between the host and the tooltip. */\n\treadonly offset = input<number>(8);\n\n\tprivate readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprivate readonly controller = new HubTooltipController(this.host.nativeElement);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis.controller.setOptions({\n\t\t\t\tplacement: this.placement(),\n\t\t\t\tdelay: this.delay(),\n\t\t\t\toffset: this.offset()\n\t\t\t});\n\t\t\tthis.controller.setText(this.tooltipTitle());\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.controller.destroy();\n\t}\n}\n","import { Directive, ElementRef, effect, inject, input, OnDestroy } from '@angular/core';\nimport { HubTooltipController } from './tooltip-controller';\nimport { HubTooltipPlacement } from './tooltip.types';\n\n/**\n * Tooltip directive, named the way the rest of the family names itself.\n *\n * Apply `[hubTooltip]` to any element to show a positioned label on hover/focus.\n * The tooltip element is appended to `<body>` so it is never clipped by an overflow\n * container, and every visual aspect is themeable through `--hub-tooltip-*` CSS\n * variables.\n *\n * ## Why this exists beside {@link TooltipDirective}\n *\n * The older directive claims the bare attribute `[tooltip]` and the bare input names\n * `placement`, `delay` and `offset`. Angular feeds one attribute to **every** directive\n * on the element that declares an input of that name, so those bare names are not this\n * directive's to hold:\n *\n * - `[hubDropdown]` declares its own `placement`, typed over eight values where a\n * tooltip understands four. A menu trigger that also wanted a tooltip did not merely\n * misbehave — it failed to compile, and there was no way to give each directive its\n * own placement, because there is only one attribute.\n * - `<hub-badge>` declares a `tooltip` input of its own. Writing `[tooltip]` on one fed\n * the input *and* attached the directive, so the badge showed two.\n *\n * Prefixing settles both: an attribute named for its owner cannot be claimed by anyone\n * else. `[hubOverflowTooltip]` next door was already named this way.\n *\n * Styles ship in `styles/tooltip.scss`. Import it once in your app:\n * `@use 'ng-hub-ui-utils/styles/tooltip';`.\n *\n * @example\n * ```html\n * <button hubDropdown placement=\"bottom-end\" [hubTooltip]=\"'ACTIONS.MORE' | transloco\">…</button>\n * <span [hubTooltip]=\"label\" hubTooltipPlacement=\"right\" [hubTooltipDelay]=\"0\">…</span>\n * ```\n */\n@Directive({\n\tselector: '[hubTooltip]'\n})\nexport class HubTooltipDirective implements OnDestroy {\n\t/** Tooltip text content. An empty string leaves the host without a tooltip. */\n\treadonly text = input.required<string>({ alias: 'hubTooltip' });\n\n\t/** Placement of the tooltip relative to the host. */\n\treadonly placement = input<HubTooltipPlacement>('top', { alias: 'hubTooltipPlacement' });\n\n\t/** Fade duration in milliseconds, also used as the removal delay on hide. */\n\treadonly delay = input<number>(150, { alias: 'hubTooltipDelay' });\n\n\t/** Gap in pixels between the host and the tooltip. */\n\treadonly offset = input<number>(8, { alias: 'hubTooltipOffset' });\n\n\tprivate readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprivate readonly controller = new HubTooltipController(this.host.nativeElement);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis.controller.setOptions({\n\t\t\t\tplacement: this.placement(),\n\t\t\t\tdelay: this.delay(),\n\t\t\t\toffset: this.offset()\n\t\t\t});\n\t\t\tthis.controller.setText(this.text());\n\t\t});\n\t}\n\n\t/** @inheritDoc */\n\tngOnDestroy(): void {\n\t\tthis.controller.destroy();\n\t}\n}\n","import { afterNextRender, Directive, effect, ElementRef, inject, input, OnDestroy, signal } from '@angular/core';\nimport { HUB_TOOLTIP_ADAPTER } from './tooltip.token';\nimport { HubTooltipHandle, HubTooltipPlacement } from './tooltip.types';\n\n/**\n * Shows a tooltip with the given text **only while the host element is truncated**\n * (its content is wider than its box).\n *\n * Unlike `[tooltip]`, which always shows on hover, this directive is meant for\n * ellipsised labels: the tooltip appears solely when the text doesn't fit, so it\n * never duplicates already-visible content. Truncation is tracked live with a\n * `ResizeObserver` (host/container resizes) and a `MutationObserver` (text\n * changes).\n *\n * The tooltip implementation is **agnostic**: it resolves through the injectable\n * {@link HUB_TOOLTIP_ADAPTER} token, which defaults to the built-in hub-ui\n * tooltip. Swap it app-wide (or per subtree) with `provideHubTooltip(...)`.\n *\n * Requires the tooltip styles once in your app:\n * `@use 'ng-hub-ui-utils/styles/tooltip';`.\n *\n * @example\n * ```html\n * <span class=\"label\" [hubOverflowTooltip]=\"item.label\">{{ item.label }}</span>\n * ```\n */\n@Directive({\n\tselector: '[hubOverflowTooltip]'\n})\nexport class HubOverflowTooltipDirective implements OnDestroy {\n\t/** Tooltip text; shown only while the host overflows. */\n\treadonly text = input<string>('', { alias: 'hubOverflowTooltip' });\n\n\t/** Placement of the tooltip relative to the host. */\n\treadonly placement = input<HubTooltipPlacement>('top');\n\n\tprivate readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprivate readonly adapter = inject(HUB_TOOLTIP_ADAPTER);\n\n\tprivate handle: HubTooltipHandle | null = null;\n\tprivate resizeObserver: ResizeObserver | null = null;\n\tprivate mutationObserver: MutationObserver | null = null;\n\n\tprivate readonly overflowing = signal(false);\n\tprivate readonly ready = signal(false);\n\n\tconstructor() {\n\t\tafterNextRender(() => this.init());\n\n\t\teffect(() => {\n\t\t\tif (!this.ready() || !this.handle) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.handle.update(this.overflowing() ? this.text() : '');\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.resizeObserver?.disconnect();\n\t\tthis.mutationObserver?.disconnect();\n\t\tthis.handle?.destroy();\n\t\tthis.handle = null;\n\t}\n\n\t/** Wires the tooltip handle and the browser-only truncation observers. */\n\tprivate init(): void {\n\t\tconst el = this.host.nativeElement;\n\t\t// Attach with no text; the effect feeds the label only while truncated.\n\t\tthis.handle = this.adapter.attach(el, '', { placement: this.placement() });\n\t\tthis.measure(el);\n\n\t\tif (typeof ResizeObserver !== 'undefined') {\n\t\t\tthis.resizeObserver = new ResizeObserver(() => this.measure(el));\n\t\t\tthis.resizeObserver.observe(el);\n\t\t}\n\n\t\tif (typeof MutationObserver !== 'undefined') {\n\t\t\tthis.mutationObserver = new MutationObserver(() => this.measure(el));\n\t\t\tthis.mutationObserver.observe(el, { childList: true, characterData: true, subtree: true });\n\t\t}\n\n\t\tthis.ready.set(true);\n\t}\n\n\t/** Updates the truncation state from the host's layout. */\n\tprivate measure(el: HTMLElement): void {\n\t\tthis.overflowing.set(el.scrollWidth > el.clientWidth + 1);\n\t}\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './lib/accent';\nexport * from './lib/drag-drop';\nexport * from './lib/focus-trap';\nexport * from './lib/i18n/translation.provider';\nexport * from './lib/i18n/translation-adapter';\nexport * from './lib/i18n/translation.service';\nexport * from './lib/i18n/translation.tokens';\nexport * from './lib/overlay';\nexport { GetPipe } from './lib/pipes/get.pipe';\nexport { IsObjectPipe } from './lib/pipes/is-object.pipe';\nexport { IsObservablePipe } from './lib/pipes/is-observable.pipe';\nexport { IsStringPipe } from './lib/pipes/is-string.pipe';\nexport * from './lib/pipes/translate.pipe';\nexport { UcfirstPipe } from './lib/pipes/ucfirst.pipe';\nexport { UnwrapAsyncPipe } from './lib/pipes/unwrap-async.pipe';\nexport * from './lib/popup';\nexport * from './lib/scrollbar';\nexport * from './lib/tooltip/tooltip.types';\nexport * from './lib/tooltip/tooltip-controller';\nexport * from './lib/tooltip/tooltip-adapter';\nexport * from './lib/tooltip/tooltip.token';\nexport * from './lib/tooltip/tooltip.provider';\nexport * from './lib/tooltip/tooltip.directive';\nexport * from './lib/tooltip/hub-tooltip.directive';\nexport * from './lib/tooltip/overflow-tooltip.directive';\nexport * from './lib/transitions';\nexport * from './lib/util';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-hub-ui-utils",
3
- "version": "22.8.0",
3
+ "version": "22.9.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=18.0.0",
6
6
  "@angular/core": ">=18.0.0"
@@ -969,6 +969,13 @@ declare function provideHubTooltip(adapter: HubTooltipAdapter): EnvironmentProvi
969
969
  /**
970
970
  * Lightweight tooltip directive.
971
971
  *
972
+ * @deprecated Use {@link HubTooltipDirective} (`[hubTooltip]`) instead. The bare
973
+ * attribute and the bare input names `placement`, `delay` and `offset` are not this
974
+ * directive's to hold: Angular feeds one attribute to every directive on the element
975
+ * that declares an input of that name, so `[hubDropdown] placement` fails to compile
976
+ * beside a tooltip, and `[tooltip]` on a `<hub-badge>` — which owns an input of that
977
+ * name — renders two. Kept working, unchanged, until the next major.
978
+ *
972
979
  * Apply `[tooltip]` to any element to show a positioned label on hover/focus.
973
980
  * The tooltip element is appended to `<body>` so it is never clipped by an
974
981
  * overflow container, and every visual aspect is themeable through
@@ -998,6 +1005,58 @@ declare class TooltipDirective implements OnDestroy {
998
1005
  static ɵdir: i0.ɵɵDirectiveDeclaration<TooltipDirective, "[tooltip]", never, { "tooltipTitle": { "alias": "tooltip"; "required": true; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "delay": { "alias": "delay"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
999
1006
  }
1000
1007
 
1008
+ /**
1009
+ * Tooltip directive, named the way the rest of the family names itself.
1010
+ *
1011
+ * Apply `[hubTooltip]` to any element to show a positioned label on hover/focus.
1012
+ * The tooltip element is appended to `<body>` so it is never clipped by an overflow
1013
+ * container, and every visual aspect is themeable through `--hub-tooltip-*` CSS
1014
+ * variables.
1015
+ *
1016
+ * ## Why this exists beside {@link TooltipDirective}
1017
+ *
1018
+ * The older directive claims the bare attribute `[tooltip]` and the bare input names
1019
+ * `placement`, `delay` and `offset`. Angular feeds one attribute to **every** directive
1020
+ * on the element that declares an input of that name, so those bare names are not this
1021
+ * directive's to hold:
1022
+ *
1023
+ * - `[hubDropdown]` declares its own `placement`, typed over eight values where a
1024
+ * tooltip understands four. A menu trigger that also wanted a tooltip did not merely
1025
+ * misbehave — it failed to compile, and there was no way to give each directive its
1026
+ * own placement, because there is only one attribute.
1027
+ * - `<hub-badge>` declares a `tooltip` input of its own. Writing `[tooltip]` on one fed
1028
+ * the input *and* attached the directive, so the badge showed two.
1029
+ *
1030
+ * Prefixing settles both: an attribute named for its owner cannot be claimed by anyone
1031
+ * else. `[hubOverflowTooltip]` next door was already named this way.
1032
+ *
1033
+ * Styles ship in `styles/tooltip.scss`. Import it once in your app:
1034
+ * `@use 'ng-hub-ui-utils/styles/tooltip';`.
1035
+ *
1036
+ * @example
1037
+ * ```html
1038
+ * <button hubDropdown placement="bottom-end" [hubTooltip]="'ACTIONS.MORE' | transloco">…</button>
1039
+ * <span [hubTooltip]="label" hubTooltipPlacement="right" [hubTooltipDelay]="0">…</span>
1040
+ * ```
1041
+ */
1042
+ declare class HubTooltipDirective implements OnDestroy {
1043
+ /** Tooltip text content. An empty string leaves the host without a tooltip. */
1044
+ readonly text: i0.InputSignal<string>;
1045
+ /** Placement of the tooltip relative to the host. */
1046
+ readonly placement: i0.InputSignal<HubTooltipPlacement>;
1047
+ /** Fade duration in milliseconds, also used as the removal delay on hide. */
1048
+ readonly delay: i0.InputSignal<number>;
1049
+ /** Gap in pixels between the host and the tooltip. */
1050
+ readonly offset: i0.InputSignal<number>;
1051
+ private readonly host;
1052
+ private readonly controller;
1053
+ constructor();
1054
+ /** @inheritDoc */
1055
+ ngOnDestroy(): void;
1056
+ static ɵfac: i0.ɵɵFactoryDeclaration<HubTooltipDirective, never>;
1057
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HubTooltipDirective, "[hubTooltip]", never, { "text": { "alias": "hubTooltip"; "required": true; "isSignal": true; }; "placement": { "alias": "hubTooltipPlacement"; "required": false; "isSignal": true; }; "delay": { "alias": "hubTooltipDelay"; "required": false; "isSignal": true; }; "offset": { "alias": "hubTooltipOffset"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1058
+ }
1059
+
1001
1060
  /**
1002
1061
  * Shows a tooltip with the given text **only while the host element is truncated**
1003
1062
  * (its content is wider than its box).
@@ -1182,5 +1241,5 @@ declare function debouncedSignal<T>(sourceSignal: Signal<T>, debounceDelay?: num
1182
1241
  */
1183
1242
  declare function getActiveElement(root?: Document | ShadowRoot): Element | null;
1184
1243
 
1185
- export { ContentRef, FOCUSABLE_ELEMENTS_SELECTOR, GetPipe, HUB_TOOLTIP_ADAPTER, HUB_TRANSLATION_CONFIG, HUB_TRANSLATION_PREFIX, HUB_TRANSLATION_SOURCE, HubDragDropService, HubOverflowTooltipDirective, HubTooltipController, HubTranslationService, IsObjectPipe, IsObservablePipe, IsStringPipe, OverlayPosition, OverlayRef, OverlayService, PopupService, ScrollBar, TooltipDirective, TranslatePipe, UcfirstPipe, UnwrapAsyncPipe, clamp, closest, computeTargetIndex, containsNode, copyArrayItem, createNativeDragImage, createPointerDragSession, debouncedSignal, equals, generateUniqueId, getActiveElement, getFocusableBoundaryElements, getValue, getValueInRange, hubCompleteTransition, hubFocusTrap, hubRunTransition, hubTooltipAdapter, interpolateString, isDefined, isInteger, isNumber, isObject, isPromise, isString, mergeDeep, moveItemInArray, padNumber, provideHubTooltip, provideHubTranslation, provideHubTranslationAdapter, reflow, regExpEscape, removeAccents, resolveDropPosition, resolveHubAccent, runInZone, toAbsoluteIndex, toInteger, toString, transferArrayItem };
1244
+ export { ContentRef, FOCUSABLE_ELEMENTS_SELECTOR, GetPipe, HUB_TOOLTIP_ADAPTER, HUB_TRANSLATION_CONFIG, HUB_TRANSLATION_PREFIX, HUB_TRANSLATION_SOURCE, HubDragDropService, HubOverflowTooltipDirective, HubTooltipController, HubTooltipDirective, HubTranslationService, IsObjectPipe, IsObservablePipe, IsStringPipe, OverlayPosition, OverlayRef, OverlayService, PopupService, ScrollBar, TooltipDirective, TranslatePipe, UcfirstPipe, UnwrapAsyncPipe, clamp, closest, computeTargetIndex, containsNode, copyArrayItem, createNativeDragImage, createPointerDragSession, debouncedSignal, equals, generateUniqueId, getActiveElement, getFocusableBoundaryElements, getValue, getValueInRange, hubCompleteTransition, hubFocusTrap, hubRunTransition, hubTooltipAdapter, interpolateString, isDefined, isInteger, isNumber, isObject, isPromise, isString, mergeDeep, moveItemInArray, padNumber, provideHubTooltip, provideHubTranslation, provideHubTranslationAdapter, reflow, regExpEscape, removeAccents, resolveDropPosition, resolveHubAccent, runInZone, toAbsoluteIndex, toInteger, toString, transferArrayItem };
1186
1245
  export type { ActiveDrag, ConnectionPosition, DragAxis, DragContainerRef, DragImageResult, DragPointerMode, DragRegistration, DragTarget, DropPosition, DropRect, HorizontalConnectionPos, HubTooltipAdapter, HubTooltipHandle, HubTooltipOptions, HubTooltipPlacement, HubTranslationAdapterConfig, HubTranslationAdapterFactory, HubTranslationConfig, HubTranslationOverrides, HubTranslationSource, OverlayConfig, PointerDragSession, PointerDragSessionConfig, ScrollbarReverter, TransitionCtx, TransitionEndFn, TransitionOptions, TransitionStartFn, VerticalConnectionPos };