@atlaskit/top-layer 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +151 -0
  3. package/animations/package.json +17 -0
  4. package/arrow/package.json +17 -0
  5. package/create-close-event/package.json +17 -0
  6. package/dialog/package.json +17 -0
  7. package/dialog-scroll-lock/package.json +17 -0
  8. package/dist/cjs/animations/presets.js +199 -0
  9. package/dist/cjs/animations/types.js +5 -0
  10. package/dist/cjs/arrow/index.js +130 -0
  11. package/dist/cjs/arrow/types.js +5 -0
  12. package/dist/cjs/dialog/create-close-event.js +39 -0
  13. package/dist/cjs/dialog/dialog-content.compiled.css +14 -0
  14. package/dist/cjs/dialog/dialog-content.js +144 -0
  15. package/dist/cjs/dialog/index.js +19 -0
  16. package/dist/cjs/dialog/types.js +5 -0
  17. package/dist/cjs/dialog-scroll-lock/index.js +46 -0
  18. package/dist/cjs/entry-points/animations.js +36 -0
  19. package/dist/cjs/entry-points/arrow.js +12 -0
  20. package/dist/cjs/entry-points/create-close-event.js +19 -0
  21. package/dist/cjs/entry-points/dialog-scroll-lock.js +12 -0
  22. package/dist/cjs/entry-points/dialog.js +12 -0
  23. package/dist/cjs/entry-points/focus.js +24 -0
  24. package/dist/cjs/entry-points/placement-map.js +18 -0
  25. package/dist/cjs/entry-points/popover.js +12 -0
  26. package/dist/cjs/entry-points/popup-surface.js +12 -0
  27. package/dist/cjs/entry-points/popup.js +12 -0
  28. package/dist/cjs/entry-points/use-anchor-position.js +12 -0
  29. package/dist/cjs/entry-points/use-arrow-navigation.js +18 -0
  30. package/dist/cjs/entry-points/use-simple-light-dismiss.js +12 -0
  31. package/dist/cjs/focus/focus.js +115 -0
  32. package/dist/cjs/focus/index.js +24 -0
  33. package/dist/cjs/index.js +8 -0
  34. package/dist/cjs/internal/anchor-positioning-fallback.js +154 -0
  35. package/dist/cjs/internal/combine.js +29 -0
  36. package/dist/cjs/internal/ensure-preset-styles.js +34 -0
  37. package/dist/cjs/internal/reduced-motion.js +27 -0
  38. package/dist/cjs/internal/resolve-placement.js +24 -0
  39. package/dist/cjs/internal/role-types.js +66 -0
  40. package/dist/cjs/internal/set-style.js +42 -0
  41. package/dist/cjs/internal/slot.js +65 -0
  42. package/dist/cjs/internal/use-anchor-positioning.js +336 -0
  43. package/dist/cjs/internal/use-animated-visibility.js +169 -0
  44. package/dist/cjs/internal/use-animation-preset.js +24 -0
  45. package/dist/cjs/internal/use-focus-wrap.js +94 -0
  46. package/dist/cjs/internal/use-initial-focus.js +112 -0
  47. package/dist/cjs/internal/use-preset-styles.js +27 -0
  48. package/dist/cjs/placement-map/index.js +147 -0
  49. package/dist/cjs/popover/create-close-event.js +44 -0
  50. package/dist/cjs/popover/index.js +19 -0
  51. package/dist/cjs/popover/popover.compiled.css +13 -0
  52. package/dist/cjs/popover/popover.js +251 -0
  53. package/dist/cjs/popover/types.js +5 -0
  54. package/dist/cjs/popup/index.js +37 -0
  55. package/dist/cjs/popup/popup-content.js +201 -0
  56. package/dist/cjs/popup/popup-context.js +42 -0
  57. package/dist/cjs/popup/popup-surface.compiled.css +5 -0
  58. package/dist/cjs/popup/popup-surface.js +30 -0
  59. package/dist/cjs/popup/popup-trigger-function.js +74 -0
  60. package/dist/cjs/popup/popup-trigger.js +82 -0
  61. package/dist/cjs/popup/popup.js +70 -0
  62. package/dist/cjs/popup/types.js +5 -0
  63. package/dist/cjs/use-arrow-navigation/index.js +18 -0
  64. package/dist/cjs/use-arrow-navigation/use-arrow-navigation.js +245 -0
  65. package/dist/cjs/use-simple-light-dismiss/index.js +84 -0
  66. package/dist/es2019/animations/presets.js +375 -0
  67. package/dist/es2019/animations/types.js +1 -0
  68. package/dist/es2019/arrow/index.js +249 -0
  69. package/dist/es2019/arrow/types.js +1 -0
  70. package/dist/es2019/dialog/create-close-event.js +34 -0
  71. package/dist/es2019/dialog/dialog-content.compiled.css +14 -0
  72. package/dist/es2019/dialog/dialog-content.js +138 -0
  73. package/dist/es2019/dialog/index.js +2 -0
  74. package/dist/es2019/dialog/types.js +1 -0
  75. package/dist/es2019/dialog-scroll-lock/index.js +41 -0
  76. package/dist/es2019/entry-points/animations.js +1 -0
  77. package/dist/es2019/entry-points/arrow.js +1 -0
  78. package/dist/es2019/entry-points/create-close-event.js +2 -0
  79. package/dist/es2019/entry-points/dialog-scroll-lock.js +1 -0
  80. package/dist/es2019/entry-points/dialog.js +1 -0
  81. package/dist/es2019/entry-points/focus.js +1 -0
  82. package/dist/es2019/entry-points/placement-map.js +1 -0
  83. package/dist/es2019/entry-points/popover.js +1 -0
  84. package/dist/es2019/entry-points/popup-surface.js +1 -0
  85. package/dist/es2019/entry-points/popup.js +1 -0
  86. package/dist/es2019/entry-points/use-anchor-position.js +1 -0
  87. package/dist/es2019/entry-points/use-arrow-navigation.js +1 -0
  88. package/dist/es2019/entry-points/use-simple-light-dismiss.js +1 -0
  89. package/dist/es2019/focus/focus.js +107 -0
  90. package/dist/es2019/focus/index.js +1 -0
  91. package/dist/es2019/index.js +7 -0
  92. package/dist/es2019/internal/anchor-positioning-fallback.js +153 -0
  93. package/dist/es2019/internal/combine.js +18 -0
  94. package/dist/es2019/internal/ensure-preset-styles.js +29 -0
  95. package/dist/es2019/internal/reduced-motion.js +21 -0
  96. package/dist/es2019/internal/resolve-placement.js +19 -0
  97. package/dist/es2019/internal/role-types.js +61 -0
  98. package/dist/es2019/internal/set-style.js +39 -0
  99. package/dist/es2019/internal/slot.js +57 -0
  100. package/dist/es2019/internal/use-anchor-positioning.js +330 -0
  101. package/dist/es2019/internal/use-animated-visibility.js +159 -0
  102. package/dist/es2019/internal/use-animation-preset.js +18 -0
  103. package/dist/es2019/internal/use-focus-wrap.js +90 -0
  104. package/dist/es2019/internal/use-initial-focus.js +109 -0
  105. package/dist/es2019/internal/use-preset-styles.js +22 -0
  106. package/dist/es2019/placement-map/index.js +142 -0
  107. package/dist/es2019/popover/create-close-event.js +39 -0
  108. package/dist/es2019/popover/index.js +2 -0
  109. package/dist/es2019/popover/popover.compiled.css +13 -0
  110. package/dist/es2019/popover/popover.js +240 -0
  111. package/dist/es2019/popover/types.js +1 -0
  112. package/dist/es2019/popup/index.js +33 -0
  113. package/dist/es2019/popup/popup-content.js +192 -0
  114. package/dist/es2019/popup/popup-context.js +34 -0
  115. package/dist/es2019/popup/popup-surface.compiled.css +5 -0
  116. package/dist/es2019/popup/popup-surface.js +24 -0
  117. package/dist/es2019/popup/popup-trigger-function.js +69 -0
  118. package/dist/es2019/popup/popup-trigger.js +76 -0
  119. package/dist/es2019/popup/popup.js +56 -0
  120. package/dist/es2019/popup/types.js +1 -0
  121. package/dist/es2019/use-arrow-navigation/index.js +1 -0
  122. package/dist/es2019/use-arrow-navigation/use-arrow-navigation.js +238 -0
  123. package/dist/es2019/use-simple-light-dismiss/index.js +79 -0
  124. package/dist/esm/animations/presets.js +190 -0
  125. package/dist/esm/animations/types.js +1 -0
  126. package/dist/esm/arrow/index.js +123 -0
  127. package/dist/esm/arrow/types.js +1 -0
  128. package/dist/esm/dialog/create-close-event.js +33 -0
  129. package/dist/esm/dialog/dialog-content.compiled.css +14 -0
  130. package/dist/esm/dialog/dialog-content.js +135 -0
  131. package/dist/esm/dialog/index.js +2 -0
  132. package/dist/esm/dialog/types.js +1 -0
  133. package/dist/esm/dialog-scroll-lock/index.js +41 -0
  134. package/dist/esm/entry-points/animations.js +1 -0
  135. package/dist/esm/entry-points/arrow.js +1 -0
  136. package/dist/esm/entry-points/create-close-event.js +2 -0
  137. package/dist/esm/entry-points/dialog-scroll-lock.js +1 -0
  138. package/dist/esm/entry-points/dialog.js +1 -0
  139. package/dist/esm/entry-points/focus.js +1 -0
  140. package/dist/esm/entry-points/placement-map.js +1 -0
  141. package/dist/esm/entry-points/popover.js +1 -0
  142. package/dist/esm/entry-points/popup-surface.js +1 -0
  143. package/dist/esm/entry-points/popup.js +1 -0
  144. package/dist/esm/entry-points/use-anchor-position.js +1 -0
  145. package/dist/esm/entry-points/use-arrow-navigation.js +1 -0
  146. package/dist/esm/entry-points/use-simple-light-dismiss.js +1 -0
  147. package/dist/esm/focus/focus.js +107 -0
  148. package/dist/esm/focus/index.js +1 -0
  149. package/dist/esm/index.js +7 -0
  150. package/dist/esm/internal/anchor-positioning-fallback.js +147 -0
  151. package/dist/esm/internal/combine.js +23 -0
  152. package/dist/esm/internal/ensure-preset-styles.js +28 -0
  153. package/dist/esm/internal/reduced-motion.js +21 -0
  154. package/dist/esm/internal/resolve-placement.js +18 -0
  155. package/dist/esm/internal/role-types.js +60 -0
  156. package/dist/esm/internal/set-style.js +36 -0
  157. package/dist/esm/internal/slot.js +59 -0
  158. package/dist/esm/internal/use-anchor-positioning.js +323 -0
  159. package/dist/esm/internal/use-animated-visibility.js +162 -0
  160. package/dist/esm/internal/use-animation-preset.js +18 -0
  161. package/dist/esm/internal/use-focus-wrap.js +89 -0
  162. package/dist/esm/internal/use-initial-focus.js +107 -0
  163. package/dist/esm/internal/use-preset-styles.js +21 -0
  164. package/dist/esm/placement-map/index.js +141 -0
  165. package/dist/esm/popover/create-close-event.js +38 -0
  166. package/dist/esm/popover/index.js +2 -0
  167. package/dist/esm/popover/popover.compiled.css +13 -0
  168. package/dist/esm/popover/popover.js +242 -0
  169. package/dist/esm/popover/types.js +1 -0
  170. package/dist/esm/popup/index.js +33 -0
  171. package/dist/esm/popup/popup-content.js +192 -0
  172. package/dist/esm/popup/popup-context.js +34 -0
  173. package/dist/esm/popup/popup-surface.compiled.css +5 -0
  174. package/dist/esm/popup/popup-surface.js +23 -0
  175. package/dist/esm/popup/popup-trigger-function.js +69 -0
  176. package/dist/esm/popup/popup-trigger.js +74 -0
  177. package/dist/esm/popup/popup.js +61 -0
  178. package/dist/esm/popup/types.js +1 -0
  179. package/dist/esm/use-arrow-navigation/index.js +1 -0
  180. package/dist/esm/use-arrow-navigation/use-arrow-navigation.js +238 -0
  181. package/dist/esm/use-simple-light-dismiss/index.js +78 -0
  182. package/dist/types/animations/presets.d.ts +94 -0
  183. package/dist/types/animations/types.d.ts +42 -0
  184. package/dist/types/arrow/index.d.ts +24 -0
  185. package/dist/types/arrow/types.d.ts +29 -0
  186. package/dist/types/dialog/create-close-event.d.ts +24 -0
  187. package/dist/types/dialog/dialog-content.d.ts +20 -0
  188. package/dist/types/dialog/index.d.ts +3 -0
  189. package/dist/types/dialog/types.d.ts +92 -0
  190. package/dist/types/dialog-scroll-lock/index.d.ts +24 -0
  191. package/dist/types/entry-points/animations.d.ts +2 -0
  192. package/dist/types/entry-points/arrow.d.ts +2 -0
  193. package/dist/types/entry-points/create-close-event.d.ts +4 -0
  194. package/dist/types/entry-points/dialog-scroll-lock.d.ts +1 -0
  195. package/dist/types/entry-points/dialog.d.ts +2 -0
  196. package/dist/types/entry-points/focus.d.ts +2 -0
  197. package/dist/types/entry-points/placement-map.d.ts +2 -0
  198. package/dist/types/entry-points/popover.d.ts +2 -0
  199. package/dist/types/entry-points/popup-surface.d.ts +2 -0
  200. package/dist/types/entry-points/popup.d.ts +2 -0
  201. package/dist/types/entry-points/use-anchor-position.d.ts +1 -0
  202. package/dist/types/entry-points/use-arrow-navigation.d.ts +2 -0
  203. package/dist/types/entry-points/use-simple-light-dismiss.d.ts +2 -0
  204. package/dist/types/focus/focus.d.ts +42 -0
  205. package/dist/types/focus/index.d.ts +2 -0
  206. package/dist/types/index.d.ts +0 -0
  207. package/dist/types/internal/anchor-positioning-fallback.d.ts +24 -0
  208. package/dist/types/internal/combine.d.ts +14 -0
  209. package/dist/types/internal/ensure-preset-styles.d.ts +6 -0
  210. package/dist/types/internal/reduced-motion.d.ts +14 -0
  211. package/dist/types/internal/resolve-placement.d.ts +16 -0
  212. package/dist/types/internal/role-types.d.ts +62 -0
  213. package/dist/types/internal/set-style.d.ts +28 -0
  214. package/dist/types/internal/slot.d.ts +29 -0
  215. package/dist/types/internal/use-anchor-positioning.d.ts +95 -0
  216. package/dist/types/internal/use-animated-visibility.d.ts +74 -0
  217. package/dist/types/internal/use-animation-preset.d.ts +11 -0
  218. package/dist/types/internal/use-focus-wrap.d.ts +20 -0
  219. package/dist/types/internal/use-initial-focus.d.ts +21 -0
  220. package/dist/types/internal/use-preset-styles.d.ts +15 -0
  221. package/dist/types/placement-map/index.d.ts +55 -0
  222. package/dist/types/popover/create-close-event.d.ts +26 -0
  223. package/dist/types/popover/index.d.ts +3 -0
  224. package/dist/types/popover/popover.d.ts +22 -0
  225. package/dist/types/popover/types.d.ts +153 -0
  226. package/dist/types/popup/index.d.ts +34 -0
  227. package/dist/types/popup/popup-content.d.ts +14 -0
  228. package/dist/types/popup/popup-context.d.ts +96 -0
  229. package/dist/types/popup/popup-surface.d.ts +16 -0
  230. package/dist/types/popup/popup-trigger-function.d.ts +108 -0
  231. package/dist/types/popup/popup-trigger.d.ts +23 -0
  232. package/dist/types/popup/popup.d.ts +14 -0
  233. package/dist/types/popup/types.d.ts +289 -0
  234. package/dist/types/use-arrow-navigation/index.d.ts +2 -0
  235. package/dist/types/use-arrow-navigation/use-arrow-navigation.d.ts +136 -0
  236. package/dist/types/use-simple-light-dismiss/index.d.ts +45 -0
  237. package/dist/types-ts4.5/animations/presets.d.ts +94 -0
  238. package/dist/types-ts4.5/animations/types.d.ts +42 -0
  239. package/dist/types-ts4.5/arrow/index.d.ts +24 -0
  240. package/dist/types-ts4.5/arrow/types.d.ts +29 -0
  241. package/dist/types-ts4.5/dialog/create-close-event.d.ts +24 -0
  242. package/dist/types-ts4.5/dialog/dialog-content.d.ts +20 -0
  243. package/dist/types-ts4.5/dialog/index.d.ts +3 -0
  244. package/dist/types-ts4.5/dialog/types.d.ts +92 -0
  245. package/dist/types-ts4.5/dialog-scroll-lock/index.d.ts +24 -0
  246. package/dist/types-ts4.5/entry-points/animations.d.ts +2 -0
  247. package/dist/types-ts4.5/entry-points/arrow.d.ts +2 -0
  248. package/dist/types-ts4.5/entry-points/create-close-event.d.ts +4 -0
  249. package/dist/types-ts4.5/entry-points/dialog-scroll-lock.d.ts +1 -0
  250. package/dist/types-ts4.5/entry-points/dialog.d.ts +2 -0
  251. package/dist/types-ts4.5/entry-points/focus.d.ts +2 -0
  252. package/dist/types-ts4.5/entry-points/placement-map.d.ts +2 -0
  253. package/dist/types-ts4.5/entry-points/popover.d.ts +2 -0
  254. package/dist/types-ts4.5/entry-points/popup-surface.d.ts +2 -0
  255. package/dist/types-ts4.5/entry-points/popup.d.ts +2 -0
  256. package/dist/types-ts4.5/entry-points/use-anchor-position.d.ts +1 -0
  257. package/dist/types-ts4.5/entry-points/use-arrow-navigation.d.ts +2 -0
  258. package/dist/types-ts4.5/entry-points/use-simple-light-dismiss.d.ts +2 -0
  259. package/dist/types-ts4.5/focus/focus.d.ts +42 -0
  260. package/dist/types-ts4.5/focus/index.d.ts +2 -0
  261. package/dist/types-ts4.5/index.d.ts +0 -0
  262. package/dist/types-ts4.5/internal/anchor-positioning-fallback.d.ts +24 -0
  263. package/dist/types-ts4.5/internal/combine.d.ts +14 -0
  264. package/dist/types-ts4.5/internal/ensure-preset-styles.d.ts +6 -0
  265. package/dist/types-ts4.5/internal/reduced-motion.d.ts +14 -0
  266. package/dist/types-ts4.5/internal/resolve-placement.d.ts +16 -0
  267. package/dist/types-ts4.5/internal/role-types.d.ts +62 -0
  268. package/dist/types-ts4.5/internal/set-style.d.ts +28 -0
  269. package/dist/types-ts4.5/internal/slot.d.ts +29 -0
  270. package/dist/types-ts4.5/internal/use-anchor-positioning.d.ts +95 -0
  271. package/dist/types-ts4.5/internal/use-animated-visibility.d.ts +74 -0
  272. package/dist/types-ts4.5/internal/use-animation-preset.d.ts +11 -0
  273. package/dist/types-ts4.5/internal/use-focus-wrap.d.ts +20 -0
  274. package/dist/types-ts4.5/internal/use-initial-focus.d.ts +21 -0
  275. package/dist/types-ts4.5/internal/use-preset-styles.d.ts +15 -0
  276. package/dist/types-ts4.5/placement-map/index.d.ts +55 -0
  277. package/dist/types-ts4.5/popover/create-close-event.d.ts +26 -0
  278. package/dist/types-ts4.5/popover/index.d.ts +3 -0
  279. package/dist/types-ts4.5/popover/popover.d.ts +22 -0
  280. package/dist/types-ts4.5/popover/types.d.ts +153 -0
  281. package/dist/types-ts4.5/popup/index.d.ts +34 -0
  282. package/dist/types-ts4.5/popup/popup-content.d.ts +14 -0
  283. package/dist/types-ts4.5/popup/popup-context.d.ts +96 -0
  284. package/dist/types-ts4.5/popup/popup-surface.d.ts +16 -0
  285. package/dist/types-ts4.5/popup/popup-trigger-function.d.ts +108 -0
  286. package/dist/types-ts4.5/popup/popup-trigger.d.ts +23 -0
  287. package/dist/types-ts4.5/popup/popup.d.ts +14 -0
  288. package/dist/types-ts4.5/popup/types.d.ts +289 -0
  289. package/dist/types-ts4.5/use-arrow-navigation/index.d.ts +2 -0
  290. package/dist/types-ts4.5/use-arrow-navigation/use-arrow-navigation.d.ts +136 -0
  291. package/dist/types-ts4.5/use-simple-light-dismiss/index.d.ts +45 -0
  292. package/focus/package.json +17 -0
  293. package/package.json +95 -0
  294. package/placement-map/package.json +17 -0
  295. package/popover/package.json +17 -0
  296. package/popup/package.json +17 -0
  297. package/popup-surface/package.json +17 -0
  298. package/use-anchor-position/package.json +17 -0
  299. package/use-arrow-navigation/package.json +17 -0
  300. package/use-simple-light-dismiss/package.json +17 -0
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.computeFallbackPosition = computeFallbackPosition;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
10
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
11
+ /**
12
+ * Computes the base {top, left} position based on the primary edge,
13
+ * flipping to the opposite side when there is not enough space.
14
+ */
15
+ function computeEdgePosition(_ref) {
16
+ var axis = _ref.axis,
17
+ edge = _ref.edge,
18
+ triggerRect = _ref.triggerRect,
19
+ popoverWidth = _ref.popoverWidth,
20
+ popoverHeight = _ref.popoverHeight,
21
+ viewport = _ref.viewport,
22
+ offset = _ref.offset;
23
+ if (axis === 'block' && edge === 'end') {
24
+ // Below trigger
25
+ var spaceBelow = viewport.height - triggerRect.bottom;
26
+ var spaceAbove = triggerRect.top;
27
+ return {
28
+ top: spaceBelow >= popoverHeight + offset || spaceBelow >= spaceAbove ? triggerRect.bottom + offset : triggerRect.top - popoverHeight - offset,
29
+ left: triggerRect.left + triggerRect.width / 2 - popoverWidth / 2
30
+ };
31
+ }
32
+ if (axis === 'block' && edge === 'start') {
33
+ // Above trigger
34
+ var _spaceAbove = triggerRect.top;
35
+ var _spaceBelow = viewport.height - triggerRect.bottom;
36
+ return {
37
+ top: _spaceAbove >= popoverHeight + offset || _spaceAbove >= _spaceBelow ? triggerRect.top - popoverHeight - offset : triggerRect.bottom + offset,
38
+ left: triggerRect.left + triggerRect.width / 2 - popoverWidth / 2
39
+ };
40
+ }
41
+ if (axis === 'inline' && edge === 'end') {
42
+ // Right of trigger
43
+ var spaceRight = viewport.width - triggerRect.right;
44
+ var spaceLeft = triggerRect.left;
45
+ return {
46
+ top: triggerRect.top + triggerRect.height / 2 - popoverHeight / 2,
47
+ left: spaceRight >= popoverWidth + offset || spaceRight >= spaceLeft ? triggerRect.right + offset : triggerRect.left - popoverWidth - offset
48
+ };
49
+ }
50
+ if (axis === 'inline' && edge === 'start') {
51
+ // Left of trigger
52
+ var _spaceLeft = triggerRect.left;
53
+ var _spaceRight = viewport.width - triggerRect.right;
54
+ return {
55
+ top: triggerRect.top + triggerRect.height / 2 - popoverHeight / 2,
56
+ left: _spaceLeft >= popoverWidth + offset || _spaceLeft >= _spaceRight ? triggerRect.left - popoverWidth - offset : triggerRect.right + offset
57
+ };
58
+ }
59
+
60
+ // Unreachable for valid placements; defaults to below trigger
61
+ return {
62
+ top: triggerRect.bottom + offset,
63
+ left: triggerRect.left + triggerRect.width / 2 - popoverWidth / 2
64
+ };
65
+ }
66
+
67
+ /**
68
+ * Adjusts the base (centered) position for non-center alignments.
69
+ *
70
+ * `align: 'start'` → popover start edge at trigger start edge
71
+ * `align: 'end'` → popover end edge at trigger end edge
72
+ */
73
+ function applyAlignment(_ref2) {
74
+ var position = _ref2.position,
75
+ axis = _ref2.axis,
76
+ align = _ref2.align,
77
+ triggerRect = _ref2.triggerRect,
78
+ popoverWidth = _ref2.popoverWidth,
79
+ popoverHeight = _ref2.popoverHeight;
80
+ if (align === 'center') {
81
+ return position;
82
+ }
83
+ if (axis === 'block') {
84
+ // Block-axis placement → cross-axis is inline (left/right)
85
+ if (align === 'start') {
86
+ return _objectSpread(_objectSpread({}, position), {}, {
87
+ left: triggerRect.left
88
+ });
89
+ }
90
+ // align === 'end'
91
+ return _objectSpread(_objectSpread({}, position), {}, {
92
+ left: triggerRect.right - popoverWidth
93
+ });
94
+ }
95
+
96
+ // Inline-axis placement → cross-axis is block (top/bottom)
97
+ if (align === 'start') {
98
+ return _objectSpread(_objectSpread({}, position), {}, {
99
+ top: triggerRect.top
100
+ });
101
+ }
102
+ // align === 'end'
103
+ return _objectSpread(_objectSpread({}, position), {}, {
104
+ top: triggerRect.bottom - popoverHeight
105
+ });
106
+ }
107
+
108
+ /**
109
+ * JS fallback: compute popover position from trigger rect and viewport.
110
+ *
111
+ * Placement algorithm (from the document):
112
+ * - "block" placement: show above/below, picking the side with more space if flipping needed
113
+ * - "inline" placement: show left/right, picking the side with more space if flipping needed
114
+ * - "auto" placement: show on the edge with the most available space
115
+ *
116
+ * Re-runs on scroll (capture on window) and resize events.
117
+ */
118
+ function computeFallbackPosition(_ref3) {
119
+ var triggerRect = _ref3.triggerRect,
120
+ popoverEl = _ref3.popoverEl,
121
+ placement = _ref3.placement,
122
+ viewport = _ref3.viewport,
123
+ offset = _ref3.offset;
124
+ var axis = placement.axis,
125
+ edge = placement.edge,
126
+ align = placement.align;
127
+
128
+ // Measure popover dimensions (it might not have layout yet if just shown)
129
+ var popoverWidth = popoverEl.offsetWidth;
130
+ var popoverHeight = popoverEl.offsetHeight;
131
+ var basePosition = computeEdgePosition({
132
+ axis: axis,
133
+ edge: edge,
134
+ triggerRect: triggerRect,
135
+ popoverWidth: popoverWidth,
136
+ popoverHeight: popoverHeight,
137
+ viewport: viewport,
138
+ offset: offset
139
+ });
140
+ var alignedPosition = applyAlignment({
141
+ position: basePosition,
142
+ axis: axis,
143
+ align: align,
144
+ triggerRect: triggerRect,
145
+ popoverWidth: popoverWidth,
146
+ popoverHeight: popoverHeight
147
+ });
148
+
149
+ // Clamp to viewport so the popover is never offscreen
150
+ return {
151
+ top: Math.max(0, Math.min(alignedPosition.top, viewport.height - popoverHeight)),
152
+ left: Math.max(0, Math.min(alignedPosition.left, viewport.width - popoverWidth))
153
+ };
154
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.combine = combine;
7
+ /**
8
+ * Combine multiple cleanup functions into a single cleanup function.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * useEffect(() => {
13
+ * return combine(
14
+ * bind(window, { type: 'resize', listener: onResize }),
15
+ * bind(window, { type: 'scroll', listener: onScroll, options: { capture: true } }),
16
+ * );
17
+ * }, []);
18
+ * ```
19
+ */
20
+ function combine() {
21
+ for (var _len = arguments.length, cleanupFns = new Array(_len), _key = 0; _key < _len; _key++) {
22
+ cleanupFns[_key] = arguments[_key];
23
+ }
24
+ return function cleanup() {
25
+ cleanupFns.forEach(function (fn) {
26
+ return fn === null || fn === void 0 ? void 0 : fn();
27
+ });
28
+ };
29
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ensurePresetStyles = ensurePresetStyles;
7
+ /**
8
+ * Per-preset CSS injection.
9
+ *
10
+ * Each preset's CSS is injected at most once into `<head>`.
11
+ * Shared by both PopoverContent and DialogContent.
12
+ *
13
+ * Note: injected `<style>` elements and the tracking Set are append-only —
14
+ * they are never removed. This is intentional: the number of distinct
15
+ * presets is bounded (handful of animation + arrow presets), so the
16
+ * memory footprint is negligible. Removing styles would risk breaking
17
+ * other instances of the same preset that are still mounted.
18
+ *
19
+ * Decision (2026-03-17 audit): Accepted as a non-issue. The bounded
20
+ * preset count (~5 presets) makes cleanup unnecessary. We plan to move
21
+ * to a Compiled-based solution which will handle style injection and
22
+ * deduplication natively.
23
+ */
24
+ var injectedPresets = new Set();
25
+ function ensurePresetStyles(_ref) {
26
+ var preset = _ref.preset;
27
+ if (injectedPresets.has(preset.name) || typeof document === 'undefined') {
28
+ return;
29
+ }
30
+ injectedPresets.add(preset.name);
31
+ var style = document.createElement('style');
32
+ style.textContent = preset.css;
33
+ document.head.appendChild(style);
34
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.prefersReducedMotion = void 0;
8
+ var _once = _interopRequireDefault(require("@atlaskit/ds-lib/once"));
9
+ /**
10
+ * Returns `true` when the user prefers reduced motion.
11
+ *
12
+ * Safe for SSR (returns `false` when `window` is unavailable).
13
+ *
14
+ * The result is cached after the first call via `once`. This avoids
15
+ * calling `matchMedia` on every render. The trade-off is that if a user
16
+ * toggles the OS reduced-motion setting mid-session, the change won't
17
+ * take effect until the next page load. This is acceptable because
18
+ * toggling this system-level preference mid-session is extremely rare,
19
+ * and a page refresh is a reasonable expectation for system accessibility
20
+ * settings to take effect.
21
+ */
22
+ var prefersReducedMotion = exports.prefersReducedMotion = (0, _once.default)(function () {
23
+ if (typeof window === 'undefined' || !('matchMedia' in window)) {
24
+ return false;
25
+ }
26
+ return window.matchMedia('(prefers-reduced-motion: reduce)').matches;
27
+ });
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getPlacement = getPlacement;
7
+ /**
8
+ * Fully-resolved placement (internal). All fields are required.
9
+ * Use getPlacement({ placement: partial }) to obtain from partial input.
10
+ */
11
+
12
+ /**
13
+ * Resolves a partial placement to its fully-specified form.
14
+ * Defaults: `axis: 'block'`, `edge: 'end'`, `align: 'center'`.
15
+ */
16
+ function getPlacement(_ref) {
17
+ var _placement$axis, _placement$edge, _placement$align;
18
+ var placement = _ref.placement;
19
+ return {
20
+ axis: (_placement$axis = placement.axis) !== null && _placement$axis !== void 0 ? _placement$axis : 'block',
21
+ edge: (_placement$edge = placement.edge) !== null && _placement$edge !== void 0 ? _placement$edge : 'end',
22
+ align: (_placement$align = placement.align) !== null && _placement$align !== void 0 ? _placement$align : 'center'
23
+ };
24
+ }
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.roleToAriaHasPopup = roleToAriaHasPopup;
7
+ /**
8
+ * Valid values for the `aria-haspopup` attribute.
9
+ * Derived from the HTML spec — maps popover roles to what the trigger announces.
10
+ */
11
+
12
+ /**
13
+ * Roles that require an accessible name (`label` or `labelledBy`) per WCAG 4.1.2.
14
+ * Without a name, assistive technology cannot identify these landmarks.
15
+ */
16
+
17
+ /**
18
+ * Roles where the accessible name is derived from content or provided externally
19
+ * (e.g. a combobox labels its listbox, tooltip content IS the accessible name).
20
+ */
21
+
22
+ // ── Shared ARIA role discrimination types ──
23
+ //
24
+ // These encode the WCAG 4.1.2 constraint: roles like `dialog`, `alertdialog`,
25
+ // and `menu` MUST have an accessible name (either `label` or `labelledBy`).
26
+ // TypeScript enforces this at compile time via discriminated unions.
27
+
28
+ /**
29
+ * ARIA role props where a role is always required.
30
+ *
31
+ * Used by `TPopupContentProps` — popup content must always declare
32
+ * its role so assistive technology can identify the layer.
33
+ */
34
+
35
+ /**
36
+ * ARIA role props where a role is optional.
37
+ *
38
+ * Used by `TPopoverProps` — the low-level primitive allows omitting
39
+ * the role for cases where it is set externally or not needed.
40
+ */
41
+
42
+ /**
43
+ * Maps a popover content role to the correct `aria-haspopup` value
44
+ * for its trigger element.
45
+ */
46
+ function roleToAriaHasPopup(_ref) {
47
+ var role = _ref.role;
48
+ if (role === 'menu') {
49
+ return 'menu';
50
+ }
51
+ if (role === 'listbox') {
52
+ return 'listbox';
53
+ }
54
+ if (role === 'tree') {
55
+ return 'tree';
56
+ }
57
+ if (role === 'grid') {
58
+ return 'grid';
59
+ }
60
+ // Default: return 'dialog' for all unmapped roles (tooltip, alertdialog,
61
+ // note, status, alert, log, etc). This is a kinder API — rather than
62
+ // throwing on unknown roles, we fall back to the most common popup type.
63
+ // New roles that need specific aria-haspopup values should be added
64
+ // as explicit cases above.
65
+ return 'dialog';
66
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.setStyle = setStyle;
7
+ /**
8
+ * Sets inline styles on an element and returns a cleanup function
9
+ * that removes only the styles that were applied.
10
+ *
11
+ * Uses `style.setProperty()` / `style.removeProperty()` so that
12
+ * hyphenated CSS property names (e.g. `position-area`, `anchor-name`)
13
+ * work correctly. These newer properties do not have camelCase
14
+ * mappings in `CSSStyleDeclaration` yet.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * const cleanup = setStyle({ el: popover, styles: [
19
+ * { property: 'position-anchor', value: '--my-anchor' },
20
+ * { property: 'position-area', value: 'block-end' },
21
+ * { property: 'margin', value: '0' },
22
+ * ] });
23
+ *
24
+ * // Later: removes all three properties
25
+ * cleanup();
26
+ * ```
27
+ */
28
+ function setStyle(_ref) {
29
+ var el = _ref.el,
30
+ styles = _ref.styles;
31
+ styles.forEach(function (_ref2) {
32
+ var property = _ref2.property,
33
+ value = _ref2.value;
34
+ el.style.setProperty(property, value);
35
+ });
36
+ return function cleanup() {
37
+ styles.forEach(function (_ref3) {
38
+ var property = _ref3.property;
39
+ el.style.removeProperty(property);
40
+ });
41
+ };
42
+ }
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.Slot = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
+ var _react = require("react");
11
+ var _mergeRefs = _interopRequireDefault(require("@atlaskit/ds-lib/merge-refs"));
12
+ var _excluded = ["children"];
13
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
+ /**
16
+ * Extra DOM/event props are passed through to the cloned child.
17
+ */
18
+
19
+ /**
20
+ * Single element child: merge the caller ref with `child.ref`.
21
+ *
22
+ * Do not read `child.props.ref`: React keeps a `ref` key on `props` for
23
+ * host elements but accessing it logs a warning and returns `undefined`
24
+ * (ref lives on the element as `child.ref`).
25
+ */
26
+
27
+ function isSlotChild(child) {
28
+ return /*#__PURE__*/(0, _react.isValidElement)(child);
29
+ }
30
+
31
+ /**
32
+ * Merges props (including ref) onto a single React element child.
33
+ *
34
+ * A safer alternative to raw `cloneElement` that:
35
+ * 1. Guards with `isValidElement` — non-element children (strings,
36
+ * fragments, null) are returned as-is instead of crashing.
37
+ * 2. Merges refs via `mergeRefs` so both the caller's ref and the
38
+ * child's existing ref are honoured.
39
+ * 3. Spreads any additional props (ARIA attributes, event handlers, etc.)
40
+ * onto the child element.
41
+ *
42
+ * Event handlers (e.g. `onClick`) are **not** auto-merged — the caller's
43
+ * handler replaces the child's. Compose handlers before passing them in.
44
+ *
45
+ * @example
46
+ * ```tsx
47
+ * <Slot ref={triggerRef} onClick={handleClick} aria-expanded={isOpen}>
48
+ * <button>Open</button>
49
+ * </Slot>
50
+ * ```
51
+ */
52
+ var Slot = exports.Slot = /*#__PURE__*/(0, _react.forwardRef)(function Slot(slotProps, ref) {
53
+ var rawChildren = slotProps.children,
54
+ props = (0, _objectWithoutProperties2.default)(slotProps, _excluded);
55
+ // `SlotProps` intersects `Record<string, unknown>`, so `children` is typed as `unknown`.
56
+ var children = rawChildren;
57
+ if (!isSlotChild(children)) {
58
+ return children;
59
+ }
60
+
61
+ // eslint-disable-next-line @repo/internal/react/no-clone-element -- Slot is a controlled wrapper around cloneElement with isValidElement guard
62
+ return /*#__PURE__*/(0, _react.cloneElement)(children, _objectSpread(_objectSpread({}, props), {}, {
63
+ ref: (0, _mergeRefs.default)([ref, children.ref])
64
+ }));
65
+ });