@react-hive/honey-layout 17.4.0 → 17.6.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/components/HoneyBox/HoneyBox.d.ts +1 -1
- package/dist/components/HoneyFlex/HoneyFlex.d.ts +1 -1
- package/dist/components/HoneyGrid/HoneyGridStyled.d.ts +1 -1
- package/dist/components/HoneyGridColumn/HoneyGridColumnStyled.d.ts +1 -1
- package/dist/components/HoneyList/HoneyListStyled.d.ts +1 -1
- package/dist/components/HoneyOverlay.d.ts +56 -13
- package/dist/components/HoneyPopup/HoneyPopupStyled.d.ts +1 -1
- package/dist/hooks/use-honey-overlay.d.ts +19 -9
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.dev.cjs +128 -39
- package/dist/index.dev.cjs.map +1 -1
- package/dist/index.mjs +4 -4
- package/dist/index.mjs.map +1 -1
- package/dist/providers/hooks/use-honey-overlays.d.ts +8 -2
- package/package.json +1 -1
package/dist/index.dev.cjs
CHANGED
|
@@ -4829,9 +4829,11 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
4829
4829
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
|
|
4830
4830
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
|
|
4831
4831
|
/* harmony import */ var _react_hive_honey_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @react-hive/honey-utils */ "./node_modules/.pnpm/@react-hive+honey-utils@4.0.0/node_modules/@react-hive/honey-utils/dist/index.mjs");
|
|
4832
|
-
/* harmony import */ var
|
|
4833
|
-
/* harmony import */ var
|
|
4834
|
-
/* harmony import */ var
|
|
4832
|
+
/* harmony import */ var _react_hive_honey_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @react-hive/honey-hooks */ "./node_modules/.pnpm/@react-hive+honey-hooks@3.1.0_react@19.2.7/node_modules/@react-hive/honey-hooks/dist/index.mjs");
|
|
4833
|
+
/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../hooks */ "./src/hooks/index.ts");
|
|
4834
|
+
/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../helpers */ "./src/helpers/index.ts");
|
|
4835
|
+
/* harmony import */ var _HoneyFlex__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./HoneyFlex */ "./src/components/HoneyFlex/index.ts");
|
|
4836
|
+
|
|
4835
4837
|
|
|
4836
4838
|
|
|
4837
4839
|
|
|
@@ -4841,9 +4843,14 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
4841
4843
|
/**
|
|
4842
4844
|
* A reusable overlay component integrated with the `HoneyLayoutProvider` system.
|
|
4843
4845
|
*
|
|
4844
|
-
*
|
|
4846
|
+
* The component registers itself with the overlay system when active, provides
|
|
4847
|
+
* overlay context to render-function children, and disables interaction with its
|
|
4848
|
+
* content when inactive by applying the `inert` attribute.
|
|
4845
4849
|
*
|
|
4846
|
-
*
|
|
4850
|
+
* By default, releasing the Escape key deactivates the overlay. Custom key handling
|
|
4851
|
+
* can be provided through `onKeyUp`.
|
|
4852
|
+
*
|
|
4853
|
+
* @param props - Overlay component props.
|
|
4847
4854
|
*
|
|
4848
4855
|
* @example
|
|
4849
4856
|
* ```tsx
|
|
@@ -4859,21 +4866,42 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
4859
4866
|
* )}
|
|
4860
4867
|
* </HoneyOverlay>
|
|
4861
4868
|
* ```
|
|
4869
|
+
*
|
|
4870
|
+
* @example
|
|
4871
|
+
* ```tsx
|
|
4872
|
+
* <HoneyOverlay
|
|
4873
|
+
* active={isOpen}
|
|
4874
|
+
* onDeactivate={() => setIsOpen(false)}
|
|
4875
|
+
* onKeyUp={(keyCode) => {
|
|
4876
|
+
* if (keyCode === 'Escape') {
|
|
4877
|
+
* setIsOpen(false);
|
|
4878
|
+
* }
|
|
4879
|
+
* }}
|
|
4880
|
+
* >
|
|
4881
|
+
* Overlay content
|
|
4882
|
+
* </HoneyOverlay>
|
|
4883
|
+
* ```
|
|
4862
4884
|
*/
|
|
4863
|
-
const HoneyOverlay = ({ ref, children, active, overlayId, onDeactivate, ...props }) => {
|
|
4864
|
-
const
|
|
4885
|
+
const HoneyOverlay = ({ ref, children, active, overlayId, onDeactivate, onKeyUp, ...props }) => {
|
|
4886
|
+
const onKeyUpRef = (0,_react_hive_honey_hooks__WEBPACK_IMPORTED_MODULE_3__.useHoneyLatest)(onKeyUp);
|
|
4887
|
+
const onDeactivateRef = (0,_react_hive_honey_hooks__WEBPACK_IMPORTED_MODULE_3__.useHoneyLatest)(onDeactivate);
|
|
4888
|
+
const handleKeyUp = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((keyCode, ...args) => {
|
|
4889
|
+
if (onKeyUpRef.current) {
|
|
4890
|
+
onKeyUpRef.current(keyCode, ...args);
|
|
4891
|
+
}
|
|
4892
|
+
else if (keyCode === 'Escape') {
|
|
4893
|
+
onDeactivateRef.current();
|
|
4894
|
+
}
|
|
4895
|
+
}, []);
|
|
4896
|
+
const overlay = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useRegisterHoneyOverlay)(active, {
|
|
4865
4897
|
id: overlayId,
|
|
4866
|
-
onKeyUp:
|
|
4867
|
-
if (keyCode === 'Escape') {
|
|
4868
|
-
onDeactivate();
|
|
4869
|
-
}
|
|
4870
|
-
}, [onDeactivate]),
|
|
4898
|
+
onKeyUp: handleKeyUp,
|
|
4871
4899
|
});
|
|
4872
|
-
const mergedRef = (0,
|
|
4873
|
-
return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
|
|
4900
|
+
const mergedRef = (0,_helpers__WEBPACK_IMPORTED_MODULE_5__.mergeRefs)(overlay?.setContainerRef, ref);
|
|
4901
|
+
return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HoneyFlex__WEBPACK_IMPORTED_MODULE_6__.HoneyFlex, { ref: mergedRef, inert: !active, ...props, children: (0,_react_hive_honey_utils__WEBPACK_IMPORTED_MODULE_2__.invokeIfFunction)(children, {
|
|
4874
4902
|
overlay,
|
|
4875
4903
|
isActive: active,
|
|
4876
|
-
deactivateOverlay:
|
|
4904
|
+
deactivateOverlay: onDeactivateRef.current,
|
|
4877
4905
|
}) }));
|
|
4878
4906
|
};
|
|
4879
4907
|
|
|
@@ -5945,24 +5973,28 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
5945
5973
|
|
|
5946
5974
|
|
|
5947
5975
|
/**
|
|
5948
|
-
*
|
|
5976
|
+
* Returns an active overlay by ID and optionally attaches overlay event listeners.
|
|
5977
|
+
*
|
|
5978
|
+
* This hook looks up an overlay registered in `HoneyLayoutProvider` by its ID.
|
|
5979
|
+
* It can also subscribe to overlay-level events, such as `keyup`, for the matched overlay.
|
|
5949
5980
|
*
|
|
5950
|
-
* @param targetOverlayId - The
|
|
5951
|
-
* @param options - Optional
|
|
5981
|
+
* @param targetOverlayId - The ID of the active overlay to find.
|
|
5982
|
+
* @param options - Optional overlay event handlers.
|
|
5952
5983
|
*
|
|
5953
|
-
* @returns The
|
|
5984
|
+
* @returns The matching active overlay instance, or `undefined` when the overlay is not registered.
|
|
5954
5985
|
*
|
|
5955
5986
|
* @remarks
|
|
5956
|
-
* -
|
|
5957
|
-
* - If the overlay is
|
|
5958
|
-
* -
|
|
5987
|
+
* - The hook only works with overlays that are currently active.
|
|
5988
|
+
* - If the overlay is inactive, unregistered, or already removed from the stack, `undefined` is returned.
|
|
5989
|
+
* - The `onKeyUp` listener is attached only to the matched overlay.
|
|
5990
|
+
* - Event listeners are automatically cleaned up when the overlay, handler, or component lifecycle changes.
|
|
5959
5991
|
*
|
|
5960
5992
|
* @example
|
|
5961
5993
|
* ```tsx
|
|
5962
5994
|
* const overlay = useHoneyOverlay('my-overlay-id', {
|
|
5963
|
-
* onKeyUp: (keyCode, e) => {
|
|
5995
|
+
* onKeyUp: (keyCode, overlay, e) => {
|
|
5964
5996
|
* if (keyCode === 'Escape') {
|
|
5965
|
-
*
|
|
5997
|
+
* //
|
|
5966
5998
|
* }
|
|
5967
5999
|
* },
|
|
5968
6000
|
* });
|
|
@@ -5970,7 +6002,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
5970
6002
|
*/
|
|
5971
6003
|
const useHoneyOverlay = (targetOverlayId, { onKeyUp } = {}) => {
|
|
5972
6004
|
const { overlays } = (0,_hooks__WEBPACK_IMPORTED_MODULE_1__.useHoneyLayout)();
|
|
5973
|
-
const overlay = overlays.find(overlay => overlay.id === targetOverlayId);
|
|
6005
|
+
const overlay = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => overlays.find(overlay => overlay.id === targetOverlayId), [overlays, targetOverlayId]);
|
|
5974
6006
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
5975
6007
|
// If no overlay is found or no `onKeyUp` handler is provided, skip setting up the listener
|
|
5976
6008
|
if (!overlay || !onKeyUp) {
|
|
@@ -6147,16 +6179,29 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
6147
6179
|
|
|
6148
6180
|
|
|
6149
6181
|
/**
|
|
6150
|
-
*
|
|
6151
|
-
*
|
|
6182
|
+
* Manages the active overlay stack and global keyboard event dispatching.
|
|
6183
|
+
*
|
|
6184
|
+
* The hook keeps registered overlays in stack order, where the latest registered overlay
|
|
6185
|
+
* is treated as the top-level overlay. Keyboard events are forwarded only to the top-level
|
|
6186
|
+
* overlay, allowing nested or overlapping overlays to handle key interactions predictably.
|
|
6187
|
+
*
|
|
6188
|
+
* @returns An object containing the active overlays stack and helper methods for registering
|
|
6189
|
+
* and unregistering overlays.
|
|
6152
6190
|
*/
|
|
6153
6191
|
const useHoneyOverlays = () => {
|
|
6154
|
-
const
|
|
6192
|
+
const [overlays, setOverlays] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
|
|
6155
6193
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
6194
|
+
/**
|
|
6195
|
+
* Handles global keyup events and forwards them to the top-level overlay.
|
|
6196
|
+
*
|
|
6197
|
+
* Only the latest registered overlay receives keyboard events. This prevents inactive
|
|
6198
|
+
* or visually hidden overlays lower in the stack from reacting to the same key press.
|
|
6199
|
+
*
|
|
6200
|
+
* @param e - The native keyboard event emitted by the document.
|
|
6201
|
+
*/
|
|
6156
6202
|
const handleKeyUp = (e) => {
|
|
6157
|
-
const overlays = overlaysRef.current;
|
|
6158
6203
|
if (!overlays.length) {
|
|
6159
|
-
// No overlays to handle key events
|
|
6204
|
+
// No overlays to handle key events.
|
|
6160
6205
|
return;
|
|
6161
6206
|
}
|
|
6162
6207
|
const topLevelOverlay = overlays[overlays.length - 1];
|
|
@@ -6166,13 +6211,19 @@ const useHoneyOverlays = () => {
|
|
|
6166
6211
|
return () => {
|
|
6167
6212
|
document.removeEventListener('keyup', handleKeyUp);
|
|
6168
6213
|
};
|
|
6169
|
-
}, []);
|
|
6214
|
+
}, [overlays]);
|
|
6170
6215
|
/**
|
|
6171
|
-
* Registers a new overlay and adds it to the stack.
|
|
6216
|
+
* Registers a new overlay and adds it to the top of the overlay stack.
|
|
6172
6217
|
*
|
|
6173
|
-
*
|
|
6218
|
+
* If no custom ID is provided, an ephemeral ID is generated automatically.
|
|
6219
|
+
* The returned overlay object exposes methods for storing its container element,
|
|
6220
|
+
* subscribing to overlay events, removing event listeners, and notifying registered
|
|
6221
|
+
* listeners when matching events occur.
|
|
6174
6222
|
*
|
|
6175
|
-
* @
|
|
6223
|
+
* @param overlayConfig - The overlay configuration, including an optional ID, optional keyup
|
|
6224
|
+
* handler, and optional list of keyboard codes the overlay should listen to.
|
|
6225
|
+
*
|
|
6226
|
+
* @returns The registered active overlay instance.
|
|
6176
6227
|
*/
|
|
6177
6228
|
const registerOverlay = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(overlayConfig => {
|
|
6178
6229
|
const overlayId = overlayConfig.id ?? (0,_react_hive_honey_utils__WEBPACK_IMPORTED_MODULE_1__.generateEphemeralId)();
|
|
@@ -6183,18 +6234,54 @@ const useHoneyOverlays = () => {
|
|
|
6183
6234
|
const overlay = {
|
|
6184
6235
|
containerRef,
|
|
6185
6236
|
id: overlayId,
|
|
6237
|
+
/**
|
|
6238
|
+
* Stores the overlay container element reference.
|
|
6239
|
+
*
|
|
6240
|
+
* This allows consumers and overlay helpers to access the DOM element associated
|
|
6241
|
+
* with the active overlay after it has been mounted.
|
|
6242
|
+
*
|
|
6243
|
+
* @param element - The overlay container element, or `null` when unavailable.
|
|
6244
|
+
*/
|
|
6186
6245
|
setContainerRef: element => {
|
|
6187
6246
|
containerRef.current = element;
|
|
6188
6247
|
},
|
|
6248
|
+
/**
|
|
6249
|
+
* Adds a listener for a supported overlay event.
|
|
6250
|
+
*
|
|
6251
|
+
* @param type - The overlay event type to listen for.
|
|
6252
|
+
* @param handler - The event handler to call when the event is notified.
|
|
6253
|
+
*/
|
|
6189
6254
|
addListener: (type, handler) => {
|
|
6190
6255
|
listeners.push([type, handler]);
|
|
6191
6256
|
},
|
|
6257
|
+
/**
|
|
6258
|
+
* Removes a previously registered overlay event listener.
|
|
6259
|
+
*
|
|
6260
|
+
* The listener is removed only when both the event type and handler reference match.
|
|
6261
|
+
*
|
|
6262
|
+
* @param targetType - The event type of the listener to remove.
|
|
6263
|
+
* @param targetHandler - The exact handler reference to remove.
|
|
6264
|
+
*/
|
|
6192
6265
|
removeListener: (targetType, targetHandler) => {
|
|
6193
6266
|
const targetListenerIndex = listeners.findIndex(([type, listenerHandler]) => type === targetType && listenerHandler === targetHandler);
|
|
6194
6267
|
if (targetListenerIndex !== -1) {
|
|
6195
6268
|
listeners.splice(targetListenerIndex, 1);
|
|
6196
6269
|
}
|
|
6197
6270
|
},
|
|
6271
|
+
/**
|
|
6272
|
+
* Notifies matching listeners for a specific overlay event.
|
|
6273
|
+
*
|
|
6274
|
+
* If `listenKeys` is provided in the overlay config, listeners are called only when
|
|
6275
|
+
* the received key code is included in that list. When no `listenKeys` are provided,
|
|
6276
|
+
* all key codes are accepted.
|
|
6277
|
+
*
|
|
6278
|
+
* The native event is prevented before listeners are called, ensuring handled overlay
|
|
6279
|
+
* keyboard interactions do not trigger default browser behaviour.
|
|
6280
|
+
*
|
|
6281
|
+
* @param targetEventType - The event type being dispatched.
|
|
6282
|
+
* @param keyCode - The keyboard code associated with the event.
|
|
6283
|
+
* @param e - The native keyboard event.
|
|
6284
|
+
*/
|
|
6198
6285
|
notifyListeners: (targetEventType, keyCode, e) => {
|
|
6199
6286
|
const listenKeys = overlayConfig.listenKeys ?? [];
|
|
6200
6287
|
if (!listenKeys.length || listenKeys.includes(keyCode)) {
|
|
@@ -6207,19 +6294,21 @@ const useHoneyOverlays = () => {
|
|
|
6207
6294
|
}
|
|
6208
6295
|
},
|
|
6209
6296
|
};
|
|
6210
|
-
|
|
6297
|
+
setOverlays(prevOverlays => [...prevOverlays, overlay]);
|
|
6211
6298
|
return overlay;
|
|
6212
6299
|
}, []);
|
|
6213
6300
|
/**
|
|
6214
|
-
* Unregisters an overlay by
|
|
6301
|
+
* Unregisters an overlay by ID and removes it from the overlay stack.
|
|
6302
|
+
*
|
|
6303
|
+
* This should usually be called when an overlay is deactivated or unmounted.
|
|
6215
6304
|
*
|
|
6216
|
-
* @param targetOverlayId - The ID of the overlay to
|
|
6305
|
+
* @param targetOverlayId - The ID of the overlay to remove.
|
|
6217
6306
|
*/
|
|
6218
6307
|
const unregisterOverlay = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(targetOverlayId => {
|
|
6219
|
-
|
|
6308
|
+
setOverlays(prevOverlays => prevOverlays.filter(overlay => overlay.id !== targetOverlayId));
|
|
6220
6309
|
}, []);
|
|
6221
6310
|
return {
|
|
6222
|
-
overlays
|
|
6311
|
+
overlays,
|
|
6223
6312
|
registerOverlay,
|
|
6224
6313
|
unregisterOverlay,
|
|
6225
6314
|
};
|