@react-hive/honey-utils 3.30.0 → 3.31.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.
@@ -1335,35 +1335,38 @@ __webpack_require__.r(__webpack_exports__);
1335
1335
  *
1336
1336
  * ### Behavior
1337
1337
  * - Centering is calculated independently for each enabled axis.
1338
- * - Translation is applied only when the container content overflows on that axis.
1339
- * - When no overflow exists, the container remains untransformed for that axis.
1338
+ * - Raw centering offset is always calculated first.
1339
+ * - Offset clamping is optional and controlled by `shouldClamp`.
1340
1340
  *
1341
1341
  * ### Notes
1342
1342
  * - This function performs immediate DOM reads and writes.
1343
- * - The resulting transform is clamped to valid scrollable bounds.
1344
1343
  *
1345
1344
  * @param containerElement - The container whose content is translated.
1346
1345
  * @param elementToCenter - The descendant element to align to the container’s center.
1347
- * @param options - Optional configuration controlling which axis or axes are centered.
1346
+ * @param options - Optional configuration controlling centering behavior.
1348
1347
  */
1349
- const centerElementInContainer = (containerElement, elementToCenter, { axis = 'both' } = {}) => {
1348
+ const centerElementInContainer = (containerElement, elementToCenter, { axis = 'both', shouldClamp = true } = {}) => {
1350
1349
  let translateX = 0;
1351
1350
  let translateY = 0;
1352
1351
  if (axis === 'x' || axis === 'both') {
1353
- translateX = (0,_geometry__WEBPACK_IMPORTED_MODULE_1__.calculateCenterOffset)({
1354
- overflowSize: (0,_dom__WEBPACK_IMPORTED_MODULE_0__.getXOverflowWidth)(containerElement),
1352
+ const offsetX = (0,_geometry__WEBPACK_IMPORTED_MODULE_1__.calculateCenterOffset)({
1355
1353
  containerSize: containerElement.clientWidth,
1356
1354
  elementOffset: elementToCenter.offsetLeft,
1357
1355
  elementSize: elementToCenter.clientWidth,
1358
1356
  });
1357
+ translateX = shouldClamp
1358
+ ? (0,_geometry__WEBPACK_IMPORTED_MODULE_1__.clampOffsetToOverflow)(offsetX, (0,_dom__WEBPACK_IMPORTED_MODULE_0__.getXOverflowWidth)(containerElement))
1359
+ : offsetX;
1359
1360
  }
1360
1361
  if (axis === 'y' || axis === 'both') {
1361
- translateY = (0,_geometry__WEBPACK_IMPORTED_MODULE_1__.calculateCenterOffset)({
1362
- overflowSize: (0,_dom__WEBPACK_IMPORTED_MODULE_0__.getYOverflowHeight)(containerElement),
1362
+ const offsetY = (0,_geometry__WEBPACK_IMPORTED_MODULE_1__.calculateCenterOffset)({
1363
1363
  containerSize: containerElement.clientHeight,
1364
1364
  elementOffset: elementToCenter.offsetTop,
1365
1365
  elementSize: elementToCenter.clientHeight,
1366
1366
  });
1367
+ translateY = shouldClamp
1368
+ ? (0,_geometry__WEBPACK_IMPORTED_MODULE_1__.clampOffsetToOverflow)(offsetY, (0,_dom__WEBPACK_IMPORTED_MODULE_0__.getYOverflowHeight)(containerElement))
1369
+ : offsetY;
1367
1370
  }
1368
1371
  containerElement.style.transform = `translate(${translateX}px, ${translateY}px)`;
1369
1372
  };
@@ -2033,6 +2036,7 @@ __webpack_require__.r(__webpack_exports__);
2033
2036
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2034
2037
  /* harmony export */ applyInertiaStep: () => (/* reexport safe */ _apply_inertia_step__WEBPACK_IMPORTED_MODULE_2__.applyInertiaStep),
2035
2038
  /* harmony export */ calculateCenterOffset: () => (/* reexport safe */ _layout__WEBPACK_IMPORTED_MODULE_0__.calculateCenterOffset),
2039
+ /* harmony export */ clampOffsetToOverflow: () => (/* reexport safe */ _layout__WEBPACK_IMPORTED_MODULE_0__.clampOffsetToOverflow),
2036
2040
  /* harmony export */ resolveBoundedDelta: () => (/* reexport safe */ _resolve_bounded_delta__WEBPACK_IMPORTED_MODULE_1__.resolveBoundedDelta)
2037
2041
  /* harmony export */ });
2038
2042
  /* harmony import */ var _layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./layout */ "./src/geometry/layout/index.ts");
@@ -2056,24 +2060,43 @@ __webpack_require__.r(__webpack_exports__);
2056
2060
  /* harmony export */ calculateCenterOffset: () => (/* binding */ calculateCenterOffset)
2057
2061
  /* harmony export */ });
