@react-hive/honey-utils 3.30.0 → 3.32.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.
package/dist/index.d.ts CHANGED
@@ -15,3 +15,5 @@ export * from './string';
15
15
  export * from './tree';
16
16
  export * from './types';
17
17
  export * from './color';
18
+ export * from './json';
19
+ export * from './encoding';
@@ -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
  };
@@ -1517,6 +1520,82 @@ const parse2DMatrix = (element) => {
1517
1520
  };
1518
1521
 
1519
1522
 
1523
+ /***/ },
1524
+
1525
+ /***/ "./src/encoding/decode-base64-json.ts"
1526
+ /*!********************************************!*\
1527
+ !*** ./src/encoding/decode-base64-json.ts ***!
1528
+ \********************************************/
1529
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1530
+
1531
+ __webpack_require__.r(__webpack_exports__);
1532
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1533
+ /* harmony export */ decodeBase64Json: () => (/* binding */ decodeBase64Json)
1534
+ /* harmony export */ });
1535
+ /* harmony import */ var _json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ~/json */ "./src/json/index.ts");
1536
+ /* harmony import */ var _decode_base64__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./decode-base64 */ "./src/encoding/decode-base64.ts");
1537
+
1538
+
1539
+ const decodeBase64Json = (value) => {
1540
+ const decodedValue = (0,_decode_base64__WEBPACK_IMPORTED_MODULE_1__.decodeBase64)(value);
1541
+ if (decodedValue === null) {
1542
+ return null;
1543
+ }
1544
+ return (0,_json__WEBPACK_IMPORTED_MODULE_0__.parseJson)(decodedValue);
1545
+ };
1546
+
1547
+
1548
+ /***/ },
1549
+
1550
+ /***/ "./src/encoding/decode-base64.ts"
1551
+ /*!***************************************!*\
1552
+ !*** ./src/encoding/decode-base64.ts ***!
1553
+ \***************************************/
1554
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1555
+
1556
+ __webpack_require__.r(__webpack_exports__);
1557
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1558
+ /* harmony export */ decodeBase64: () => (/* binding */ decodeBase64)
1559
+ /* harmony export */ });
1560
+ const BASE64_PATTERN = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
1561
+ const decodeBase64 = (value) => {
1562
+ try {
1563
+ if (!BASE64_PATTERN.test(value)) {
1564
+ return null;
1565
+ }
1566
+ if (typeof Buffer !== 'undefined') {
1567
+ return Buffer.from(value, 'base64').toString('utf-8');
1568
+ }
1569
+ return decodeURIComponent(atob(value)
1570
+ .split('')
1571
+ .map(char => `%${char.charCodeAt(0).toString(16).padStart(2, '0')}`)
1572
+ .join(''));
1573
+ }
1574
+ catch {
1575
+ return null;
1576
+ }
1577
+ };
1578
+
1579
+
1580
+ /***/ },
1581
+
1582
+ /***/ "./src/encoding/index.ts"
1583
+ /*!*******************************!*\
1584
+ !*** ./src/encoding/index.ts ***!
1585
+ \*******************************/
1586
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1587
+
1588
+ __webpack_require__.r(__webpack_exports__);
1589
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1590
+ /* harmony export */ decodeBase64: () => (/* reexport safe */ _decode_base64__WEBPACK_IMPORTED_MODULE_0__.decodeBase64),
1591
+ /* harmony export */ decodeBase64Json: () => (/* reexport safe */ _decode_base64_json__WEBPACK_IMPORTED_MODULE_1__.decodeBase64Json)
1592
+ /* harmony export */ });
1593
+ /* harmony import */ var _decode_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./decode-base64 */ "./src/encoding/decode-base64.ts");
1594
+ /* harmony import */ var _decode_base64_json__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./decode-base64-json */ "./src/encoding/decode-base64-json.ts");
1595
+
1596
+
1597
+
1598
+
1520
1599
  /***/ },
1521
1600
 
1522
1601
  /***/ "./src/env/index.ts"
@@ -2033,6 +2112,7 @@ __webpack_require__.r(__webpack_exports__);
2033
2112
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2034
2113
  /* harmony export */ applyInertiaStep: () => (/* reexport safe */ _apply_inertia_step__WEBPACK_IMPORTED_MODULE_2__.applyInertiaStep),
2035
2114
  /* harmony export */ calculateCenterOffset: () => (/* reexport safe */ _layout__WEBPACK_IMPORTED_MODULE_0__.calculateCenterOffset),
2115
+ /* harmony export */ clampOffsetToOverflow: () => (/* reexport safe */ _layout__WEBPACK_IMPORTED_MODULE_0__.clampOffsetToOverflow),
2036
2116
  /* harmony export */ resolveBoundedDelta: () => (/* reexport safe */ _resolve_bounded_delta__WEBPACK_IMPORTED_MODULE_1__.resolveBoundedDelta)
