@beeq/core 1.13.0 → 1.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/beeq/beeq.esm.js +1 -1
  2. package/dist/beeq/index.esm.js +1 -1
  3. package/dist/beeq/index.esm.js.map +1 -1
  4. package/dist/beeq/p-923da026.entry.js +6 -0
  5. package/dist/beeq/p-923da026.entry.js.map +1 -0
  6. package/dist/beeq/p-DXYHHeJY.js +6 -0
  7. package/dist/beeq/p-DXYHHeJY.js.map +1 -0
  8. package/dist/beeq/{p-2fd6ea70.entry.js → p-d4fa3abb.entry.js} +2 -2
  9. package/dist/beeq/p-d4fa3abb.entry.js.map +1 -0
  10. package/dist/beeq/p-seEHHqwi.js +6 -0
  11. package/dist/beeq/p-seEHHqwi.js.map +1 -0
  12. package/dist/beeq/svg/.icons-meta.json +1 -1
  13. package/dist/beeq.html-custom-data.json +74 -74
  14. package/dist/cjs/beeq.cjs.js +1 -1
  15. package/dist/cjs/bq-dropdown_2.cjs.entry.js +12 -6
  16. package/dist/cjs/bq-dropdown_2.cjs.entry.js.map +1 -1
  17. package/dist/cjs/bq-tooltip.cjs.entry.js +76 -14
  18. package/dist/cjs/bq-tooltip.cjs.entry.js.map +1 -1
  19. package/dist/cjs/{index-CfLTYjba.js → index-CVDzXB4K.js} +213 -189
  20. package/dist/cjs/index-CVDzXB4K.js.map +1 -0
  21. package/dist/cjs/index.cjs.js +2 -0
  22. package/dist/cjs/index.cjs.js.map +1 -1
  23. package/dist/cjs/isPopoverSupported-CfD5YIXR.js +18 -0
  24. package/dist/cjs/isPopoverSupported-CfD5YIXR.js.map +1 -0
  25. package/dist/cjs/loader.cjs.js +1 -1
  26. package/dist/collection/components/empty-state/scss/bq-empty-state.css +1 -1
  27. package/dist/collection/components/icon/svg/.icons-meta.json +1 -1
  28. package/dist/collection/components/panel/bq-panel.js +11 -5
  29. package/dist/collection/components/panel/bq-panel.js.map +1 -1
  30. package/dist/collection/components/progress/scss/bq-progress.css +1 -1
  31. package/dist/collection/components/side-menu-item/scss/bq-side-menu-item.css +1 -1
  32. package/dist/collection/components/slider/scss/bq-slider.css +1 -1
  33. package/dist/collection/components/tooltip/bq-tooltip.js +74 -13
  34. package/dist/collection/components/tooltip/bq-tooltip.js.map +1 -1
  35. package/dist/collection/components/tooltip/scss/bq-tooltip.css +1 -1
  36. package/dist/collection/services/interfaces/floating-ui.js.map +1 -1
  37. package/dist/collection/services/libraries/floating-ui/index.js +93 -64
  38. package/dist/collection/services/libraries/floating-ui/index.js.map +1 -1
  39. package/dist/collection/shared/test-utils/setProperties.js +1 -1
  40. package/dist/collection/shared/test-utils/setProperties.js.map +1 -1
  41. package/dist/collection/shared/utils/index.js +1 -0
  42. package/dist/collection/shared/utils/index.js.map +1 -1
  43. package/dist/collection/shared/utils/isPopoverSupported.js +12 -0
  44. package/dist/collection/shared/utils/isPopoverSupported.js.map +1 -0
  45. package/dist/components/bq-date-picker.js +1 -1
  46. package/dist/components/bq-dropdown.js +1 -1
  47. package/dist/components/bq-empty-state.js +1 -1
  48. package/dist/components/bq-empty-state.js.map +1 -1
  49. package/dist/components/bq-panel.js +1 -1
  50. package/dist/components/bq-progress.js +1 -1
  51. package/dist/components/bq-progress.js.map +1 -1
  52. package/dist/components/bq-select.js +1 -1
  53. package/dist/components/bq-side-menu-item.js +1 -1
  54. package/dist/components/bq-side-menu-item.js.map +1 -1
  55. package/dist/components/bq-slider.js +1 -1
  56. package/dist/components/bq-slider.js.map +1 -1
  57. package/dist/components/bq-tooltip.js +1 -1
  58. package/dist/components/index.js +1 -1
  59. package/dist/components/index.js.map +1 -1
  60. package/dist/components/p-B4jdbg-4.js +6 -0
  61. package/dist/components/p-B4jdbg-4.js.map +1 -0
  62. package/dist/components/p-DXYHHeJY.js +6 -0
  63. package/dist/components/p-DXYHHeJY.js.map +1 -0
  64. package/dist/components/{p-BS8hIETL.js → p-_I8PqzzU.js} +2 -2
  65. package/dist/components/{p-iyX-PhkX.js → p-c6L-z8md.js} +2 -2
  66. package/dist/components/p-c6L-z8md.js.map +1 -0
  67. package/dist/custom-elements.json +776 -736
  68. package/dist/esm/beeq.js +1 -1
  69. package/dist/esm/bq-dropdown_2.entry.js +12 -6
  70. package/dist/esm/bq-dropdown_2.entry.js.map +1 -1
  71. package/dist/esm/bq-tooltip.entry.js +76 -14
  72. package/dist/esm/bq-tooltip.entry.js.map +1 -1
  73. package/dist/esm/{index-CSAZnAFf.js → index-DXYHHeJY.js} +213 -189
  74. package/dist/esm/index-DXYHHeJY.js.map +1 -0
  75. package/dist/esm/index.js +1 -0
  76. package/dist/esm/index.js.map +1 -1
  77. package/dist/esm/isPopoverSupported-seEHHqwi.js +16 -0
  78. package/dist/esm/isPopoverSupported-seEHHqwi.js.map +1 -0
  79. package/dist/esm/loader.js +1 -1
  80. package/dist/hydrate/index.js +304 -205
  81. package/dist/hydrate/index.mjs +304 -205
  82. package/dist/types/components/panel/bq-panel.d.ts +1 -0
  83. package/dist/types/components/tooltip/bq-tooltip.d.ts +14 -0
  84. package/dist/types/services/interfaces/floating-ui.d.ts +1 -1
  85. package/dist/types/services/libraries/floating-ui/index.d.ts +37 -14
  86. package/dist/types/shared/test-utils/setProperties.d.ts +1 -1
  87. package/dist/types/shared/utils/index.d.ts +1 -0
  88. package/dist/types/shared/utils/isPopoverSupported.d.ts +2 -0
  89. package/package.json +3 -3
  90. package/dist/beeq/p-2fd6ea70.entry.js.map +0 -1
  91. package/dist/beeq/p-CSAZnAFf.js +0 -6
  92. package/dist/beeq/p-CSAZnAFf.js.map +0 -1
  93. package/dist/beeq/p-a55354ee.entry.js +0 -6
  94. package/dist/beeq/p-a55354ee.entry.js.map +0 -1
  95. package/dist/cjs/index-CfLTYjba.js.map +0 -1
  96. package/dist/components/p-CSAZnAFf.js +0 -6
  97. package/dist/components/p-CSAZnAFf.js.map +0 -1
  98. package/dist/components/p-Dd3v3b2E.js +0 -6
  99. package/dist/components/p-Dd3v3b2E.js.map +0 -1
  100. package/dist/components/p-iyX-PhkX.js.map +0 -1
  101. package/dist/esm/index-CSAZnAFf.js.map +0 -1
  102. /package/dist/components/{p-BS8hIETL.js.map → p-_I8PqzzU.js.map} +0 -0
@@ -5912,6 +5912,14 @@ const isHTMLElement$1 = (target, tag) => {
5912
5912
  return target instanceof Node && target.nodeName.toLowerCase() === tag.toLowerCase();
5913
5913
  };
5914
5914
 
