@digdir/designsystemet-react 0.59.0 → 0.59.1-alpha.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 (121) hide show
  1. package/dist/cjs/components/Accordion/Accordion.js +1 -4
  2. package/dist/cjs/components/Accordion/AccordionContent/AccordionContent.js +1 -2
  3. package/dist/cjs/components/Accordion/AccordionHeader/AccordionHeader.js +1 -2
  4. package/dist/cjs/components/Accordion/AccordionItem/AccordionItem.js +1 -4
  5. package/dist/cjs/components/Button/Button.js +2 -2
  6. package/dist/cjs/components/DropdownMenu/DropdownMenuContent.js +4 -4
  7. package/dist/cjs/components/DropdownMenu/DropdownMenuTrigger.js +1 -1
  8. package/dist/cjs/components/Modal/ModalDialog.js +1 -1
  9. package/dist/cjs/components/Modal/ModalHeader/ModalHeader.js +1 -1
  10. package/dist/cjs/components/Modal/ModalHeader/ModalHeader.module.css.js +1 -1
  11. package/dist/cjs/components/Popover/PopoverContent.js +6 -6
  12. package/dist/cjs/components/Popover/PopoverTrigger.js +1 -1
  13. package/dist/cjs/components/Tooltip/Tooltip.js +6 -6
  14. package/dist/cjs/components/form/Checkbox/Checkbox.js +1 -1
  15. package/dist/cjs/components/form/Combobox/Combobox.js +72 -199
  16. package/dist/cjs/components/form/Combobox/Combobox.module.css.js +1 -1
  17. package/dist/cjs/components/form/Combobox/ComboboxContext.js +8 -0
  18. package/dist/cjs/components/form/Combobox/ComboboxIdContext.js +42 -0
  19. package/dist/cjs/components/form/Combobox/Custom/Custom.js +14 -9
  20. package/dist/cjs/components/form/Combobox/Empty/Empty.js +4 -4
  21. package/dist/cjs/components/form/Combobox/Option/Option.js +15 -33
  22. package/dist/cjs/components/form/Combobox/Option/useComboboxOption.js +47 -0
  23. package/dist/cjs/components/form/Combobox/internal/ComboboxChips.js +13 -10
  24. package/dist/cjs/components/form/Combobox/internal/ComboboxClearButton.js +5 -8
  25. package/dist/cjs/components/form/Combobox/internal/ComboboxInput.js +40 -69
  26. package/dist/cjs/components/form/Combobox/internal/ComboboxNative.js +2 -2
  27. package/dist/cjs/components/form/Combobox/useCombobox.js +77 -75
  28. package/dist/cjs/components/form/Combobox/useComboboxKeyboard.js +76 -0
  29. package/dist/cjs/components/form/Combobox/useFloatingCombobox.js +78 -0
  30. package/dist/cjs/components/form/Search/Search.js +1 -1
  31. package/dist/cjs/node_modules/@floating-ui/utils/{dom/dist → dist}/floating-ui.utils.dom.js +7 -4
  32. package/dist/cjs/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +5 -0
  33. package/dist/cjs/node_modules/clsx/dist/clsx.js +1 -1
  34. package/dist/cjs/node_modules/clsx/dist/lite.js +9 -0
  35. package/dist/cjs/{node_modules → packages/react/node_modules}/@floating-ui/core/dist/floating-ui.core.js +40 -16
  36. package/dist/cjs/{node_modules → packages/react/node_modules}/@floating-ui/dom/dist/floating-ui.dom.js +83 -31
  37. package/dist/cjs/{node_modules → packages/react/node_modules}/@floating-ui/react/dist/floating-ui.react.js +307 -157
  38. package/dist/cjs/{node_modules/@floating-ui/react/utils → packages/react/node_modules/@floating-ui/react}/dist/floating-ui.react.utils.js +9 -4
  39. package/dist/cjs/{node_modules → packages/react/node_modules}/@floating-ui/react-dom/dist/floating-ui.react-dom.js +22 -18
  40. package/dist/{esm → cjs/packages/react}/node_modules/tabbable/dist/index.esm.js +59 -13
  41. package/dist/cjs/react-css-modules.css +2 -136
  42. package/dist/cjs/utilities/RovingTabIndex/RovingTabindexItem.js +1 -1
  43. package/dist/cjs/utilities/RovingTabIndex/RovingTabindexRoot.js +1 -1
  44. package/dist/esm/components/Accordion/Accordion.js +1 -4
  45. package/dist/esm/components/Accordion/AccordionContent/AccordionContent.js +1 -2
  46. package/dist/esm/components/Accordion/AccordionHeader/AccordionHeader.js +1 -2
  47. package/dist/esm/components/Accordion/AccordionItem/AccordionItem.js +1 -4
  48. package/dist/esm/components/Button/Button.js +2 -2
  49. package/dist/esm/components/DropdownMenu/DropdownMenuContent.js +3 -3
  50. package/dist/esm/components/DropdownMenu/DropdownMenuTrigger.js +1 -1
  51. package/dist/esm/components/Modal/ModalDialog.js +1 -1
  52. package/dist/esm/components/Modal/ModalHeader/ModalHeader.js +1 -1
  53. package/dist/esm/components/Modal/ModalHeader/ModalHeader.module.css.js +1 -1
  54. package/dist/esm/components/Popover/PopoverContent.js +4 -4
  55. package/dist/esm/components/Popover/PopoverTrigger.js +1 -1
  56. package/dist/esm/components/Tooltip/Tooltip.js +4 -4
  57. package/dist/esm/components/form/Checkbox/Checkbox.js +1 -1
  58. package/dist/esm/components/form/Combobox/Combobox.js +76 -203
  59. package/dist/esm/components/form/Combobox/Combobox.module.css.js +1 -1
  60. package/dist/esm/components/form/Combobox/ComboboxContext.js +6 -0
  61. package/dist/esm/components/form/Combobox/ComboboxIdContext.js +35 -0
  62. package/dist/esm/components/form/Combobox/Custom/Custom.js +13 -8
  63. package/dist/esm/components/form/Combobox/Empty/Empty.js +3 -3
  64. package/dist/esm/components/form/Combobox/Option/Option.js +15 -33
  65. package/dist/esm/components/form/Combobox/Option/useComboboxOption.js +45 -0
  66. package/dist/esm/components/form/Combobox/internal/ComboboxChips.js +12 -9
  67. package/dist/esm/components/form/Combobox/internal/ComboboxClearButton.js +4 -7
  68. package/dist/esm/components/form/Combobox/internal/ComboboxInput.js +40 -69
  69. package/dist/esm/components/form/Combobox/internal/ComboboxNative.js +2 -2
  70. package/dist/esm/components/form/Combobox/useCombobox.js +77 -75
  71. package/dist/esm/components/form/Combobox/useComboboxKeyboard.js +74 -0
  72. package/dist/esm/components/form/Combobox/useFloatingCombobox.js +76 -0
  73. package/dist/esm/components/form/Search/Search.js +1 -1
  74. package/dist/esm/node_modules/@floating-ui/utils/{dom/dist → dist}/floating-ui.utils.dom.js +7 -4
  75. package/dist/esm/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +5 -0
  76. package/dist/esm/node_modules/clsx/dist/clsx.js +1 -1
  77. package/dist/esm/node_modules/clsx/dist/lite.js +4 -0
  78. package/dist/esm/{node_modules → packages/react/node_modules}/@floating-ui/core/dist/floating-ui.core.js +40 -16
  79. package/dist/esm/{node_modules → packages/react/node_modules}/@floating-ui/dom/dist/floating-ui.dom.js +82 -30
  80. package/dist/esm/{node_modules → packages/react/node_modules}/@floating-ui/react/dist/floating-ui.react.js +282 -135
  81. package/dist/esm/{node_modules/@floating-ui/react/utils → packages/react/node_modules/@floating-ui/react}/dist/floating-ui.react.utils.js +9 -5
  82. package/dist/esm/{node_modules → packages/react/node_modules}/@floating-ui/react-dom/dist/floating-ui.react-dom.js +19 -14
  83. package/dist/{cjs → esm/packages/react}/node_modules/tabbable/dist/index.esm.js +55 -15
  84. package/dist/esm/react-css-modules.css +2 -136
  85. package/dist/esm/utilities/RovingTabIndex/RovingTabindexItem.js +1 -1
  86. package/dist/esm/utilities/RovingTabIndex/RovingTabindexRoot.js +1 -1
  87. package/dist/types/components/Accordion/Accordion.d.ts.map +1 -1
  88. package/dist/types/components/Accordion/AccordionContent/AccordionContent.d.ts.map +1 -1
  89. package/dist/types/components/Accordion/AccordionHeader/AccordionHeader.d.ts.map +1 -1
  90. package/dist/types/components/Accordion/AccordionItem/AccordionItem.d.ts.map +1 -1
  91. package/dist/types/components/Modal/ModalHeader/ModalHeader.d.ts.map +1 -1
  92. package/dist/types/components/form/Combobox/Combobox.d.ts +95 -48
  93. package/dist/types/components/form/Combobox/Combobox.d.ts.map +1 -1
  94. package/dist/types/components/form/Combobox/ComboboxContext.d.ts +41 -0
  95. package/dist/types/components/form/Combobox/ComboboxContext.d.ts.map +1 -0
  96. package/dist/types/components/form/Combobox/ComboboxIdContext.d.ts +19 -0
  97. package/dist/types/components/form/Combobox/ComboboxIdContext.d.ts.map +1 -0
  98. package/dist/types/components/form/Combobox/Custom/Custom.d.ts.map +1 -1
  99. package/dist/types/components/form/Combobox/Option/Option.d.ts +2 -2
  100. package/dist/types/components/form/Combobox/Option/Option.d.ts.map +1 -1
  101. package/dist/types/components/form/Combobox/Option/useComboboxOption.d.ts +14 -0
  102. package/dist/types/components/form/Combobox/Option/useComboboxOption.d.ts.map +1 -0
  103. package/dist/types/components/form/Combobox/internal/ComboboxChips.d.ts.map +1 -1
  104. package/dist/types/components/form/Combobox/internal/ComboboxClearButton.d.ts.map +1 -1
  105. package/dist/types/components/form/Combobox/internal/ComboboxInput.d.ts +9 -2
  106. package/dist/types/components/form/Combobox/internal/ComboboxInput.d.ts.map +1 -1
  107. package/dist/types/components/form/Combobox/internal/ComboboxNative.d.ts +3 -1
  108. package/dist/types/components/form/Combobox/internal/ComboboxNative.d.ts.map +1 -1
  109. package/dist/types/components/form/Combobox/useCombobox.d.ts +14 -9
  110. package/dist/types/components/form/Combobox/useCombobox.d.ts.map +1 -1
  111. package/dist/types/components/form/Combobox/useComboboxKeyboard.d.ts +19 -0
  112. package/dist/types/components/form/Combobox/useComboboxKeyboard.d.ts.map +1 -0
  113. package/dist/types/components/form/Combobox/useFloatingCombobox.d.ts +41 -0
  114. package/dist/types/components/form/Combobox/useFloatingCombobox.d.ts.map +1 -0
  115. package/package.json +3 -3
  116. package/dist/cjs/components/Accordion/Accordion.module.css.js +0 -6
  117. package/dist/cjs/node_modules/@floating-ui/react/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +0 -6
  118. package/dist/cjs/node_modules/@floating-ui/react/node_modules/@floating-ui/utils/dom/dist/floating-ui.utils.dom.js +0 -68
  119. package/dist/esm/components/Accordion/Accordion.module.css.js +0 -4
  120. package/dist/esm/node_modules/@floating-ui/react/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +0 -4
  121. package/dist/esm/node_modules/@floating-ui/react/node_modules/@floating-ui/utils/dom/dist/floating-ui.utils.dom.js +0 -57
