@primer/behaviors 0.0.0-20250731030636 → 0.0.0-20250801034520

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.
@@ -6,6 +6,7 @@ export interface PositionSettings {
6
6
  anchorOffset: number;
7
7
  alignmentOffset: number;
8
8
  allowOutOfBounds: boolean;
9
+ enableAnchoredPositionViewportFix?: boolean;
9
10
  }
10
11
  export interface AnchorPosition {
11
12
  top: number;
@@ -84,9 +84,10 @@ const positionDefaults = {
84
84
  anchorOffset: 4,
85
85
  alignmentOffset: 4,
86
86
  allowOutOfBounds: false,
87
+ enableAnchoredPositionViewportFix: false,
87
88
  };
88
89
  function getDefaultSettings(settings = {}) {
89
- var _a, _b, _c, _d, _e;
90
+ var _a, _b, _c, _d, _e, _f;
90
91
  const side = (_a = settings.side) !== null && _a !== void 0 ? _a : positionDefaults.side;
91
92
  const align = (_b = settings.align) !== null && _b !== void 0 ? _b : positionDefaults.align;
92
93
  return {
@@ -95,15 +96,26 @@ function getDefaultSettings(settings = {}) {
95
96
  anchorOffset: (_c = settings.anchorOffset) !== null && _c !== void 0 ? _c : (side === 'inside-center' ? 0 : positionDefaults.anchorOffset),
96
97
  alignmentOffset: (_d = settings.alignmentOffset) !== null && _d !== void 0 ? _d : (align !== 'center' && side.startsWith('inside') ? positionDefaults.alignmentOffset : 0),
97
98
  allowOutOfBounds: (_e = settings.allowOutOfBounds) !== null && _e !== void 0 ? _e : positionDefaults.allowOutOfBounds,
99
+ enableAnchoredPositionViewportFix: (_f = settings.enableAnchoredPositionViewportFix) !== null && _f !== void 0 ? _f : positionDefaults.enableAnchoredPositionViewportFix,
98
100
  };
99
101
  }
100
- function pureCalculateAnchoredPosition(viewportRect, relativePosition, floatingRect, anchorRect, { side, align, allowOutOfBounds, anchorOffset, alignmentOffset }) {
101
- const relativeViewportRect = {
102
+ function pureCalculateAnchoredPosition(viewportRect, relativePosition, floatingRect, anchorRect, { side, align, allowOutOfBounds, anchorOffset, alignmentOffset, enableAnchoredPositionViewportFix }) {
103
+ let relativeViewportRect = {
102
104
  top: viewportRect.top - relativePosition.top,
103
105
  left: viewportRect.left - relativePosition.left,
104
106
  width: viewportRect.width,
105
107
  height: viewportRect.height,
106
108
  };
109
+ if (enableAnchoredPositionViewportFix) {
110
+ const scrollTop = window.pageYOffset || document.documentElement.scrollTop || 0;
111
+ const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || 0;
112
+ relativeViewportRect = {
113
+ top: scrollTop - relativePosition.top,
114
+ left: scrollLeft - relativePosition.left,
115
+ width: window.innerWidth || document.documentElement.clientWidth,
116
+ height: window.innerHeight || document.documentElement.clientHeight,
117
+ };
118
+ }
107
119
  let pos = calculatePosition(floatingRect, anchorRect, side, align, anchorOffset, alignmentOffset);
108
120
  let anchorSide = side;
109
121
  let anchorAlign = align;
@@ -6,6 +6,7 @@ export interface PositionSettings {
6
6
  anchorOffset: number;
7
7
  alignmentOffset: number;
8
8
  allowOutOfBounds: boolean;
9
+ enableAnchoredPositionViewportFix?: boolean;
9
10
  }
10
11
  export interface AnchorPosition {
11
12
  top: number;
@@ -82,9 +82,10 @@ const positionDefaults = {
82
82
  anchorOffset: 4,
83
83
  alignmentOffset: 4,
84
84
  allowOutOfBounds: false,
85
+ enableAnchoredPositionViewportFix: false,
85
86
  };
86
87
  function getDefaultSettings(settings = {}) {
87
- var _a, _b, _c, _d, _e;
88
+ var _a, _b, _c, _d, _e, _f;
88
89
  const side = (_a = settings.side) !== null && _a !== void 0 ? _a : positionDefaults.side;
89
90
  const align = (_b = settings.align) !== null && _b !== void 0 ? _b : positionDefaults.align;
90
91
  return {
@@ -93,15 +94,26 @@ function getDefaultSettings(settings = {}) {
93
94
  anchorOffset: (_c = settings.anchorOffset) !== null && _c !== void 0 ? _c : (side === 'inside-center' ? 0 : positionDefaults.anchorOffset),
94
95
  alignmentOffset: (_d = settings.alignmentOffset) !== null && _d !== void 0 ? _d : (align !== 'center' && side.startsWith('inside') ? positionDefaults.alignmentOffset : 0),
95
96
  allowOutOfBounds: (_e = settings.allowOutOfBounds) !== null && _e !== void 0 ? _e : positionDefaults.allowOutOfBounds,
97
+ enableAnchoredPositionViewportFix: (_f = settings.enableAnchoredPositionViewportFix) !== null && _f !== void 0 ? _f : positionDefaults.enableAnchoredPositionViewportFix,
96
98
  };
97
99
  }
98
- function pureCalculateAnchoredPosition(viewportRect, relativePosition, floatingRect, anchorRect, { side, align, allowOutOfBounds, anchorOffset, alignmentOffset }) {
99
- const relativeViewportRect = {
100
+ function pureCalculateAnchoredPosition(viewportRect, relativePosition, floatingRect, anchorRect, { side, align, allowOutOfBounds, anchorOffset, alignmentOffset, enableAnchoredPositionViewportFix }) {
101
+ let relativeViewportRect = {
100
102
  top: viewportRect.top - relativePosition.top,
101
103
  left: viewportRect.left - relativePosition.left,
102
104
  width: viewportRect.width,
103
105
  height: viewportRect.height,
104
106
  };
107
+ if (enableAnchoredPositionViewportFix) {
108
+ const scrollTop = window.pageYOffset || document.documentElement.scrollTop || 0;
109
+ const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || 0;
110
+ relativeViewportRect = {
111
+ top: scrollTop - relativePosition.top,
112
+ left: scrollLeft - relativePosition.left,
113
+ width: window.innerWidth || document.documentElement.clientWidth,
114
+ height: window.innerHeight || document.documentElement.clientHeight,
115
+ };
116
+ }
105
117
  let pos = calculatePosition(floatingRect, anchorRect, side, align, anchorOffset, alignmentOffset);
106
118
  let anchorSide = side;
107
119
  let anchorAlign = align;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primer/behaviors",
3
- "version": "0.0.0-20250731030636",
3
+ "version": "0.0.0-20250801034520",
4
4
  "description": "Shared behaviors for JavaScript components",
5
5
  "type": "commonjs",
6
6
  "main": "dist/cjs/index.js",