2037
2117
  /* harmony export */ });
2038
2118
  /* harmony import */ var _layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./layout */ "./src/geometry/layout/index.ts");
@@ -2056,24 +2136,43 @@ __webpack_require__.r(__webpack_exports__);
2056
2136
  /* harmony export */ calculateCenterOffset: () => (/* binding */ calculateCenterOffset)
2057
2137
  /* harmony export */ });
2058
2138
  /**
2059
- * Calculates the offset required to center an element within a container along a single axis.
2139
+ * Calculates the raw offset required to center an element within a container along a single axis.
2060
2140
  *
2061
- * The returned value is clamped so that the resulting translation does not
2062
- * exceed the container's scrollable bounds.
2141
+ * @returns A negative offset value suitable for use in a CSS `translate` transform.
2142
+ */
2143
+ const calculateCenterOffset = ({ containerSize, elementOffset, elementSize, }) => {
2144
+ const containerCenter = containerSize / 2;
2145
+ const elementCenter = elementOffset + elementSize / 2;
2146
+ const targetOffset = elementCenter - containerCenter;
2147
+ return -targetOffset;
2148
+ };
2149
+
2150
+
2151
+ /***/ },
2152
+
2153
+ /***/ "./src/geometry/layout/clamp-offset-to-overflow.ts"
2154
+ /*!*********************************************************!*\
2155
+ !*** ./src/geometry/layout/clamp-offset-to-overflow.ts ***!
2156
+ \*********************************************************/
2157
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2158
+
2159
+ __webpack_require__.r(__webpack_exports__);
2160
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2161
+ /* harmony export */ clampOffsetToOverflow: () => (/* binding */ clampOffsetToOverflow)
2162
+ /* harmony export */ });
2163
+ /**
2164
+ * Clamps a negative translation offset to the available overflow bounds.
2063
2165
  *
2064
- * This function performs pure math only and does not access the DOM.
2166
+ * @param offset - Negative translate offset.
2167
+ * @param overflowSize - Maximum overflow size along the axis.
2065
2168
  *
2066
- * @returns A negative offset value suitable for use in a CSS `translate`
2067
- * transform, or `0` when no overflow exists on the axis.
2169
+ * @returns Clamped negative offset, or `0` when no overflow exists.
2068
2170
  */
2069
- const calculateCenterOffset = ({ overflowSize, containerSize, elementOffset, elementSize, }) => {
2171
+ const clampOffsetToOverflow = (offset, overflowSize) => {
2070
2172
  if (overflowSize <= 0) {
2071
2173
  return 0;
2072
2174
  }
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));
2175
+ return Math.max(-overflowSize, Math.min(offset, 0));
2077
2176
  };
2078
2177
 
2079
2178
 
@@ -2087,9 +2186,12 @@ const calculateCenterOffset = ({ overflowSize, containerSize, elementOffset, ele
2087
2186
 
2088
2187
  __webpack_require__.r(__webpack_exports__);
2089
2188
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2090
- /* harmony export */ calculateCenterOffset: () => (/* reexport safe */ _calculate_center_offset__WEBPACK_IMPORTED_MODULE_0__.calculateCenterOffset)
2189
+ /* harmony export */ calculateCenterOffset: () => (/* reexport safe */ _calculate_center_offset__WEBPACK_IMPORTED_MODULE_0__.calculateCenterOffset),
2190
+ /* harmony export */ clampOffsetToOverflow: () => (/* reexport safe */ _clamp_offset_to_overflow__WEBPACK_IMPORTED_MODULE_1__.clampOffsetToOverflow)
2091
2191
  /* harmony export */ });
2092
2192
  /* harmony import */ var _calculate_center_offset__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./calculate-center-offset */ "./src/geometry/layout/calculate-center-offset.ts");
2193
+ /* 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");
2194
+
2093
2195
 
2094
2196
 
2095
2197
 
@@ -2578,6 +2680,44 @@ const resolveAxisDelta = (delta, axis, { allowFallback = true, invert = true } =
2578
2680
  };
2579
2681
 
2580
2682
 
2683
+ /***/ },
2684
+
2685
+ /***/ "./src/json/index.ts"
2686
+ /*!***************************!*\
2687
+ !*** ./src/json/index.ts ***!
2688
+ \***************************/
2689
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2690
+
2691
+ __webpack_require__.r(__webpack_exports__);
2692
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2693
+ /* harmony export */ parseJson: () => (/* reexport safe */ _parse_json__WEBPACK_IMPORTED_MODULE_0__.parseJson)
2694
+ /* harmony export */ });
2695
+ /* harmony import */ var _parse_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parse-json */ "./src/json/parse-json.ts");
2696
+
2697
+
2698
+
2699
+ /***/ },
2700
+
2701
+ /***/ "./src/json/parse-json.ts"
2702
+ /*!********************************!*\
2703
+ !*** ./src/json/parse-json.ts ***!
2704
+ \********************************/
2705
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2706
+
2707
+ __webpack_require__.r(__webpack_exports__);
2708
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2709
+ /* harmony export */ parseJson: () => (/* binding */ parseJson)
2710
+ /* harmony export */ });
2711
+ const parseJson = (value) => {
2712
+ try {
2713
+ return JSON.parse(value);
2714
+ }
2715
+ catch {
2716
+ return null;
2717
+ }
2718
+ };
2719
+
2720
+
2581
2721
  /***/ },
