@admin-layout/tailwind-design-pro 12.2.4-alpha.8 → 12.2.4-alpha.81
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/components/Layout/BasicLayout/index.d.ts.map +1 -1
- package/lib/components/Layout/BasicLayout/index.js +16 -2
- package/lib/components/Layout/BasicLayout/index.js.map +1 -1
- package/lib/components/Layout/GlobalHeader/NavbarSlotStrip.d.ts +12 -0
- package/lib/components/Layout/GlobalHeader/NavbarSlotStrip.d.ts.map +1 -0
- package/lib/components/Layout/GlobalHeader/NavbarSlotStrip.js +18 -0
- package/lib/components/Layout/GlobalHeader/NavbarSlotStrip.js.map +1 -0
- package/lib/components/Layout/GlobalHeader/RightContent.d.ts +1 -2
- package/lib/components/Layout/GlobalHeader/RightContent.d.ts.map +1 -1
- package/lib/components/Layout/GlobalHeader/RightContent.js +10 -72
- package/lib/components/Layout/GlobalHeader/RightContent.js.map +1 -1
- package/lib/components/Layout/GlobalHeader/RightMenu.d.ts.map +1 -1
- package/lib/components/Layout/GlobalHeader/RightMenu.js +16 -80
- package/lib/components/Layout/GlobalHeader/RightMenu.js.map +1 -1
- package/lib/components/Layout/GlobalHeader/SearchBar.js +1 -1
- package/lib/components/Layout/GlobalHeader/index.d.ts +1 -0
- package/lib/components/Layout/GlobalHeader/index.d.ts.map +1 -1
- package/lib/components/Layout/ProTailwindLayout.d.ts +1 -1
- package/lib/components/Layout/ProTailwindLayout.d.ts.map +1 -1
- package/lib/components/Layout/ProTailwindLayout.js +48 -36
- package/lib/components/Layout/ProTailwindLayout.js.map +1 -1
- package/lib/components/Layout/Sidebar/BottomMenu.d.ts.map +1 -1
- package/lib/components/Layout/Sidebar/BottomMenu.js +44 -71
- package/lib/components/Layout/Sidebar/BottomMenu.js.map +1 -1
- package/lib/components/Layout/Sidebar/DynamicIcon.d.ts.map +1 -1
- package/lib/components/Layout/Sidebar/DynamicIcon.js +80 -19
- package/lib/components/Layout/Sidebar/DynamicIcon.js.map +1 -1
- package/lib/components/Layout/Sidebar/MainSidebar.d.ts.map +1 -1
- package/lib/components/Layout/Sidebar/MainSidebar.js +20 -17
- package/lib/components/Layout/Sidebar/MainSidebar.js.map +1 -1
- package/lib/components/Layout/Sidebar/MainSidebarMenu.d.ts.map +1 -1
- package/lib/components/Layout/Sidebar/MainSidebarMenu.js +187 -16
- package/lib/components/Layout/Sidebar/MainSidebarMenu.js.map +1 -1
- package/lib/components/Layout/Sidebar/MenuDynamicDialog.d.ts +12 -0
- package/lib/components/Layout/Sidebar/MenuDynamicDialog.d.ts.map +1 -0
- package/lib/components/Layout/Sidebar/MenuDynamicDialog.js +79 -0
- package/lib/components/Layout/Sidebar/MenuDynamicDialog.js.map +1 -0
- package/lib/components/Layout/Sidebar/PerplexSidebar.d.ts.map +1 -1
- package/lib/components/Layout/Sidebar/PerplexSidebar.js +8 -12
- package/lib/components/Layout/Sidebar/PerplexSidebar.js.map +1 -1
- package/lib/components/Layout/Sidebar/PerplexSidebarMenu.d.ts.map +1 -1
- package/lib/components/Layout/Sidebar/PerplexSidebarMenu.js +301 -39
- package/lib/components/Layout/Sidebar/PerplexSidebarMenu.js.map +1 -1
- package/lib/components/Layout/Sidebar/SidebarRailFX.d.ts +23 -0
- package/lib/components/Layout/Sidebar/SidebarRailFX.d.ts.map +1 -0
- package/lib/components/Layout/Sidebar/SidebarRailFX.js +229 -0
- package/lib/components/Layout/Sidebar/SidebarRailFX.js.map +1 -0
- package/lib/components/Layout/TailwindLayout.js +3 -1
- package/lib/components/Layout/TailwindLayout.js.map +1 -1
- package/lib/components/Layout/getPageTitle.js +2 -2
- package/lib/components/Layout/getPageTitle.js.map +1 -1
- package/lib/components/Layout/slot-fill/RightContent.d.ts +3 -1
- package/lib/components/Layout/slot-fill/RightContent.d.ts.map +1 -1
- package/lib/components/Layout/slot-fill/RightContent.js +4 -6
- package/lib/components/Layout/slot-fill/RightContent.js.map +1 -1
- package/lib/components/SettingDrawer/hooks/useSettingsOperations.d.ts.map +1 -1
- package/lib/components/SettingDrawer/hooks/useSettingsOperations.js +2 -1
- package/lib/components/SettingDrawer/hooks/useSettingsOperations.js.map +1 -1
- package/lib/components/SettingDrawer/utils/constants.d.ts.map +1 -1
- package/lib/components/SettingDrawer/utils/constants.js +3 -0
- package/lib/components/SettingDrawer/utils/constants.js.map +1 -1
- package/lib/components/SettingsThemeApplier/SettingsThemeApplier.d.ts +10 -0
- package/lib/components/SettingsThemeApplier/SettingsThemeApplier.d.ts.map +1 -0
- package/lib/components/SettingsThemeApplier/SettingsThemeApplier.js +23 -0
- package/lib/components/SettingsThemeApplier/SettingsThemeApplier.js.map +1 -0
- package/lib/components/SettingsThemeApplier/index.d.ts +2 -0
- package/lib/components/SettingsThemeApplier/index.d.ts.map +1 -0
- package/lib/components/index.js +1 -1
- package/lib/components/typings.d.ts +2 -0
- package/lib/components/typings.d.ts.map +1 -1
- package/lib/compute.js +2 -2
- package/lib/compute.js.map +1 -1
- package/lib/helpers/DynamicIcon.js +7 -1
- package/lib/helpers/DynamicIcon.js.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/routes.json +5 -2
- package/lib/styles/index.css +282 -0
- package/lib/utils/settingsTheme.d.ts +40 -0
- package/lib/utils/settingsTheme.d.ts.map +1 -0
- package/lib/utils/settingsTheme.js +106 -0
- package/lib/utils/settingsTheme.js.map +1 -0
- package/package.json +8 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/BasicLayout/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAIhB,iBAAiB,EAEpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAA4D,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/BasicLayout/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAIhB,iBAAiB,EAEpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAA4D,MAAM,OAAO,CAAC;AAyBjF,wBAAgB,mBAAmB,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,gBAAgB,EAAE;;;;CAAA,mCA+B3F;AAwCD,wBAAgB,WAAW,CACvB,KAAK,EAAE,gBAAgB,GACnB,iBAAiB,GAAG;IAChB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;KACjC,CAAC;CACL,qBAigBR"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {getThemeColors,getMenuSeparation,useComponentSize}from'@admin-layout/client';import {useMatches,Link
|
|
1
|
+
import {getThemeColors,getMenuSeparation,useComponentSize}from'@admin-layout/client';import {useMatches,Outlet,Link}from'@remix-run/react';import {omit}from'lodash-es';import React__default,{useRef,useMemo,useState,useEffect,useCallback}from'react';import warning from'warning';import {config}from'../../../config/env-config.js';import'@react-icons/all-files/fa/FaMoon.js';import'@react-icons/all-files/fa/FaSun.js';import {useMediaQuery}from'../../../hooks/useMediaQuery.js';import {useScrollThreshold}from'../../../hooks/useScrollThreshold.js';import {SettingDrawer}from'../../SettingDrawer/SettingDrawer.js';import {getPageTitleInfo}from'../getPageTitle.js';import {MainHeader}from'../GlobalHeader/MainHeader.js';import {NavbarSlotStrip,NAVBAR_SLOT_STRIP_HEIGHT_PX}from'../GlobalHeader/NavbarSlotStrip.js';import'@remix-run/router';import'../../../helpers/DynamicIcon.js';import'react-dom';import'@app/dialog/WrappedDialogsSwitch';import {GlobalHeader}from'../GlobalHeader/Header.js';import {MainSidebar}from'../Sidebar/MainSidebar.js';import {PerplexSidebar}from'../Sidebar/PerplexSidebar.js';import'@common-stack/components-pro';import {FooterSlot}from'../slot-fill/Footer.js';import'reflect-metadata';import'@admin-layout/client/lib/constants/layout.js';import {generateBreadcrumbRoutes}from'../Breadcrumbs/breadcrumbUtils.js';import {Breadcrumb,BreadcrumbList,BreadcrumbItem,BreadcrumbLink,BreadcrumbSeparator,BreadcrumbPage}from'@admin-layout/tailwind-ui/shardui/breadcrumb.js';//helper func
|
|
2
2
|
function useHorizontalScroll({
|
|
3
3
|
setScrolled,
|
|
4
4
|
setSearchOptionsShown,
|
|
@@ -306,6 +306,13 @@ function BasicLayout(props) {
|
|
|
306
306
|
});
|
|
307
307
|
}
|
|
308
308
|
}, [actor]);
|
|
309
|
+
/** Floating surfaces (e.g. Tauri AI toolbar) bypass sidebar, margins, and `main.mt-16` content offset. */
|
|
310
|
+
const bareOutlet = useMemo(() => matches.some(m => !!m.handle?.bareOutlet), [matches]);
|
|
311
|
+
if (bareOutlet) {
|
|
312
|
+
return React__default.createElement("div", {
|
|
313
|
+
className: "min-h-0 h-auto w-full overflow-visible bg-transparent"
|
|
314
|
+
}, React__default.createElement(Outlet, null));
|
|
315
|
+
}
|
|
309
316
|
return React__default.createElement("div", {
|
|
310
317
|
className: backgroundClasses,
|
|
311
318
|
ref: horizontalScrollRef,
|
|
@@ -330,6 +337,12 @@ function BasicLayout(props) {
|
|
|
330
337
|
componentVisibility: componentVisibility,
|
|
331
338
|
showMenu: showMenu,
|
|
332
339
|
toggleSideMenu: toggleSideMenu
|
|
340
|
+
}), isSideMenuLayout && LAYOUT_ROOT != '/' && deviceSettings?.header?.showHeader && deviceSettings?.header?.showRightContent && React__default.createElement(NavbarSlotStrip, {
|
|
341
|
+
settings: settings,
|
|
342
|
+
upperMenus: headerUpperMenus,
|
|
343
|
+
routeParams: memoizedRouteParams,
|
|
344
|
+
collapsed: collapsed,
|
|
345
|
+
location: location
|
|
333
346
|
}), React__default.createElement("div", {
|
|
334
347
|
className: "bg-background"
|
|
335
348
|
}, shouldShowSidebar && !isPerplexLayout && React__default.createElement("div", {
|
|
@@ -349,7 +362,8 @@ function BasicLayout(props) {
|
|
|
349
362
|
showHeader: showHeader,
|
|
350
363
|
menuHeaderRender: menuHeaderRender,
|
|
351
364
|
deviceSettings: deviceSettings,
|
|
352
|
-
isSideMenuLayout: isSideMenuLayout
|
|
365
|
+
isSideMenuLayout: isSideMenuLayout,
|
|
366
|
+
navbarSlotStripHeight: isSideMenuLayout && LAYOUT_ROOT != '/' && deviceSettings?.header?.showHeader && deviceSettings?.header?.showRightContent ? NAVBAR_SLOT_STRIP_HEIGHT_PX : 0
|
|
353
367
|
})), shouldShowSidebar && isPerplexLayout && React__default.createElement("div", {
|
|
354
368
|
style: sideBarMarginTop ? {
|
|
355
369
|
marginTop: sideBarMarginTop
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/Layout/BasicLayout/index.tsx"],"sourcesContent":[null],"names":["React"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Layout/BasicLayout/index.tsx"],"sourcesContent":[null],"names":["React"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { GlobalHeaderRightProps } from '../../typings';
|
|
3
|
+
/** Height of the strip in px (matches h-14 / 3.5rem). Used so sidebar can offset when fixed. */
|
|
4
|
+
export declare const NAVBAR_SLOT_STRIP_HEIGHT_PX = 56;
|
|
5
|
+
/**
|
|
6
|
+
* Minimal top bar that renders only the navbar slot (RIGHT_CONTENT_FILL).
|
|
7
|
+
* Used in sidebar layout when GlobalHeader is not shown, so packages can still
|
|
8
|
+
* inject navbar content (e.g. notification bell) in a consistent top-area position.
|
|
9
|
+
* Does not render language menu or org dropdown; those stay in the sidebar body.
|
|
10
|
+
*/
|
|
11
|
+
export declare const NavbarSlotStrip: React.FC<GlobalHeaderRightProps>;
|
|
12
|
+
//# sourceMappingURL=NavbarSlotStrip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NavbarSlotStrip.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/GlobalHeader/NavbarSlotStrip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEvD,gGAAgG;AAChG,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAE9C;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAW5D,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React__default from'react';import {RightContentSlot}from'../slot-fill/RightContent.js';/** Height of the strip in px (matches h-14 / 3.5rem). Used so sidebar can offset when fixed. */
|
|
2
|
+
const NAVBAR_SLOT_STRIP_HEIGHT_PX = 56;
|
|
3
|
+
/**
|
|
4
|
+
* Minimal top bar that renders only the navbar slot (RIGHT_CONTENT_FILL).
|
|
5
|
+
* Used in sidebar layout when GlobalHeader is not shown, so packages can still
|
|
6
|
+
* inject navbar content (e.g. notification bell) in a consistent top-area position.
|
|
7
|
+
* Does not render language menu or org dropdown; those stay in the sidebar body.
|
|
8
|
+
*/
|
|
9
|
+
const NavbarSlotStrip = props => {
|
|
10
|
+
return React__default.createElement("header", {
|
|
11
|
+
className: "z-10 flex h-14 items-center justify-end border-b border-border bg-background px-4 shrink-0",
|
|
12
|
+
role: "banner"
|
|
13
|
+
}, React__default.createElement("div", {
|
|
14
|
+
className: "flex items-center gap-2"
|
|
15
|
+
}, React__default.createElement(RightContentSlot, {
|
|
16
|
+
...props
|
|
17
|
+
})));
|
|
18
|
+
};export{NAVBAR_SLOT_STRIP_HEIGHT_PX,NavbarSlotStrip};//# sourceMappingURL=NavbarSlotStrip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NavbarSlotStrip.js","sources":["../../../../src/components/Layout/GlobalHeader/NavbarSlotStrip.tsx"],"sourcesContent":[null],"names":["React"],"mappings":"8FAIA;AACO,MAAM,2BAA2B,GAAG;AAE3C;;;;;AAKG;AACI,MAAM,eAAe,GAAqC,KAAC,IAAO;SACrEA;aAKQ,EAAA,4FAAwC;AACpC,IAAA,IAAA,EAAA;AAIhB,GAAE,EAAAA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA;;;;;"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import { GlobalHeaderRightProps } from '../../typings';
|
|
3
|
-
export declare const useHorizontalScroll: () => React.RefObject<HTMLDivElement>;
|
|
4
3
|
export declare const RightContent: React.FC<GlobalHeaderRightProps>;
|
|
5
4
|
//# sourceMappingURL=RightContent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RightContent.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/GlobalHeader/RightContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"RightContent.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/GlobalHeader/RightContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEvD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAqBzD,CAAC"}
|
|
@@ -1,86 +1,24 @@
|
|
|
1
|
-
import
|
|
2
|
-
const elRef = useRef(null);
|
|
3
|
-
useEffect(() => {
|
|
4
|
-
const el = elRef.current;
|
|
5
|
-
if (el) {
|
|
6
|
-
const onWheel = e => {
|
|
7
|
-
if (e.deltaY === 0) return;
|
|
8
|
-
e.preventDefault();
|
|
9
|
-
el.scrollTo({
|
|
10
|
-
left: el.scrollLeft + e.deltaY,
|
|
11
|
-
behavior: 'smooth'
|
|
12
|
-
});
|
|
13
|
-
};
|
|
14
|
-
el.addEventListener('wheel', onWheel);
|
|
15
|
-
return () => {
|
|
16
|
-
el.removeEventListener('wheel', onWheel);
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
}, []);
|
|
20
|
-
return elRef;
|
|
21
|
-
};
|
|
22
|
-
const RightContent = props => {
|
|
1
|
+
import React__default from'react';import {LanguageMenu}from'../../LanguageMenu/LanguageMenu.js';import OrganizationDropDown from'./OrganizationDropdown.js';import {RightContentSlot}from'../slot-fill/RightContent.js';const RightContent = props => {
|
|
23
2
|
const {
|
|
24
|
-
theme,
|
|
25
|
-
layout,
|
|
26
3
|
upperMenus,
|
|
27
4
|
routeParams,
|
|
28
5
|
collapsed,
|
|
29
6
|
settings
|
|
30
7
|
} = props;
|
|
31
|
-
|
|
32
|
-
const scrollRef = useHorizontalScroll();
|
|
33
|
-
// TODO: uncomment this once the extension API is updated
|
|
34
|
-
// const controller: any = useExtensionController();
|
|
35
|
-
// useEffect(() => {
|
|
36
|
-
// if (controller) {
|
|
37
|
-
// const subscription = controller.services.contribution.getContributions().subscribe(({ pageNavBar }) => {
|
|
38
|
-
// setNavBarItems(pageNavBar || []);
|
|
39
|
-
// });
|
|
40
|
-
// return () => subscription.unsubscribe();
|
|
41
|
-
// }
|
|
42
|
-
// }, [controller]);
|
|
43
|
-
useEffect(() => {
|
|
44
|
-
const ele = document.getElementById('item-wrapper');
|
|
45
|
-
if (ele) {
|
|
46
|
-
if (check(ele)) {
|
|
47
|
-
ele.style.boxShadow = 'inset 0 0 5px #e2e2e2';
|
|
48
|
-
} else {
|
|
49
|
-
ele.style.boxShadow = 'none';
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
const check = el => {
|
|
54
|
-
const curOverflow = el.style.overflow;
|
|
55
|
-
if (!curOverflow || curOverflow === 'visible') {
|
|
56
|
-
el.style.overflow = 'hidden';
|
|
57
|
-
}
|
|
58
|
-
const isOverflowing = el.clientWidth < el.scrollWidth || el.clientHeight < el.scrollHeight;
|
|
59
|
-
el.style.overflow = curOverflow;
|
|
60
|
-
return isOverflowing;
|
|
61
|
-
};
|
|
62
|
-
return React.createElement("div", {
|
|
8
|
+
return React__default.createElement("div", {
|
|
63
9
|
className: `flex items-center ${collapsed ? 'ml-2.5' : 'ml-0'}`
|
|
64
|
-
},
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
},
|
|
69
|
-
if (item.position === 'right' && item.component) {
|
|
70
|
-
return React.createElement("div", {
|
|
71
|
-
key: index,
|
|
72
|
-
className: "flex-shrink-0"
|
|
73
|
-
}, item.component(props));
|
|
74
|
-
}
|
|
75
|
-
return null;
|
|
76
|
-
})), React.createElement("div", {
|
|
10
|
+
}, React__default.createElement("div", {
|
|
11
|
+
className: "relative flex items-center flex-shrink-0"
|
|
12
|
+
}, React__default.createElement(RightContentSlot, {
|
|
13
|
+
...props
|
|
14
|
+
})), React__default.createElement("div", {
|
|
77
15
|
className: "relative"
|
|
78
|
-
},
|
|
16
|
+
}, React__default.createElement(LanguageMenu, null)), React__default.createElement("div", {
|
|
79
17
|
className: "relative"
|
|
80
|
-
},
|
|
18
|
+
}, React__default.createElement(OrganizationDropDown, {
|
|
81
19
|
upperMenus: upperMenus,
|
|
82
20
|
routeParams: routeParams,
|
|
83
21
|
collapsed: collapsed,
|
|
84
22
|
settings: settings
|
|
85
23
|
})));
|
|
86
|
-
};export{RightContent
|
|
24
|
+
};export{RightContent};//# sourceMappingURL=RightContent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RightContent.js","sources":["../../../../src/components/Layout/GlobalHeader/RightContent.tsx"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RightContent.js","sources":["../../../../src/components/Layout/GlobalHeader/RightContent.tsx"],"sourcesContent":[null],"names":["React"],"mappings":"wNAMO,MAAM,YAAY,GAAqC,KAAC,IAAO;QAClE;AAEA,IAAA,UACI;eACI;AACI,IAAA,SAAA;;;SAKJA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA;aACI,EAAA,CAAA,kBAAC,EAAA,SAAA,GAAA,QACG,GAAA,MAAA,CAAU;AAQ9B,GAAE,EAAAA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RightMenu.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/GlobalHeader/RightMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"RightMenu.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/GlobalHeader/RightMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAMpE,OAAO,EAAE,eAAe,EAAU,MAAM,eAAe,CAAC;AAExD,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA0N/C,CAAC"}
|
|
@@ -1,20 +1,4 @@
|
|
|
1
|
-
import React__default,{useState,useRef,useEffect}from'react';import {Link}from'@remix-run/react';import {generateMenuPath}from'../util.js';import {renderDynamicIcon}from'../../../helpers/DynamicIcon.js';import
|
|
2
|
-
path,
|
|
3
|
-
onClose
|
|
4
|
-
}) => {
|
|
5
|
-
const [dialog, setDialog] = useState(null);
|
|
6
|
-
useEffect(() => {
|
|
7
|
-
if (!dialog) {
|
|
8
|
-
switchDialogs(path).then(component => {
|
|
9
|
-
setDialog(component);
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
}, []);
|
|
13
|
-
return dialog ? React__default.createElement(dialog.default, {
|
|
14
|
-
onClose: onClose
|
|
15
|
-
}) : React__default.createElement("div", null, "Loading...");
|
|
16
|
-
};
|
|
17
|
-
const RightMenu = ({
|
|
1
|
+
import React__default,{useState,useRef,useEffect,useMemo}from'react';import {Link}from'@remix-run/react';import {generateMenuPath}from'../util.js';import {renderDynamicIcon}from'../../../helpers/DynamicIcon.js';import {MenuDynamicDialog}from'../Sidebar/MenuDynamicDialog.js';const RightMenu = ({
|
|
18
2
|
menuData,
|
|
19
3
|
routeParams,
|
|
20
4
|
getMenuSeparation,
|
|
@@ -58,18 +42,6 @@ const RightMenu = ({
|
|
|
58
42
|
document.removeEventListener('keydown', handleEscKey);
|
|
59
43
|
};
|
|
60
44
|
}, [isOpen]);
|
|
61
|
-
const newMenuData = menuData?.filter(m => !m.hideInMenu)?.map(m => {
|
|
62
|
-
if (!m.hideInMenu) {
|
|
63
|
-
const path = generateMenuPath(m.path, routeParams);
|
|
64
|
-
return {
|
|
65
|
-
...m,
|
|
66
|
-
path
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
useEffect(() => {
|
|
71
|
-
setMenusList(getMenuSeparation(newMenuData));
|
|
72
|
-
}, [authorities]);
|
|
73
45
|
const conversionPath = path => {
|
|
74
46
|
if (path && path.indexOf('http') === 0) {
|
|
75
47
|
return path;
|
|
@@ -79,6 +51,15 @@ const RightMenu = ({
|
|
|
79
51
|
}
|
|
80
52
|
return `/${path || ''}`.replace(/\/+/g, '/');
|
|
81
53
|
};
|
|
54
|
+
const MenuData = useMemo(() => {
|
|
55
|
+
return (menuData || []).filter(m => !m.hideInMenu).map(m => ({
|
|
56
|
+
...m,
|
|
57
|
+
path: generateMenuPath(m.path, routeParams)
|
|
58
|
+
}));
|
|
59
|
+
}, [menuData, routeParams]);
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
setMenusList(getMenuSeparation(MenuData));
|
|
62
|
+
}, [MenuData, authorities, getMenuSeparation]);
|
|
82
63
|
const getMenuItemModal = item => {
|
|
83
64
|
// const icon = this.getIcon(item.icon);
|
|
84
65
|
const {
|
|
@@ -149,62 +130,17 @@ const RightMenu = ({
|
|
|
149
130
|
key,
|
|
150
131
|
name
|
|
151
132
|
} = item;
|
|
152
|
-
|
|
133
|
+
if (key !== openedModalKey) {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
return React__default.createElement(MenuDynamicDialog, {
|
|
153
137
|
key: k,
|
|
154
|
-
|
|
155
|
-
}, React__default.createElement("div", {
|
|
156
|
-
className: "flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0"
|
|
157
|
-
}, React__default.createElement("div", {
|
|
158
|
-
className: "fixed inset-0 transition-opacity",
|
|
159
|
-
"aria-hidden": "true"
|
|
160
|
-
}, React__default.createElement("div", {
|
|
161
|
-
className: "absolute inset-0 bg-black bg-opacity-50",
|
|
162
|
-
onClick: () => {
|
|
163
|
-
onClose();
|
|
164
|
-
setOpenedModalKey(null);
|
|
165
|
-
}
|
|
166
|
-
})), React__default.createElement("span", {
|
|
167
|
-
className: "hidden sm:inline-block sm:align-middle sm:h-screen",
|
|
168
|
-
"aria-hidden": "true"
|
|
169
|
-
}, "\u200B"), React__default.createElement("div", {
|
|
170
|
-
className: "inline-block align-bottom rounded-themed-lg text-left overflow-hidden shadow-themed-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full themed-modal",
|
|
171
|
-
role: "dialog",
|
|
172
|
-
"aria-modal": "true",
|
|
173
|
-
"aria-labelledby": "modal-headline"
|
|
174
|
-
}, React__default.createElement("div", {
|
|
175
|
-
className: "px-4 pt-5 pb-4 sm:p-6 sm:pb-4"
|
|
176
|
-
}, React__default.createElement("div", {
|
|
177
|
-
className: "flex justify-end"
|
|
178
|
-
}, React__default.createElement("button", {
|
|
179
|
-
type: "button",
|
|
180
|
-
className: "rounded-themed text-muted-foreground hover:text-foreground focus-themed",
|
|
181
|
-
onClick: () => {
|
|
182
|
-
onClose();
|
|
183
|
-
setOpenedModalKey(null);
|
|
184
|
-
}
|
|
185
|
-
}, React__default.createElement("span", {
|
|
186
|
-
className: "sr-only"
|
|
187
|
-
}, "Close"), React__default.createElement("svg", {
|
|
188
|
-
className: "h-6 w-6",
|
|
189
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
190
|
-
fill: "none",
|
|
191
|
-
viewBox: "0 0 24 24",
|
|
192
|
-
stroke: "currentColor",
|
|
193
|
-
"aria-hidden": "true"
|
|
194
|
-
}, React__default.createElement("path", {
|
|
195
|
-
strokeLinecap: "round",
|
|
196
|
-
strokeLinejoin: "round",
|
|
197
|
-
strokeWidth: "2",
|
|
198
|
-
d: "M6 18L18 6M6 6l12 12"
|
|
199
|
-
})))), React__default.createElement("div", {
|
|
200
|
-
className: "mt-2"
|
|
201
|
-
}, React__default.createElement(DialogComponent, {
|
|
202
|
-
path: dialogPath,
|
|
138
|
+
dialogPath: dialogPath,
|
|
203
139
|
onClose: () => {
|
|
204
140
|
onClose();
|
|
205
141
|
setOpenedModalKey(null);
|
|
206
142
|
}
|
|
207
|
-
})
|
|
143
|
+
});
|
|
208
144
|
});
|
|
209
145
|
};
|
|
210
146
|
return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RightMenu.js","sources":["../../../../src/components/Layout/GlobalHeader/RightMenu.tsx"],"sourcesContent":[null],"names":["React"],"mappings":"
|
|
1
|
+
{"version":3,"file":"RightMenu.js","sources":["../../../../src/components/Layout/GlobalHeader/RightMenu.tsx"],"sourcesContent":[null],"names":["React","RouterLink"],"mappings":"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"}
|
|
@@ -106,4 +106,4 @@ const SearchBar = ({
|
|
|
106
106
|
}, result.type)), result.description && React__default.createElement("span", {
|
|
107
107
|
className: "block text-sm text-muted-foreground truncate"
|
|
108
108
|
}, result.description))))));
|
|
109
|
-
};export{SearchBar
|
|
109
|
+
};export{SearchBar};//# sourceMappingURL=SearchBar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/GlobalHeader/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/GlobalHeader/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
|
|
@@ -20,11 +20,11 @@ export declare const handle: {
|
|
|
20
20
|
i18n: string;
|
|
21
21
|
};
|
|
22
22
|
export declare const links: LinksFunction;
|
|
23
|
-
export declare function HydrateFallback(): React.JSX.Element;
|
|
24
23
|
export declare function loader(params: any): Promise<{
|
|
25
24
|
newMenuData: import("@common-stack/client-react").IMenuData[];
|
|
26
25
|
apolloState: any;
|
|
27
26
|
permissions: any;
|
|
27
|
+
policies: any;
|
|
28
28
|
}>;
|
|
29
29
|
export declare function clientLoader({ serverLoader }: {
|
|
30
30
|
serverLoader: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProTailwindLayout.d.ts","sourceRoot":"","sources":["../../../src/components/Layout/ProTailwindLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEH,gBAAgB,EAMnB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ProTailwindLayout.d.ts","sourceRoot":"","sources":["../../../src/components/Layout/ProTailwindLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEH,gBAAgB,EAMnB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,iBAAiB,CAAC,EAAE,KAAK,CAAC;YACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,GAAG,EAAE,MAAM,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,UAAU,CAAC,EAAE,OAAO,CAAC;YACrB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,eAAe,CAAC,EAAE,OAAO,CAAC;YAC1B,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;SAClB,CAAC,CAAC;KACN;CACJ;AASD,eAAO,MAAM,MAAM;;CAElB,CAAC;AACF,eAAO,MAAM,KAAK,EAAE,aAA+D,CAAC;AAkEpF,wBAAsB,MAAM,CAAC,MAAM,KAAA;;;;;GAmClC;AACD,wBAAsB,YAAY,CAAC,EAAE,YAAY,EAAE;;CAAA,gBA6MlD;AAQD,eAAO,MAAM,gBAAgB,GAAI;;;CAA6B,YAE7D,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,qBA8DhE"}
|
|
@@ -75,17 +75,8 @@ function filterMenuItemsByVisibility(menuData, settings) {
|
|
|
75
75
|
};
|
|
76
76
|
return filterItemsRecursively(filteredByCategory);
|
|
77
77
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
style: {
|
|
81
|
-
display: 'flex',
|
|
82
|
-
justifyContent: 'center',
|
|
83
|
-
alignItems: 'center',
|
|
84
|
-
height: '100vh',
|
|
85
|
-
fontFamily: 'system-ui, sans-serif'
|
|
86
|
-
}
|
|
87
|
-
}, React.createElement("div", null, "Loading..."));
|
|
88
|
-
}
|
|
78
|
+
// NOTE: No HydrateFallback exported - we use SSR so the server-rendered content displays immediately.
|
|
79
|
+
// HydrateFallback should only be used for client-only routes that can't render until clientLoader runs.
|
|
89
80
|
// loader or action
|
|
90
81
|
async function loader(params) {
|
|
91
82
|
const {
|
|
@@ -107,6 +98,7 @@ async function loader(params) {
|
|
|
107
98
|
const menuDataWithParentKeys = addProLayoutParentKeys(routeWithChildren);
|
|
108
99
|
menuDataWithParentKeys.forEach(item => removeUnnecessaryProperties(item));
|
|
109
100
|
let permissions = params?._dataContext?.permissions;
|
|
101
|
+
const policies = params?._dataContext?.policies;
|
|
110
102
|
let apolloState = params?._dataContext?.apolloState;
|
|
111
103
|
if (!permissions) {
|
|
112
104
|
throw new Error('Permissions not found');
|
|
@@ -114,10 +106,10 @@ async function loader(params) {
|
|
|
114
106
|
if (!apolloState) {
|
|
115
107
|
throw new Error('ApolloState not found');
|
|
116
108
|
}
|
|
117
|
-
const newMenuData = menuDataRender(routeWithLocale, permissions);
|
|
118
|
-
// returnInfo: {"keys":["newMenuData","apolloState","permissions"],"hasOptions":false}
|
|
109
|
+
const newMenuData = menuDataRender(routeWithLocale, permissions, policies);
|
|
110
|
+
// returnInfo: {"keys":["newMenuData","apolloState","permissions","policies"],"hasOptions":false}
|
|
119
111
|
return {
|
|
120
|
-
data: [newMenuData, apolloState, permissions]
|
|
112
|
+
data: [newMenuData, apolloState, permissions, policies]
|
|
121
113
|
};
|
|
122
114
|
}
|
|
123
115
|
async function clientLoader({
|
|
@@ -221,8 +213,9 @@ async function clientLoader({
|
|
|
221
213
|
topLevelKeys: routeConfig?.map?.(r => r.key) || []
|
|
222
214
|
});
|
|
223
215
|
// Transform routes to menu format - the config already has hierarchical structure with nested routes
|
|
216
|
+
// Mirror the SSR pipeline: filter hidden/resource routes, sort by priority, recurse.
|
|
224
217
|
const transformToMenuData = routes => {
|
|
225
|
-
return routes.filter(r => !r.hideInMenu && !r.isResourceRoute && !r.path?.includes('/resources/')).map(route => {
|
|
218
|
+
return routes.filter(r => !r.hideInMenu && !r.isResourceRoute && !r.path?.includes('/resources/')).slice().sort((a, b) => (parseInt(a?.priority, 10) || 0) - (parseInt(b?.priority, 10) || 0)).map(route => {
|
|
226
219
|
const menuItem = {
|
|
227
220
|
key: route.key,
|
|
228
221
|
name: route.name,
|
|
@@ -230,7 +223,8 @@ async function clientLoader({
|
|
|
230
223
|
icon: route.icon,
|
|
231
224
|
position: route.position,
|
|
232
225
|
priority: route.priority,
|
|
233
|
-
exact: route.exact
|
|
226
|
+
exact: route.exact,
|
|
227
|
+
requiredFeatures: route.requiredFeatures
|
|
234
228
|
};
|
|
235
229
|
// Recursively transform child routes
|
|
236
230
|
if (route.routes && route.routes.length > 0) {
|
|
@@ -239,11 +233,18 @@ async function clientLoader({
|
|
|
239
233
|
return menuItem;
|
|
240
234
|
});
|
|
241
235
|
};
|
|
242
|
-
//
|
|
243
|
-
//
|
|
244
|
-
|
|
245
|
-
const
|
|
246
|
-
|
|
236
|
+
// Use ONLY the `/` root-layout entry for the sidebar menu.
|
|
237
|
+
// The route generator emits multiple `root-layout` entries (e.g. `/` and `/o/:orgName`),
|
|
238
|
+
// but org-scoped routes (`/o/:orgName/*`) should not appear in the global SPA sidebar.
|
|
239
|
+
const rootLayouts = (routeConfig || []).filter?.(r => r.key === 'root-layout' && r.path === config.LAYOUT_ROOT && Array.isArray(r.routes) && r.routes.length > 0) || [];
|
|
240
|
+
// Deduplicate by route key so duplicates from multiple layout entries don't render twice
|
|
241
|
+
const seenKeys = new Set();
|
|
242
|
+
const menuRoutes = rootLayouts.length ? rootLayouts.flatMap(rl => rl.routes).filter(r => {
|
|
243
|
+
if (!r?.key || seenKeys.has(r.key)) return false;
|
|
244
|
+
seenKeys.add(r.key);
|
|
245
|
+
return true;
|
|
246
|
+
}) : routeConfig;
|
|
247
|
+
console.log('[ProTailwindLayout clientLoader] Root layouts found:', rootLayouts.length, rootLayouts.map(r => r.path));
|
|
247
248
|
console.log('[ProTailwindLayout clientLoader] Menu routes count:', menuRoutes?.length || 0);
|
|
248
249
|
const menuData = transformToMenuData(menuRoutes || []);
|
|
249
250
|
console.log('[ProTailwindLayout clientLoader] Final menuData:', {
|
|
@@ -277,6 +278,11 @@ async function clientLoader({
|
|
|
277
278
|
};
|
|
278
279
|
}
|
|
279
280
|
}
|
|
281
|
+
// NOTE: We intentionally do NOT set clientLoader.hydrate = true
|
|
282
|
+
// This means:
|
|
283
|
+
// - Initial page load: Uses server loader data directly (instant SSR)
|
|
284
|
+
// - Client navigation: clientLoader runs to fetch/transform data
|
|
285
|
+
// - No HydrateFallback needed since SSR content renders immediately
|
|
280
286
|
const shouldRevalidate = ({
|
|
281
287
|
currentParams,
|
|
282
288
|
nextParams
|
|
@@ -305,24 +311,30 @@ function ProTailwindLayout(props) {
|
|
|
305
311
|
const menuDataToUse = React.useMemo(() => {
|
|
306
312
|
if (!hasProjectId) {
|
|
307
313
|
// When NOT in project detail, filter out project-specific routes (hideInMenu: true)
|
|
308
|
-
|
|
309
|
-
const isProjectRoute = item.path?.includes('/projects/:id');
|
|
310
|
-
return !isProjectRoute;
|
|
311
|
-
});
|
|
312
|
-
console.log('Not in project - showing non-project menus');
|
|
313
|
-
return nonProjectMenus;
|
|
314
|
+
return newMenuData.filter(item => !item.path?.includes('/projects/:id'));
|
|
314
315
|
}
|
|
315
316
|
// When in project detail, show only project-specific routes
|
|
316
|
-
|
|
317
|
-
const isProject = item.path?.includes('/projects/:id');
|
|
318
|
-
return isProject;
|
|
319
|
-
});
|
|
320
|
-
console.log('In project - showing project menus');
|
|
321
|
-
return projectMenus;
|
|
317
|
+
return newMenuData.filter(item => item.path?.includes('/projects/:id'));
|
|
322
318
|
}, [hasProjectId, newMenuData]);
|
|
323
319
|
const filteredMenuData = React.useMemo(() => {
|
|
324
320
|
return filterMenuItemsByVisibility(menuDataToUse, settings);
|
|
325
321
|
}, [menuDataToUse, settings?.hiddenMenuCategories, settings?.hiddenMenuKeys]);
|
|
322
|
+
// Keep the last non-empty menu so a transient empty loaderData — e.g. during a
|
|
323
|
+
// clientLoader revalidation or the SSR→client hydration handoff, where
|
|
324
|
+
// `useLoaderData()` momentarily yields the `{ newMenuData: [] }` default — does NOT
|
|
325
|
+
// collapse the sidebar to nothing and then re-expand it. That collapse/re-expand was
|
|
326
|
+
// a visible "blink" of the whole menu. Once we have rendered items we never fall back
|
|
327
|
+
// to an empty menu; real menu changes (which produce a non-empty list) still apply.
|
|
328
|
+
const lastNonEmptyMenu = React.useRef(filteredMenuData);
|
|
329
|
+
if (filteredMenuData.length > 0) {
|
|
330
|
+
lastNonEmptyMenu.current = filteredMenuData;
|
|
331
|
+
}
|
|
332
|
+
const stableMenuData = filteredMenuData.length > 0 ? filteredMenuData : lastNonEmptyMenu.current;
|
|
333
|
+
const lastNonEmptyFullMenu = React.useRef(newMenuData);
|
|
334
|
+
if (newMenuData.length > 0) {
|
|
335
|
+
lastNonEmptyFullMenu.current = newMenuData;
|
|
336
|
+
}
|
|
337
|
+
const stableFullMenuData = newMenuData.length > 0 ? newMenuData : lastNonEmptyFullMenu.current;
|
|
326
338
|
const params = {
|
|
327
339
|
orgName: orgName,
|
|
328
340
|
...(current?.params?.id && {
|
|
@@ -332,8 +344,8 @@ function ProTailwindLayout(props) {
|
|
|
332
344
|
return React.createElement(BasicLayoutEnhanced, {
|
|
333
345
|
routeParams: params,
|
|
334
346
|
permissions: permissions,
|
|
335
|
-
menuData:
|
|
336
|
-
fullMenuData:
|
|
347
|
+
menuData: stableMenuData,
|
|
348
|
+
fullMenuData: stableFullMenuData
|
|
337
349
|
});
|
|
338
350
|
}
|
|
339
|
-
export {
|
|
351
|
+
export { clientLoader, ProTailwindLayout as default, handle, links, loader, shouldRevalidate }; //# sourceMappingURL=ProTailwindLayout.js.map
|