@erxes/ui 3.2.21-2 → 3.2.25-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.
|
@@ -289,4 +289,6 @@ export declare const ALL_ICONS: {
|
|
|
289
289
|
IconTicket: import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<import("@tabler/icons-react").Icon>>;
|
|
290
290
|
IconShoppingCart: import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<import("@tabler/icons-react").Icon>>;
|
|
291
291
|
IconShoppingCartPlus: import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<import("@tabler/icons-react").Icon>>;
|
|
292
|
+
IconCrown: import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<import("@tabler/icons-react").Icon>>;
|
|
293
|
+
IconStairs: import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<import("@tabler/icons-react").Icon>>;
|
|
292
294
|
};
|
package/package.json
CHANGED
|
@@ -32,6 +32,14 @@ const findSidebarPanelSlot = (panel: HTMLElement | null) => {
|
|
|
32
32
|
return null;
|
|
33
33
|
};
|
|
34
34
|
|
|
35
|
+
const SidebarPanelInnerTriggerHiddenContext = React.createContext(false);
|
|
36
|
+
|
|
37
|
+
const isSlotAbovePanel = (slot: HTMLElement, panel: HTMLElement | null) =>
|
|
38
|
+
Boolean(
|
|
39
|
+
panel &&
|
|
40
|
+
slot.compareDocumentPosition(panel) & Node.DOCUMENT_POSITION_FOLLOWING,
|
|
41
|
+
);
|
|
42
|
+
|
|
35
43
|
const useSidebarPanelSlot = (
|
|
36
44
|
panelRef: React.RefObject<HTMLDivElement | null>,
|
|
37
45
|
open: boolean,
|
|
@@ -40,13 +48,9 @@ const useSidebarPanelSlot = (
|
|
|
40
48
|
const [claimed, setClaimed] = React.useState(false);
|
|
41
49
|
|
|
42
50
|
React.useLayoutEffect(() => {
|
|
43
|
-
if (open) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
51
|
const found = findSidebarPanelSlot(panelRef.current);
|
|
48
52
|
|
|
49
|
-
if (!found) {
|
|
53
|
+
if (!found || (open && !isSlotAbovePanel(found, panelRef.current))) {
|
|
50
54
|
setSlot(null);
|
|
51
55
|
setClaimed(false);
|
|
52
56
|
return;
|
|
@@ -68,19 +72,24 @@ const useSidebarPanelSlot = (
|
|
|
68
72
|
};
|
|
69
73
|
}, [open, panelRef]);
|
|
70
74
|
|
|
71
|
-
return { slot
|
|
75
|
+
return { slot, claimed };
|
|
72
76
|
};
|
|
73
77
|
|
|
74
78
|
export const SidebarPanelTrigger = React.forwardRef<
|
|
75
79
|
React.ElementRef<typeof Button>,
|
|
76
80
|
React.ComponentProps<typeof Button>
|
|
77
81
|
>(({ className, onClick, ...props }, ref) => {
|
|
82
|
+
const hidden = React.useContext(SidebarPanelInnerTriggerHiddenContext);
|
|
78
83
|
const [open, setOpen] = useAtom(sidebarPanelOpenState);
|
|
79
84
|
const { t } = useTranslation('common', { keyPrefix: 'navigation' });
|
|
80
85
|
const toggleLabel = open
|
|
81
86
|
? t('collapse-sidebar', 'Collapse sidebar')
|
|
82
87
|
: t('expand-sidebar', 'Expand sidebar');
|
|
83
88
|
|
|
89
|
+
if (hidden) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
|
|
84
93
|
return (
|
|
85
94
|
<Button
|
|
86
95
|
ref={ref}
|
|
@@ -116,6 +125,7 @@ export const SidebarPanel = React.forwardRef<
|
|
|
116
125
|
const open = useAtomValue(sidebarPanelOpenState);
|
|
117
126
|
const [panelRef, setRefs] = useComposedRef(ref);
|
|
118
127
|
const { slot, claimed } = useSidebarPanelSlot(panelRef, open);
|
|
128
|
+
const triggerInSlot = Boolean(slot && claimed);
|
|
119
129
|
|
|
120
130
|
return (
|
|
121
131
|
<div
|
|
@@ -138,28 +148,27 @@ export const SidebarPanel = React.forwardRef<
|
|
|
138
148
|
</Portal.Root>
|
|
139
149
|
)}
|
|
140
150
|
{!open && !slot && (
|
|
141
|
-
<div className="absolute top-2 left-2 z-20">
|
|
151
|
+
<div className="absolute top-2.5 left-2 z-20">
|
|
142
152
|
<SidebarPanelTrigger className="size-7 border bg-background shadow-xs" />
|
|
143
153
|
</div>
|
|
144
154
|
)}
|
|
145
|
-
{
|
|
146
|
-
|
|
147
|
-
<
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
<div
|
|
155
|
-
hidden={!open}
|
|
156
|
-
className={cn(
|
|
157
|
-
'flex min-h-0 flex-1 flex-col overflow-y-auto',
|
|
158
|
-
label && '[&>[data-sidebar=group]:first-child]:pt-0',
|
|
155
|
+
<SidebarPanelInnerTriggerHiddenContext.Provider value={triggerInSlot}>
|
|
156
|
+
{open && label && (
|
|
157
|
+
<div className="flex h-12 shrink-0 items-center gap-1 px-2">
|
|
158
|
+
<span className="min-w-0 flex-1 truncate px-2 text-sm font-medium">
|
|
159
|
+
{label}
|
|
160
|
+
</span>
|
|
161
|
+
{actions}
|
|
162
|
+
<SidebarPanelTrigger className="size-8" />
|
|
163
|
+
</div>
|
|
159
164
|
)}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
165
|
+
<div
|
|
166
|
+
hidden={!open}
|
|
167
|
+
className="flex min-h-0 flex-1 flex-col overflow-y-auto"
|
|
168
|
+
>
|
|
169
|
+
{children}
|
|
170
|
+
</div>
|
|
171
|
+
</SidebarPanelInnerTriggerHiddenContext.Provider>
|
|
163
172
|
</div>
|
|
164
173
|
);
|
|
165
174
|
});
|
|
@@ -289,6 +289,8 @@ import {
|
|
|
289
289
|
IconTicket,
|
|
290
290
|
IconShoppingCart,
|
|
291
291
|
IconShoppingCartPlus,
|
|
292
|
+
IconCrown,
|
|
293
|
+
IconStairs,
|
|
292
294
|
} from '@tabler/icons-react';
|
|
293
295
|
|
|
294
296
|
export const ALL_ICONS = {
|
|
@@ -582,4 +584,6 @@ export const ALL_ICONS = {
|
|
|
582
584
|
IconTicket,
|
|
583
585
|
IconShoppingCart,
|
|
584
586
|
IconShoppingCartPlus,
|
|
587
|
+
IconCrown,
|
|
588
|
+
IconStairs,
|
|
585
589
|
};
|