@lobehub/ui 5.11.0 → 5.12.1
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/es/base-ui/ContextMenu/ContextMenuHost.mjs +7 -1
- package/es/base-ui/ContextMenu/ContextMenuHost.mjs.map +1 -1
- package/es/base-ui/DropdownMenu/atoms.d.mts +1 -0
- package/es/base-ui/DropdownMenu/atoms.mjs +14 -3
- package/es/base-ui/DropdownMenu/atoms.mjs.map +1 -1
- package/es/base-ui/Modal/Modal.mjs +3 -16
- package/es/base-ui/Modal/Modal.mjs.map +1 -1
- package/es/base-ui/Modal/ModalLayerContext.mjs +10 -0
- package/es/base-ui/Modal/ModalLayerContext.mjs.map +1 -0
- package/es/base-ui/Modal/atoms.d.mts +2 -0
- package/es/base-ui/Modal/atoms.mjs +53 -15
- package/es/base-ui/Modal/atoms.mjs.map +1 -1
- package/es/base-ui/Modal/imperative.mjs +3 -15
- package/es/base-ui/Modal/imperative.mjs.map +1 -1
- package/es/base-ui/Modal/style.mjs +4 -4
- package/es/base-ui/Modal/style.mjs.map +1 -1
- package/es/base-ui/Popover/PopoverGroup.mjs +1 -1
- package/es/base-ui/Popover/PopoverGroup.mjs.map +1 -1
- package/es/base-ui/Popover/PopoverStandalone.mjs +1 -1
- package/es/base-ui/Popover/PopoverStandalone.mjs.map +1 -1
- package/es/base-ui/Popover/atoms.d.mts +1 -0
- package/es/base-ui/Popover/atoms.mjs +14 -3
- package/es/base-ui/Popover/atoms.mjs.map +1 -1
- package/es/base-ui/Popover/style.mjs +1 -0
- package/es/base-ui/Popover/style.mjs.map +1 -1
- package/es/base-ui/ScrollArea/atoms.d.mts +9 -2
- package/es/base-ui/ScrollArea/atoms.mjs +8 -1
- package/es/base-ui/ScrollArea/atoms.mjs.map +1 -1
- package/es/base-ui/ScrollArea/style.mjs +167 -5
- package/es/base-ui/ScrollArea/style.mjs.map +1 -1
- package/es/base-ui/ScrollArea/type.d.mts +10 -2
- package/es/base-ui/Select/Select.mjs +2 -1
- package/es/base-ui/Select/Select.mjs.map +1 -1
- package/es/base-ui/Select/atoms.d.mts +2 -0
- package/es/base-ui/Select/atoms.mjs +14 -2
- package/es/base-ui/Select/atoms.mjs.map +1 -1
- package/es/base-ui/Toast/imperative.mjs +7 -1
- package/es/base-ui/Toast/imperative.mjs.map +1 -1
- package/es/base-ui/Toast/style.mjs +1 -1
- package/es/base-ui/Toast/style.mjs.map +1 -1
- package/es/base-ui/zIndex/constants.mjs +11 -0
- package/es/base-ui/zIndex/constants.mjs.map +1 -0
- package/es/base-ui/zIndex/manager.mjs +21 -0
- package/es/base-ui/zIndex/manager.mjs.map +1 -0
- package/es/base-ui/zIndex/useLayerZIndex.mjs +69 -0
- package/es/base-ui/zIndex/useLayerZIndex.mjs.map +1 -0
- package/package.json +1 -1
- package/es/base-ui/Modal/zIndexManager.mjs +0 -10
- package/es/base-ui/Modal/zIndexManager.mjs.map +0 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Z_INDEX_LAYER } from "./constants.mjs";
|
|
2
|
+
//#region src/base-ui/zIndex/manager.ts
|
|
3
|
+
let mainTop = 0;
|
|
4
|
+
let toastTop = 0;
|
|
5
|
+
let warnedMainOverflow = false;
|
|
6
|
+
function acquireLayerZIndex(tier) {
|
|
7
|
+
if (tier === "toast") {
|
|
8
|
+
toastTop = Math.max(toastTop, Z_INDEX_LAYER.toast) + Z_INDEX_LAYER.step;
|
|
9
|
+
return toastTop;
|
|
10
|
+
}
|
|
11
|
+
mainTop = Math.max(mainTop, Z_INDEX_LAYER[tier]) + Z_INDEX_LAYER.step;
|
|
12
|
+
if (process.env.NODE_ENV !== "production" && !warnedMainOverflow && mainTop >= Z_INDEX_LAYER.toast) {
|
|
13
|
+
warnedMainOverflow = true;
|
|
14
|
+
console.warn(`[lobe-ui z-index] main stack reached toast tier (${mainTop}); unexpected nesting depth`);
|
|
15
|
+
}
|
|
16
|
+
return mainTop;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { acquireLayerZIndex };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=manager.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.mjs","names":[],"sources":["../../../src/base-ui/zIndex/manager.ts"],"sourcesContent":["import { type LayerTier, Z_INDEX_LAYER } from './constants';\n\nlet mainTop = 0;\nlet toastTop = 0;\nlet warnedMainOverflow = false;\n\nexport function acquireLayerZIndex(tier: LayerTier): number {\n if (tier === 'toast') {\n toastTop = Math.max(toastTop, Z_INDEX_LAYER.toast) + Z_INDEX_LAYER.step;\n return toastTop;\n }\n mainTop = Math.max(mainTop, Z_INDEX_LAYER[tier]) + Z_INDEX_LAYER.step;\n if (\n process.env.NODE_ENV !== 'production' &&\n !warnedMainOverflow &&\n mainTop >= Z_INDEX_LAYER.toast\n ) {\n warnedMainOverflow = true;\n\n console.warn(\n `[lobe-ui z-index] main stack reached toast tier (${mainTop}); unexpected nesting depth`,\n );\n }\n return mainTop;\n}\n\nexport function __resetLayerZIndexForTests(): void {\n mainTop = 0;\n toastTop = 0;\n warnedMainOverflow = false;\n}\n\nexport function __seedMainTopForTests(value: number): void {\n mainTop = value;\n}\n"],"mappings":";;AAEA,IAAI,UAAU;AACd,IAAI,WAAW;AACf,IAAI,qBAAqB;AAEzB,SAAgB,mBAAmB,MAAyB;AAC1D,KAAI,SAAS,SAAS;AACpB,aAAW,KAAK,IAAI,UAAU,cAAc,MAAM,GAAG,cAAc;AACnE,SAAO;;AAET,WAAU,KAAK,IAAI,SAAS,cAAc,MAAM,GAAG,cAAc;AACjE,KACE,QAAQ,IAAI,aAAa,gBACzB,CAAC,sBACD,WAAW,cAAc,OACzB;AACA,uBAAqB;AAErB,UAAQ,KACN,oDAAoD,QAAQ,6BAC7D;;AAEH,QAAO"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { acquireLayerZIndex } from "./manager.mjs";
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
3
|
+
//#region src/base-ui/zIndex/useLayerZIndex.tsx
|
|
4
|
+
function useLayerZIndex(tier, explicitZIndex) {
|
|
5
|
+
const [zIndex, setZIndex] = useState(void 0);
|
|
6
|
+
const stateRef = useRef({
|
|
7
|
+
tier,
|
|
8
|
+
explicit: explicitZIndex,
|
|
9
|
+
node: null,
|
|
10
|
+
observer: null,
|
|
11
|
+
prevOpen: false
|
|
12
|
+
});
|
|
13
|
+
const prevExplicitRef = useRef(explicitZIndex);
|
|
14
|
+
stateRef.current.tier = tier;
|
|
15
|
+
stateRef.current.explicit = explicitZIndex;
|
|
16
|
+
if (prevExplicitRef.current !== void 0 && explicitZIndex === void 0 && stateRef.current.node) {
|
|
17
|
+
const node = stateRef.current.node;
|
|
18
|
+
if (node.hasAttribute("data-open")) {
|
|
19
|
+
setZIndex(acquireLayerZIndex(tier));
|
|
20
|
+
stateRef.current.prevOpen = true;
|
|
21
|
+
}
|
|
22
|
+
if (!stateRef.current.observer) {
|
|
23
|
+
const handle = () => {
|
|
24
|
+
const open = node.hasAttribute("data-open");
|
|
25
|
+
if (open && !stateRef.current.prevOpen) setZIndex(acquireLayerZIndex(stateRef.current.tier));
|
|
26
|
+
stateRef.current.prevOpen = open;
|
|
27
|
+
};
|
|
28
|
+
const observer = new MutationObserver(handle);
|
|
29
|
+
observer.observe(node, {
|
|
30
|
+
attributes: true,
|
|
31
|
+
attributeFilter: ["data-open", "data-closed"]
|
|
32
|
+
});
|
|
33
|
+
stateRef.current.observer = observer;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
prevExplicitRef.current = explicitZIndex;
|
|
37
|
+
const ref = useCallback((node) => {
|
|
38
|
+
if (node === stateRef.current.node) return;
|
|
39
|
+
stateRef.current.observer?.disconnect();
|
|
40
|
+
stateRef.current.observer = null;
|
|
41
|
+
stateRef.current.node = node;
|
|
42
|
+
stateRef.current.prevOpen = false;
|
|
43
|
+
if (!node) return;
|
|
44
|
+
if (stateRef.current.explicit !== void 0) return;
|
|
45
|
+
const handle = () => {
|
|
46
|
+
const isOpen = node.hasAttribute("data-open");
|
|
47
|
+
if (isOpen && !stateRef.current.prevOpen) setZIndex(acquireLayerZIndex(stateRef.current.tier));
|
|
48
|
+
stateRef.current.prevOpen = isOpen;
|
|
49
|
+
};
|
|
50
|
+
handle();
|
|
51
|
+
const observer = new MutationObserver(handle);
|
|
52
|
+
observer.observe(node, {
|
|
53
|
+
attributes: true,
|
|
54
|
+
attributeFilter: ["data-open", "data-closed"]
|
|
55
|
+
});
|
|
56
|
+
stateRef.current.observer = observer;
|
|
57
|
+
}, []);
|
|
58
|
+
useEffect(() => () => {
|
|
59
|
+
stateRef.current.observer?.disconnect();
|
|
60
|
+
}, []);
|
|
61
|
+
return {
|
|
62
|
+
zIndex: stateRef.current.explicit ?? zIndex,
|
|
63
|
+
ref
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//#endregion
|
|
67
|
+
export { useLayerZIndex };
|
|
68
|
+
|
|
69
|
+
//# sourceMappingURL=useLayerZIndex.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLayerZIndex.mjs","names":[],"sources":["../../../src/base-ui/zIndex/useLayerZIndex.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { type LayerTier } from './constants';\nimport { acquireLayerZIndex } from './manager';\n\nexport interface LayerZIndexResult<T extends HTMLElement = HTMLElement> {\n ref: (node: T | null) => void;\n zIndex: number | undefined;\n}\n\nexport function useLayerZIndex<T extends HTMLElement = HTMLElement>(\n tier: LayerTier,\n explicitZIndex?: number,\n): LayerZIndexResult<T> {\n const [zIndex, setZIndex] = useState<number | undefined>(undefined);\n\n const stateRef = useRef<{\n tier: LayerTier;\n explicit: number | undefined;\n node: T | null;\n observer: MutationObserver | null;\n prevOpen: boolean;\n }>({\n tier,\n explicit: explicitZIndex,\n node: null,\n observer: null,\n prevOpen: false,\n });\n\n const prevExplicitRef = useRef(explicitZIndex);\n\n // Keep ref in sync with latest props so prop changes after mount are respected.\n stateRef.current.tier = tier;\n stateRef.current.explicit = explicitZIndex;\n\n // When explicitZIndex changes from a value to undefined, and the node is\n // currently open, we need to acquire a dynamic z-index and start the\n // observer — neither was set up because the initial mount had an explicit\n // value that short-circuited the ref callback.\n if (\n prevExplicitRef.current !== undefined &&\n explicitZIndex === undefined &&\n stateRef.current.node\n ) {\n const node = stateRef.current.node;\n const isOpen = node.hasAttribute('data-open');\n if (isOpen) {\n setZIndex(acquireLayerZIndex(tier));\n stateRef.current.prevOpen = true;\n }\n // Ensure observer is running for future open/close changes.\n if (!stateRef.current.observer) {\n const handle = () => {\n const open = node.hasAttribute('data-open');\n if (open && !stateRef.current.prevOpen) {\n setZIndex(acquireLayerZIndex(stateRef.current.tier));\n }\n stateRef.current.prevOpen = open;\n };\n const observer = new MutationObserver(handle);\n observer.observe(node, {\n attributes: true,\n attributeFilter: ['data-open', 'data-closed'],\n });\n stateRef.current.observer = observer;\n }\n }\n prevExplicitRef.current = explicitZIndex;\n\n const ref = useCallback((node: T | null) => {\n if (node === stateRef.current.node) return;\n stateRef.current.observer?.disconnect();\n stateRef.current.observer = null;\n stateRef.current.node = node;\n stateRef.current.prevOpen = false;\n if (!node) return;\n if (stateRef.current.explicit !== undefined) return;\n const handle = () => {\n const isOpen = node.hasAttribute('data-open');\n if (isOpen && !stateRef.current.prevOpen) {\n setZIndex(acquireLayerZIndex(stateRef.current.tier));\n }\n stateRef.current.prevOpen = isOpen;\n };\n handle();\n const observer = new MutationObserver(handle);\n observer.observe(node, {\n attributes: true,\n attributeFilter: ['data-open', 'data-closed'],\n });\n stateRef.current.observer = observer;\n }, []);\n\n useEffect(\n () => () => {\n stateRef.current.observer?.disconnect();\n },\n [],\n );\n\n return { zIndex: stateRef.current.explicit ?? zIndex, ref };\n}\n"],"mappings":";;;AAUA,SAAgB,eACd,MACA,gBACsB;CACtB,MAAM,CAAC,QAAQ,aAAa,SAA6B,KAAA,EAAU;CAEnE,MAAM,WAAW,OAMd;EACD;EACA,UAAU;EACV,MAAM;EACN,UAAU;EACV,UAAU;EACX,CAAC;CAEF,MAAM,kBAAkB,OAAO,eAAe;AAG9C,UAAS,QAAQ,OAAO;AACxB,UAAS,QAAQ,WAAW;AAM5B,KACE,gBAAgB,YAAY,KAAA,KAC5B,mBAAmB,KAAA,KACnB,SAAS,QAAQ,MACjB;EACA,MAAM,OAAO,SAAS,QAAQ;AAE9B,MADe,KAAK,aAAa,YACvB,EAAE;AACV,aAAU,mBAAmB,KAAK,CAAC;AACnC,YAAS,QAAQ,WAAW;;AAG9B,MAAI,CAAC,SAAS,QAAQ,UAAU;GAC9B,MAAM,eAAe;IACnB,MAAM,OAAO,KAAK,aAAa,YAAY;AAC3C,QAAI,QAAQ,CAAC,SAAS,QAAQ,SAC5B,WAAU,mBAAmB,SAAS,QAAQ,KAAK,CAAC;AAEtD,aAAS,QAAQ,WAAW;;GAE9B,MAAM,WAAW,IAAI,iBAAiB,OAAO;AAC7C,YAAS,QAAQ,MAAM;IACrB,YAAY;IACZ,iBAAiB,CAAC,aAAa,cAAc;IAC9C,CAAC;AACF,YAAS,QAAQ,WAAW;;;AAGhC,iBAAgB,UAAU;CAE1B,MAAM,MAAM,aAAa,SAAmB;AAC1C,MAAI,SAAS,SAAS,QAAQ,KAAM;AACpC,WAAS,QAAQ,UAAU,YAAY;AACvC,WAAS,QAAQ,WAAW;AAC5B,WAAS,QAAQ,OAAO;AACxB,WAAS,QAAQ,WAAW;AAC5B,MAAI,CAAC,KAAM;AACX,MAAI,SAAS,QAAQ,aAAa,KAAA,EAAW;EAC7C,MAAM,eAAe;GACnB,MAAM,SAAS,KAAK,aAAa,YAAY;AAC7C,OAAI,UAAU,CAAC,SAAS,QAAQ,SAC9B,WAAU,mBAAmB,SAAS,QAAQ,KAAK,CAAC;AAEtD,YAAS,QAAQ,WAAW;;AAE9B,UAAQ;EACR,MAAM,WAAW,IAAI,iBAAiB,OAAO;AAC7C,WAAS,QAAQ,MAAM;GACrB,YAAY;GACZ,iBAAiB,CAAC,aAAa,cAAc;GAC9C,CAAC;AACF,WAAS,QAAQ,WAAW;IAC3B,EAAE,CAAC;AAEN,uBACc;AACV,WAAS,QAAQ,UAAU,YAAY;IAEzC,EAAE,CACH;AAED,QAAO;EAAE,QAAQ,SAAS,QAAQ,YAAY;EAAQ;EAAK"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"zIndexManager.mjs","names":[],"sources":["../../../src/base-ui/Modal/zIndexManager.ts"],"sourcesContent":["const BASE_MODAL_Z_INDEX = 1000;\n\nlet top = BASE_MODAL_Z_INDEX;\n\nexport const acquireModalZIndex = () => {\n top += 10;\n return top;\n};\n"],"mappings":";AAEA,IAAI,MAAM;AAEV,MAAa,2BAA2B;AACtC,QAAO;AACP,QAAO"}
|