2582
2722
 
2583
2723
  /***/ "./src/math/hash-string.ts"
@@ -3562,9 +3702,12 @@ __webpack_require__.r(__webpack_exports__);
3562
3702
  /* harmony export */ camelToWords: () => (/* reexport safe */ _string__WEBPACK_IMPORTED_MODULE_13__.camelToWords),
3563
3703
  /* harmony export */ centerElementInContainer: () => (/* reexport safe */ _dom__WEBPACK_IMPORTED_MODULE_3__.centerElementInContainer),
3564
3704
  /* harmony export */ chunk: () => (/* reexport safe */ _array__WEBPACK_IMPORTED_MODULE_1__.chunk),
3705
+ /* harmony export */ clampOffsetToOverflow: () => (/* reexport safe */ _geometry__WEBPACK_IMPORTED_MODULE_7__.clampOffsetToOverflow),
3565
3706
  /* harmony export */ cloneBlob: () => (/* reexport safe */ _dom__WEBPACK_IMPORTED_MODULE_3__.cloneBlob),
3566
3707
  /* harmony export */ compact: () => (/* reexport safe */ _array__WEBPACK_IMPORTED_MODULE_1__.compact),
3567
3708
  /* harmony export */ compose: () => (/* reexport safe */ _array__WEBPACK_IMPORTED_MODULE_1__.compose),
3709
+ /* harmony export */ decodeBase64: () => (/* reexport safe */ _encoding__WEBPACK_IMPORTED_MODULE_18__.decodeBase64),
3710
+ /* harmony export */ decodeBase64Json: () => (/* reexport safe */ _encoding__WEBPACK_IMPORTED_MODULE_18__.decodeBase64Json),
3568
3711
  /* harmony export */ definedProps: () => (/* reexport safe */ _object__WEBPACK_IMPORTED_MODULE_12__.definedProps),
3569
3712
  /* harmony export */ delay: () => (/* reexport safe */ _async__WEBPACK_IMPORTED_MODULE_2__.delay),
3570
3713
  /* harmony export */ difference: () => (/* reexport safe */ _array__WEBPACK_IMPORTED_MODULE_1__.difference),
@@ -3630,6 +3773,7 @@ __webpack_require__.r(__webpack_exports__);
3630
3773
  /* harmony export */ once: () => (/* reexport safe */ _function__WEBPACK_IMPORTED_MODULE_6__.once),
3631
3774
  /* harmony export */ parse2DMatrix: () => (/* reexport safe */ _dom__WEBPACK_IMPORTED_MODULE_3__.parse2DMatrix),
3632
3775
  /* harmony export */ parseFileName: () => (/* reexport safe */ _string__WEBPACK_IMPORTED_MODULE_13__.parseFileName),
3776
+ /* harmony export */ parseJson: () => (/* reexport safe */ _json__WEBPACK_IMPORTED_MODULE_17__.parseJson),
3633
3777
  /* harmony export */ pipe: () => (/* reexport safe */ _array__WEBPACK_IMPORTED_MODULE_1__.pipe),
3634
3778
  /* harmony export */ readFilesFromDataTransfer: () => (/* reexport safe */ _file__WEBPACK_IMPORTED_MODULE_5__.readFilesFromDataTransfer),
3635
3779
  /* harmony export */ reduceAsync: () => (/* reexport safe */ _async__WEBPACK_IMPORTED_MODULE_2__.reduceAsync),
@@ -3665,6 +3809,10 @@ __webpack_require__.r(__webpack_exports__);
3665
3809
  /* harmony import */ var _tree__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./tree */ "./src/tree/index.ts");
3666
3810
  /* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./types */ "./src/types.ts");
3667
3811
  /* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./color */ "./src/color/index.ts");
3812
+ /* harmony import */ var _json__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./json */ "./src/json/index.ts");
3813
+ /* harmony import */ var _encoding__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./encoding */ "./src/encoding/index.ts");
3814
+
3815
+
3668
3816
 
3669
3817
 
3670
3818