@admin-layout/tailwind-design-pro 12.2.5-alpha.15 → 12.2.5-alpha.19
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/lib/__tests__/tailwindConfig.test.d.ts +2 -0
- package/lib/__tests__/tailwindConfig.test.d.ts.map +1 -0
- package/lib/components/Layout/Sidebar/BottomMenu.d.ts.map +1 -1
- package/lib/components/Layout/Sidebar/BottomMenu.js +54 -28
- package/lib/components/Layout/Sidebar/BottomMenu.js.map +1 -1
- package/lib/tailwindConfig.d.ts.map +1 -1
- package/lib/tailwindConfig.js +8 -3
- package/lib/tailwindConfig.js.map +1 -1
- package/lib/utils/__tests__/accountMenu.test.d.ts +2 -0
- package/lib/utils/__tests__/accountMenu.test.d.ts.map +1 -0
- package/lib/utils/accountMenu.d.ts +12 -0
- package/lib/utils/accountMenu.d.ts.map +1 -0
- package/lib/utils/accountMenu.js +19 -0
- package/lib/utils/accountMenu.js.map +1 -0
- package/package.json +4 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tailwindConfig.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tailwindConfig.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BottomMenu.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/Sidebar/BottomMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"BottomMenu.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/Sidebar/BottomMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAQpE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAkChD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAsThD,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React__default,{useState,useRef,useEffect}from'react';import {Link}from'@remix-run/react';import {useAppSelector}from'@admin-layout/client';import {generateMenuPath}from'../util.js';import {renderDynamicIcon}from'../../../helpers/DynamicIcon.js';import {MenuDynamicDialog}from'./MenuDynamicDialog.js';// Smooth entrance for the account/user dropdown — matches the rail's motion language.
|
|
1
|
+
import React__default,{useState,useRef,useEffect,useMemo}from'react';import {createPortal}from'react-dom';import {Link}from'@remix-run/react';import {useAppSelector}from'@admin-layout/client';import {generateMenuPath}from'../util.js';import {isSignedInProfile,accountMenuSections}from'../../../utils/accountMenu.js';import {renderDynamicIcon}from'../../../helpers/DynamicIcon.js';import {MenuDynamicDialog}from'./MenuDynamicDialog.js';// Smooth entrance for the account/user dropdown — matches the rail's motion language.
|
|
2
2
|
// transform/opacity/filter only; honors prefers-reduced-motion.
|
|
3
3
|
const BOTTOM_MENU_MOTION_CSS = `
|
|
4
4
|
@keyframes qlBottomDropdownIn {
|
|
@@ -22,6 +22,10 @@ const BOTTOM_MENU_MOTION_CSS = `
|
|
|
22
22
|
.ql-bm-item { animation: none; opacity: 1; }
|
|
23
23
|
}
|
|
24
24
|
`;
|
|
25
|
+
/** Width of the dropdown (Tailwind `w-72`), used to keep it inside the viewport. */
|
|
26
|
+
const DROPDOWN_WIDTH = 288;
|
|
27
|
+
/** Gap between the avatar and the dropdown, and between the dropdown and the viewport edge. */
|
|
28
|
+
const DROPDOWN_GAP = 8;
|
|
25
29
|
const BottomMenu = ({
|
|
26
30
|
menuData,
|
|
27
31
|
routeParams,
|
|
@@ -32,10 +36,11 @@ const BottomMenu = ({
|
|
|
32
36
|
isMobile,
|
|
33
37
|
picture
|
|
34
38
|
}) => {
|
|
35
|
-
const [MenusList, setMenusList] = useState();
|
|
36
39
|
const [isOpen, setIsOpen] = useState(false);
|
|
40
|
+
const [anchor, setAnchor] = useState(null);
|
|
37
41
|
const [openedModalKey, setOpenedModalKey] = React__default.useState(null);
|
|
38
42
|
const menuRef = useRef(null);
|
|
43
|
+
const dropdownRef = useRef(null);
|
|
39
44
|
const {
|
|
40
45
|
t
|
|
41
46
|
} = {
|
|
@@ -49,17 +54,33 @@ const BottomMenu = ({
|
|
|
49
54
|
nickname,
|
|
50
55
|
picture: profilePicture
|
|
51
56
|
} = profile;
|
|
52
|
-
|
|
57
|
+
// Not `!!profile`: the fallback above is `{}`, truthy for a signed-out visitor too.
|
|
58
|
+
const isSignedIn = isSignedInProfile(userState?.profile);
|
|
59
|
+
// The dropdown is portaled to <body> (see below), so it is placed against the avatar here:
|
|
60
|
+
// opening upward from it, never past the viewport's top or right edge.
|
|
61
|
+
const measureAnchor = () => {
|
|
62
|
+
const rect = menuRef.current?.getBoundingClientRect();
|
|
63
|
+
if (!rect) return;
|
|
64
|
+
setAnchor({
|
|
65
|
+
left: Math.max(DROPDOWN_GAP, Math.min(rect.left, window.innerWidth - DROPDOWN_WIDTH - DROPDOWN_GAP)),
|
|
66
|
+
bottom: window.innerHeight - rect.top + DROPDOWN_GAP,
|
|
67
|
+
maxHeight: rect.top - DROPDOWN_GAP * 2
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
const onOpen = () => {
|
|
71
|
+
measureAnchor();
|
|
72
|
+
setIsOpen(true);
|
|
73
|
+
};
|
|
53
74
|
const onClose = () => setIsOpen(false);
|
|
54
|
-
const toggleMenu = () =>
|
|
75
|
+
const toggleMenu = () => isOpen ? onClose() : onOpen();
|
|
55
76
|
const accountMenuItems = menuData?.find(menu => menu.key === 'account');
|
|
56
77
|
const logoutMenuItems = menuData?.filter(menu => menu.key === 'logout.modal');
|
|
57
78
|
// Handle outside clicks to close the menu
|
|
58
79
|
useEffect(() => {
|
|
59
80
|
const handleClickOutside = event => {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
81
|
+
const target = event.target;
|
|
82
|
+
if (menuRef.current?.contains(target) || dropdownRef.current?.contains(target)) return;
|
|
83
|
+
setIsOpen(false);
|
|
63
84
|
};
|
|
64
85
|
// Handle escape key to close the menu
|
|
65
86
|
const handleEscKey = event => {
|
|
@@ -70,24 +91,24 @@ const BottomMenu = ({
|
|
|
70
91
|
if (isOpen) {
|
|
71
92
|
document.addEventListener('mousedown', handleClickOutside);
|
|
72
93
|
document.addEventListener('keydown', handleEscKey);
|
|
94
|
+
window.addEventListener('resize', measureAnchor);
|
|
95
|
+
// Capture phase: the avatar moves with any scrolling ancestor, not only the window.
|
|
96
|
+
window.addEventListener('scroll', measureAnchor, true);
|
|
73
97
|
}
|
|
74
98
|
return () => {
|
|
75
99
|
document.removeEventListener('mousedown', handleClickOutside);
|
|
76
100
|
document.removeEventListener('keydown', handleEscKey);
|
|
101
|
+
window.removeEventListener('resize', measureAnchor);
|
|
102
|
+
window.removeEventListener('scroll', measureAnchor, true);
|
|
77
103
|
};
|
|
78
104
|
}, [isOpen]);
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
useEffect(() => {
|
|
89
|
-
setMenusList(getMenuSeparation(newMenuData));
|
|
90
|
-
}, [authorities]);
|
|
105
|
+
const MenusList = useMemo(() => {
|
|
106
|
+
const newMenuData = menuData?.filter(m => !m.hideInMenu)?.map(m => ({
|
|
107
|
+
...m,
|
|
108
|
+
path: generateMenuPath(m.path, routeParams)
|
|
109
|
+
}));
|
|
110
|
+
return accountMenuSections(getMenuSeparation(newMenuData), isSignedIn);
|
|
111
|
+
}, [menuData, routeParams, getMenuSeparation, isSignedIn]);
|
|
91
112
|
const conversionPath = path => {
|
|
92
113
|
if (path && path.indexOf('http') === 0) {
|
|
93
114
|
return path;
|
|
@@ -191,7 +212,8 @@ const BottomMenu = ({
|
|
|
191
212
|
className: `
|
|
192
213
|
inline-flex items-center justify-center bg-muted hover:bg-muted-foreground text-foreground rounded-full h-12 w-12 min-w-[48px] outline-none transform transition-colors duration-200
|
|
193
214
|
`,
|
|
194
|
-
"aria-
|
|
215
|
+
"aria-haspopup": "menu",
|
|
216
|
+
"aria-expanded": isOpen
|
|
195
217
|
}, picture ? React__default.createElement("img", {
|
|
196
218
|
src: picture,
|
|
197
219
|
className: "rounded-full",
|
|
@@ -209,12 +231,16 @@ const BottomMenu = ({
|
|
|
209
231
|
d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"
|
|
210
232
|
}))), isMobile && React__default.createElement("span", {
|
|
211
233
|
className: "text-lg font-medium"
|
|
212
|
-
}, t(nickname))), isOpen && React__default.createElement("div", {
|
|
213
|
-
|
|
234
|
+
}, t(nickname))), isOpen && anchor && createPortal(React__default.createElement("div", {
|
|
235
|
+
ref: dropdownRef,
|
|
236
|
+
className: "ql-bottom-dropdown bg-background fixed w-72 overflow-y-auto rounded-themed shadow-themed-lg py-1 themed-dropdown ring-1 ring-border focus:outline-none z-[999]",
|
|
214
237
|
role: "menu",
|
|
215
238
|
"aria-orientation": "vertical",
|
|
216
239
|
"aria-labelledby": "user-menu",
|
|
217
240
|
style: {
|
|
241
|
+
left: anchor.left,
|
|
242
|
+
bottom: anchor.bottom,
|
|
243
|
+
maxHeight: anchor.maxHeight,
|
|
218
244
|
transformOrigin: 'bottom left'
|
|
219
245
|
}
|
|
220
246
|
}, React__default.createElement("style", {
|
|
@@ -229,7 +255,7 @@ const BottomMenu = ({
|
|
|
229
255
|
}), MenusList?.middleMenus?.map((item, k) => React__default.createElement("div", {
|
|
230
256
|
key: k,
|
|
231
257
|
className: "px-1 py-1"
|
|
232
|
-
}, item.modal ? getMenuItemModal(item) : getMenuItemPath(item))),
|
|
258
|
+
}, item.modal ? getMenuItemModal(item) : getMenuItemPath(item))), isSignedIn && accountMenuItems?.children && React__default.createElement("div", {
|
|
233
259
|
className: "py-2"
|
|
234
260
|
}, accountMenuItems.children.map((item, idx) => React__default.createElement(Link, {
|
|
235
261
|
key: item.key,
|
|
@@ -244,14 +270,14 @@ const BottomMenu = ({
|
|
|
244
270
|
className: "mr-3 text-base"
|
|
245
271
|
}, item.icon), React__default.createElement("span", null, item.name)), item.hasNotification && React__default.createElement("div", {
|
|
246
272
|
className: "w-2 h-2 bg-blue-500 rounded-full"
|
|
247
|
-
})))),
|
|
273
|
+
})))), isSignedIn && accountMenuItems?.children && React__default.createElement("hr", {
|
|
248
274
|
className: "border-border my-1"
|
|
249
|
-
}), logoutMenuItems?.map((item, k) => React__default.createElement("div", {
|
|
275
|
+
}), isSignedIn && logoutMenuItems?.map((item, k) => React__default.createElement("div", {
|
|
250
276
|
key: k,
|
|
251
277
|
className: "px-1 py-1"
|
|
252
|
-
}, item.modal ? getMenuItemModal(item) : getMenuItemPath(item))),
|
|
278
|
+
}, item.modal ? getMenuItemModal(item) : getMenuItemPath(item))), isSignedIn && logoutMenuItems?.length > 0 && React__default.createElement("hr", {
|
|
253
279
|
className: "border-border my-1"
|
|
254
|
-
}),
|
|
280
|
+
}), isSignedIn && React__default.createElement("div", {
|
|
255
281
|
className: "flex items-center px-4 py-2"
|
|
256
282
|
}, React__default.createElement("div", {
|
|
257
283
|
className: "w-8 h-8 rounded-full bg-red-500 flex items-center justify-center overflow-hidden mr-3"
|
|
@@ -263,5 +289,5 @@ const BottomMenu = ({
|
|
|
263
289
|
className: "text-white text-sm font-medium"
|
|
264
290
|
}, (nickname || 'Guest').charAt(0).toUpperCase())), React__default.createElement("span", {
|
|
265
291
|
className: "text-sm font-medium"
|
|
266
|
-
}, nickname || 'Guest')))), getMenuModals());
|
|
292
|
+
}, nickname || 'Guest'))), document.body)), getMenuModals());
|
|
267
293
|
};export{BottomMenu};//# sourceMappingURL=BottomMenu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BottomMenu.js","sources":["../../../../src/components/Layout/Sidebar/BottomMenu.tsx"],"sourcesContent":[null],"names":["React"
|
|
1
|
+
{"version":3,"file":"BottomMenu.js","sources":["../../../../src/components/Layout/Sidebar/BottomMenu.tsx"],"sourcesContent":[null],"names":["React"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tailwindConfig.d.ts","sourceRoot":"","sources":["../src/tailwindConfig.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"tailwindConfig.d.ts","sourceRoot":"","sources":["../src/tailwindConfig.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyGvB,CAAC"}
|
package/lib/tailwindConfig.js
CHANGED
|
@@ -66,10 +66,15 @@ const themeConfig = {
|
|
|
66
66
|
lg: 'var(--shadow-lg)',
|
|
67
67
|
xl: 'var(--shadow-xl)'
|
|
68
68
|
},
|
|
69
|
+
// Property lists only, matching Tailwind's defaults. Do not point these at the
|
|
70
|
+
// `--transition-*` vars in styles/index.css: those hold full `transition`
|
|
71
|
+
// shorthands (property + duration + easing), which is invalid as a
|
|
72
|
+
// `transition-property` value, so the browser falls back to `all`. Duration and
|
|
73
|
+
// easing come from Tailwind's `duration-*` and `ease-*` utilities.
|
|
69
74
|
transitionProperty: {
|
|
70
|
-
colors: '
|
|
71
|
-
transform: '
|
|
72
|
-
all: '
|
|
75
|
+
colors: 'color, background-color, border-color, text-decoration-color, fill, stroke',
|
|
76
|
+
transform: 'transform',
|
|
77
|
+
all: 'all'
|
|
73
78
|
},
|
|
74
79
|
borderRadius: {
|
|
75
80
|
lg: 'var(--radius)',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tailwindConfig.js","sources":["../src/tailwindConfig.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAO,MAAM,WAAW,GAAG;AACvB,EAAA,MAAA,EAAM;AACF,IAAA,MAAA,EAAA,oBAAQ;AACR,IAAA,KAAA,EAAA,mBAAO;AACP,IAAA,IAAA,EAAA,kBAAM;AACN,IAAA,UAAA,EAAA,wBAAY;AACZ,IAAA,UAAA,EAAA,wBAAY;AACZ,IAAA,OAAA,EAAA;AACI,MAAA,OAAA,EAAA,qBAAS;AACT,MAAA,UAAA,EAAA;AACH,KAAA;AACD,IAAA,SAAA,EAAA;AACI,MAAA,OAAA,EAAA,uBAAS;AACT,MAAA,UAAA,EAAA;AACH,KAAA;AACD,IAAA,WAAA,EAAA;AACI,MAAA,OAAA,EAAA,yBAAS;AACT,MAAA,UAAA,EAAA;AACH,KAAA;AACD,IAAA,KAAA,EAAA;AACI,MAAA,OAAA,EAAA,mBAAS;AACT,MAAA,UAAA,EAAA;AACH,KAAA;AACD,IAAA,MAAA,EAAA;AACI,MAAA,OAAA,EAAA,oBAAS;AACT,MAAA,UAAA,EAAA;AACH,KAAA;AACD,IAAA,OAAA,EAAA;AACI,MAAA,OAAA,EAAA,qBAAS;AACT,MAAA,UAAA,EAAA;AACH,KAAA;AACD,IAAA,IAAA,EAAA;AACI,MAAA,OAAA,EAAA,kBAAS;AACT,MAAA,UAAA,EAAA;AACH,KAAA;AACD,IAAA,OAAA,EAAA;AACI,MAAA,OAAA,EAAA,gCAAS;AACT,MAAA,UAAA,EAAA,gCAAY;AACZ,MAAA,OAAA,EAAA,6BAAS;AACT,MAAA,oBAAA,EAAA,wCAAsB;AACtB,MAAA,MAAA,EAAA,4BAAQ;AACR,MAAA,mBAAA,EAAA,uCAAqB;AACrB,MAAA,MAAA,EAAA,4BAAQ;AACR,MAAA,IAAA,EAAA;AACH,KAAA;;AAED,IAAA,KAAA,EAAA;AACI,MAAA,OAAA,EAAA,2BAAS;AACT,MAAA,SAAA,EAAA,6BAAW;AACX,MAAA,MAAA,EAAA;AACH,KAAA;;AAED,IAAA,OAAA,EAAA,qBAAS;AACT,IAAA,OAAA,EAAA,qBAAS;AACT,IAAA,KAAA,EAAA,mBAAO;AACP,IAAA,IAAA,EAAA;AACH,GAAA;AACD,EAAA,eAAA,EAAe;AACX,IAAA,kBAAA,EAAA,yBAAoB;AACpB,IAAA,oBAAA,EAAA,2BAAsB;AACtB,IAAA,gBAAA,EAAA;AACH,GAAA;AACD,EAAA,SAAA,EAAS;AACL,IAAA,EAAA,EAAA,kBAAI;AACJ,IAAA,EAAA,EAAA,kBAAI;AACJ,IAAA,EAAA,EAAA,kBAAI;AACJ,IAAA,EAAA,EAAA;AACH,GAAA
|
|
1
|
+
{"version":3,"file":"tailwindConfig.js","sources":["../src/tailwindConfig.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAO,MAAM,WAAW,GAAG;AACvB,EAAA,MAAA,EAAM;AACF,IAAA,MAAA,EAAA,oBAAQ;AACR,IAAA,KAAA,EAAA,mBAAO;AACP,IAAA,IAAA,EAAA,kBAAM;AACN,IAAA,UAAA,EAAA,wBAAY;AACZ,IAAA,UAAA,EAAA,wBAAY;AACZ,IAAA,OAAA,EAAA;AACI,MAAA,OAAA,EAAA,qBAAS;AACT,MAAA,UAAA,EAAA;AACH,KAAA;AACD,IAAA,SAAA,EAAA;AACI,MAAA,OAAA,EAAA,uBAAS;AACT,MAAA,UAAA,EAAA;AACH,KAAA;AACD,IAAA,WAAA,EAAA;AACI,MAAA,OAAA,EAAA,yBAAS;AACT,MAAA,UAAA,EAAA;AACH,KAAA;AACD,IAAA,KAAA,EAAA;AACI,MAAA,OAAA,EAAA,mBAAS;AACT,MAAA,UAAA,EAAA;AACH,KAAA;AACD,IAAA,MAAA,EAAA;AACI,MAAA,OAAA,EAAA,oBAAS;AACT,MAAA,UAAA,EAAA;AACH,KAAA;AACD,IAAA,OAAA,EAAA;AACI,MAAA,OAAA,EAAA,qBAAS;AACT,MAAA,UAAA,EAAA;AACH,KAAA;AACD,IAAA,IAAA,EAAA;AACI,MAAA,OAAA,EAAA,kBAAS;AACT,MAAA,UAAA,EAAA;AACH,KAAA;AACD,IAAA,OAAA,EAAA;AACI,MAAA,OAAA,EAAA,gCAAS;AACT,MAAA,UAAA,EAAA,gCAAY;AACZ,MAAA,OAAA,EAAA,6BAAS;AACT,MAAA,oBAAA,EAAA,wCAAsB;AACtB,MAAA,MAAA,EAAA,4BAAQ;AACR,MAAA,mBAAA,EAAA,uCAAqB;AACrB,MAAA,MAAA,EAAA,4BAAQ;AACR,MAAA,IAAA,EAAA;AACH,KAAA;;AAED,IAAA,KAAA,EAAA;AACI,MAAA,OAAA,EAAA,2BAAS;AACT,MAAA,SAAA,EAAA,6BAAW;AACX,MAAA,MAAA,EAAA;AACH,KAAA;;AAED,IAAA,OAAA,EAAA,qBAAS;AACT,IAAA,OAAA,EAAA,qBAAS;AACT,IAAA,KAAA,EAAA,mBAAO;AACP,IAAA,IAAA,EAAA;AACH,GAAA;AACD,EAAA,eAAA,EAAe;AACX,IAAA,kBAAA,EAAA,yBAAoB;AACpB,IAAA,oBAAA,EAAA,2BAAsB;AACtB,IAAA,gBAAA,EAAA;AACH,GAAA;AACD,EAAA,SAAA,EAAS;AACL,IAAA,EAAA,EAAA,kBAAI;AACJ,IAAA,EAAA,EAAA,kBAAI;AACJ,IAAA,EAAA,EAAA,kBAAI;AACJ,IAAA,EAAA,EAAA;AACH,GAAA;;;;;;AAMD,EAAA,kBAAA,EAAkB;AACd,IAAA,MAAA,EAAA,4EAAQ;AACR,IAAA,SAAA,EAAA,WAAW;AACX,IAAA,GAAA,EAAA;AACH,GAAA;AACD,EAAA,YAAA,EAAY;AACR,IAAA,EAAA,EAAA,eAAI;AACJ,IAAA,EAAA,EAAA,2BAAI;AACJ,IAAA,EAAA,EAAA;AACH,GAAA;AACD,EAAA,SAAA,EAAS;AACL,IAAA,gBAAA,EAAA;AACI,MAAA,IAAA,EAAA;AACI,QAAA,MAAA,EAAA;AACH,OAAA;AACD,MAAA,EAAA,EAAA;AACI,QAAA,MAAA,EAAA;AACH;AACJ,KAAA;AACD,IAAA,cAAA,EAAA;AACI,MAAA,IAAA,EAAA;AACI,QAAA,MAAA,EAAA;AACH,OAAA;AACD,MAAA,EAAA,EAAA;AACI,QAAA,MAAA,EAAA;AACH;AACJ;AACJ,GAAA;AACD,EAAA,SAAA,EAAS;AACL,IAAA,gBAAA,EAAA,8BAAkB;AAClB,IAAA,cAAA,EAAA;AACH;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountMenu.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/accountMenu.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SeparateMenusTypes } from '@admin-layout/client';
|
|
2
|
+
/** The permission a signed-out visitor holds; the sign-up and log-in entries are scoped to it. */
|
|
3
|
+
export declare const GUEST_AUTHORITY = "account.user.guest";
|
|
4
|
+
/** A signed-out visitor has no user profile: the store holds none, or an empty object. */
|
|
5
|
+
export declare const isSignedInProfile: (profile: unknown) => boolean;
|
|
6
|
+
/**
|
|
7
|
+
* The entries the account menu lists. Signed in, every section as given. Signed out, only the
|
|
8
|
+
* entries made for signed-out visitors (sign up, log in): everything else needs an account, so
|
|
9
|
+
* offering it to a guest only sent them to the login page by a longer road.
|
|
10
|
+
*/
|
|
11
|
+
export declare function accountMenuSections(sections: SeparateMenusTypes, signedIn: boolean): SeparateMenusTypes;
|
|
12
|
+
//# sourceMappingURL=accountMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountMenu.d.ts","sourceRoot":"","sources":["../../src/utils/accountMenu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,kGAAkG;AAClG,eAAO,MAAM,eAAe,uBAAuB,CAAC;AAEpD,0FAA0F;AAC1F,eAAO,MAAM,iBAAiB,GAAI,SAAS,OAAO,KAAG,OAC0B,CAAC;AAKhF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,GAAG,kBAAkB,CAQvG"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** The permission a signed-out visitor holds; the sign-up and log-in entries are scoped to it. */
|
|
2
|
+
const GUEST_AUTHORITY = 'account.user.guest';
|
|
3
|
+
/** A signed-out visitor has no user profile: the store holds none, or an empty object. */
|
|
4
|
+
const isSignedInProfile = profile => !!profile && typeof profile === 'object' && Object.keys(profile).length > 0;
|
|
5
|
+
const isGuestEntry = item => Array.isArray(item?.authority) && item.authority.includes(GUEST_AUTHORITY);
|
|
6
|
+
/**
|
|
7
|
+
* The entries the account menu lists. Signed in, every section as given. Signed out, only the
|
|
8
|
+
* entries made for signed-out visitors (sign up, log in): everything else needs an account, so
|
|
9
|
+
* offering it to a guest only sent them to the login page by a longer road.
|
|
10
|
+
*/
|
|
11
|
+
function accountMenuSections(sections, signedIn) {
|
|
12
|
+
if (signedIn) return sections;
|
|
13
|
+
return {
|
|
14
|
+
upperMenus: sections?.upperMenus?.filter(isGuestEntry) ?? [],
|
|
15
|
+
middleMenus: sections?.middleMenus?.filter(isGuestEntry) ?? [],
|
|
16
|
+
lowerMenus: sections?.lowerMenus?.filter(isGuestEntry) ?? [],
|
|
17
|
+
bottomMenus: sections?.bottomMenus?.filter(isGuestEntry) ?? []
|
|
18
|
+
};
|
|
19
|
+
}export{GUEST_AUTHORITY,accountMenuSections,isSignedInProfile};//# sourceMappingURL=accountMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountMenu.js","sources":["../../src/utils/accountMenu.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEA;AACO,MAAM,eAAe,GAAG;AAE/B;AACO,MAAM,iBAAiB,GAAG,OAAC,IAA2B,CAAE,CAC3D,OAAE,IAAO,OAAI,OAAO,KAAO,QAAK,IAAQ,MAAI,CAAA,IAAO,CAAA,OAAK,CAAA,CAAO,MAAE,GAAM;AAE3E,MAAM,YAAY,GAAG,IAAC,SAClB,CAAA,OAAM,CAAA,IAAQ,EAAI,SAAE,CAAA,IAAU,IAAI,CAAA,SAAK,CAAA,QAAU,CAAA,eAAS,CAAA;AAE9D;;;;AAIG;AACG,SAAU,mBAAmB,CAAC,QAA4B,EAAE,QAAiB,EAAA;AAC/E,EAAA,IAAA,QAAI,EAAQ,OAAA,QAAA;AAAE,EAAA,OAAA;IACd,UAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,CAAA,YAAA,CAAA,IAAA,EAAA;eACH,EAAA,QAAY,EAAA,WAAU,EAAU,mBAAS,CAAA,IAAa,EAAI;cAC1D,EAAA,QAAa,EAAA,UAAU,EAAA,MAAa,aAAO,CAAA,IAAA,EAAa;eACxD,EAAA,QAAY,EAAA,WAAU,EAAU,mBAAS,CAAA,IAAa;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@admin-layout/tailwind-design-pro",
|
|
3
|
-
"version": "12.2.5-alpha.
|
|
3
|
+
"version": "12.2.5-alpha.19",
|
|
4
4
|
"description": "Sample core for higher packages to depend on",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -33,7 +33,8 @@
|
|
|
33
33
|
"@tailwindcss/aspect-ratio": "^0.4.2",
|
|
34
34
|
"@tailwindcss/forms": "^0.5.4",
|
|
35
35
|
"@tailwindcss/typography": "^0.5.9",
|
|
36
|
-
"tailwindcss": "^3.3.3"
|
|
36
|
+
"tailwindcss": "^3.3.3",
|
|
37
|
+
"vitest": "^3.0.4"
|
|
37
38
|
},
|
|
38
39
|
"peerDependencies": {
|
|
39
40
|
"@adminide-stack/extension-api": "*",
|
|
@@ -54,5 +55,5 @@
|
|
|
54
55
|
"typescript": {
|
|
55
56
|
"definition": "lib/index.d.ts"
|
|
56
57
|
},
|
|
57
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "fdbc2c9fafeb14f494d05ca1bf6856f062be3f42"
|
|
58
59
|
}
|