@@ -1,4 +1,9 @@
1
1
  'use client';
2
+ /**
3
+ * Custom positioning reference element.
4
+ * @see https://floating-ui.com/docs/virtual-elements
5
+ */
6
+
2
7
  const min = Math.min;
3
8
  const max = Math.max;
4
9
  const round = Math.round;
@@ -1,4 +1,4 @@
1
1
  'use client';
2
- function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);else for(t in e)e[t]&&(n&&(n+=" "),n+=t);return n}function clsx(){for(var e,t,f=0,n="";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}
2
+ function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}
3
3
 
4
4
  export { clsx, clsx as default };
@@ -0,0 +1,4 @@
1
+ 'use client';
2
+ function clsx(){for(var t,r=0,e="",n=arguments.length;r<n;r++)(t=arguments[r])&&"string"==typeof t&&(e+=(e&&" ")+t);return e}
3
+
4
+ export { clsx, clsx as default };
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { evaluate, getSide, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, getAlignmentSides, getSideAxis, clamp, getPaddingObject, rectToClientRect, getAlignmentAxis, getAlignment, getOppositeAxis, max, getAxisLength, min } from '../../utils/dist/floating-ui.utils.js';
2
+ import { evaluate, getSide, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, getAlignmentSides, getAlignment, getSideAxis, clamp, getPaddingObject, rectToClientRect, getAlignmentAxis, getOppositeAxis, getAxisLength, min, max } from '../../../../../../node_modules/@floating-ui/utils/dist/floating-ui.utils.js';
3
3
 