5915
+ /** Returns whether the current runtime provides the complete HTML Popover API. */
5916
+ const isPopoverSupported = () => {
5917
+ return (typeof HTMLElement !== 'undefined' &&
5918
+ 'popover' in HTMLElement.prototype &&
5919
+ typeof HTMLElement.prototype.showPopover === 'function' &&
5920
+ typeof HTMLElement.prototype.hidePopover === 'function');
5921
+ };
5922
+
5915
5923
  /**
5916
5924
  * Check if the value is a string or not
5917
5925
  * @param value the value to be checked
@@ -13223,12 +13231,12 @@ function getOppositePlacement(placement) {
13223
13231
  return oppositeSideMap[side] + placement.slice(side.length);
13224
13232
  }
13225
13233
  function expandPaddingObject(padding) {
13234
+ var _padding$top, _padding$right, _padding$bottom, _padding$left;
13226
13235
  return {
13227
- top: 0,
13228
- right: 0,
13229
- bottom: 0,
13230
- left: 0,
13231
- ...padding
13236
+ top: (_padding$top = padding.top) != null ? _padding$top : 0,
13237
+ right: (_padding$right = padding.right) != null ? _padding$right : 0,
13238
+ bottom: (_padding$bottom = padding.bottom) != null ? _padding$bottom : 0,
13239
+ left: (_padding$left = padding.left) != null ? _padding$left : 0
13232
13240
  };
13233
13241
  }
13234
13242
  function getPaddingObject(padding) {
@@ -13303,13 +13311,9 @@ function computeCoordsFromPlacement(_ref, placement, rtl) {
13303
13311
  y: reference.y
13304
13312
  };
13305
13313
  }
13306
- switch (getAlignment(placement)) {
13307
- case 'start':
13308
- coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
13309
- break;
13310
- case 'end':
13311
- coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
13312
- break;
13314
+ const alignment = getAlignment(placement);
13315
+ if (alignment) {
13316
+ coords[alignmentAxis] += commonAlign * (alignment === 'end' ? 1 : -1) * (rtl && isVertical ? -1 : 1);
13313
13317
  }
13314
13318
  return coords;
13315
13319
  }
@@ -13358,10 +13362,7 @@ async function detectOverflow(state, options) {
13358
13362
  height: rects.floating.height
13359
13363
  } : rects.reference;
13360
13364
  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));
13361
- const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {
13362
- x: 1,
13363
- y: 1
13364
- } : {
13365
+ const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) && (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {
13365
13366
  x: 1,
13366
13367
  y: 1
13367
13368
  };
@@ -13534,17 +13535,16 @@ const arrow$1 = options => ({
13534
13535
 
13535
13536
  // Make sure the arrow doesn't overflow the floating element if the center
13536
13537
  // point is outside the floating element's bounds.
13537
- const min$1 = minPadding;
13538
13538
  const max = clientSize - arrowDimensions[length] - maxPadding;
13539
13539
  const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
13540
- const offset = clamp(min$1, center, max);
13540
+ const offset = clamp(minPadding, center, max);
13541
13541
 
13542
13542
  // If the reference is small enough that the arrow's padding causes it to
13543
13543
  // to point to nothing for an aligned placement, adjust the offset of the
13544
13544
  // floating element itself. To ensure `shift()` continues to take action,
13545
13545
  // a single reset is performed when this is true.
13546
- const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
13547
- const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;
13546
+ const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < minPadding ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
13547
+ const alignmentOffset = shouldAddOffset ? center < minPadding ? center - minPadding : center - max : 0;
13548
13548
  return {
13549
13549
  [axis]: coords[axis] + alignmentOffset,
13550
13550
  data: {
@@ -13888,23 +13888,16 @@ const shift$1 = function (options) {
13888
13888
  y
13889
13889
  };
13890
13890
  const overflow = await platform.detectOverflow(state, detectOverflowOptions);
13891
- const crossAxis = getSideAxis(getSide(placement));
13891
+ const crossAxis = getSideAxis(placement);
13892
13892
  const mainAxis = getOppositeAxis(crossAxis);
13893
13893
  let mainAxisCoord = coords[mainAxis];
13894
13894
  let crossAxisCoord = coords[crossAxis];
13895
+ const clampCoord = (axis, coord) => clamp(coord + overflow[axis === 'y' ? 'top' : 'left'], coord, coord - overflow[axis === 'y' ? 'bottom' : 'right']);
13895
13896
  if (checkMainAxis) {
13896
- const minSide = mainAxis === 'y' ? 'top' : 'left';
13897
- const maxSide = mainAxis === 'y' ? 'bottom' : 'right';
13898
- const min = mainAxisCoord + overflow[minSide];
13899
- const max = mainAxisCoord - overflow[maxSide];
13900
- mainAxisCoord = clamp(min, mainAxisCoord, max);
13897
+ mainAxisCoord = clampCoord(mainAxis, mainAxisCoord);
13901
13898
  }
13902
13899
  if (checkCrossAxis) {
13903
- const minSide = crossAxis === 'y' ? 'top' : 'left';
13904
- const maxSide = crossAxis === 'y' ? 'bottom' : 'right';
13905
- const min = crossAxisCoord + overflow[minSide];
13906
- const max = crossAxisCoord - overflow[maxSide];
13907
- crossAxisCoord = clamp(min, crossAxisCoord, max);
13900
+ crossAxisCoord = clampCoord(crossAxis, crossAxisCoord);
13908
13901
  }
13909
13902
  const limitedCoords = limiter.fn({
13910
13903
  ...state,
@@ -13926,6 +13919,12 @@ const shift$1 = function (options) {
13926
13919
  };
13927
13920
  };
13928
13921
 
13922
+ // Method syntax keeps callback parameters bivariant, but expressing the
13923
+ // explicit `| undefined` required by `exactOptionalPropertyTypes` needs
13924
+ // property syntax, which is contravariant under `strictFunctionTypes`.
13925
+ // Extracting the function from a method position restores that bivariance so
13926
+ // consumers can still assign callbacks with narrower parameter types.
13927
+
13929
13928
  /**
13930
13929
  * Provides data that allows you to change the size of the floating element —
13931
13930
  * for instance, prevent it from overflowing the clipping boundary or match the
@@ -13940,7 +13939,6 @@ const size$1 = function (options) {
13940
13939
  name: 'size',
13941
13940
  options,
13942
13941
  async fn(state) {
13943
- var _state$middlewareData, _state$middlewareData2;
13944
13942
  const {
13945
13943
  placement,
13946
13944
  rects,
@@ -13972,24 +13970,21 @@ const size$1 = function (options) {
13972
13970
  const maximumClippingWidth = width - overflow.left - overflow.right;
13973
13971
  const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);
13974
13972
  const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);
13975
- const noShift = !state.middlewareData.shift;
13973
+ const shiftData = state.middlewareData.shift;
13974
+ const noShift = !shiftData;
13976
13975
  let availableHeight = overflowAvailableHeight;
13977
13976
  let availableWidth = overflowAvailableWidth;
13978
- if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {
13977
+ if (shiftData != null && shiftData.enabled.x) {
13979
13978
  availableWidth = maximumClippingWidth;
13980
13979
  }
13981
- if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {
13980
+ if (shiftData != null && shiftData.enabled.y) {
13982
13981
  availableHeight = maximumClippingHeight;
13983
13982
  }
13984
13983
  if (noShift && !alignment) {
13985
- const xMin = max(overflow.left, 0);
13986
- const xMax = max(overflow.right, 0);
13987
- const yMin = max(overflow.top, 0);
13988
- const yMax = max(overflow.bottom, 0);
13989
13984
  if (isYAxis) {
13990
- availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));
13985
+ availableWidth = width - 2 * max(overflow.left, overflow.right);
13991
13986
  } else {
13992
- availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));
13987
+ availableHeight = height - 2 * max(overflow.top, overflow.bottom);
13993
13988
  }
13994
13989
  }
13995
13990
  await apply({
@@ -14145,7 +14140,7 @@ function getParentNode(node) {
14145
14140
  function getNearestOverflowAncestor(node) {
14146
14141
  const parentNode = getParentNode(node);
14147
14142
  if (isLastTraversableNode(parentNode)) {
14148
- return node.ownerDocument ? node.ownerDocument.body : node.body;
14143
+ return (node.ownerDocument || node).body;
14149
14144
  }
14150
14145
  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {
14151
14146
  return parentNode;
@@ -14242,10 +14237,7 @@ function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
14242
14237
  if (isFixed === void 0) {
14243
14238
  isFixed = false;
14244
14239
  }
14245
- if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {
14246
- return false;
14247
- }
14248
- return isFixed;
14240
+ return !!floatingOffsetParent && isFixed && floatingOffsetParent === getWindow(element);
14249
14241
  }
14250
14242
 
14251
14243
  function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
@@ -14272,12 +14264,12 @@ function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetPar
14272
14264
  let y = (clientRect.top + visualOffsets.y) / scale.y;
14273
14265
  let width = clientRect.width / scale.x;
14274
14266
  let height = clientRect.height / scale.y;
14275
- if (domElement) {
14267
+ if (domElement && offsetParent) {
14276
14268
  const win = getWindow(domElement);
14277
- const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
14269
+ const offsetWin = isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
14278
14270
  let currentWin = win;
14279
14271
  let currentIFrame = getFrameElement(currentWin);
14280
- while (currentIFrame && offsetParent && offsetWin !== currentWin) {
14272
+ while (currentIFrame && offsetWin !== currentWin) {
14281
14273
  const iframeScale = getScale(currentIFrame);
14282
14274
  const iframeRect = currentIFrame.getBoundingClientRect();
14283
14275
  const css = getComputedStyle$1(currentIFrame);
@@ -14341,7 +14333,7 @@ function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
14341
14333
  let scale = createCoords(1);
14342
14334
  const offsets = createCoords(0);
14343
14335
  const isOffsetParentAnElement = isHTMLElement(offsetParent);
14344
- if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
14336
+ if (isOffsetParentAnElement || !isFixed) {
14345
14337
  if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
14346
14338
  scroll = getNodeScroll(offsetParent);
14347
14339
  }
@@ -14362,18 +14354,17 @@ function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
14362
14354
  }
14363
14355
 
14364
14356
  function getClientRects(element) {
14365
- return Array.from(element.getClientRects());
14357
+ return element.getClientRects ? Array.from(element.getClientRects()) : [];
14366
14358
  }
14367
14359
 
14368
14360
  // Gets the entire size of the scrollable document area, even extending outside
14369
14361
  // of the `<html>` and `<body>` rect bounds if horizontally scrollable.
14370
- function getDocumentRect(element) {
14371
- const html = getDocumentElement(element);
14372
- const scroll = getNodeScroll(element);
14373
- const body = element.ownerDocument.body;
14362
+ function getDocumentRect(html) {
14363
+ const scroll = getNodeScroll(html);
14364
+ const body = html.ownerDocument.body;
14374
14365
  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
14375
14366
  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
14376
- let x = -scroll.scrollLeft + getWindowScrollBarX(element);
14367
+ let x = -scroll.scrollLeft + getWindowScrollBarX(html);
14377
14368
  const y = -scroll.scrollTop;
14378
14369
  if (getComputedStyle$1(body).direction === 'rtl') {
14379
14370
  x += max(html.clientWidth, body.clientWidth) - width;
@@ -14390,7 +14381,11 @@ function getDocumentRect(element) {
14390
14381
  // calculation is affected by unusual styles.
14391
14382
  // Most scrollbars leave 15-18px of space.
14392
14383
  const SCROLLBAR_MAX = 25;
14393
- function getViewportRect(element, strategy) {
14384
+ function getViewportRect(element, strategy, rootBoundary) {
14385
+ if (rootBoundary === void 0) {
14386
+ rootBoundary = 'viewport';
14387
+ }
14388
+ const isLayoutViewport = rootBoundary === 'layoutViewport';
14394
14389
  const win = getWindow(element);
14395
14390
  const html = getDocumentElement(element);
14396
14391
  const visualViewport = win.visualViewport;
@@ -14399,31 +14394,42 @@ function getViewportRect(element, strategy) {
14399
14394
  let x = 0;
14400
14395
  let y = 0;
14401
14396
  if (visualViewport) {
14402
- width = visualViewport.width;
14403
- height = visualViewport.height;
14404
- const visualViewportBased = isWebKit();
14405
- if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {
14406
- x = visualViewport.offsetLeft;
14407
- y = visualViewport.offsetTop;
14397
+ // Client coordinates are relative to the layout viewport, except in
14398
+ // WebKit with an `absolute` strategy, where they are relative to the
14399
+ // visual viewport.
14400
+ const layoutRelativeClientCoords = !isWebKit() || strategy === 'fixed';
14401
+ if (isLayoutViewport) {
14402
+ if (!layoutRelativeClientCoords) {
14403
+ x = -visualViewport.offsetLeft;
14404
+ y = -visualViewport.offsetTop;
14405
+ }
14406
+ } else {
14407
+ width = visualViewport.width;
14408
+ height = visualViewport.height;
14409
+ if (layoutRelativeClientCoords) {
14410
+ x = visualViewport.offsetLeft;
14411
+ y = visualViewport.offsetTop;
14412
+ }
14408
14413
  }
14409
14414
  }
14410
14415
  const windowScrollbarX = getWindowScrollBarX(html);
14411
- // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the
14412
- // visual width of the <html> but this is not considered in the size
14413
- // of `html.clientWidth`.
14416
+ // `scrollbar-gutter: stable` on the <html> reserves gutter space that shrinks
14417
+ // the visual width but isn't reflected in `html.clientWidth`, so subtract it.
14418
+ // Only the inline-end (right) gutter can hold the scrollbar; `both-edges` also
14419
+ // reserves an empty inline-start gutter that clips nothing, so exclude just
14420
+ // the one scrollbar-side gutter — halve the measured (two-gutter) total. A
14421
+ // left-side scrollbar (`windowScrollbarX > 0`) is already handled by
14422
+ // `getHTMLOffset`/`visualViewport.width`; skip it here.
14414
14423
  if (windowScrollbarX <= 0) {
14415
14424
  const doc = html.ownerDocument;
14416
14425
  const body = doc.body;
14417
14426
  const bodyStyles = getComputedStyle(body);
14418
14427
  const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
14419
- const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
14420
- if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {
14421
- width -= clippingStableScrollbarWidth;
14428
+ const reservedWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
14429
+ const gutter = getComputedStyle(html).scrollbarGutter === 'stable both-edges' ? reservedWidth / 2 : reservedWidth;
14430
+ if (gutter <= SCROLLBAR_MAX) {
14431
+ width -= gutter;
14422
14432
  }
14423
- } else if (windowScrollbarX <= SCROLLBAR_MAX) {
14424
- // If the <body> scrollbar is on the left, the width needs to be extended
14425
- // by the scrollbar amount so there isn't extra space on the right.
14426
- width += windowScrollbarX;
14427
14433
  }
14428
14434
  return {
14429
14435
  width,
@@ -14438,7 +14444,7 @@ function getInnerBoundingClientRect(element, strategy) {
14438
14444
  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');
14439
14445
  const top = clientRect.top + element.clientTop;
14440
14446
  const left = clientRect.left + element.clientLeft;
14441
- const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);
14447
+ const scale = getScale(element);
14442
14448
  const width = element.clientWidth * scale.x;
14443
14449
  const height = element.clientHeight * scale.y;
14444
14450
  const x = left * scale.x;
@@ -14452,8 +14458,8 @@ function getInnerBoundingClientRect(element, strategy) {
14452
14458
  }
14453
14459
  function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
14454
14460
  let rect;
14455
- if (clippingAncestor === 'viewport') {
14456
- rect = getViewportRect(element, strategy);
14461
+ if (clippingAncestor === 'viewport' || clippingAncestor === 'layoutViewport') {
14462
+ rect = getViewportRect(element, strategy, clippingAncestor);
14457
14463
  } else if (clippingAncestor === 'document') {
14458
14464
  rect = getDocumentRect(getDocumentElement(element));
14459
14465
  } else if (isElement(clippingAncestor)) {
@@ -14469,13 +14475,6 @@ function getClientRectFromClippingAncestor(element, clippingAncestor, strategy)
14469
14475
  }
14470
14476
  return rectToClientRect(rect);
14471
14477
  }
14472
- function hasFixedPositionAncestor(element, stopNode) {
14473
- const parentNode = getParentNode(element);
14474
- if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {
14475
- return false;
14476
- }
14477
- return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);
14478
- }
14479
14478
 
14480
14479
  // A "clipping ancestor" is an `overflow` element with the characteristic of
14481
14480
  // clipping (or hiding) child elements. This returns all clipping ancestors
@@ -14486,7 +14485,7 @@ function getClippingElementAncestors(element, cache) {
14486
14485
  return cachedResult;
14487
14486
  }
14488
14487
  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');
14489
- let currentContainingBlockComputedStyle = null;
14488
+ let lastKeptComputedStyle = null;
14490
14489
  const elementIsFixed = getComputedStyle$1(element).position === 'fixed';
14491
14490
  let currentNode = elementIsFixed ? getParentNode(element) : element;
14492
14491
 
@@ -14494,16 +14493,20 @@ function getClippingElementAncestors(element, cache) {
14494
14493
  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
14495
14494
  const computedStyle = getComputedStyle$1(currentNode);
14496
14495
  const currentNodeIsContaining = isContainingBlock(currentNode);
14497
- if (!currentNodeIsContaining && computedStyle.position === 'fixed') {
14498
- currentContainingBlockComputedStyle = null;
14499
- }
14500
- const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
14496
+ // Position of the containing block chain below the current node. A fixed
14497
+ // element whose containing block hasn't been found yet is a fixed chain.
14498
+ const lastPosition = lastKeptComputedStyle ? lastKeptComputedStyle.position : elementIsFixed ? 'fixed' : '';
14499
+
14500
+ // A non-containing ancestor does not clip the element when the chain
14501
+ // below it escapes it: a fixed chain escapes all ancestors up to the
14502
+ // next containing block, an absolute chain escapes static ancestors.
14503
+ const shouldDropCurrentNode = !currentNodeIsContaining && (lastPosition === 'fixed' || lastPosition === 'absolute' && computedStyle.position === 'static');
14501
14504
  if (shouldDropCurrentNode) {
14502
14505
  // Drop non-containing blocks.
14503
14506
  result = result.filter(ancestor => ancestor !== currentNode);
14504
14507
  } else {
14505
- // Record last containing block for next iteration.
14506
- currentContainingBlockComputedStyle = computedStyle;
14508
+ // The kept node carries the chain position for the next iteration.
14509
+ lastKeptComputedStyle = computedStyle;
14507
14510
  }
14508
14511
  currentNode = getParentNode(currentNode);
14509
14512
  }
@@ -14563,13 +14566,7 @@ function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
14563
14566
  scrollTop: 0
14564
14567
  };
14565
14568
  const offsets = createCoords(0);
14566
-
14567
- // If the <body> scrollbar appears on the left (e.g. RTL systems). Use
14568
- // Firefox with layout.scrollbar.side = 3 in about:config to test this.
14569
- function setLeftRTLScrollbarOffset() {
14570
- offsets.x = getWindowScrollBarX(documentElement);
14571
- }
14572
- if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
14569
+ if (isOffsetParentAnElement || !isFixed) {
14573
14570
  if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
14574
14571
  scroll = getNodeScroll(offsetParent);
14575
14572
  }
@@ -14577,12 +14574,13 @@ function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
14577
14574
  const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
14578
14575
  offsets.x = offsetRect.x + offsetParent.clientLeft;
14579
14576
  offsets.y = offsetRect.y + offsetParent.clientTop;
14580
- } else if (documentElement) {
14581
- setLeftRTLScrollbarOffset();
14582
14577
  }
14583
14578
  }
14584
- if (isFixed && !isOffsetParentAnElement && documentElement) {
14585
- setLeftRTLScrollbarOffset();
14579
+
14580
+ // If the <body> scrollbar appears on the left (e.g. RTL systems). Use
14581
+ // Firefox with layout.scrollbar.side = 3 in about:config to test this.
14582
+ if (!isOffsetParentAnElement && documentElement) {
14583
+ offsets.x = getWindowScrollBarX(documentElement);
14586
14584
  }
14587
14585
  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
14588
14586
  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;
@@ -14682,7 +14680,7 @@ function rectsAreEqual(a, b) {
14682
14680
  }
14683
14681
 
14684
14682
  // https://samthor.au/2021/observing-dom/
14685
- function observeMove(element, onMove) {
14683
+ function observeMove(element, onMove, ancestorResize) {
14686
14684
  let io = null;
14687
14685
  let timeoutId;
14688
14686
  const root = getDocumentElement(element);
@@ -14725,13 +14723,22 @@ function observeMove(element, onMove) {
14725
14723
  let isFirstUpdate = true;
14726
14724
  function handleObserve(entries) {
14727
14725
  const ratio = entries[0].intersectionRatio;
14726
+
14727
+ // The entry is a snapshot, so the reference may have moved since the
14728
+ // intersection was computed (under performance constraints, or between
14729
+ // consecutive frames of a multi-frame layout shift). The reported ratio
14730
+ // and the observed area are stale in that case and cannot be trusted to
14731
+ // detect subsequent movement, so refresh regardless of the ratio.
14732
+ if (!rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {
14733
+ return refresh();
14734
+ }
14728
14735
  if (ratio !== threshold) {
14729
14736
  if (!isFirstUpdate) {
14730
14737
  return refresh();
14731
14738
  }
14732
14739
  if (!ratio) {
14733
- // If the reference is clipped, the ratio is 0. Throttle the refresh
14734
- // to prevent an infinite loop of updates.
14740
+ // If the reference is clipped in place, the ratio is 0. Throttle
14741
+ // the refresh to prevent an infinite loop of updates.
14735
14742
  timeoutId = setTimeout(() => {
14736
14743
  refresh(false, 1e-7);
14737
14744
  }, 1000);
@@ -14739,16 +14746,6 @@ function observeMove(element, onMove) {
14739
14746
  refresh(false, ratio);
14740
14747
  }
14741
14748
  }
14742
- if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {
14743
- // It's possible that even though the ratio is reported as 1, the
14744
- // element is not actually fully within the IntersectionObserver's root
14745
- // area anymore. This can happen under performance constraints. This may
14746
- // be a bug in the browser's IntersectionObserver implementation. To
14747
- // work around this, we compare the element's bounding rect now with
14748
- // what it was at the time we created the IntersectionObserver. If they
14749
- // are not equal then the element moved, so we refresh.
14750
- refresh();
14751
- }
14752
14749
  isFirstUpdate = false;
14753
14750
  }
14754
14751
 
@@ -14765,8 +14762,18 @@ function observeMove(element, onMove) {
14765
14762
  }
14766
14763
  io.observe(element);
14767
14764
  }
14765
+ const win = getWindow(element);
14766
+ // The window is a resize ancestor, so when `ancestorResize` is enabled its
14767
+ // listener already runs the update on resize. Here we only need to rebuild
14768
+ // the `IntersectionObserver` for the new root size, skipping a redundant
14769
+ // update. When `ancestorResize` is disabled, this becomes the sole update.
14770
+ const handleResize = () => refresh(ancestorResize);
14771
+ win.addEventListener('resize', handleResize);
14768
14772
  refresh(true);
14769
- return cleanup;
14773
+ return () => {
14774
+ win.removeEventListener('resize', handleResize);
14775
+ cleanup();
14776
+ };
14770
14777
  }
14771
14778
 
14772
14779
  /**
@@ -14791,12 +14798,10 @@ function autoUpdate(reference, floating, update, options) {
14791
14798
  const referenceEl = unwrapElement(reference);
14792
14799
  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];
14793
14800
  ancestors.forEach(ancestor => {
14794
- ancestorScroll && ancestor.addEventListener('scroll', update, {
14795
- passive: true
14796
- });
14801
+ ancestorScroll && ancestor.addEventListener('scroll', update);
14797
14802
  ancestorResize && ancestor.addEventListener('resize', update);
14798
14803
  });
14799
- const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;
14804
+ const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update, ancestorResize) : null;
14800
14805
  let reobserveFrame = -1;
14801
14806
  let resizeObserver = null;
14802
14807
  if (elementResize) {
@@ -14905,11 +14910,9 @@ const computePosition = (reference, floating, options) => {
14905
14910
  // multiple lifecycle resets re-use the same result. It only lives for a
14906
14911
  // single call. If other functions become expensive, we can add them as well.
14907
14912
  const cache = new Map();
14908
- const mergedOptions = {
14909
- platform,
14910
- ...options
14911
- };
14913
+ const mergedOptions = options != null ? options : {};
14912
14914
  const platformWithCache = {
14915
+ ...platform,
14913
14916
  ...mergedOptions.platform,
14914
14917
  _c: cache
14915
14918
  };
@@ -14919,11 +14922,28 @@ const computePosition = (reference, floating, options) => {
14919
14922
  });
14920
14923
  };
14921
14924
 
14925
+ const STATIC_SIDE_BY_PLACEMENT = {
14926
+ top: 'bottom',
14927
+ right: 'left',
14928
+ bottom: 'top',
14929
+ left: 'right',
14930
+ };
14931
+ /**
14932
+ * Thin wrapper around Floating UI that owns the shared middleware pipeline
14933
+ * and ensures each instance has at most one `autoUpdate` subscription.
14934
+ *
14935
+ * Lifecycle:
14936
+ * - `start()` starts position tracking and performs an initial reposition.
14937
+ * - `stop()` stops tracking and invalidates pending positioning results.
14938
+ * - `reposition()` computes and applies the position once.
14939
+ * - `configure(options)` updates options and repositions only when active.
14940
+ */
14922
14941
  class FloatingUI {
14923
14942
  panel;
14924
14943
  trigger;
14925
14944
  options;
14926
- cleanUp;
14945
+ cleanup;
14946
+ repositionId = 0;
14927
14947
  constructor(trigger, panel, options) {
14928
14948
  this.trigger = trigger;
14929
14949
  this.panel = panel;
@@ -14934,74 +14954,92 @@ class FloatingUI {
14934
14954
  sameWidth: false,
14935
14955
  ...options,
14936
14956
  };
14937
- this.init(options);
14938
14957
  }
14939
- init(options) {
14940
- this.options = Object.assign(this.options, options);
14941
- this.update();
14958
+ /**
14959
+ * Merges new options into the current configuration. Active instances
14960
+ * reposition without recreating their `autoUpdate` subscription; stopped
14961
+ * instances apply the options the next time they start.
14962
+ */
14963
+ configure(options) {
14964
+ Object.assign(this.options, options);
14965
+ this.repositionId += 1;
14966
+ if (options.sameWidth === false) {
14967
+ this.panel.style.width = '';
14968
+ }
14969
+ if (!this.cleanup)
14970
+ return;
14971
+ void this.reposition();
14942
14972
  }
14943
- update() {
14944
- this.cleanUp = autoUpdate(this.trigger, this.panel, () => {
14945
- (async () => {
14946
- const { x, y, placement, middlewareData } = await computePosition(this.trigger, this.panel, {
14947
- placement: this.options.placement,
14948
- strategy: this.options.strategy,
14949
- middleware: [
14950
- offset({ mainAxis: this.options.distance, crossAxis: this.options.skidding }),
14951
- flip(),
14952
- shift(),
14953
- size(this.options.sameWidth && {
14954
- apply({ rects, elements }) {
14955
- Object.assign(elements.floating.style, {
14956
- width: `${rects.reference.width}px`,
14957
- });
14958
- },
14959
- }),
14960
- arrow({ element: this.options.arrow || null }),
14961
- this.positionChange(),
14962
- hide(),
14963
- ],
14964
- });
14965
- this.applyPanelPosition(x, y);
14966
- this.applyArrowPosition(placement, middlewareData);
14967
- this.applyVisibility(middlewareData);
14968
- })();
14969
- });
14973
+ /**
14974
+ * Opens the `autoUpdate` subscription so the panel keeps tracking the
14975
+ * trigger through scroll, resize, layout and ancestor changes. No-op if
14976
+ * the subscription is already running.
14977
+ */
14978
+ start() {
14979
+ if (this.cleanup)
14980
+ return;
14981
+ this.cleanup = autoUpdate(this.trigger, this.panel, () => void this.reposition());
14970
14982
  }
14971
- destroy() {
14972
- if (!this.cleanUp)
14983
+ /**
14984
+ * Tears down the `autoUpdate` subscription. Idempotent — safe to call
14985
+ * multiple times, and before the first `start()`.
14986
+ */
14987
+ stop() {
14988
+ this.repositionId += 1;
14989
+ if (!this.cleanup)
14973
14990
  return;
14974
- this.cleanUp();
14991
+ this.cleanup();
14992
+ this.cleanup = undefined;
14975
14993
  }
14976
- positionChange() {
14977
- return {
14978
- name: 'positionChange',
14979
- fn: ({ placement: position }) => {
14980
- if (typeof this.options.onPositionChange !== 'function')
14981
- return {};
14982
- this.options.onPositionChange(position);
14983
- return {};
14984
- },
14985
- };
14994
+ /**
14995
+ * Runs a single Floating UI `computePosition` pass and applies the
14996
+ * resulting styles to the panel (and the arrow, if configured).
14997
+ */
14998
+ async reposition() {
14999
+ const repositionId = ++this.repositionId;
15000
+ const { arrow: arrowElement, distance, onPositionChange, placement: configuredPlacement, sameWidth, skidding, strategy, } = this.options;
15001
+ const { x, y, placement, middlewareData } = await computePosition(this.trigger, this.panel, {
15002
+ placement: configuredPlacement,
15003
+ strategy,
15004
+ middleware: [
15005
+ offset({ mainAxis: distance, crossAxis: skidding }),
15006
+ flip(),
15007
+ shift(),
15008
+ size({
15009
+ apply: ({ rects, elements }) => {
15010
+ if (repositionId !== this.repositionId || !elements.floating.isConnected)
15011
+ return;
15012
+ elements.floating.style.width = sameWidth ? `${rects.reference.width}px` : '';
15013
+ },
15014
+ }),
15015
+ ...(arrowElement ? [arrow({ element: arrowElement })] : []),
15016
+ hide(),
15017
+ ],
15018
+ });
15019
+ if (repositionId !== this.repositionId || !this.panel.isConnected)
15020
+ return;
15021
+ this.applyPanelPosition(x, y);
15022
+ this.applyArrowPosition(arrowElement, placement, middlewareData);
15023
+ this.applyVisibility(middlewareData);
15024
+ onPositionChange?.(placement);
14986
15025
  }
14987
15026
  applyPanelPosition(x, y) {
15027
+ const dpr = window.devicePixelRatio || 1;
15028
+ const roundedX = Math.round(x * dpr) / dpr;
15029
+ const roundedY = Math.round(y * dpr) / dpr;
14988
15030
  Object.assign(this.panel.style, {
14989
15031
  top: '0',
14990
15032
  left: '0',
14991
- transform: `translate(${this.roundByDPR(x)}px,${this.roundByDPR(y)}px)`,
15033
+ transform: `translate(${roundedX}px, ${roundedY}px)`,
14992
15034
  });
14993
15035
  }
14994
- applyArrowPosition(placement, middlewareData) {
14995
- if (!this.options.arrow)
15036
+ applyArrowPosition(arrowElement, placement, middlewareData) {
15037
+ if (!arrowElement)
14996
15038
  return;
14997
- const { x: arrowX, y: arrowY } = middlewareData.arrow;
14998
- const staticSide = {
14999
- top: 'bottom',
15000
- right: 'left',
15001
- bottom: 'top',
15002
- left: 'right',
15003
- }[placement.split('-')[0]];
15004
- Object.assign(this.options.arrow.style, {
15039
+ const { x: arrowX, y: arrowY } = middlewareData.arrow ?? {};
15040
+ const basePlacement = placement.split('-')[0];
15041
+ const staticSide = STATIC_SIDE_BY_PLACEMENT[basePlacement];
15042
+ Object.assign(arrowElement.style, {
15005
15043
  left: arrowX != null ? `${arrowX}px` : '',
15006
15044
  top: arrowY != null ? `${arrowY}px` : '',
15007
15045
  right: '',
@@ -15010,14 +15048,8 @@ class FloatingUI {
15010
15048
  });
15011
15049
  }
15012
15050
  applyVisibility(middlewareData) {
15013
- const { referenceHidden } = middlewareData.hide;
15014
- Object.assign(this.panel.style, {
15015
- visibility: referenceHidden ? 'hidden' : 'visible',
15016
- });
15017
- }
15018
- roundByDPR(value) {
15019
- const dpr = window.devicePixelRatio || 1;
15020
- return Math.round(value * dpr) / dpr;
15051
+ const referenceHidden = middlewareData.hide?.referenceHidden;
15052
+ this.panel.style.visibility = referenceHidden ? 'hidden' : 'visible';
15021
15053
  }
15022
15054
  }
15023
15055
 
@@ -15098,7 +15130,7 @@ class BqPanel {
15098
15130
  onPropChange() {
15099
15131
  if (!isClient())
15100
15132
  return;
15101
- this.floatingUI?.init({ ...this.options });
15133
+ this.floatingUI?.configure({ ...this.options });
15102
15134
  }
15103
15135
  // Events section
15104
15136
  // Requires JSDocs for public API documentation
@@ -15120,10 +15152,15 @@ class BqPanel {
15120
15152
  this.floatingUI = new FloatingUI(this.trigger, this.panel, { ...this.options });
15121
15153
  this.handleOpenChange();
15122
15154
  }
15155
+ connectedCallback() {
15156
+ if (!this.floatingUI || !this.open)
15157
+ return;
15158
+ this.showPanel();
15159
+ }
15123
15160
  disconnectedCallback() {
15124
15161
  if (!isClient())
15125
15162
  return;
15126
- this.floatingUI?.destroy();
15163
+ this.floatingUI?.stop();
15127
15164
  // Ensure scroll lock is removed if the component is disconnected while the panel is open.
15128
15165
  if (this.open && !this.disableScrollLock) {
15129
15166
  unlockBodyScroll();
@@ -15144,7 +15181,7 @@ class BqPanel {
15144
15181
  showPanel() {
15145
15182
  if (!isClient())
15146
15183
  return;
15147
- this.floatingUI?.update();
15184
+ this.floatingUI?.start();
15148
15185
  // Lock the body scroll if the disableScrollLock prop is not true.
15149
15186
  if (!this.disableScrollLock) {
15150
15187
  lockBodyScroll();
@@ -15152,6 +15189,7 @@ class BqPanel {
15152
15189
  }
15153
15190
  async hidePanel() {
15154
15191
  this.open = false;
15192
+ this.floatingUI?.stop();
15155
15193
  // Unlock the body scroll if the disableScrollLock prop is not true.
15156
15194
  if (isClient() && !this.disableScrollLock) {
15157
15195
  unlockBodyScroll();
@@ -15170,9 +15208,9 @@ class BqPanel {
15170
15208
  // Always the last one in the class.
15171
15209
  // ===================================
15172
15210
  render() {
15173
- return (hAsync("div", { key: '085545c8b547887ff02e2215e260805e280ef217', "aria-hidden": !this.open ? 'true' : 'false', class: "bq-panel", hidden: !this.open, part: "panel", ref: (el) => {
15211
+ return (hAsync("div", { key: '6d0376f5f829189a179dfb409e06198dbd568d4d', "aria-hidden": !this.open ? 'true' : 'false', class: "bq-panel", hidden: !this.open, part: "panel", ref: (el) => {
15174
15212
  this.panel = el;
15175
- } }, hAsync("slot", { key: '2b883bb9a200cb5aa0d1851a68bd4592fcb02fc1' })));
15213
+ } }, hAsync("slot", { key: '535289afc3b7e127a496c8b6b1492e3b22017606' })));
15176
15214
  }
15177
15215
  static get watchers() { return {
15178
15216
  "open": [{
@@ -19728,7 +19766,7 @@ class BqToast {
19728
19766
  }; }
19729
19767
  }
19730
19768
 
19731
- const bqTooltipCss = () => `.bq-tooltip--arrow:before,.rotate-45,.transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1}.bq-tooltip--panel,.shadow-\\[shadow\\:--bq-tooltip--box-shadow\\]{--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}::backdrop,:root{--bq-blue-100:#e7f0fd;--bq-blue-200:#d0e2fb;--bq-blue-300:#a1c5f7;--bq-blue-400:#73a8f3;--bq-blue-500:#448bef;--bq-blue-600:#156eeb;--bq-blue-700:#1158bc;--bq-blue-800:#0d428d;--bq-blue-900:#082c5e;--bq-blue-1000:#04162f;--bq-corai-100:#fff2f2;--bq-corai-200:#ffe6e6;--bq-corai-300:#ffccce;--bq-corai-400:#ffb3b5;--bq-corai-500:#ff999d;--bq-corai-600:#ff8084;--bq-corai-700:#cc666a;--bq-corai-800:#994d4f;--bq-corai-900:#663335;--bq-corai-1000:#331a1a;--bq-cyan-100:#e8f7fb;--bq-cyan-200:#d2f0f8;--bq-cyan-300:#a5e1f1;--bq-cyan-400:#78d1e9;--bq-cyan-500:#4bc2e2;--bq-cyan-600:#1eb3db;--bq-cyan-700:#188faf;--bq-cyan-800:#126b83;--bq-cyan-900:#0c4858;--bq-cyan-1000:#06242c;--bq-gold-100:#fbf4ec;--bq-gold-200:#f7e9da;--bq-gold-300:#f0d3b6;--bq-gold-400:#e8bc91;--bq-gold-500:#e1a66d;--bq-gold-600:#d99048;--bq-gold-700:#ae733a;--bq-gold-800:#82562b;--bq-gold-900:#573a1d;--bq-gold-1000:#2b1d0e;--bq-green-100:#e8f8ef;--bq-green-200:#d2f1e0;--bq-green-300:#a5e3c1;--bq-green-400:#78d5a1;--bq-green-500:#4bc782;--bq-green-600:#1eb963;--bq-green-700:#18944f;--bq-green-800:#126f3b;--bq-green-900:#0c4a28;--bq-green-1000:#062514;--bq-grey-100:#f1f2f4;--bq-grey-200:#e7e8eb;--bq-grey-300:#caccd2;--bq-grey-400:#a6aab3;--bq-grey-50:#f6f6f8;--bq-grey-500:#898e99;--bq-grey-600:#646a77;--bq-grey-700:#3f4350;--bq-grey-800:#2a2c35;--bq-grey-900:#1c1d23;--bq-grey-950:#15161a;--bq-grey-1000:#0d0e11;--bq-indigo-100:#edecfc;--bq-indigo-200:#dcdafa;--bq-indigo-300:#b9b5f5;--bq-indigo-400:#9590ef;--bq-indigo-500:#726bea;--bq-indigo-600:#4f46e5;--bq-indigo-700:#3f38b7;--bq-indigo-800:#2f2a89;--bq-indigo-900:#201c5c;--bq-indigo-1000:#100e2e;--bq-iris-100:#e9f0ff;--bq-iris-200:#d6e0ff;--bq-iris-300:#b2c0fe;--bq-iris-400:#8691f8;--bq-iris-500:#6061ee;--bq-iris-600:#4f46e5;--bq-iris-700:#413abd;--bq-iris-800:#332e95;--bq-iris-900:#26216d;--bq-iris-1000:#181545;--bq-lime-100:#f5fae8;--bq-lime-200:#ecf6d2;--bq-lime-300:#d9eda5;--bq-lime-400:#c5e379;--bq-lime-500:#b2da4c;--bq-lime-600:#9fd11f;--bq-lime-700:#7fa719;--bq-lime-800:#5f7d13;--bq-lime-900:#40540c;--bq-lime-1000:#202a06;--bq-magenta-100:#fce7f4;--bq-magenta-200:#f9cfea;--bq-magenta-300:#f39fd6;--bq-magenta-400:#ee6fbf;--bq-magenta-500:#e83fab;--bq-magenta-600:#de1395;--bq-magenta-700:#b20f77;--bq-magenta-800:#850c59;--bq-magenta-900:#58083c;--bq-magenta-1000:#2c041e;--bq-neutral-white:#fbfbfc;--bq-neutral-black:#060708;--bq-orange-100:#fbf0e9;--bq-orange-200:#f8e1d4;--bq-orange-300:#f1c2a8;--bq-orange-400:#eaa47d;--bq-orange-500:#e38551;--bq-orange-600:#dc6726;--bq-orange-700:#b0521e;--bq-orange-800:#843e17;--bq-orange-900:#58290f;--bq-orange-1000:#2c1508;--bq-purple-100:#efebf8;--bq-purple-200:#e0d7f2;--bq-purple-300:#c1afe5;--bq-purple-400:#a388d8;--bq-purple-500:#8460cb;--bq-purple-600:#6538be;--bq-purple-700:#512d98;--bq-purple-800:#3d2272;--bq-purple-900:#28164c;--bq-purple-1000:#140b26;--bq-red-100:#fce7ea;--bq-red-200:#f9d1d5;--bq-red-300:#f3a2ac;--bq-red-400:#ed7482;--bq-red-500:#e74559;--bq-red-600:#e1172f;--bq-red-700:#b41226;--bq-red-800:#870e1c;--bq-red-900:#5a0913;--bq-red-1000:#2d0509;--bq-sky-100:#eff4fb;--bq-sky-200:#dfeaf8;--bq-sky-300:#bfd5f1;--bq-sky-400:#9ec1e9;--bq-sky-500:#7eace2;--bq-sky-600:#5e97db;--bq-sky-700:#4b79af;--bq-sky-800:#385b83;--bq-sky-900:#263c58;--bq-sky-1000:#131e2c;--bq-teal-100:#e5f7f5;--bq-teal-200:#ccf0eb;--bq-teal-300:#99e1d8;--bq-teal-400:#66d2c4;--bq-teal-500:#33c3b1;--bq-teal-600:#00b49d;--bq-teal-700:#00907e;--bq-teal-800:#006c5e;--bq-teal-900:#00483f;--bq-teal-1000:#00241f;--bq-volcano-100:#feede7;--bq-volcano-200:#fddbd1;--bq-volcano-300:#fbb8a3;--bq-volcano-400:#fa9474;--bq-volcano-500:#f87146;--bq-volcano-600:#f64d18;--bq-volcano-700:#c53e13;--bq-volcano-800:#942e0e;--bq-volcano-900:#621f0a;--bq-volcano-1000:#310f05;--bq-yellow-100:#fefbe7;--bq-yellow-200:#fcf6d0;--bq-yellow-300:#faeea0;--bq-yellow-400:#f7e571;--bq-yellow-500:#f5dd41;--bq-yellow-600:#f2d412;--bq-yellow-700:#c2aa0e;--bq-yellow-800:#917f0b;--bq-yellow-900:#615507;--bq-yellow-1000:#302a04;--bq-endava-grey-50:#f7f7f8;--bq-endava-grey-100:#e4e6e7;--bq-endava-grey-200:#b5babe;--bq-endava-grey-300:#949ca1;--bq-endava-grey-400:#737d84;--bq-endava-grey-500:#525f67;--bq-endava-grey-600:#30404b;--bq-endava-grey-700:#2b3942;--bq-endava-grey-800:#263139;--bq-endava-grey-900:#192b37;--bq-endava-grey-950:#151b1e;--bq-endava-grey-1000:#0f1316;--bq-endava-neutral-white:#fafbfb;--bq-endava-neutral-black:#060708;--bq-endava-orange-100:#fef3f1;--bq-endava-orange-200:#fbd6d1;--bq-endava-orange-300:#fab7af;--bq-endava-orange-400:#fa988b;--bq-endava-orange-500:#fc7866;--bq-endava-orange-600:#ff5640;--bq-endava-orange-700:#ce4a39;--bq-endava-orange-800:#a03d30;--bq-endava-orange-900:#722e25;--bq-endava-orange-1000:#471e19}*,:after,:before{box-sizing:border-box}*{font:inherit;margin:0}ol[role=list],ul[role=list]{list-style-type:none}html{text-size-adjust:none;font-family:var(--bq-font-family);font-size:var(--bq-font-size--m)}html:focus-within{scroll-behavior:smooth}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--bq-background--primary);color:var(--bq-text--primary);line-height:var(--bq-font-line-height--regular);min-height:100vb;text-rendering:optimizeSpeed}a:not([class]){text-decoration-skip-ink:auto}canvas,img,picture,svg,video{display:block;max-width:100%}button,input,select,textarea{font:inherit}h1,h2,h3,h4,h5,h6,p{overflow-wrap:break-word}@media (prefers-reduced-motion:reduce){html:focus-within{scroll-behavior:auto}*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto;transition-duration:.01ms!important}}:where(:root){--bq-white:#fff;--bq-black:#060708;--bq-neutral-50:var(--bq-grey-50);--bq-neutral-100:var(--bq-grey-100);--bq-neutral-200:var(--bq-grey-200);--bq-neutral-300:var(--bq-grey-300);--bq-neutral-400:var(--bq-grey-400);--bq-neutral-500:var(--bq-grey-500);--bq-neutral-600:var(--bq-grey-600);--bq-neutral-700:var(--bq-grey-700);--bq-neutral-800:var(--bq-grey-800);--bq-neutral-900:var(--bq-grey-900);--bq-neutral-950:var(--bq-grey-950);--bq-neutral-1000:var(--bq-grey-1000);--bq-brand-light:var(--bq-iris-100);--bq-brand:var(--bq-iris-600);--bq-brand-dark:var(--bq-iris-1000);--bq-accent-light:var(--bq-purple-100);--bq-accent:var(--bq-purple-600);--bq-accent-dark:var(--bq-purple-1000);--bq-success-light:var(--bq-teal-100);--bq-success:var(--bq-teal-600);--bq-success-dark:var(--bq-teal-1000);--bq-danger-light:var(--bq-red-100);--bq-danger:var(--bq-red-600);--bq-danger-dark:var(--bq-red-1000);--bq-warning-light:var(--bq-gold-100);--bq-warning:var(--bq-gold-600);--bq-warning-dark:var(--bq-gold-1000);--bq-info-light:var(--bq-iris-100);--bq-info:var(--bq-iris-600);--bq-info-dark:var(--bq-iris-1000);--bq-focus:var(--bq-iris-600);--bq-data-01:var(--bq-brand);--bq-data-02:var(--bq-purple-600);--bq-data-03:var(--bq-magenta-600);--bq-data-04:var(--bq-cyan-600);--bq-data-05:var(--bq-teal-600);--bq-data-06:var(--bq-orange-600);--bq-data-07:var(--bq-yellow-600);--bq-data-08:var(--bq-red-600);--bq-data-09:var(--bq-blue-600);--bq-data-10:var(--bq-grey-600);--bq-data-11:var(--bq-black);--bq-data-12:var(--bq-white);--bq-radius--none:0;--bq-radius--xs2:0.125rem;--bq-radius--xs:0.25rem;--bq-radius--s:0.5rem;--bq-radius--m:0.75rem;--bq-radius--l:1.5rem;--bq-radius--full:9999px;--bq-box-shadow--xs:0 2px 0 rgba(0,0,0,.016);--bq-box-shadow--s:0 8px 24px rgba(0,0,0,.04);--bq-box-shadow--m:0 10px 48px -16px rgba(0,0,0,.12);--bq-box-shadow--l:0 20px 58px -16px rgba(0,0,0,.16);--bq-font-family:"Outfit",sans-serif;--bq-font-size--xs:0.75rem;--bq-font-size--s:0.875rem;--bq-font-size--m:1rem;--bq-font-size--l:1.125rem;--bq-font-size--xl:1.5rem;--bq-font-size--xxl:2rem;--bq-font-size--xxl2:2.5rem;--bq-font-size--xxl3:3rem;--bq-font-size--xxl4:3.5rem;--bq-font-size--xxl5:4rem;--bq-font-weight--thin:100;--bq-font-weight--light:300;--bq-font-weight--regular:400;--bq-font-weight--medium:500;--bq-font-weight--semibold:600;--bq-font-weight--bold:700;--bq-font-line-height--small:1.2;--bq-font-line-height--regular:1.5;--bq-font-line-height--large:1.5;--bq-spacing-xs3:0.125rem;--bq-spacing-xs2:0.25rem;--bq-spacing-xs:0.5rem;--bq-spacing-s:0.75rem;--bq-spacing-m:1rem;--bq-spacing-l:1.5rem;--bq-spacing-xl:2rem;--bq-spacing-xxl:2.5rem;--bq-spacing-xxl2:3.5rem;--bq-spacing-xxl3:4rem;--bq-spacing-xxl4:4.5rem;--bq-stroke-s:1px;--bq-stroke-m:2px;--bq-stroke-l:3px}.beeq:not([bq-mode]),.light,:root:not([bq-theme]):not([bq-mode]),:root[bq-theme=beeq]:not([bq-mode]),[bq-mode=light]{--bq-background--primary:var(--bq-white);--bq-background--secondary:var(--bq-neutral-100);--bq-background--tertiary:var(--bq-neutral-200);--bq-background--alt:var(--bq-neutral-300);--bq-background--inverse:var(--bq-neutral-900);--bq-background--brand:var(--bq-brand);--bq-background--overlay:var(--bq-neutral-900);--bq-icon--primary:var(--bq-neutral-800);--bq-icon--alt:var(--bq-white);--bq-icon--secondary:var(--bq-neutral-600);--bq-icon--inverse:var(--bq-neutral-50);--bq-icon--brand:var(--bq-brand);--bq-icon--info:var(--bq-brand);--bq-icon--success:var(--bq-success);--bq-icon--warning:var(--bq-warning);--bq-icon--danger:var(--bq-danger);--bq-stroke--primary:var(--bq-neutral-200);--bq-stroke--secondary:var(--bq-neutral-600);--bq-stroke--tertiary:var(--bq-neutral-900);--bq-stroke--inverse:var(--bq-white);--bq-stroke--brand:var(--bq-brand);--bq-stroke--alt:var(--bq-neutral-50);--bq-stroke--success:var(--bq-success);--bq-stroke--warning:var(--bq-warning);--bq-stroke--danger:var(--bq-danger);--bq-stroke--info:var(--bq-brand);--bq-text--primary:var(--bq-neutral-800);--bq-text--secondary:var(--bq-neutral-600);--bq-text--inverse:var(--bq-neutral-50);--bq-text--brand:var(--bq-brand);--bq-text--alt:var(--bq-white);--bq-text--info:var(--bq-brand);--bq-text--success:var(--bq-success);--bq-text--warning:var(--bq-warning);--bq-text--danger:var(--bq-danger);--bq-ui--primary:var(--bq-white);--bq-ui--secondary:var(--bq-neutral-100);--bq-ui--tertiary:var(--bq-neutral-500);--bq-ui--inverse:var(--bq-neutral-900);--bq-ui--brand:var(--bq-brand);--bq-ui--brand-alt:var(--bq-brand-light);--bq-ui--alt:var(--bq-neutral-50);--bq-ui--success:var(--bq-success);--bq-ui--success-alt:var(--bq-success-light);--bq-ui--warning:var(--bq-warning);--bq-ui--warning-alt:var(--bq-warning-light);--bq-ui--danger:var(--bq-danger);--bq-ui--danger-alt:var(--bq-danger-light);--bq-ui--info:var(--bq-brand);--bq-ui--info-alt:var(--bq-brand-light);--bq-hover:#bcbfc5;--bq-active:#444546}.dark,[bq-mode=dark]{--bq-background--primary:var(--bq-neutral-1000);--bq-background--secondary:var(--bq-neutral-950);--bq-background--tertiary:var(--bq-neutral-800);--bq-background--alt:var(--bq-neutral-700);--bq-background--inverse:var(--bq-neutral-600);--bq-background--brand:var(--bq-brand);--bq-background--overlay:var(--bq-neutral-900);--bq-icon--primary:var(--bq-neutral-100);--bq-icon--secondary:var(--bq-neutral-400);--bq-icon--inverse:var(--bq-neutral-800);--bq-icon--brand:var(--bq-brand);--bq-icon--alt:var(--bq-white);--bq-icon--info:var(--bq-brand);--bq-icon--success:var(--bq-success);--bq-icon--warning:var(--bq-warning);--bq-icon--danger:var(--bq-danger);--bq-stroke--primary:var(--bq-neutral-900);--bq-stroke--secondary:var(--bq-neutral-700);--bq-stroke--tertiary:var(--bq-neutral-400);--bq-stroke--inverse:var(--bq-neutral-950);--bq-stroke--brand:var(--bq-brand);--bq-stroke--alt:var(--bq-neutral-1000);--bq-stroke--success:var(--bq-success);--bq-stroke--warning:var(--bq-warning);--bq-stroke--danger:var(--bq-danger);--bq-stroke--info:var(--bq-brand);--bq-text--primary:var(--bq-neutral-100);--bq-text--secondary:var(--bq-neutral-400);--bq-text--inverse:var(--bq-neutral-800);--bq-text--brand:var(--bq-brand);--bq-text--alt:var(--bq-white);--bq-text--info:var(--bq-brand);--bq-text--success:var(--bq-success);--bq-text--warning:var(--bq-warning);--bq-text--danger:var(--bq-danger);--bq-ui--primary:var(--bq-neutral-900);--bq-ui--secondary:var(--bq-neutral-950);--bq-ui--tertiary:var(--bq-neutral-700);--bq-ui--inverse:var(--bq-neutral-100);--bq-ui--brand:var(--bq-brand);--bq-ui--brand-alt:var(--bq-brand-dark);--bq-ui--alt:var(--bq-neutral-950);--bq-ui--success:var(--bq-success);--bq-ui--success-alt:var(--bq-success-dark);--bq-ui--warning:var(--bq-warning);--bq-ui--warning-alt:var(--bq-warning-dark);--bq-ui--danger:var(--bq-danger);--bq-ui--danger-alt:var(--bq-danger-dark);--bq-ui--info:var(--bq-brand);--bq-ui--info-alt:var(--bq-brand-dark);--bq-hover:#444546;--bq-active:#1f2026}:where(.endava),:where([bq-theme=endava]){--bq-font-family:"Poppins",sans-serif;--bq-white:#fafbfb;--bq-black:#030406;--bq-neutral-50:var(--bq-endava-grey-50);--bq-neutral-100:var(--bq-endava-grey-100);--bq-neutral-200:var(--bq-endava-grey-200);--bq-neutral-300:var(--bq-endava-grey-300);--bq-neutral-400:var(--bq-endava-grey-400);--bq-neutral-500:var(--bq-endava-grey-500);--bq-neutral-600:var(--bq-endava-grey-600);--bq-neutral-700:var(--bq-endava-grey-700);--bq-neutral-800:var(--bq-endava-grey-800);--bq-neutral-900:var(--bq-endava-grey-900);--bq-neutral-950:var(--bq-endava-grey-950);--bq-neutral-1000:var(--bq-endava-grey-1000);--bq-brand-light:var(--bq-endava-orange-100);--bq-brand:var(--bq-endava-orange-600);--bq-brand-dark:var(--bq-endava-orange-1000);--bq-accent-light:var(--bq-endava-orange-100);--bq-accent:var(--bq-endava-orange-600);--bq-accent-dark:var(--bq-endava-orange-1000);--bq-success-light:var(--bq-green-100);--bq-success:var(--bq-green-600);--bq-success-dark:var(--bq-green-1000);--bq-danger-light:var(--bq-corai-100);--bq-danger:var(--bq-corai-600);--bq-danger-dark:var(--bq-corai-1000);--bq-warning-light:var(--bq-yellow-100);--bq-warning:var(--bq-yellow-600);--bq-warning-dark:var(--bq-yellow-1000);--bq-info-light:var(--bq-blue-100);--bq-info:var(--bq-blue-600);--bq-info-dark:var(--bq-blue-1000);--bq-focus:var(--bq-endava-orange-600);--bq-data-01:var(--bq-brand);--bq-data-02:#af0cd8;--bq-data-03:#0ca8d8;--bq-data-04:var(--bq-teal-600);--bq-data-05:var(--bq-yellow-600);--bq-data-06:var(--bq-orange-600);--bq-data-07:var(--bq-blue-600);--bq-data-08:var(--bq-red-600);--bq-data-09:var(--bq-purple-600);--bq-data-10:#394b56;--bq-data-11:var(--bq-black);--bq-data-12:var(--bq-white)}.endava.light,.endava:not([bq-mode]),[bq-theme=endava]:not([bq-mode]),[bq-theme=endava][bq-mode=light]{--bq-background--primary:var(--bq-white);--bq-background--secondary:var(--bq-neutral-100);--bq-background--tertiary:var(--bq-neutral-200);--bq-background--alt:var(--bq-neutral-300);--bq-background--inverse:var(--bq-neutral-900);--bq-background--brand:var(--bq-brand);--bq-background--overlay:var(--bq-neutral-900);--bq-icon--primary:var(--bq-neutral-800);--bq-icon--secondary:var(--bq-neutral-600);--bq-icon--inverse:var(--bq-neutral-50);--bq-icon--brand:var(--bq-brand);--bq-icon--alt:var(--bq-white);--bq-icon--info:var(--bq-info);--bq-icon--success:var(--bq-success);--bq-icon--warning:var(--bq-warning);--bq-icon--danger:var(--bq-danger);--bq-stroke--primary:var(--bq-neutral-200);--bq-stroke--secondary:var(--bq-neutral-600);--bq-stroke--tertiary:var(--bq-neutral-900);--bq-stroke--inverse:var(--bq-white);--bq-stroke--brand:var(--bq-brand);--bq-stroke--alt:var(--bq-neutral-50);--bq-stroke--brand-alt:var(--bq-brand-light);--bq-stroke--success:var(--bq-success);--bq-stroke--warning:var(--bq-warning);--bq-stroke--danger:var(--bq-danger);--bq-stroke--info:var(--bq-info);--bq-text--primary:var(--bq-neutral-800);--bq-text--secondary:var(--bq-neutral-600);--bq-text--inverse:var(--bq-neutral-50);--bq-text--brand:var(--bq-brand);--bq-text--alt:var(--bq-white);--bq-text--info:var(--bq-info);--bq-text--success:var(--bq-success);--bq-text--warning:var(--bq-warning);--bq-text--danger:var(--bq-danger);--bq-ui--primary:var(--bq-white);--bq-ui--secondary:var(--bq-neutral-100);--bq-ui--tertiary:var(--bq-neutral-500);--bq-ui--inverse:var(--bq-neutral-900);--bq-ui--alt:var(--bq-neutral-50);--bq-ui--brand-alt:var(--bq-brand-light);--bq-ui--brand:var(--bq-brand);--bq-ui--success:var(--bq-success);--bq-ui--success-alt:var(--bq-success-light);--bq-ui--warning:var(--bq-warning);--bq-ui--warning-alt:var(--bq-warning-light);--bq-ui--danger:var(--bq-danger);--bq-ui--danger-alt:var(--bq-danger-light);--bq-ui--info:var(--bq-info);--bq-ui--info-alt:var(--bq-info-light);--bq-hover:#444546;--bq-active:#1f2026}.endava.dark,[bq-theme=endava][bq-mode=dark]{--bq-background--primary:var(--bq-neutral-1000);--bq-background--secondary:var(--bq-neutral-900);--bq-background--tertiary:var(--bq-neutral-800);--bq-background--alt:var(--bq-neutral-700);--bq-background--inverse:var(--bq-neutral-600);--bq-background--brand:var(--bq-brand);--bq-background--overlay:var(--bq-neutral-900);--bq-icon--primary:var(--bq-neutral-100);--bq-icon--secondary:var(--bq-neutral-400);--bq-icon--inverse:var(--bq-neutral-800);--bq-icon--brand:var(--bq-brand);--bq-icon--alt:var(--bq-white);--bq-icon--info:var(--bq-info);--bq-icon--success:var(--bq-success);--bq-icon--warning:var(--bq-warning);--bq-icon--danger:var(--bq-danger);--bq-stroke--primary:var(--bq-neutral-900);--bq-stroke--secondary:var(--bq-neutral-700);--bq-stroke--tertiary:var(--bq-neutral-400);--bq-stroke--inverse:var(--bq-neutral-950);--bq-stroke--brand:var(--bq-brand);--bq-stroke--brand-alt:var(--bq-brand-dark);--bq-stroke--alt:var(--bq-neutral-1000);--bq-stroke--success:var(--bq-success);--bq-stroke--warning:var(--bq-warning);--bq-stroke--danger:var(--bq-danger);--bq-stroke--info:var(--bq-info);--bq-text--primary:var(--bq-neutral-100);--bq-text--secondary:var(--bq-neutral-400);--bq-text--inverse:var(--bq-neutral-800);--bq-text--brand:var(--bq-brand);--bq-text--alt:var(--bq-neutral-white);--bq-text--info:var(--bq-info);--bq-text--success:var(--bq-success);--bq-text--warning:var(--bq-warning);--bq-text--danger:var(--bq-danger);--bq-ui--primary:var(--bq-neutral-900);--bq-ui--secondary:var(--bq-neutral-950);--bq-ui--tertiary:var(--bq-neutral-700);--bq-ui--inverse:var(--bq-neutral-100);--bq-ui--brand:var(--bq-brand);--bq-ui--brand-alt:var(--bq-brand-dark);--bq-ui--alt:var(--bq-neutral-950);--bq-ui--success:var(--bq-success);--bq-ui--success-alt:var(--bq-success-dark);--bq-ui--warning:var(--bq-warning);--bq-ui--warning-alt:var(--bq-warning-dark);--bq-ui--danger:var(--bq-danger);--bq-ui--danger-alt:var(--bq-danger-dark);--bq-ui--info:var(--bq-info);--bq-ui--info-alt:var(--bq-info-dark);--bq-hover:#444546;--bq-active:#1f2026}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.start-0{inset-inline-start:0}.-z-\\[1\\]{z-index:-1}.z-\\[--bq-tooltip--z-index\\]{z-index:var(--bq-tooltip--z-index)}.box-border{box-sizing:border-box}.rotate-45{--tw-rotate:45deg}.rotate-45,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rounded-\\[--bq-tooltip--border-radius\\]{border-radius:var(--bq-tooltip--border-radius)}.border-\\[length\\:--bq-tooltip--border-width\\]{border-width:var(--bq-tooltip--border-width)}.border-\\[color\\:--bq-tooltip--border-color\\]{border-color:var(--bq-tooltip--border-color)}.bg-\\[--bq-tooltip--background-color\\]{background-color:var(--bq-tooltip--background-color)}.text-\\[length\\:--bq-tooltip--font-size\\]{font-size:var(--bq-tooltip--font-size)}.leading-\\[--bq-tooltip--line-height\\]{line-height:var(--bq-tooltip--line-height)}.text-\\[color\\:--bq-tooltip--text-color\\]{color:var(--bq-tooltip--text-color)}.shadow-\\[shadow\\:--bq-tooltip--box-shadow\\]{--tw-shadow:var(--bq-tooltip--box-shadow);--tw-shadow-colored:var(--bq-tooltip--box-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.content-empty{--tw-content:"";content:var(--tw-content)}.bs-2{block-size:.5rem}.is-2{inline-size:.5rem}.is-\\[--bq-tooltip--width\\]{inline-size:var(--bq-tooltip--width)}.max-is-\\[--bq-tooltip--max-width\\]{max-inline-size:var(--bq-tooltip--max-width)}.p-b-\\[--bq-tooltip--paddingY\\]{padding-block:var(--bq-tooltip--paddingY)}.p-i-\\[--bq-tooltip--paddingX\\]{padding-inline:var(--bq-tooltip--paddingX)}.inset-bs-0{inset-block-start:0}@-webkit-keyframes fade-in{0%{opacity:0}}@keyframes fade-in{0%{opacity:0}}@-webkit-keyframes slide-in{0%{-webkit-transform:translateY(10px);transform:translateY(10px)}}@keyframes slide-in{0%{-webkit-transform:translateY(10px);transform:translateY(10px)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}:host{--bq-tooltip--background-color:var(--bq-ui--inverse);--bq-tooltip--box-shadow:var(--bq-box-shadow--m);--bq-tooltip--font-size:var(--bq-font-size--m);--bq-tooltip--line-height:var(--bq-font-line-height--regular);--bq-tooltip--text-color:var(--bq-text--inverse);--bq-tooltip--paddingX:var(--bq-spacing-xs);--bq-tooltip--paddingY:var(--bq-spacing-xs2);--bq-tooltip--border-color:transparent;--bq-tooltip--border-radius:var(--bq-radius--s);--bq-tooltip--border-style:none;--bq-tooltip--border-width:unset;--bq-tooltip--max-width:320px;--bq-tooltip--width:max-content;--bq-tooltip--z-index:10}.bq-tooltip--panel{--tw-shadow:var(--bq-tooltip--box-shadow);--tw-shadow-colored:var(--bq-tooltip--box-shadow);-webkit-animation:fade-in .3s ease 0s;animation:fade-in .3s ease 0s;background-color:var(--bq-tooltip--background-color);border-color:var(--bq-tooltip--border-color);border-radius:var(--bq-tooltip--border-radius);border-width:var(--bq-tooltip--border-width);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-sizing:border-box;color:var(--bq-tooltip--text-color);font-size:var(--bq-tooltip--font-size);inline-size:var(--bq-tooltip--width);line-height:var(--bq-tooltip--line-height);max-inline-size:var(--bq-tooltip--max-width);padding-block:var(--bq-tooltip--paddingY);padding-inline:var(--bq-tooltip--paddingX);pointer-events:none;position:fixed;z-index:var(--bq-tooltip--z-index)}.bq-tooltip--arrow,.bq-tooltip--arrow:before{block-size:.5rem;inline-size:.5rem;position:absolute;z-index:-1}.bq-tooltip--arrow:before{--tw-rotate:45deg;--tw-content:"";background-color:var(--bq-tooltip--background-color);content:var(--tw-content);inset-block-start:0;inset-inline-start:0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.visible{visibility:visible}.static{position:static}.relative{position:relative}.hidden{display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}`;
19769
+ const bqTooltipCss = () => `.bq-tooltip--arrow:before,.rotate-45,.transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1}.bq-tooltip--panel,.shadow-\\[shadow\\:--bq-tooltip--box-shadow\\]{--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}::backdrop,:root{--bq-blue-100:#e7f0fd;--bq-blue-200:#d0e2fb;--bq-blue-300:#a1c5f7;--bq-blue-400:#73a8f3;--bq-blue-500:#448bef;--bq-blue-600:#156eeb;--bq-blue-700:#1158bc;--bq-blue-800:#0d428d;--bq-blue-900:#082c5e;--bq-blue-1000:#04162f;--bq-corai-100:#fff2f2;--bq-corai-200:#ffe6e6;--bq-corai-300:#ffccce;--bq-corai-400:#ffb3b5;--bq-corai-500:#ff999d;--bq-corai-600:#ff8084;--bq-corai-700:#cc666a;--bq-corai-800:#994d4f;--bq-corai-900:#663335;--bq-corai-1000:#331a1a;--bq-cyan-100:#e8f7fb;--bq-cyan-200:#d2f0f8;--bq-cyan-300:#a5e1f1;--bq-cyan-400:#78d1e9;--bq-cyan-500:#4bc2e2;--bq-cyan-600:#1eb3db;--bq-cyan-700:#188faf;--bq-cyan-800:#126b83;--bq-cyan-900:#0c4858;--bq-cyan-1000:#06242c;--bq-gold-100:#fbf4ec;--bq-gold-200:#f7e9da;--bq-gold-300:#f0d3b6;--bq-gold-400:#e8bc91;--bq-gold-500:#e1a66d;--bq-gold-600:#d99048;--bq-gold-700:#ae733a;--bq-gold-800:#82562b;--bq-gold-900:#573a1d;--bq-gold-1000:#2b1d0e;--bq-green-100:#e8f8ef;--bq-green-200:#d2f1e0;--bq-green-300:#a5e3c1;--bq-green-400:#78d5a1;--bq-green-500:#4bc782;--bq-green-600:#1eb963;--bq-green-700:#18944f;--bq-green-800:#126f3b;--bq-green-900:#0c4a28;--bq-green-1000:#062514;--bq-grey-100:#f1f2f4;--bq-grey-200:#e7e8eb;--bq-grey-300:#caccd2;--bq-grey-400:#a6aab3;--bq-grey-50:#f6f6f8;--bq-grey-500:#898e99;--bq-grey-600:#646a77;--bq-grey-700:#3f4350;--bq-grey-800:#2a2c35;--bq-grey-900:#1c1d23;--bq-grey-950:#15161a;--bq-grey-1000:#0d0e11;--bq-indigo-100:#edecfc;--bq-indigo-200:#dcdafa;--bq-indigo-300:#b9b5f5;--bq-indigo-400:#9590ef;--bq-indigo-500:#726bea;--bq-indigo-600:#4f46e5;--bq-indigo-700:#3f38b7;--bq-indigo-800:#2f2a89;--bq-indigo-900:#201c5c;--bq-indigo-1000:#100e2e;--bq-iris-100:#e9f0ff;--bq-iris-200:#d6e0ff;--bq-iris-300:#b2c0fe;--bq-iris-400:#8691f8;--bq-iris-500:#6061ee;--bq-iris-600:#4f46e5;--bq-iris-700:#413abd;--bq-iris-800:#332e95;--bq-iris-900:#26216d;--bq-iris-1000:#181545;--bq-lime-100:#f5fae8;--bq-lime-200:#ecf6d2;--bq-lime-300:#d9eda5;--bq-lime-400:#c5e379;--bq-lime-500:#b2da4c;--bq-lime-600:#9fd11f;--bq-lime-700:#7fa719;--bq-lime-800:#5f7d13;--bq-lime-900:#40540c;--bq-lime-1000:#202a06;--bq-magenta-100:#fce7f4;--bq-magenta-200:#f9cfea;--bq-magenta-300:#f39fd6;--bq-magenta-400:#ee6fbf;--bq-magenta-500:#e83fab;--bq-magenta-600:#de1395;--bq-magenta-700:#b20f77;--bq-magenta-800:#850c59;--bq-magenta-900:#58083c;--bq-magenta-1000:#2c041e;--bq-neutral-white:#fbfbfc;--bq-neutral-black:#060708;--bq-orange-100:#fbf0e9;--bq-orange-200:#f8e1d4;--bq-orange-300:#f1c2a8;--bq-orange-400:#eaa47d;--bq-orange-500:#e38551;--bq-orange-600:#dc6726;--bq-orange-700:#b0521e;--bq-orange-800:#843e17;--bq-orange-900:#58290f;--bq-orange-1000:#2c1508;--bq-purple-100:#efebf8;--bq-purple-200:#e0d7f2;--bq-purple-300:#c1afe5;--bq-purple-400:#a388d8;--bq-purple-500:#8460cb;--bq-purple-600:#6538be;--bq-purple-700:#512d98;--bq-purple-800:#3d2272;--bq-purple-900:#28164c;--bq-purple-1000:#140b26;--bq-red-100:#fce7ea;--bq-red-200:#f9d1d5;--bq-red-300:#f3a2ac;--bq-red-400:#ed7482;--bq-red-500:#e74559;--bq-red-600:#e1172f;--bq-red-700:#b41226;--bq-red-800:#870e1c;--bq-red-900:#5a0913;--bq-red-1000:#2d0509;--bq-sky-100:#eff4fb;--bq-sky-200:#dfeaf8;--bq-sky-300:#bfd5f1;--bq-sky-400:#9ec1e9;--bq-sky-500:#7eace2;--bq-sky-600:#5e97db;--bq-sky-700:#4b79af;--bq-sky-800:#385b83;--bq-sky-900:#263c58;--bq-sky-1000:#131e2c;--bq-teal-100:#e5f7f5;--bq-teal-200:#ccf0eb;--bq-teal-300:#99e1d8;--bq-teal-400:#66d2c4;--bq-teal-500:#33c3b1;--bq-teal-600:#00b49d;--bq-teal-700:#00907e;--bq-teal-800:#006c5e;--bq-teal-900:#00483f;--bq-teal-1000:#00241f;--bq-volcano-100:#feede7;--bq-volcano-200:#fddbd1;--bq-volcano-300:#fbb8a3;--bq-volcano-400:#fa9474;--bq-volcano-500:#f87146;--bq-volcano-600:#f64d18;--bq-volcano-700:#c53e13;--bq-volcano-800:#942e0e;--bq-volcano-900:#621f0a;--bq-volcano-1000:#310f05;--bq-yellow-100:#fefbe7;--bq-yellow-200:#fcf6d0;--bq-yellow-300:#faeea0;--bq-yellow-400:#f7e571;--bq-yellow-500:#f5dd41;--bq-yellow-600:#f2d412;--bq-yellow-700:#c2aa0e;--bq-yellow-800:#917f0b;--bq-yellow-900:#615507;--bq-yellow-1000:#302a04;--bq-endava-grey-50:#f7f7f8;--bq-endava-grey-100:#e4e6e7;--bq-endava-grey-200:#b5babe;--bq-endava-grey-300:#949ca1;--bq-endava-grey-400:#737d84;--bq-endava-grey-500:#525f67;--bq-endava-grey-600:#30404b;--bq-endava-grey-700:#2b3942;--bq-endava-grey-800:#263139;--bq-endava-grey-900:#192b37;--bq-endava-grey-950:#151b1e;--bq-endava-grey-1000:#0f1316;--bq-endava-neutral-white:#fafbfb;--bq-endava-neutral-black:#060708;--bq-endava-orange-100:#fef3f1;--bq-endava-orange-200:#fbd6d1;--bq-endava-orange-300:#fab7af;--bq-endava-orange-400:#fa988b;--bq-endava-orange-500:#fc7866;--bq-endava-orange-600:#ff5640;--bq-endava-orange-700:#ce4a39;--bq-endava-orange-800:#a03d30;--bq-endava-orange-900:#722e25;--bq-endava-orange-1000:#471e19}*,:after,:before{box-sizing:border-box}*{font:inherit;margin:0}ol[role=list],ul[role=list]{list-style-type:none}html{text-size-adjust:none;font-family:var(--bq-font-family);font-size:var(--bq-font-size--m)}html:focus-within{scroll-behavior:smooth}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--bq-background--primary);color:var(--bq-text--primary);line-height:var(--bq-font-line-height--regular);min-height:100vb;text-rendering:optimizeSpeed}a:not([class]){text-decoration-skip-ink:auto}canvas,img,picture,svg,video{display:block;max-width:100%}button,input,select,textarea{font:inherit}h1,h2,h3,h4,h5,h6,p{overflow-wrap:break-word}@media (prefers-reduced-motion:reduce){html:focus-within{scroll-behavior:auto}*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto;transition-duration:.01ms!important}}:where(:root){--bq-white:#fff;--bq-black:#060708;--bq-neutral-50:var(--bq-grey-50);--bq-neutral-100:var(--bq-grey-100);--bq-neutral-200:var(--bq-grey-200);--bq-neutral-300:var(--bq-grey-300);--bq-neutral-400:var(--bq-grey-400);--bq-neutral-500:var(--bq-grey-500);--bq-neutral-600:var(--bq-grey-600);--bq-neutral-700:var(--bq-grey-700);--bq-neutral-800:var(--bq-grey-800);--bq-neutral-900:var(--bq-grey-900);--bq-neutral-950:var(--bq-grey-950);--bq-neutral-1000:var(--bq-grey-1000);--bq-brand-light:var(--bq-iris-100);--bq-brand:var(--bq-iris-600);--bq-brand-dark:var(--bq-iris-1000);--bq-accent-light:var(--bq-purple-100);--bq-accent:var(--bq-purple-600);--bq-accent-dark:var(--bq-purple-1000);--bq-success-light:var(--bq-teal-100);--bq-success:var(--bq-teal-600);--bq-success-dark:var(--bq-teal-1000);--bq-danger-light:var(--bq-red-100);--bq-danger:var(--bq-red-600);--bq-danger-dark:var(--bq-red-1000);--bq-warning-light:var(--bq-gold-100);--bq-warning:var(--bq-gold-600);--bq-warning-dark:var(--bq-gold-1000);--bq-info-light:var(--bq-iris-100);--bq-info:var(--bq-iris-600);--bq-info-dark:var(--bq-iris-1000);--bq-focus:var(--bq-iris-600);--bq-data-01:var(--bq-brand);--bq-data-02:var(--bq-purple-600);--bq-data-03:var(--bq-magenta-600);--bq-data-04:var(--bq-cyan-600);--bq-data-05:var(--bq-teal-600);--bq-data-06:var(--bq-orange-600);--bq-data-07:var(--bq-yellow-600);--bq-data-08:var(--bq-red-600);--bq-data-09:var(--bq-blue-600);--bq-data-10:var(--bq-grey-600);--bq-data-11:var(--bq-black);--bq-data-12:var(--bq-white);--bq-radius--none:0;--bq-radius--xs2:0.125rem;--bq-radius--xs:0.25rem;--bq-radius--s:0.5rem;--bq-radius--m:0.75rem;--bq-radius--l:1.5rem;--bq-radius--full:9999px;--bq-box-shadow--xs:0 2px 0 rgba(0,0,0,.016);--bq-box-shadow--s:0 8px 24px rgba(0,0,0,.04);--bq-box-shadow--m:0 10px 48px -16px rgba(0,0,0,.12);--bq-box-shadow--l:0 20px 58px -16px rgba(0,0,0,.16);--bq-font-family:"Outfit",sans-serif;--bq-font-size--xs:0.75rem;--bq-font-size--s:0.875rem;--bq-font-size--m:1rem;--bq-font-size--l:1.125rem;--bq-font-size--xl:1.5rem;--bq-font-size--xxl:2rem;--bq-font-size--xxl2:2.5rem;--bq-font-size--xxl3:3rem;--bq-font-size--xxl4:3.5rem;--bq-font-size--xxl5:4rem;--bq-font-weight--thin:100;--bq-font-weight--light:300;--bq-font-weight--regular:400;--bq-font-weight--medium:500;--bq-font-weight--semibold:600;--bq-font-weight--bold:700;--bq-font-line-height--small:1.2;--bq-font-line-height--regular:1.5;--bq-font-line-height--large:1.5;--bq-spacing-xs3:0.125rem;--bq-spacing-xs2:0.25rem;--bq-spacing-xs:0.5rem;--bq-spacing-s:0.75rem;--bq-spacing-m:1rem;--bq-spacing-l:1.5rem;--bq-spacing-xl:2rem;--bq-spacing-xxl:2.5rem;--bq-spacing-xxl2:3.5rem;--bq-spacing-xxl3:4rem;--bq-spacing-xxl4:4.5rem;--bq-stroke-s:1px;--bq-stroke-m:2px;--bq-stroke-l:3px}.beeq:not([bq-mode]),.light,:root:not([bq-theme]):not([bq-mode]),:root[bq-theme=beeq]:not([bq-mode]),[bq-mode=light]{--bq-background--primary:var(--bq-white);--bq-background--secondary:var(--bq-neutral-100);--bq-background--tertiary:var(--bq-neutral-200);--bq-background--alt:var(--bq-neutral-300);--bq-background--inverse:var(--bq-neutral-900);--bq-background--brand:var(--bq-brand);--bq-background--overlay:var(--bq-neutral-900);--bq-icon--primary:var(--bq-neutral-800);--bq-icon--alt:var(--bq-white);--bq-icon--secondary:var(--bq-neutral-600);--bq-icon--inverse:var(--bq-neutral-50);--bq-icon--brand:var(--bq-brand);--bq-icon--info:var(--bq-brand);--bq-icon--success:var(--bq-success);--bq-icon--warning:var(--bq-warning);--bq-icon--danger:var(--bq-danger);--bq-stroke--primary:var(--bq-neutral-200);--bq-stroke--secondary:var(--bq-neutral-600);--bq-stroke--tertiary:var(--bq-neutral-900);--bq-stroke--inverse:var(--bq-white);--bq-stroke--brand:var(--bq-brand);--bq-stroke--alt:var(--bq-neutral-50);--bq-stroke--success:var(--bq-success);--bq-stroke--warning:var(--bq-warning);--bq-stroke--danger:var(--bq-danger);--bq-stroke--info:var(--bq-brand);--bq-text--primary:var(--bq-neutral-800);--bq-text--secondary:var(--bq-neutral-600);--bq-text--inverse:var(--bq-neutral-50);--bq-text--brand:var(--bq-brand);--bq-text--alt:var(--bq-white);--bq-text--info:var(--bq-brand);--bq-text--success:var(--bq-success);--bq-text--warning:var(--bq-warning);--bq-text--danger:var(--bq-danger);--bq-ui--primary:var(--bq-white);--bq-ui--secondary:var(--bq-neutral-100);--bq-ui--tertiary:var(--bq-neutral-500);--bq-ui--inverse:var(--bq-neutral-900);--bq-ui--brand:var(--bq-brand);--bq-ui--brand-alt:var(--bq-brand-light);--bq-ui--alt:var(--bq-neutral-50);--bq-ui--success:var(--bq-success);--bq-ui--success-alt:var(--bq-success-light);--bq-ui--warning:var(--bq-warning);--bq-ui--warning-alt:var(--bq-warning-light);--bq-ui--danger:var(--bq-danger);--bq-ui--danger-alt:var(--bq-danger-light);--bq-ui--info:var(--bq-brand);--bq-ui--info-alt:var(--bq-brand-light);--bq-hover:#bcbfc5;--bq-active:#444546}.dark,[bq-mode=dark]{--bq-background--primary:var(--bq-neutral-1000);--bq-background--secondary:var(--bq-neutral-950);--bq-background--tertiary:var(--bq-neutral-800);--bq-background--alt:var(--bq-neutral-700);--bq-background--inverse:var(--bq-neutral-600);--bq-background--brand:var(--bq-brand);--bq-background--overlay:var(--bq-neutral-900);--bq-icon--primary:var(--bq-neutral-100);--bq-icon--secondary:var(--bq-neutral-400);--bq-icon--inverse:var(--bq-neutral-800);--bq-icon--brand:var(--bq-brand);--bq-icon--alt:var(--bq-white);--bq-icon--info:var(--bq-brand);--bq-icon--success:var(--bq-success);--bq-icon--warning:var(--bq-warning);--bq-icon--danger:var(--bq-danger);--bq-stroke--primary:var(--bq-neutral-900);--bq-stroke--secondary:var(--bq-neutral-700);--bq-stroke--tertiary:var(--bq-neutral-400);--bq-stroke--inverse:var(--bq-neutral-950);--bq-stroke--brand:var(--bq-brand);--bq-stroke--alt:var(--bq-neutral-1000);--bq-stroke--success:var(--bq-success);--bq-stroke--warning:var(--bq-warning);--bq-stroke--danger:var(--bq-danger);--bq-stroke--info:var(--bq-brand);--bq-text--primary:var(--bq-neutral-100);--bq-text--secondary:var(--bq-neutral-400);--bq-text--inverse:var(--bq-neutral-800);--bq-text--brand:var(--bq-brand);--bq-text--alt:var(--bq-white);--bq-text--info:var(--bq-brand);--bq-text--success:var(--bq-success);--bq-text--warning:var(--bq-warning);--bq-text--danger:var(--bq-danger);--bq-ui--primary:var(--bq-neutral-900);--bq-ui--secondary:var(--bq-neutral-950);--bq-ui--tertiary:var(--bq-neutral-700);--bq-ui--inverse:var(--bq-neutral-100);--bq-ui--brand:var(--bq-brand);--bq-ui--brand-alt:var(--bq-brand-dark);--bq-ui--alt:var(--bq-neutral-950);--bq-ui--success:var(--bq-success);--bq-ui--success-alt:var(--bq-success-dark);--bq-ui--warning:var(--bq-warning);--bq-ui--warning-alt:var(--bq-warning-dark);--bq-ui--danger:var(--bq-danger);--bq-ui--danger-alt:var(--bq-danger-dark);--bq-ui--info:var(--bq-brand);--bq-ui--info-alt:var(--bq-brand-dark);--bq-hover:#444546;--bq-active:#1f2026}:where(.endava),:where([bq-theme=endava]){--bq-font-family:"Poppins",sans-serif;--bq-white:#fafbfb;--bq-black:#030406;--bq-neutral-50:var(--bq-endava-grey-50);--bq-neutral-100:var(--bq-endava-grey-100);--bq-neutral-200:var(--bq-endava-grey-200);--bq-neutral-300:var(--bq-endava-grey-300);--bq-neutral-400:var(--bq-endava-grey-400);--bq-neutral-500:var(--bq-endava-grey-500);--bq-neutral-600:var(--bq-endava-grey-600);--bq-neutral-700:var(--bq-endava-grey-700);--bq-neutral-800:var(--bq-endava-grey-800);--bq-neutral-900:var(--bq-endava-grey-900);--bq-neutral-950:var(--bq-endava-grey-950);--bq-neutral-1000:var(--bq-endava-grey-1000);--bq-brand-light:var(--bq-endava-orange-100);--bq-brand:var(--bq-endava-orange-600);--bq-brand-dark:var(--bq-endava-orange-1000);--bq-accent-light:var(--bq-endava-orange-100);--bq-accent:var(--bq-endava-orange-600);--bq-accent-dark:var(--bq-endava-orange-1000);--bq-success-light:var(--bq-green-100);--bq-success:var(--bq-green-600);--bq-success-dark:var(--bq-green-1000);--bq-danger-light:var(--bq-corai-100);--bq-danger:var(--bq-corai-600);--bq-danger-dark:var(--bq-corai-1000);--bq-warning-light:var(--bq-yellow-100);--bq-warning:var(--bq-yellow-600);--bq-warning-dark:var(--bq-yellow-1000);--bq-info-light:var(--bq-blue-100);--bq-info:var(--bq-blue-600);--bq-info-dark:var(--bq-blue-1000);--bq-focus:var(--bq-endava-orange-600);--bq-data-01:var(--bq-brand);--bq-data-02:#af0cd8;--bq-data-03:#0ca8d8;--bq-data-04:var(--bq-teal-600);--bq-data-05:var(--bq-yellow-600);--bq-data-06:var(--bq-orange-600);--bq-data-07:var(--bq-blue-600);--bq-data-08:var(--bq-red-600);--bq-data-09:var(--bq-purple-600);--bq-data-10:#394b56;--bq-data-11:var(--bq-black);--bq-data-12:var(--bq-white)}.endava.light,.endava:not([bq-mode]),[bq-theme=endava]:not([bq-mode]),[bq-theme=endava][bq-mode=light]{--bq-background--primary:var(--bq-white);--bq-background--secondary:var(--bq-neutral-100);--bq-background--tertiary:var(--bq-neutral-200);--bq-background--alt:var(--bq-neutral-300);--bq-background--inverse:var(--bq-neutral-900);--bq-background--brand:var(--bq-brand);--bq-background--overlay:var(--bq-neutral-900);--bq-icon--primary:var(--bq-neutral-800);--bq-icon--secondary:var(--bq-neutral-600);--bq-icon--inverse:var(--bq-neutral-50);--bq-icon--brand:var(--bq-brand);--bq-icon--alt:var(--bq-white);--bq-icon--info:var(--bq-info);--bq-icon--success:var(--bq-success);--bq-icon--warning:var(--bq-warning);--bq-icon--danger:var(--bq-danger);--bq-stroke--primary:var(--bq-neutral-200);--bq-stroke--secondary:var(--bq-neutral-600);--bq-stroke--tertiary:var(--bq-neutral-900);--bq-stroke--inverse:var(--bq-white);--bq-stroke--brand:var(--bq-brand);--bq-stroke--alt:var(--bq-neutral-50);--bq-stroke--brand-alt:var(--bq-brand-light);--bq-stroke--success:var(--bq-success);--bq-stroke--warning:var(--bq-warning);--bq-stroke--danger:var(--bq-danger);--bq-stroke--info:var(--bq-info);--bq-text--primary:var(--bq-neutral-800);--bq-text--secondary:var(--bq-neutral-600);--bq-text--inverse:var(--bq-neutral-50);--bq-text--brand:var(--bq-brand);--bq-text--alt:var(--bq-white);--bq-text--info:var(--bq-info);--bq-text--success:var(--bq-success);--bq-text--warning:var(--bq-warning);--bq-text--danger:var(--bq-danger);--bq-ui--primary:var(--bq-white);--bq-ui--secondary:var(--bq-neutral-100);--bq-ui--tertiary:var(--bq-neutral-500);--bq-ui--inverse:var(--bq-neutral-900);--bq-ui--alt:var(--bq-neutral-50);--bq-ui--brand-alt:var(--bq-brand-light);--bq-ui--brand:var(--bq-brand);--bq-ui--success:var(--bq-success);--bq-ui--success-alt:var(--bq-success-light);--bq-ui--warning:var(--bq-warning);--bq-ui--warning-alt:var(--bq-warning-light);--bq-ui--danger:var(--bq-danger);--bq-ui--danger-alt:var(--bq-danger-light);--bq-ui--info:var(--bq-info);--bq-ui--info-alt:var(--bq-info-light);--bq-hover:#444546;--bq-active:#1f2026}.endava.dark,[bq-theme=endava][bq-mode=dark]{--bq-background--primary:var(--bq-neutral-1000);--bq-background--secondary:var(--bq-neutral-900);--bq-background--tertiary:var(--bq-neutral-800);--bq-background--alt:var(--bq-neutral-700);--bq-background--inverse:var(--bq-neutral-600);--bq-background--brand:var(--bq-brand);--bq-background--overlay:var(--bq-neutral-900);--bq-icon--primary:var(--bq-neutral-100);--bq-icon--secondary:var(--bq-neutral-400);--bq-icon--inverse:var(--bq-neutral-800);--bq-icon--brand:var(--bq-brand);--bq-icon--alt:var(--bq-white);--bq-icon--info:var(--bq-info);--bq-icon--success:var(--bq-success);--bq-icon--warning:var(--bq-warning);--bq-icon--danger:var(--bq-danger);--bq-stroke--primary:var(--bq-neutral-900);--bq-stroke--secondary:var(--bq-neutral-700);--bq-stroke--tertiary:var(--bq-neutral-400);--bq-stroke--inverse:var(--bq-neutral-950);--bq-stroke--brand:var(--bq-brand);--bq-stroke--brand-alt:var(--bq-brand-dark);--bq-stroke--alt:var(--bq-neutral-1000);--bq-stroke--success:var(--bq-success);--bq-stroke--warning:var(--bq-warning);--bq-stroke--danger:var(--bq-danger);--bq-stroke--info:var(--bq-info);--bq-text--primary:var(--bq-neutral-100);--bq-text--secondary:var(--bq-neutral-400);--bq-text--inverse:var(--bq-neutral-800);--bq-text--brand:var(--bq-brand);--bq-text--alt:var(--bq-neutral-white);--bq-text--info:var(--bq-info);--bq-text--success:var(--bq-success);--bq-text--warning:var(--bq-warning);--bq-text--danger:var(--bq-danger);--bq-ui--primary:var(--bq-neutral-900);--bq-ui--secondary:var(--bq-neutral-950);--bq-ui--tertiary:var(--bq-neutral-700);--bq-ui--inverse:var(--bq-neutral-100);--bq-ui--brand:var(--bq-brand);--bq-ui--brand-alt:var(--bq-brand-dark);--bq-ui--alt:var(--bq-neutral-950);--bq-ui--success:var(--bq-success);--bq-ui--success-alt:var(--bq-success-dark);--bq-ui--warning:var(--bq-warning);--bq-ui--warning-alt:var(--bq-warning-dark);--bq-ui--danger:var(--bq-danger);--bq-ui--danger-alt:var(--bq-danger-dark);--bq-ui--info:var(--bq-info);--bq-ui--info-alt:var(--bq-info-dark);--bq-hover:#444546;--bq-active:#1f2026}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.inset-\\[unset\\]{inset:unset}.start-0{inset-inline-start:0}.-z-\\[1\\]{z-index:-1}.z-\\[--bq-tooltip--z-index\\]{z-index:var(--bq-tooltip--z-index)}.m-0{margin:0}.box-border{box-sizing:border-box}.rotate-45{--tw-rotate:45deg}.rotate-45,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.overflow-visible{overflow:visible}.rounded-\\[--bq-tooltip--border-radius\\]{border-radius:var(--bq-tooltip--border-radius)}.border-\\[length\\:--bq-tooltip--border-width\\]{border-width:var(--bq-tooltip--border-width)}.border-\\[color\\:--bq-tooltip--border-color\\]{border-color:var(--bq-tooltip--border-color)}.bg-\\[--bq-tooltip--background-color\\]{background-color:var(--bq-tooltip--background-color)}.text-\\[length\\:--bq-tooltip--font-size\\]{font-size:var(--bq-tooltip--font-size)}.leading-\\[--bq-tooltip--line-height\\]{line-height:var(--bq-tooltip--line-height)}.text-\\[color\\:--bq-tooltip--text-color\\]{color:var(--bq-tooltip--text-color)}.shadow-\\[shadow\\:--bq-tooltip--box-shadow\\]{--tw-shadow:var(--bq-tooltip--box-shadow);--tw-shadow-colored:var(--bq-tooltip--box-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.content-empty{--tw-content:"";content:var(--tw-content)}.bs-2{block-size:.5rem}.is-2{inline-size:.5rem}.is-\\[--bq-tooltip--width\\]{inline-size:var(--bq-tooltip--width)}.max-is-\\[--bq-tooltip--max-width\\]{max-inline-size:var(--bq-tooltip--max-width)}.p-b-\\[--bq-tooltip--paddingY\\]{padding-block:var(--bq-tooltip--paddingY)}.p-i-\\[--bq-tooltip--paddingX\\]{padding-inline:var(--bq-tooltip--paddingX)}.inset-bs-0{inset-block-start:0}@-webkit-keyframes fade-in{0%{opacity:0}}@keyframes fade-in{0%{opacity:0}}@-webkit-keyframes slide-in{0%{-webkit-transform:translateY(10px);transform:translateY(10px)}}@keyframes slide-in{0%{-webkit-transform:translateY(10px);transform:translateY(10px)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}:host{--bq-tooltip--background-color:var(--bq-ui--inverse);--bq-tooltip--box-shadow:var(--bq-box-shadow--m);--bq-tooltip--font-size:var(--bq-font-size--m);--bq-tooltip--line-height:var(--bq-font-line-height--regular);--bq-tooltip--text-color:var(--bq-text--inverse);--bq-tooltip--paddingX:var(--bq-spacing-xs);--bq-tooltip--paddingY:var(--bq-spacing-xs2);--bq-tooltip--border-color:transparent;--bq-tooltip--border-radius:var(--bq-radius--s);--bq-tooltip--border-style:none;--bq-tooltip--border-width:unset;--bq-tooltip--max-width:320px;--bq-tooltip--width:max-content;--bq-tooltip--z-index:10}.bq-tooltip--panel{--tw-shadow:var(--bq-tooltip--box-shadow);--tw-shadow-colored:var(--bq-tooltip--box-shadow);-webkit-animation:fade-in .3s ease 0s;animation:fade-in .3s ease 0s;background-color:var(--bq-tooltip--background-color);border-color:var(--bq-tooltip--border-color);border-radius:var(--bq-tooltip--border-radius);border-style:var(--bq-tooltip--border-style);border-width:var(--bq-tooltip--border-width);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-sizing:border-box;color:var(--bq-tooltip--text-color);font-size:var(--bq-tooltip--font-size);inline-size:var(--bq-tooltip--width);line-height:var(--bq-tooltip--line-height);max-inline-size:var(--bq-tooltip--max-width);padding-block:var(--bq-tooltip--paddingY);padding-inline:var(--bq-tooltip--paddingX);pointer-events:none;position:fixed;z-index:var(--bq-tooltip--z-index)}.bq-tooltip--panel[popover]{inset:unset;margin:0;overflow:visible;position:absolute}.bq-tooltip--arrow,.bq-tooltip--arrow:before{block-size:.5rem;inline-size:.5rem;position:absolute;z-index:-1}.bq-tooltip--arrow:before{--tw-rotate:45deg;--tw-content:"";background-color:var(--bq-tooltip--background-color);content:var(--tw-content);inset-block-start:0;inset-inline-start:0}.bq-tooltip--arrow:before,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.visible{visibility:visible}.static{position:static}.relative{position:relative}.hidden{display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.focus{outline:var(--bq-ring-width,2px) solid var(--bq-ring-color-focus,var(--bq-focus));outline-offset:var(--bq-ring-offset-width,1px)}`;
19732
19770
 
19733
19771
  /**
19734
19772
  * The Tooltip component is a small pop-up box that appears when a user hovers over or clicks on an element, providing additional information or context.
@@ -19790,6 +19828,16 @@ class BqTooltip {
19790
19828
  panel;
19791
19829
  arrow;
19792
19830
  floatingUI;
19831
+ /**
19832
+ * Whether the runtime supports the HTML Popover API. When `true`, the
19833
+ * panel is promoted to the browser top layer via `showPopover()`, which
19834
+ * bypasses containing blocks created by ancestor `transform`, `filter`,
19835
+ * `contain`, `will-change`, etc. When `false`, the panel remains a
19836
+ * regular `position: fixed` element in the shadow root, which still
19837
+ * covers the common case but is subject to those containing-block
19838
+ * quirks.
19839
+ */
19840
+ supportsPopover = isPopoverSupported();
19793
19841
  get el() { return getElement(this); }
19794
19842
  // State() variables
19795
19843
  // Inlined decorator, alphabetical order
@@ -19822,12 +19870,21 @@ class BqTooltip {
19822
19870
  }
19823
19871
  await this.show();
19824
19872
  }
19873
+ handleAlwaysVisibleChange() {
19874
+ if (this.alwaysVisible || this.visible) {
19875
+ this.showTooltip();
19876
+ return;
19877
+ }
19878
+ this.hideTooltip();
19879
+ }
19825
19880
  handleFloatingUIOptionsChange() {
19826
- this.floatingUI.init({
19881
+ this.floatingUI?.configure({
19882
+ ...(!this.hideArrow && { arrow: this.arrow }),
19827
19883
  placement: this.placement,
19828
19884
  distance: this.distance,
19829
19885
  sameWidth: this.sameWidth,
19830
- strategy: 'fixed',
19886
+ strategy: this.floatingStrategy,
19887
+ skidding: 0,
19831
19888
  });
19832
19889
  }
19833
19890
  // Events section
@@ -19847,17 +19904,49 @@ class BqTooltip {
19847
19904
  // Ordered by their natural call order
19848
19905
  // =====================================
19849
19906
  componentDidLoad() {
19907
+ // Promote the panel to the top layer when the Popover API is available.
19908
+ // This escapes containing blocks created by ancestor `transform`,
19909
+ // `filter`, `contain`, `will-change`, etc., which is the root cause of
19910
+ // scroll-related tooltip drift inside virtualised or transformed
19911
+ // containers (e.g. tall tables, dialogs). We use `manual` mode so BEEQ
19912
+ // keeps full control of show/hide semantics (delegated close, focus,
19913
+ // Escape) instead of the browser's `auto` light-dismiss behaviour.
19914
+ if (this.supportsPopover) {
19915
+ this.panel.popover = 'manual';
19916
+ }
19850
19917
  this.floatingUI = new FloatingUI(this.trigger, this.panel, {
19851
19918
  ...(!this.hideArrow && { arrow: this.arrow }),
19852
19919
  placement: this.placement,
19853
19920
  distance: this.distance,
19854
19921
  sameWidth: this.sameWidth,
19855
- strategy: 'absolute',
19922
+ strategy: this.floatingStrategy,
19856
19923
  skidding: 0,
19857
19924
  });
19925
+ // Honour the initial `visible` / `always-visible` props. Stencil's
19926
+ // `@Watch('visible')` does not fire for the initial value, so components
19927
+ // rendered with `visible` already true (or `always-visible`) would
19928
+ // otherwise stay hidden — in the Popover path because `showPopover()`
19929
+ // is only called from `show()`, and in the fallback path because the
19930
+ // panel's `hidden` attribute reflects the state at first render but
19931
+ // Floating UI would not have run a first positioning pass. Calling
19932
+ // `showTooltip()` here guarantees a consistent first paint.
19933
+ if (this.visible || this.alwaysVisible) {
19934
+ this.showTooltip();
19935
+ }
19936
+ }
19937
+ componentDidRender() {
19938
+ const arrow = this.hideArrow ? null : this.arrow;
19939
+ if (!this.floatingUI || this.floatingUI.options.arrow === arrow)
19940
+ return;
19941
+ this.floatingUI.configure({ arrow });
19942
+ }
19943
+ connectedCallback() {
19944
+ if (!this.floatingUI || (!this.visible && !this.alwaysVisible))
19945
+ return;
19946
+ this.showTooltip();
19858
19947
  }
19859
19948
  disconnectedCallback() {
19860
- this.floatingUI?.destroy();
19949
+ this.floatingUI?.stop();
19861
19950
  }
19862
19951
  // Listeners
19863
19952
  // ==============
@@ -19951,13 +20040,23 @@ class BqTooltip {
19951
20040
  showTooltip = () => {
19952
20041
  if (!this.panel)
19953
20042
  return;
19954
- this.floatingUI?.update();
20043
+ if (this.supportsPopover && !this.panel.matches(':popover-open')) {
20044
+ this.panel.showPopover();
20045
+ }
20046
+ this.floatingUI?.start();
19955
20047
  };
19956
20048
  hideTooltip = () => {
19957
20049
  if (!this.panel)
19958
20050
  return;
20051
+ this.floatingUI?.stop();
20052
+ if (this.supportsPopover && this.panel.matches(':popover-open')) {
20053
+ this.panel.hidePopover();
20054
+ }
19959
20055
  this.visible = false;
19960
20056
  };
20057
+ get floatingStrategy() {
20058
+ return this.supportsPopover ? 'absolute' : 'fixed';
20059
+ }
19961
20060
  get isHidden() {
19962
20061
  return !this.visible && !this.alwaysVisible;
19963
20062
  }
@@ -19965,22 +20064,22 @@ class BqTooltip {
19965
20064
  // Always the last one in the class.
19966
20065
  // ===================================
19967
20066
  render() {
19968
- return (hAsync("div", { key: 'f312ed1e15341e5596d868e6f85fdb496e04a2fe', class: "bq-tooltip relative", part: "base" }, hAsync("div", { key: 'e62b777ac939bcb2bc1a62a4639f461cf4d680f7', class: "bq-tooltip--trigger", onClick: this.handleTriggerOnClick, onFocusin: this.handleTriggerFocusin, onFocusout: this.handleTriggerFocusout, onMouseEnter: this.handleTriggerMouseOver, onMouseLeave: this.handleTriggerMouseLeave, part: "trigger", ref: (el) => {
20067
+ return (hAsync("div", { key: 'ee9c0ef2273ac7fe6dfb0be9133309e2c667d0d4', class: "bq-tooltip relative", part: "base" }, hAsync("div", { key: '659ef342fc16bb17fcd31ecec65d227716ec19d6', class: "bq-tooltip--trigger", onClick: this.handleTriggerOnClick, onFocusin: this.handleTriggerFocusin, onFocusout: this.handleTriggerFocusout, onMouseEnter: this.handleTriggerMouseOver, onMouseLeave: this.handleTriggerMouseLeave, part: "trigger", ref: (el) => {
19969
20068
  this.trigger = el;
19970
- } }, hAsync("slot", { key: '63bfa9cfca963f9c4ef57f583d80a9ea8741fc2a', name: "trigger" })), hAsync("div", { key: '842394883e5d3916a44d53bfc94946968a40682d', "aria-hidden": this.isHidden, class: "bq-tooltip--panel", hidden: this.isHidden, part: "panel", ref: (el) => {
20069
+ } }, hAsync("slot", { key: 'ca06aec8248f0697046e955496aeea7f576b668c', name: "trigger" })), hAsync("div", { key: 'e0c6aeb17ef8389ee2b94bf539fe18b75e2b3efe', "aria-hidden": String(this.isHidden), class: "bq-tooltip--panel", hidden: this.supportsPopover ? undefined : this.isHidden, part: "panel", ref: (el) => {
19971
20070
  this.panel = el;
19972
- }, role: "tooltip" }, !this.hideArrow && (hAsync("div", { key: 'c79a1192c15575c1557dd675184ecee7100bf1db', class: "bq-tooltip--arrow", ref: (el) => {
20071
+ }, role: "tooltip" }, !this.hideArrow && (hAsync("div", { key: 'b8a15a30ca88f460c957e99ed28492e967070d39', class: "bq-tooltip--arrow", ref: (el) => {
19973
20072
  this.arrow = el;
19974
- } })), hAsync("slot", { key: '974ac76b3b82a6a99e8651b209336882ea114dcc' }))));
20073
+ } })), hAsync("slot", { key: 'da5bc5041f93451b355f383add0a72891168b79d' }))));
19975
20074
  }
19976
20075
  static get watchers() { return {
19977
20076
  "visible": [{
19978
20077
  "handleVisibleChange": 0
19979
20078
  }],
19980
- "distance": [{
19981
- "handleFloatingUIOptionsChange": 0
20079
+ "alwaysVisible": [{
20080
+ "handleAlwaysVisibleChange": 0
19982
20081
  }],
19983
- "hideArrow": [{
20082
+ "distance": [{
19984
20083
  "handleFloatingUIOptionsChange": 0
19985
20084
  }],
19986
20085
  "placement": [{