2058
2062
  /**
2059
- * Calculates the offset required to center an element within a container along a single axis.
2063
+ * Calculates the raw offset required to center an element within a container along a single axis.
2060
2064
  *
2061
- * The returned value is clamped so that the resulting translation does not
2062
- * exceed the container's scrollable bounds.
2065
+ * @returns A negative offset value suitable for use in a CSS `translate` transform.
2066
+ */
2067
+ const calculateCenterOffset = ({ containerSize, elementOffset, elementSize, }) => {
2068
+ const containerCenter = containerSize / 2;
2069
+ const elementCenter = elementOffset + elementSize / 2;
2070
+ const targetOffset = elementCenter - containerCenter;
2071
+ return -targetOffset;
2072
+ };
2073
+
2074
+
2075
+ /***/ },
2076
+
2077
+ /***/ "./src/geometry/layout/clamp-offset-to-overflow.ts"
2078
+ /*!*********************************************************!*\
2079
+ !*** ./src/geometry/layout/clamp-offset-to-overflow.ts ***!
2080
+ \*********************************************************/
2081
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2082
+
2083
+ __webpack_require__.r(__webpack_exports__);
2084
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2085
+ /* harmony export */ clampOffsetToOverflow: () => (/* binding */ clampOffsetToOverflow)
2086
+ /* harmony export */ });
2087
+ /**
2088
+ * Clamps a negative translation offset to the available overflow bounds.
2063
2089
  *
2064
- * This function performs pure math only and does not access the DOM.
2090
+ * @param offset - Negative translate offset.
2091
+ * @param overflowSize - Maximum overflow size along the axis.
2065
2092
  *
2066
- * @returns A negative offset value suitable for use in a CSS `translate`
2067
- * transform, or `0` when no overflow exists on the axis.
2093
+ * @returns Clamped negative offset, or `0` when no overflow exists.
2068
2094
  */
2069
- const calculateCenterOffset = ({ overflowSize, containerSize, elementOffset, elementSize, }) => {
2095
+ const clampOffsetToOverflow = (offset, overflowSize) => {
2070
2096
  if (overflowSize <= 0) {
2071
2097
  return 0;
2072
2098
  }
2073
- const containerCenter = containerSize / 2;
2074
- const elementCenter = elementOffset + elementSize / 2;
2075
- const targetOffset = elementCenter - containerCenter;
2076
- return -Math.max(0, Math.min(targetOffset, overflowSize));
2099
+ return Math.max(-overflowSize, Math.min(offset, 0));
2077
2100
  };
2078
2101
 
2079
2102
 
@@ -2087,9 +2110,12 @@ const calculateCenterOffset = ({ overflowSize, containerSize, elementOffset, ele
2087
2110
 
2088
2111
  __webpack_require__.r(__webpack_exports__);
2089
2112
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2090
- /* harmony export */ calculateCenterOffset: () => (/* reexport safe */ _calculate_center_offset__WEBPACK_IMPORTED_MODULE_0__.calculateCenterOffset)
2113
+ /* harmony export */ calculateCenterOffset: () => (/* reexport safe */ _calculate_center_offset__WEBPACK_IMPORTED_MODULE_0__.calculateCenterOffset),
2114
+ /* harmony export */ clampOffsetToOverflow: () => (/* reexport safe */ _clamp_offset_to_overflow__WEBPACK_IMPORTED_MODULE_1__.clampOffsetToOverflow)
2091
2115
  /* harmony export */ });
2092
2116
  /* harmony import */ var _calculate_center_offset__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./calculate-center-offset */ "./src/geometry/layout/calculate-center-offset.ts");
2117
+ /* harmony import */ var _clamp_offset_to_overflow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./clamp-offset-to-overflow */ "./src/geometry/layout/clamp-offset-to-overflow.ts");
2118
+
2093
2119
 
2094
2120
 
2095
2121
 
@@ -3562,6 +3588,7 @@ __webpack_require__.r(__webpack_exports__);
3562
3588
  /* harmony export */ camelToWords: () => (/* reexport safe */ _string__WEBPACK_IMPORTED_MODULE_13__.camelToWords),
3563
3589
  /* harmony export */ centerElementInContainer: () => (/* reexport safe */ _dom__WEBPACK_IMPORTED_MODULE_3__.centerElementInContainer),
3564
3590
  /* harmony export */ chunk: () => (/* reexport safe */ _array__WEBPACK_IMPORTED_MODULE_1__.chunk),
3591
+ /* harmony export */ clampOffsetToOverflow: () => (/* reexport safe */ _geometry__WEBPACK_IMPORTED_MODULE_7__.clampOffsetToOverflow),
3565
3592
  /* harmony export */ cloneBlob: () => (/* reexport safe */ _dom__WEBPACK_IMPORTED_MODULE_3__.cloneBlob),
3566
3593
  /* harmony export */ compact: () => (/* reexport safe */ _array__WEBPACK_IMPORTED_MODULE_1__.compact),
3567
3594
  /* harmony export */ compose: () => (/* reexport safe */ _array__WEBPACK_IMPORTED_MODULE_1__.compose),