4
4
  function computeCoordsFromPlacement(_ref, placement, rtl) {
5
5
  let {
@@ -59,7 +59,7 @@ function computeCoordsFromPlacement(_ref, placement, rtl) {
59
59
 
60
60
  /**
61
61
  * Computes the `x` and `y` coordinates that will place the floating element
62
- * next to a reference element when it is given a certain positioning strategy.
62
+ * next to a given reference element.
63
63
  *
64
64
  * This export does not have any `platform` interface logic. You will need to
65
65
  * write one for the platform you are using Floating UI with.
@@ -137,7 +137,6 @@ const computePosition = async (reference, floating, config) => {
137
137
  } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
138
138
  }
139
139
  i = -1;
140
- continue;
141
140
  }
142
141
  }
143
142
  return {
@@ -200,6 +199,7 @@ async function detectOverflow(state, options) {
200
199
  y: 1
201
200
  };
202
201
  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({
202
+ elements,
203
203
  rect,
204
204
  offsetParent,
205
205
  strategy
@@ -227,7 +227,8 @@ const arrow = options => ({
227
227
  placement,
228
228
  rects,
229
229
  platform,
230
- elements
230
+ elements,
231
+ middlewareData
231
232
  } = state;
232
233
  // Since `element` is required, we don't Partial<> the type.
233
234
  const {
@@ -275,16 +276,20 @@ const arrow = options => ({
275
276
 
276
277
  // If the reference is small enough that the arrow's padding causes it to
277
278
  // to point to nothing for an aligned placement, adjust the offset of the
278
- // floating element itself. This stops `shift()` from taking action, but can
279
- // be worked around by calling it again after the `arrow()` if desired.
280
- const shouldAddOffset = getAlignment(placement) != null && center != offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
281
- const alignmentOffset = shouldAddOffset ? center < min$1 ? min$1 - center : max - center : 0;
279
+ // floating element itself. To ensure `shift()` continues to take action,
280
+ // a single reset is performed when this is true.
281
+ const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
282
+ const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;
282
283
  return {
283
- [axis]: coords[axis] - alignmentOffset,
284
+ [axis]: coords[axis] + alignmentOffset,
284
285
  data: {
285
286
  [axis]: offset,
286
- centerOffset: center - offset + alignmentOffset
287
- }
287
+ centerOffset: center - offset - alignmentOffset,
288
+ ...(shouldAddOffset && {
289
+ alignmentOffset
290
+ })
291
+ },
292
+ reset: shouldAddOffset
288
293
  };
289
294
  }
290
295
  });
@@ -303,7 +308,7 @@ const flip = function (options) {
303
308
  name: 'flip',
304
309
  options,
305
310
  async fn(state) {
306
- var _middlewareData$flip;
311
+ var _middlewareData$arrow, _middlewareData$flip;
307
312
  const {
308
313
  placement,
309
314
  middlewareData,
@@ -321,6 +326,14 @@ const flip = function (options) {
321
326
  flipAlignment = true,
322
327
  ...detectOverflowOptions
323
328
  } = evaluate(options, state);
329
+
330
+ // If a reset by the arrow was caused due to an alignment offset being
331
+ // added, we should skip any logic now since `flip()` has already done its
332
+ // work.
333
+ // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643
334
+ if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
335
+ return {};
336
+ }
324
337
  const side = getSide(placement);
325
338
  const isBasePlacement = getSide(initialPlacement) === initialPlacement;
326
339
  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
@@ -398,6 +411,7 @@ const flip = function (options) {
398
411
 
399
412
  // For type backwards-compatibility, the `OffsetOptions` type was also
400
413
  // Derivable.
414
+
401
415
  async function convertValueToCoords(state, options) {
402
416
  const {
403
417
  placement,
@@ -411,8 +425,6 @@ async function convertValueToCoords(state, options) {
411
425
  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;
412
426
  const crossAxisMulti = rtl && isVertical ? -1 : 1;
413
427
  const rawValue = evaluate(options, state);
414
-
415
- // eslint-disable-next-line prefer-const
416
428
  let {
417
429
  mainAxis,
418
430
  crossAxis,
@@ -454,15 +466,27 @@ const offset = function (options) {
454
466
  name: 'offset',
455
467
  options,
456
468
  async fn(state) {
469
+ var _middlewareData$offse, _middlewareData$arrow;
457
470
  const {
458
471
  x,
459
- y
472
+ y,
473
+ placement,
474
+ middlewareData
460
475
  } = state;
461
476
  const diffCoords = await convertValueToCoords(state, options);
477
+
478
+ // If the placement is the same and the arrow caused an alignment offset
479
+ // then we don't need to change the positioning coordinates.
480
+ if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
481
+ return {};
482
+ }
462
483
  return {
463
484
  x: x + diffCoords.x,
464
485
  y: y + diffCoords.y,
465
- data: diffCoords
486
+ data: {
487
+ ...diffCoords,
488
+ placement
489
+ }
466
490
  };
467
491
  }
468
492
  };
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- import { computePosition as computePosition$1 } from '../../core/dist/floating-ui.core.js';
3
- export { arrow, detectOverflow, flip, offset, shift, size } from '../../core/dist/floating-ui.core.js';
4
- import { createCoords, rectToClientRect, round, max, min, floor } from '../../utils/dist/floating-ui.utils.js';
5
- import { getOverflowAncestors, isElement, getWindow, getComputedStyle, getDocumentElement, isHTMLElement, isWebKit, getNodeName, isOverflowElement, getNodeScroll, isTableElement, isContainingBlock, getContainingBlock, getParentNode, isLastTraversableNode } from '../../utils/dom/dist/floating-ui.utils.dom.js';
2
+ import { shift as shift$1, flip as flip$1, arrow as arrow$1, size as size$1, computePosition as computePosition$1 } from '../../core/dist/floating-ui.core.js';
3
+ export { detectOverflow, offset } from '../../core/dist/floating-ui.core.js';
4
+ import { createCoords, rectToClientRect, round, max, min, floor } from '../../../../../../node_modules/@floating-ui/utils/dist/floating-ui.utils.js';
5
+ import { getOverflowAncestors, isElement, getWindow, getComputedStyle, getDocumentElement, isHTMLElement, isWebKit, getNodeName, isOverflowElement, getNodeScroll, isTableElement, isContainingBlock, getContainingBlock, getParentNode, isLastTraversableNode } from '../../../../../../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js';
6
6
 
7
7
  function getCssDimensions(element) {
8
8
  const css = getComputedStyle(element);
@@ -105,8 +105,9 @@ function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetPar
105
105
  if (domElement) {
106
106
  const win = getWindow(domElement);
107
107
  const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
108
- let currentIFrame = win.frameElement;
109
- while (currentIFrame && offsetParent && offsetWin !== win) {
108
+ let currentWin = win;
109
+ let currentIFrame = currentWin.frameElement;
110
+ while (currentIFrame && offsetParent && offsetWin !== currentWin) {
110
111
  const iframeScale = getScale(currentIFrame);
111
112
  const iframeRect = currentIFrame.getBoundingClientRect();
112
113
  const css = getComputedStyle(currentIFrame);
@@ -118,7 +119,8 @@ function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetPar
118
119
  height *= iframeScale.y;
119
120
  x += left;
120
121
  y += top;
121
- currentIFrame = getWindow(currentIFrame).frameElement;
122
+ currentWin = getWindow(currentIFrame);
123
+ currentIFrame = currentWin.frameElement;
122
124
  }
123
125
  }
124
126
  return rectToClientRect({
@@ -129,15 +131,28 @@ function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetPar
129
131
  });
130
132
  }
131
133
 
134
+ const topLayerSelectors = [':popover-open', ':modal'];
135
+ function isTopLayer(floating) {
136
+ return topLayerSelectors.some(selector => {
137
+ try {
138
+ return floating.matches(selector);
139
+ } catch (e) {
140
+ return false;
141
+ }
142
+ });
143
+ }
144
+
132
145
  function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
133
146
  let {
147
+ elements,
134
148
  rect,
135
149
  offsetParent,
136
150
  strategy
137
151
  } = _ref;
138
- const isOffsetParentAnElement = isHTMLElement(offsetParent);
152
+ const isFixed = strategy === 'fixed';
139
153
  const documentElement = getDocumentElement(offsetParent);
140
- if (offsetParent === documentElement) {
154
+ const topLayer = elements ? isTopLayer(elements.floating) : false;
155
+ if (offsetParent === documentElement || topLayer && isFixed) {
141
156
  return rect;
142
157
  }
143
158
  let scroll = {
@@ -146,7 +161,8 @@ function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
146
161
  };
147
162
  let scale = createCoords(1);
148
163
  const offsets = createCoords(0);
149
- if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {
164
+ const isOffsetParentAnElement = isHTMLElement(offsetParent);
165
+ if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
150
166
  if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
151
167
  scroll = getNodeScroll(offsetParent);
152
168
  }
@@ -272,7 +288,7 @@ function getClippingElementAncestors(element, cache) {
272
288
  if (cachedResult) {
273
289
  return cachedResult;
274
290
  }
275
- let result = getOverflowAncestors(element).filter(el => isElement(el) && getNodeName(el) !== 'body');
291
+ let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');
276
292
  let currentContainingBlockComputedStyle = null;
277
293
  const elementIsFixed = getComputedStyle(element).position === 'fixed';
278
294
  let currentNode = elementIsFixed ? getParentNode(element) : element;
@@ -327,7 +343,14 @@ function getClippingRect(_ref) {
327
343
  }
328
344
 
329
345
  function getDimensions(element) {
330
- return getCssDimensions(element);
346
+ const {
347
+ width,
348
+ height
349
+ } = getCssDimensions(element);
350
+ return {
351
+ width,
352
+ height
353
+ };
331
354
  }
332
355
 
333
356
  function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
@@ -352,9 +375,11 @@ function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
352
375
  offsets.x = getWindowScrollBarX(documentElement);
353
376
  }
354
377
  }
378
+ const x = rect.left + scroll.scrollLeft - offsets.x;
379
+ const y = rect.top + scroll.scrollTop - offsets.y;
355
380
  return {
356
- x: rect.left + scroll.scrollLeft - offsets.x,
357
- y: rect.top + scroll.scrollTop - offsets.y,
381
+ x,
382
+ y,
358
383
  width: rect.width,
359
384
  height: rect.height
360
385
  };
@@ -374,7 +399,7 @@ function getTrueOffsetParent(element, polyfill) {
374
399
  // such as table ancestors and cross browser bugs.
375
400
  function getOffsetParent(element, polyfill) {
376
401
  const window = getWindow(element);
377
- if (!isHTMLElement(element)) {
402
+ if (!isHTMLElement(element) || isTopLayer(element)) {
378
403
  return window;
379
404
  }
380
405
  let offsetParent = getTrueOffsetParent(element, polyfill);
@@ -387,20 +412,15 @@ function getOffsetParent(element, polyfill) {
387
412
  return offsetParent || getContainingBlock(element) || window;
388
413
  }
389
414
 
390
- const getElementRects = async function (_ref) {
391
- let {
392
- reference,
393
- floating,
394
- strategy
395
- } = _ref;
415
+ const getElementRects = async function (data) {
396
416
  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;
397
417
  const getDimensionsFn = this.getDimensions;
398
418
  return {
399
- reference: getRectRelativeToOffsetParent(reference, await getOffsetParentFn(floating), strategy),
419
+ reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),
400
420
  floating: {
401
421
  x: 0,
402
422
  y: 0,
403
- ...(await getDimensionsFn(floating))
423
+ ...(await getDimensionsFn(data.floating))
404
424
  }
405
425
  };
406
426
  };
@@ -428,8 +448,9 @@ function observeMove(element, onMove) {
428
448
  let timeoutId;
429
449
  const root = getDocumentElement(element);
430
450
  function cleanup() {
451
+ var _io;
431
452
  clearTimeout(timeoutId);
432
- io && io.disconnect();
453
+ (_io = io) == null || _io.disconnect();
433
454
  io = null;
434
455
  }
435
456
  function refresh(skip, threshold) {
@@ -535,7 +556,8 @@ function autoUpdate(reference, floating, update, options) {
535
556
  resizeObserver.unobserve(floating);
536
557
  cancelAnimationFrame(reobserveFrame);
537
558
  reobserveFrame = requestAnimationFrame(() => {
538
- resizeObserver && resizeObserver.observe(floating);
559
+ var _resizeObserver;
560
+ (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);
539
561
  });
540
562
  }
541
563
  update();
@@ -560,12 +582,13 @@ function autoUpdate(reference, floating, update, options) {
560
582
  }
561
583
  update();
562
584
  return () => {
585
+ var _resizeObserver2;
563
586
  ancestors.forEach(ancestor => {
564
587
  ancestorScroll && ancestor.removeEventListener('scroll', update);
565
588
  ancestorResize && ancestor.removeEventListener('resize', update);
566
589
  });
567
- cleanupIo && cleanupIo();
568
- resizeObserver && resizeObserver.disconnect();
590
+ cleanupIo == null || cleanupIo();
591
+ (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();
569
592
  resizeObserver = null;
570
593
  if (animationFrame) {
571
594
  cancelAnimationFrame(frameId);
@@ -573,10 +596,39 @@ function autoUpdate(reference, floating, update, options) {
573
596
  };
574
597
  }
575
598
 
599
+ /**
600
+ * Optimizes the visibility of the floating element by shifting it in order to
601
+ * keep it in view when it will overflow the clipping boundary.
602
+ * @see https://floating-ui.com/docs/shift
603
+ */
604
+ const shift = shift$1;
605
+
606
+ /**
607
+ * Optimizes the visibility of the floating element by flipping the `placement`
608
+ * in order to keep it in view when the preferred placement(s) will overflow the
609
+ * clipping boundary. Alternative to `autoPlacement`.
610
+ * @see https://floating-ui.com/docs/flip
611
+ */
612
+ const flip = flip$1;
613
+
614
+ /**
615
+ * Provides data that allows you to change the size of the floating element —
616
+ * for instance, prevent it from overflowing the clipping boundary or match the
617
+ * width of the reference element.
618
+ * @see https://floating-ui.com/docs/size
619
+ */
620
+ const size = size$1;
621
+
622
+ /**
623
+ * Provides data to position an inner element of the floating element so that it
624
+ * appears centered to the reference element.
625
+ * @see https://floating-ui.com/docs/arrow
626
+ */
627
+ const arrow = arrow$1;
628
+
576
629
  /**
577
630
  * Computes the `x` and `y` coordinates that will place the floating element
578
- * next to a reference element when it is given a certain CSS positioning
579
- * strategy.
631
+ * next to a given reference element.
580
632
  */
581
633
  const computePosition = (reference, floating, options) => {
582
634
  // This caches the expensive `getClippingElementAncestors` function so that
@@ -597,4 +649,4 @@ const computePosition = (reference, floating, options) => {
597
649
  });
598
650
  };
599
651
 
600
- export { autoUpdate, computePosition, getOverflowAncestors, platform };
652
+ export { arrow, autoUpdate, computePosition, flip, getOverflowAncestors, platform, shift, size };