ng-hub-ui-utils 22.7.0 → 22.7.2

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.
package/README.md CHANGED
@@ -35,11 +35,11 @@
35
35
 
36
36
  ## 📚 Documentation and Live Examples
37
37
 
38
- This package is part of [Hub UI](https://hubui.dev/), a collection of Angular component libraries for standalone apps.
38
+ This package is part of [Hub UI](https://hubui.dev/en/), a collection of Angular component libraries for standalone apps.
39
39
 
40
- - Docs: https://hubui.dev/utils/overview/
41
- - Live examples: https://hubui.dev/utils/examples/
42
- - Hub UI: https://hubui.dev/
40
+ - Docs: https://hubui.dev/en/utils/overview/
41
+ - Live examples: https://hubui.dev/en/utils/examples/
42
+ - Hub UI: https://hubui.dev/en/
43
43
 
44
44
  ## 🧩 Library Family `ng-hub-ui`
45
45
 
@@ -122,6 +122,12 @@ export class ExampleComponent {
122
122
  }
123
123
  ```
124
124
 
125
+ **Stacking (z-index).** `OverlayRef` resolves its inline z-index through the design-system tokens — `var(--hub-overlay-zindex, 1000)` for the container and `var(--hub-overlay-backdrop-zindex, 999)` for the backdrop — so re-stacking an overlay (e.g. a dropdown above a modal) is a plain CSS override, no `!important` needed. For a single instance, pass an explicit layer instead:
126
+
127
+ ```typescript
128
+ this.overlayService.create({ zIndex: 1100 }); // OverlayConfig.zIndex: number | string — takes precedence over the token
129
+ ```
130
+
125
131
  ### 🎯 Popup Service (Base Class)
126
132
 
127
133
  Base service for creating custom popup implementations.
@@ -555,10 +555,10 @@ class HubDragDropService {
555
555
  }
556
556
  return this.#registrations.get(ownerId)?.resolveTarget?.(element, clientX, clientY) ?? null;
557
557
  }
558
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: HubDragDropService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
559
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: HubDragDropService, providedIn: 'root' });
558
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HubDragDropService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
559
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HubDragDropService, providedIn: 'root' });
560
560
  }
561
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: HubDragDropService, decorators: [{
561
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HubDragDropService, decorators: [{
562
562
  type: Injectable,
563
563
  args: [{ providedIn: 'root' }]
564
564
  }] });
@@ -964,10 +964,10 @@ class HubTranslationService {
964
964
  this.translations = { ...fallbackTranslations, ...nextTranslations };
965
965
  this.translationSource.next(this.translations);
966
966
  }
967
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: HubTranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
968
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: HubTranslationService });
967
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HubTranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
968
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HubTranslationService });
969
969
  }
970
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: HubTranslationService, decorators: [{
970
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HubTranslationService, decorators: [{
971
971
  type: Injectable
972
972
  }], ctorParameters: () => [] });
973
973
 
@@ -1308,7 +1308,13 @@ class OverlayRef {
1308
1308
  : this._config.height;
1309
1309
  }
1310
1310
  this._containerElement.style.position = 'fixed';
1311
- this._containerElement.style.zIndex = '1000';
1311
+ // Resolve the layer through the theme token so a consumer can re-stack the
1312
+ // overlay (e.g. above a modal) without `!important`; the literal fallback
1313
+ // keeps today's behavior when the overlay stylesheet is not imported.
1314
+ this._containerElement.style.zIndex =
1315
+ this._config.zIndex != null
1316
+ ? String(this._config.zIndex)
1317
+ : 'var(--hub-overlay-zindex, 1000)';
1312
1318
  document.body.appendChild(this._containerElement);
1313
1319
  }
1314
1320
  /**
@@ -1328,7 +1334,7 @@ class OverlayRef {
1328
1334
  this._backdropElement.style.left = '0';
1329
1335
  this._backdropElement.style.width = '100%';
1330
1336
  this._backdropElement.style.height = '100%';
1331
- this._backdropElement.style.zIndex = '999';
1337
+ this._backdropElement.style.zIndex = 'var(--hub-overlay-backdrop-zindex, 999)';
1332
1338
  // Store reference to the handler for cleanup
1333
1339
  this._backdropClickHandler = () => {
1334
1340
  if (this._backdropClickCallback) {
@@ -1362,10 +1368,10 @@ class OverlayService {
1362
1368
  position() {
1363
1369
  return new OverlayPosition();
1364
1370
  }
1365
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: OverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1366
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: OverlayService, providedIn: 'root' });
1371
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: OverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1372
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: OverlayService, providedIn: 'root' });
1367
1373
  }
1368
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: OverlayService, decorators: [{
1374
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: OverlayService, decorators: [{
1369
1375
  type: Injectable,
1370
1376
  args: [{
1371
1377
  providedIn: 'root'
@@ -1388,10 +1394,10 @@ class GetPipe {
1388
1394
  ? a[c]
1389
1395
  : defaultValue || null, value);
1390
1396
  }
1391
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: GetPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1392
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.1", ngImport: i0, type: GetPipe, isStandalone: true, name: "get" });
1397
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GetPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1398
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: GetPipe, isStandalone: true, name: "get" });
1393
1399
  }
1394
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: GetPipe, decorators: [{
1400
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GetPipe, decorators: [{
1395
1401
  type: Pipe,
1396
1402
  args: [{
1397
1403
  name: 'get',
@@ -1403,10 +1409,10 @@ class IsObjectPipe {
1403
1409
  transform(value) {
1404
1410
  return typeof value === 'object';
1405
1411
  }
1406
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: IsObjectPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1407
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.1", ngImport: i0, type: IsObjectPipe, isStandalone: true, name: "isObject" });
1412
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: IsObjectPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1413
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: IsObjectPipe, isStandalone: true, name: "isObject" });
1408
1414
  }
1409
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: IsObjectPipe, decorators: [{
1415
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: IsObjectPipe, decorators: [{
1410
1416
  type: Pipe,
1411
1417
  args: [{
1412
1418
  name: 'isObject'
@@ -1417,10 +1423,10 @@ class IsObservablePipe {
1417
1423
  transform(value) {
1418
1424
  return isObservable(value);
1419
1425
  }
1420
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: IsObservablePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1421
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.1", ngImport: i0, type: IsObservablePipe, isStandalone: true, name: "isObservable" });
1426
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: IsObservablePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1427
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: IsObservablePipe, isStandalone: true, name: "isObservable" });
1422
1428
  }
1423
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: IsObservablePipe, decorators: [{
1429
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: IsObservablePipe, decorators: [{
1424
1430
  type: Pipe,
1425
1431
  args: [{
1426
1432
  name: 'isObservable',
@@ -1432,10 +1438,10 @@ class IsStringPipe {
1432
1438
  transform(value) {
1433
1439
  return typeof value === 'string';
1434
1440
  }
1435
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: IsStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1436
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.1", ngImport: i0, type: IsStringPipe, isStandalone: true, name: "isString" });
1441
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: IsStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1442
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: IsStringPipe, isStandalone: true, name: "isString" });
1437
1443
  }
1438
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: IsStringPipe, decorators: [{
1444
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: IsStringPipe, decorators: [{
1439
1445
  type: Pipe,
1440
1446
  args: [{
1441
1447
  name: 'isString'
@@ -1518,10 +1524,10 @@ class TranslatePipe {
1518
1524
  ngOnDestroy() {
1519
1525
  this._dispose();
1520
1526
  }
1521
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: TranslatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1522
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.1", ngImport: i0, type: TranslatePipe, isStandalone: true, name: "translate", pure: false });
1527
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TranslatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1528
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: TranslatePipe, isStandalone: true, name: "translate", pure: false });
1523
1529
  }
1524
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: TranslatePipe, decorators: [{
1530
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TranslatePipe, decorators: [{
1525
1531
  type: Pipe,
1526
1532
  args: [{
1527
1533
  name: 'translate',
@@ -1534,10 +1540,10 @@ class UcfirstPipe {
1534
1540
  transform(value = '') {
1535
1541
  return value.charAt(0).toUpperCase() + value.slice(1);
1536
1542
  }
1537
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: UcfirstPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1538
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.1", ngImport: i0, type: UcfirstPipe, isStandalone: true, name: "ucfirst" });
1543
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: UcfirstPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1544
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: UcfirstPipe, isStandalone: true, name: "ucfirst" });
1539
1545
  }
1540
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: UcfirstPipe, decorators: [{
1546
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: UcfirstPipe, decorators: [{
1541
1547
  type: Pipe,
1542
1548
  args: [{
1543
1549
  name: 'ucfirst',
@@ -1605,10 +1611,10 @@ class UnwrapAsyncPipe {
1605
1611
  this.subscription = null;
1606
1612
  }
1607
1613
  }
1608
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: UnwrapAsyncPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1609
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.1", ngImport: i0, type: UnwrapAsyncPipe, isStandalone: true, name: "unwrapAsync", pure: false });
1614
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: UnwrapAsyncPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1615
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: UnwrapAsyncPipe, isStandalone: true, name: "unwrapAsync", pure: false });
1610
1616
  }
1611
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: UnwrapAsyncPipe, decorators: [{
1617
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: UnwrapAsyncPipe, decorators: [{
1612
1618
  type: Pipe,
1613
1619
  args: [{
1614
1620
  name: 'unwrapAsync',
@@ -1795,10 +1801,10 @@ class ScrollBar {
1795
1801
  bodyStyle.overflow = overflow;
1796
1802
  };
1797
1803
  }
1798
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ScrollBar, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1799
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ScrollBar, providedIn: 'root' });
1804
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ScrollBar, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1805
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ScrollBar, providedIn: 'root' });
1800
1806
  }
1801
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ScrollBar, decorators: [{
1807
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ScrollBar, decorators: [{
1802
1808
  type: Injectable,
1803
1809
  args: [{ providedIn: 'root' }]
1804
1810
  }] });
@@ -2099,10 +2105,10 @@ class TooltipDirective {
2099
2105
  ngOnDestroy() {
2100
2106
  this.controller.destroy();
2101
2107
  }
2102
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: TooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2103
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: TooltipDirective, isStandalone: true, selector: "[tooltip]", inputs: { tooltipTitle: { classPropertyName: "tooltipTitle", publicName: "tooltip", isSignal: true, isRequired: true, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
2108
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2109
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: TooltipDirective, isStandalone: true, selector: "[tooltip]", inputs: { tooltipTitle: { classPropertyName: "tooltipTitle", publicName: "tooltip", isSignal: true, isRequired: true, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
2104
2110
  }
2105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: TooltipDirective, decorators: [{
2111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TooltipDirective, decorators: [{
2106
2112
  type: Directive,
2107
2113
  args: [{
2108
2114
  selector: '[tooltip]'
@@ -2181,10 +2187,10 @@ class HubOverflowTooltipDirective {
2181
2187
  measure(el) {
2182
2188
  this.overflowing.set(el.scrollWidth > el.clientWidth + 1);
2183
2189
  }
2184
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: HubOverflowTooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2185
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: HubOverflowTooltipDirective, isStandalone: true, selector: "[hubOverflowTooltip]", inputs: { text: { classPropertyName: "text", publicName: "hubOverflowTooltip", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
2190
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HubOverflowTooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2191
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: HubOverflowTooltipDirective, isStandalone: true, selector: "[hubOverflowTooltip]", inputs: { text: { classPropertyName: "text", publicName: "hubOverflowTooltip", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
2186
2192
  }
2187
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: HubOverflowTooltipDirective, decorators: [{
2193
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HubOverflowTooltipDirective, decorators: [{
2188
2194
  type: Directive,
2189
2195
  args: [{
2190
2196
  selector: '[hubOverflowTooltip]'
@@ -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/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","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 { 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\tthis._containerElement.style.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 = '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 { 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\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 value = interpolateString(this._translationSvc.getTranslation(key), 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.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/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","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 { 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 { 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\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 value = interpolateString(this._translationSvc.getTranslation(key), 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.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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"}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-hub-ui-utils",
3
- "version": "22.7.0",
3
+ "version": "22.7.2",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=18.0.0",
6
6
  "@angular/core": ">=18.0.0"
@@ -551,6 +551,11 @@ interface OverlayConfig {
551
551
  * Custom CSS classes for the overlay container.
552
552
  */
553
553
  panelClass?: string | string[];
554
+ /**
555
+ * Explicit z-index for the overlay container. When omitted, the layer is
556
+ * resolved through the `--hub-overlay-zindex` token (fallback `1000`).
557
+ */
558
+ zIndex?: number | string;
554
559
  }
555
560
 
556
561
  /**
Binary file