@webiny/app-admin-ui 0.0.0-unstable.e6f0dc8ca7 → 0.0.0-unstable.eb81deee7e

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.
Files changed (129) hide show
  1. package/Breadcrumbs/Breadcrumbs.d.ts +14 -0
  2. package/Breadcrumbs/Breadcrumbs.js +74 -0
  3. package/Breadcrumbs/Breadcrumbs.js.map +1 -0
  4. package/CommandPalette/CommandPalette.d.ts +6 -0
  5. package/CommandPalette/CommandPalette.js +202 -0
  6. package/CommandPalette/CommandPalette.js.map +1 -0
  7. package/CommandPalette/components/AiModeBadge.d.ts +3 -0
  8. package/CommandPalette/components/AiModeBadge.js +11 -0
  9. package/CommandPalette/components/AiModeBadge.js.map +1 -0
  10. package/CommandPalette/components/AiSuggestions.d.ts +9 -0
  11. package/CommandPalette/components/AiSuggestions.js +32 -0
  12. package/CommandPalette/components/AiSuggestions.js.map +1 -0
  13. package/CommandPalette/components/AiTurn.d.ts +11 -0
  14. package/CommandPalette/components/AiTurn.js +61 -0
  15. package/CommandPalette/components/AiTurn.js.map +1 -0
  16. package/CommandPalette/components/AnswerSkeleton.d.ts +6 -0
  17. package/CommandPalette/components/AnswerSkeleton.js +20 -0
  18. package/CommandPalette/components/AnswerSkeleton.js.map +1 -0
  19. package/CommandPalette/components/ApprovalPlan.d.ts +16 -0
  20. package/CommandPalette/components/ApprovalPlan.js +56 -0
  21. package/CommandPalette/components/ApprovalPlan.js.map +1 -0
  22. package/CommandPalette/components/CommandDetail.d.ts +13 -0
  23. package/CommandPalette/components/CommandDetail.js +39 -0
  24. package/CommandPalette/components/CommandDetail.js.map +1 -0
  25. package/CommandPalette/components/CommandItemRow.d.ts +5 -0
  26. package/CommandPalette/components/CommandItemRow.js +41 -0
  27. package/CommandPalette/components/CommandItemRow.js.map +1 -0
  28. package/CommandPalette/components/GroupHeading.d.ts +4 -0
  29. package/CommandPalette/components/GroupHeading.js +10 -0
  30. package/CommandPalette/components/GroupHeading.js.map +1 -0
  31. package/CommandPalette/components/HintIcon.d.ts +4 -0
  32. package/CommandPalette/components/HintIcon.js +11 -0
  33. package/CommandPalette/components/HintIcon.js.map +1 -0
  34. package/CommandPalette/components/Kbd.d.ts +4 -0
  35. package/CommandPalette/components/Kbd.js +14 -0
  36. package/CommandPalette/components/Kbd.js.map +1 -0
  37. package/CommandPalette/components/NoResults.d.ts +13 -0
  38. package/CommandPalette/components/NoResults.js +33 -0
  39. package/CommandPalette/components/NoResults.js.map +1 -0
  40. package/CommandPalette/components/PaletteFooter.d.ts +13 -0
  41. package/CommandPalette/components/PaletteFooter.js +18 -0
  42. package/CommandPalette/components/PaletteFooter.js.map +1 -0
  43. package/CommandPalette/components/ToolChip.d.ts +7 -0
  44. package/CommandPalette/components/ToolChip.js +32 -0
  45. package/CommandPalette/components/ToolChip.js.map +1 -0
  46. package/CommandPalette/components/index.d.ts +13 -0
  47. package/CommandPalette/components/index.js +13 -0
  48. package/CommandPalette/constants.d.ts +8 -0
  49. package/CommandPalette/constants.js +5 -0
  50. package/CommandPalette/constants.js.map +1 -0
  51. package/CommandPalette/deriveRows.d.ts +19 -0
  52. package/CommandPalette/deriveRows.js +100 -0
  53. package/CommandPalette/deriveRows.js.map +1 -0
  54. package/CommandPalette/modes/PaletteMode.d.ts +73 -0
  55. package/CommandPalette/modes/PaletteMode.js +0 -0
  56. package/CommandPalette/modes/createAiMode.d.ts +13 -0
  57. package/CommandPalette/modes/createAiMode.js +80 -0
  58. package/CommandPalette/modes/createAiMode.js.map +1 -0
  59. package/CommandPalette/modes/index.d.ts +2 -0
  60. package/CommandPalette/modes/index.js +1 -0
  61. package/CommandPalette/types.d.ts +15 -0
  62. package/CommandPalette/types.js +0 -0
  63. package/CommandPalette/usePaletteHotkeys.d.ts +16 -0
  64. package/CommandPalette/usePaletteHotkeys.js +38 -0
  65. package/CommandPalette/usePaletteHotkeys.js.map +1 -0
  66. package/Dashboard/Welcome.js +29 -33
  67. package/Dashboard/Welcome.js.map +1 -1
  68. package/Dashboard/components/AssistanceWidget.js +51 -52
  69. package/Dashboard/components/AssistanceWidget.js.map +1 -1
  70. package/Dashboard/components/CommunityWidget.js +55 -63
  71. package/Dashboard/components/CommunityWidget.js.map +1 -1
  72. package/Dashboard/components/MissingPermissionsWidget.js +13 -14
  73. package/Dashboard/components/MissingPermissionsWidget.js.map +1 -1
  74. package/Dashboard/components/assets/github.js +14 -0
  75. package/Dashboard/components/assets/github.js.map +1 -0
  76. package/Dashboard/components/assets/slack.js +27 -0
  77. package/Dashboard/components/assets/slack.js.map +1 -0
  78. package/Dashboard/components/assets/x-twitter.js +18 -0
  79. package/Dashboard/components/assets/x-twitter.js.map +1 -0
  80. package/Dashboard/components/assets/youtube.js +28 -0
  81. package/Dashboard/components/assets/youtube.js.map +1 -0
  82. package/Dashboard/components/index.js +0 -2
  83. package/Dashboard.js +6 -7
  84. package/Dashboard.js.map +1 -1
  85. package/Dialog/DialogContainer.js +54 -67
  86. package/Dialog/DialogContainer.js.map +1 -1
  87. package/Dialog/DialogProvider.js +5 -8
  88. package/Dialog/DialogProvider.js.map +1 -1
  89. package/Dialog.js +5 -9
  90. package/Dialog.js.map +1 -1
  91. package/Layout.js +50 -29
  92. package/Layout.js.map +1 -1
  93. package/Logo.js +12 -16
  94. package/Logo.js.map +1 -1
  95. package/Navigation/Navigation.js +30 -34
  96. package/Navigation/Navigation.js.map +1 -1
  97. package/Navigation/SidebarMenuItems.js +32 -44
  98. package/Navigation/SidebarMenuItems.js.map +1 -1
  99. package/NotFound/notFound.js +297 -0
  100. package/NotFound/notFound.js.map +1 -0
  101. package/NotFound.js +17 -18
  102. package/NotFound.js.map +1 -1
  103. package/UserMenu/UserMenu.js +17 -25
  104. package/UserMenu/UserMenu.js.map +1 -1
  105. package/UserMenu/UserMenuHandle.js +33 -46
  106. package/UserMenu/UserMenuHandle.js.map +1 -1
  107. package/UserMenu/UserMenuItem.js +9 -12
  108. package/UserMenu/UserMenuItem.js.map +1 -1
  109. package/UserMenu/UserMenuLink.js +9 -12
  110. package/UserMenu/UserMenuLink.js.map +1 -1
  111. package/UserMenu/UserMenuSeparator.js +9 -9
  112. package/UserMenu/UserMenuSeparator.js.map +1 -1
  113. package/UserMenu.js +4 -5
  114. package/UserMenu.js.map +1 -1
  115. package/index.js +14 -15
  116. package/index.js.map +1 -1
  117. package/package.json +13 -12
  118. package/static/svg/github.08a73b00.svg +1 -0
  119. package/static/svg/notFound.e8b15981.svg +1 -0
  120. package/static/svg/slack.1b2ba162.svg +8 -0
  121. package/static/svg/x-twitter.46e7218c.svg +5 -0
  122. package/static/svg/youtube.3c232651.svg +11 -0
  123. package/Dashboard/components/index.js.map +0 -1
  124. package/Navigation/SidebarProvider.d.ts +0 -6
  125. package/Navigation/SidebarProvider.js +0 -34
  126. package/Navigation/SidebarProvider.js.map +0 -1
  127. package/Navigation.d.ts +0 -2
  128. package/Navigation.js +0 -11
  129. package/Navigation.js.map +0 -1
package/Layout.js CHANGED
@@ -1,34 +1,55 @@
1
- import React from "react";
2
- import Helmet from "react-helmet";
3
- import { LayoutRenderer, Navigation, TenantSelector, UserMenu } from "@webiny/app-admin";
4
- import { HeaderBar, cn, useSidebar } from "@webiny/admin-ui";
5
- export const Layout = LayoutRenderer.createDecorator(() => {
6
- return function Layout({
7
- title,
8
- startElement = null,
9
- hideNavigation = false,
10
- children
11
- }) {
12
- const {
13
- pinned
14
- } = useSidebar();
1
+ import react, { useCallback, useMemo, useRef } from "react";
2
+ import react_helmet from "react-helmet";
3
+ import { AssumedPermissionsSelector, BannerBar, LayoutRenderer, Navigation, TenantSelector, UserMenu } from "@webiny/app-admin";
4
+ import { HeaderBar, SidebarProvider, cn, useSidebar } from "@webiny/admin-ui";
5
+ import { useLocalStorage, useLocalStorageValue } from "@webiny/app";
6
+ import { CommandPalette } from "./CommandPalette/CommandPalette.js";
7
+ import { Breadcrumbs } from "./Breadcrumbs/Breadcrumbs.js";
8
+ const SIDEBAR_STATE_KEY = "navigation/state";
9
+ const parseSidebarState = (raw)=>{
10
+ try {
11
+ if ("object" == typeof raw && null !== raw) return raw;
12
+ if ("string" == typeof raw) return JSON.parse(raw);
13
+ } catch {}
14
+ };
15
+ const MAKE_ROOM_FOR_BANNER = "has-[>[data-admin-banner]]:[--spacing-main-content:calc(100vh_-_var(--spacing-header)_-_var(--spacing-banner))]";
16
+ const LayoutContent = ({ title, startElement = null, hideNavigation = false, children })=>{
17
+ const { pinned } = useSidebar();
15
18
  const widthClassNames = {
16
- "max-w-[calc(100%-(var(--spacing-sidebar-expanded)))] ": pinned,
17
- "max-w-[calc(100%-(var(--spacing-sidebar-collapsed)))] ": !pinned
19
+ "max-w-[calc(100%-(var(--spacing-sidebar-expanded)))] ": pinned,
20
+ "max-w-[calc(100%-(var(--spacing-sidebar-collapsed)))] ": !pinned
18
21
  };
19
- return /*#__PURE__*/React.createElement(React.Fragment, null, title ? /*#__PURE__*/React.createElement(Helmet, {
20
- title: title
21
- }) : null, hideNavigation ? null : /*#__PURE__*/React.createElement(Navigation, null), /*#__PURE__*/React.createElement("div", {
22
- className: cn("ml-auto bg-neutral-base transition-[max-width,min-width] ease-linear w-full", hideNavigation ? undefined : widthClassNames)
23
- }, /*#__PURE__*/React.createElement(HeaderBar, {
24
- start: startElement,
25
- end: /*#__PURE__*/React.createElement("div", {
26
- className: "flex gap-x-sm items-center justify-end"
27
- }, /*#__PURE__*/React.createElement(TenantSelector, null), /*#__PURE__*/React.createElement(UserMenu, null))
28
- }), /*#__PURE__*/React.createElement("main", {
29
- className: "relative overflow-y-auto h-main-content"
22
+ return /*#__PURE__*/ react.createElement(react.Fragment, null, title ? /*#__PURE__*/ react.createElement(react_helmet, {
23
+ title: title
24
+ }) : null, /*#__PURE__*/ react.createElement(CommandPalette, null), hideNavigation ? null : /*#__PURE__*/ react.createElement(Navigation, null), /*#__PURE__*/ react.createElement("div", {
25
+ className: cn("ml-auto bg-neutral-base transition-[max-width,min-width] ease-linear w-full", MAKE_ROOM_FOR_BANNER, hideNavigation ? void 0 : widthClassNames)
26
+ }, /*#__PURE__*/ react.createElement(BannerBar, null), /*#__PURE__*/ react.createElement(HeaderBar, {
27
+ start: /*#__PURE__*/ react.createElement("div", {
28
+ className: "flex items-center gap-sm"
29
+ }, /*#__PURE__*/ react.createElement(Breadcrumbs, null), startElement),
30
+ end: /*#__PURE__*/ react.createElement("div", {
31
+ className: "flex gap-x-sm items-center justify-end"
32
+ }, /*#__PURE__*/ react.createElement(TenantSelector, null), /*#__PURE__*/ react.createElement(AssumedPermissionsSelector, null), /*#__PURE__*/ react.createElement(UserMenu, null))
33
+ }), /*#__PURE__*/ react.createElement("main", {
34
+ className: "relative overflow-y-auto h-main-content"
30
35
  }, children)));
31
- };
32
- });
36
+ };
37
+ const Layout_Layout = LayoutRenderer.createDecorator(()=>function(props) {
38
+ const localStorage = useLocalStorage();
39
+ const localStorageRef = useRef(localStorage);
40
+ localStorageRef.current = localStorage;
41
+ const rawState = useLocalStorageValue(SIDEBAR_STATE_KEY);
42
+ const cachedState = useMemo(()=>parseSidebarState(rawState), [
43
+ rawState
44
+ ]);
45
+ const onChangeState = useCallback((newState)=>{
46
+ localStorageRef.current.set(SIDEBAR_STATE_KEY, JSON.stringify(newState));
47
+ }, []);
48
+ return /*#__PURE__*/ react.createElement(SidebarProvider, {
49
+ state: cachedState,
50
+ onChangeState: onChangeState
51
+ }, /*#__PURE__*/ react.createElement(LayoutContent, props));
52
+ });
53
+ export { Layout_Layout as Layout };
33
54
 
34
55
  //# sourceMappingURL=Layout.js.map
package/Layout.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["React","Helmet","LayoutRenderer","Navigation","TenantSelector","UserMenu","HeaderBar","cn","useSidebar","Layout","createDecorator","title","startElement","hideNavigation","children","pinned","widthClassNames","createElement","Fragment","className","undefined","start","end"],"sources":["Layout.tsx"],"sourcesContent":["import React from \"react\";\nimport Helmet from \"react-helmet\";\nimport type { LayoutProps } from \"@webiny/app-admin\";\nimport { LayoutRenderer, Navigation, TenantSelector, UserMenu } from \"@webiny/app-admin\";\nimport { HeaderBar, cn, useSidebar } from \"@webiny/admin-ui\";\n\nexport const Layout = LayoutRenderer.createDecorator(() => {\n return function Layout({\n title,\n startElement = null,\n hideNavigation = false,\n children\n }: LayoutProps) {\n const { pinned } = useSidebar();\n\n const widthClassNames = {\n \"max-w-[calc(100%-(var(--spacing-sidebar-expanded)))] \": pinned,\n \"max-w-[calc(100%-(var(--spacing-sidebar-collapsed)))] \": !pinned\n };\n\n return (\n <>\n {title ? <Helmet title={title} /> : null}\n {hideNavigation ? null : <Navigation />}\n <div\n className={cn(\n \"ml-auto bg-neutral-base transition-[max-width,min-width] ease-linear w-full\",\n hideNavigation ? undefined : widthClassNames\n )}\n >\n <HeaderBar\n start={startElement}\n end={\n <div className={\"flex gap-x-sm items-center justify-end\"}>\n <TenantSelector />\n <UserMenu />\n </div>\n }\n />\n <main className={\"relative overflow-y-auto h-main-content\"}>{children}</main>\n </div>\n </>\n );\n };\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,MAAM,MAAM,cAAc;AAEjC,SAASC,cAAc,EAAEC,UAAU,EAAEC,cAAc,EAAEC,QAAQ,QAAQ,mBAAmB;AACxF,SAASC,SAAS,EAAEC,EAAE,EAAEC,UAAU,QAAQ,kBAAkB;AAE5D,OAAO,MAAMC,MAAM,GAAGP,cAAc,CAACQ,eAAe,CAAC,MAAM;EACvD,OAAO,SAASD,MAAMA,CAAC;IACnBE,KAAK;IACLC,YAAY,GAAG,IAAI;IACnBC,cAAc,GAAG,KAAK;IACtBC;EACS,CAAC,EAAE;IACZ,MAAM;MAAEC;IAAO,CAAC,GAAGP,UAAU,CAAC,CAAC;IAE/B,MAAMQ,eAAe,GAAG;MACpB,uDAAuD,EAAED,MAAM;MAC/D,wDAAwD,EAAE,CAACA;IAC/D,CAAC;IAED,oBACIf,KAAA,CAAAiB,aAAA,CAAAjB,KAAA,CAAAkB,QAAA,QACKP,KAAK,gBAAGX,KAAA,CAAAiB,aAAA,CAAChB,MAAM;MAACU,KAAK,EAAEA;IAAM,CAAE,CAAC,GAAG,IAAI,EACvCE,cAAc,GAAG,IAAI,gBAAGb,KAAA,CAAAiB,aAAA,CAACd,UAAU,MAAE,CAAC,eACvCH,KAAA,CAAAiB,aAAA;MACIE,SAAS,EAAEZ,EAAE,CACT,6EAA6E,EAC7EM,cAAc,GAAGO,SAAS,GAAGJ,eACjC;IAAE,gBAEFhB,KAAA,CAAAiB,aAAA,CAACX,SAAS;MACNe,KAAK,EAAET,YAAa;MACpBU,GAAG,eACCtB,KAAA,CAAAiB,aAAA;QAAKE,SAAS,EAAE;MAAyC,gBACrDnB,KAAA,CAAAiB,aAAA,CAACb,cAAc,MAAE,CAAC,eAClBJ,KAAA,CAAAiB,aAAA,CAACZ,QAAQ,MAAE,CACV;IACR,CACJ,CAAC,eACFL,KAAA,CAAAiB,aAAA;MAAME,SAAS,EAAE;IAA0C,GAAEL,QAAe,CAC3E,CACP,CAAC;EAEX,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"Layout.js","sources":["../src/Layout.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef } from \"react\";\nimport Helmet from \"react-helmet\";\nimport type { LayoutProps } from \"@webiny/app-admin\";\nimport { AssumedPermissionsSelector } from \"@webiny/app-admin\";\nimport { BannerBar } from \"@webiny/app-admin\";\nimport { LayoutRenderer } from \"@webiny/app-admin\";\nimport { Navigation } from \"@webiny/app-admin\";\nimport { TenantSelector } from \"@webiny/app-admin\";\nimport { UserMenu } from \"@webiny/app-admin\";\nimport { HeaderBar, SidebarProvider, cn, useSidebar } from \"@webiny/admin-ui\";\nimport { useLocalStorage, useLocalStorageValue } from \"@webiny/app\";\nimport { CommandPalette } from \"./CommandPalette/CommandPalette.js\";\nimport { Breadcrumbs } from \"./Breadcrumbs/Breadcrumbs.js\";\n\nconst SIDEBAR_STATE_KEY = \"navigation/state\";\n\ntype SidebarCachedState = {\n pinned: boolean;\n expandedSections: string[];\n pinnedItems: string[];\n};\n\nconst parseSidebarState = (raw: unknown): SidebarCachedState | undefined => {\n try {\n if (typeof raw === \"object\" && raw !== null) {\n return raw as SidebarCachedState;\n }\n if (typeof raw === \"string\") {\n return JSON.parse(raw) as SidebarCachedState;\n }\n } catch {\n // Ignore parse errors\n }\n return undefined;\n};\n\n/*\n * Views size themselves with `h-main-content`, which is the window minus the header. While the\n * banner bar shows, they have to lose its height too, or every page scrolls by exactly that much.\n * The bar is always `--spacing-banner` tall, so plain CSS can do it. Scoped to the wrapper below,\n * which holds both the bar and the views.\n *\n * TODO: Temporary. The real fix is for views to fill `main` instead of computing their own height\n * from the window: make this wrapper a full-height column and `main` `flex-1 min-h-0`, then move\n * the ~13 views that use `h-main-content` to `h-full`. That also lets the bar wrap its text.\n */\nconst MAKE_ROOM_FOR_BANNER =\n \"has-[>[data-admin-banner]]:[--spacing-main-content:calc(100vh_-_var(--spacing-header)_-_var(--spacing-banner))]\";\n\nconst LayoutContent = ({\n title,\n startElement = null,\n hideNavigation = false,\n children\n}: LayoutProps) => {\n const { pinned } = useSidebar();\n\n const widthClassNames = {\n \"max-w-[calc(100%-(var(--spacing-sidebar-expanded)))] \": pinned,\n \"max-w-[calc(100%-(var(--spacing-sidebar-collapsed)))] \": !pinned\n };\n\n return (\n <>\n {title ? <Helmet title={title} /> : null}\n <CommandPalette />\n {hideNavigation ? null : <Navigation />}\n <div\n className={cn(\n \"ml-auto bg-neutral-base transition-[max-width,min-width] ease-linear w-full\",\n MAKE_ROOM_FOR_BANNER,\n hideNavigation ? undefined : widthClassNames\n )}\n >\n <BannerBar />\n <HeaderBar\n start={\n <div className=\"flex items-center gap-sm\">\n <Breadcrumbs />\n {startElement}\n </div>\n }\n end={\n <div className={\"flex gap-x-sm items-center justify-end\"}>\n <TenantSelector />\n <AssumedPermissionsSelector />\n <UserMenu />\n </div>\n }\n />\n <main className={\"relative overflow-y-auto h-main-content\"}>{children}</main>\n </div>\n </>\n );\n};\n\nexport const Layout = LayoutRenderer.createDecorator(() => {\n return function Layout(props: LayoutProps) {\n const localStorage = useLocalStorage();\n const localStorageRef = useRef(localStorage);\n localStorageRef.current = localStorage;\n\n const rawState = useLocalStorageValue(SIDEBAR_STATE_KEY);\n const cachedState = useMemo(() => parseSidebarState(rawState), [rawState]);\n\n const onChangeState = useCallback((newState: SidebarCachedState) => {\n localStorageRef.current.set(SIDEBAR_STATE_KEY, JSON.stringify(newState));\n }, []);\n\n return (\n <SidebarProvider state={cachedState} onChangeState={onChangeState}>\n <LayoutContent {...props} />\n </SidebarProvider>\n );\n };\n});\n"],"names":["SIDEBAR_STATE_KEY","parseSidebarState","raw","JSON","MAKE_ROOM_FOR_BANNER","LayoutContent","title","startElement","hideNavigation","children","pinned","useSidebar","widthClassNames","Helmet","CommandPalette","Navigation","cn","undefined","BannerBar","HeaderBar","Breadcrumbs","TenantSelector","AssumedPermissionsSelector","UserMenu","Layout","LayoutRenderer","props","localStorage","useLocalStorage","localStorageRef","useRef","rawState","useLocalStorageValue","cachedState","useMemo","onChangeState","useCallback","newState","SidebarProvider"],"mappings":";;;;;;;AAcA,MAAMA,oBAAoB;AAQ1B,MAAMC,oBAAoB,CAACC;IACvB,IAAI;QACA,IAAI,AAAe,YAAf,OAAOA,OAAoBA,AAAQ,SAARA,KAC3B,OAAOA;QAEX,IAAI,AAAe,YAAf,OAAOA,KACP,OAAOC,KAAK,KAAK,CAACD;IAE1B,EAAE,OAAM,CAER;AAEJ;AAYA,MAAME,uBACF;AAEJ,MAAMC,gBAAgB,CAAC,EACnBC,KAAK,EACLC,eAAe,IAAI,EACnBC,iBAAiB,KAAK,EACtBC,QAAQ,EACE;IACV,MAAM,EAAEC,MAAM,EAAE,GAAGC;IAEnB,MAAMC,kBAAkB;QACpB,yDAAyDF;QACzD,0DAA0D,CAACA;IAC/D;IAEA,OAAO,WAAP,GACI,0CACKJ,QAAQ,WAARA,GAAQ,oBAACO,cAAMA;QAAC,OAAOP;SAAY,oBACpC,oBAACQ,gBAAcA,OACdN,iBAAiB,OAAO,WAAP,GAAO,oBAACO,YAAUA,OAAAA,WAAAA,GACpC,oBAAC;QACG,WAAWC,GACP,+EACAZ,sBACAI,iBAAiBS,SAAYL;qBAGjC,oBAACM,WAASA,OAAAA,WAAAA,GACV,oBAACC,WAASA;QACN,qBACI,oBAAC;YAAI,WAAU;yBACX,oBAACC,aAAWA,OACXb;QAGT,mBACI,oBAAC;YAAI,WAAW;yBACZ,oBAACc,gBAAcA,OAAAA,WAAAA,GACf,oBAACC,4BAA0BA,OAAAA,WAAAA,GAC3B,oBAACC,UAAQA;sBAIrB,oBAAC;QAAK,WAAW;OAA4Cd;AAI7E;AAEO,MAAMe,gBAASC,eAAe,eAAe,CAAC,IAC1C,SAAgBC,KAAkB;QACrC,MAAMC,eAAeC;QACrB,MAAMC,kBAAkBC,OAAOH;QAC/BE,gBAAgB,OAAO,GAAGF;QAE1B,MAAMI,WAAWC,qBAAqBhC;QACtC,MAAMiC,cAAcC,QAAQ,IAAMjC,kBAAkB8B,WAAW;YAACA;SAAS;QAEzE,MAAMI,gBAAgBC,YAAY,CAACC;YAC/BR,gBAAgB,OAAO,CAAC,GAAG,CAAC7B,mBAAmBG,KAAK,SAAS,CAACkC;QAClE,GAAG,EAAE;QAEL,OAAO,WAAP,GACI,oBAACC,iBAAeA;YAAC,OAAOL;YAAa,eAAeE;yBAChD,oBAAC9B,eAAkBqB;IAG/B"}
package/Logo.js CHANGED
@@ -1,20 +1,16 @@
1
- import React from "react";
2
- import { LogoRenderer, useAdminConfig } from "@webiny/app-admin";
3
- import { useIsInNavigation } from "@webiny/app-admin";
1
+ import react from "react";
2
+ import { LogoRenderer, useAdminConfig, useIsInNavigation } from "@webiny/app-admin";
4
3
  const minHeight = {
5
- minHeight: 48
4
+ minHeight: 48
6
5
  };
7
- export const Logo = LogoRenderer.createDecorator(() => {
8
- return function Logo() {
9
- const {
10
- logo
11
- } = useAdminConfig();
12
- const isInNavigation = useIsInNavigation();
13
- const logoElement = isInNavigation ? logo.squareLogo : logo.horizontalLogo;
14
- return /*#__PURE__*/React.createElement("div", {
15
- style: minHeight
16
- }, logoElement || null);
17
- };
18
- });
6
+ const Logo_Logo = LogoRenderer.createDecorator(()=>function() {
7
+ const { logo } = useAdminConfig();
8
+ const isInNavigation = useIsInNavigation();
9
+ const logoElement = isInNavigation ? logo.squareLogo : logo.horizontalLogo;
10
+ return /*#__PURE__*/ react.createElement("div", {
11
+ style: minHeight
12
+ }, logoElement || null);
13
+ });
14
+ export { Logo_Logo as Logo };
19
15
 
20
16
  //# sourceMappingURL=Logo.js.map
package/Logo.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["React","LogoRenderer","useAdminConfig","useIsInNavigation","minHeight","Logo","createDecorator","logo","isInNavigation","logoElement","squareLogo","horizontalLogo","createElement","style"],"sources":["Logo.tsx"],"sourcesContent":["import React from \"react\";\nimport { LogoRenderer, useAdminConfig } from \"@webiny/app-admin\";\nimport { useIsInNavigation } from \"@webiny/app-admin\";\n\nconst minHeight = { minHeight: 48 };\n\nexport const Logo = LogoRenderer.createDecorator(() => {\n return function Logo() {\n const { logo } = useAdminConfig();\n const isInNavigation = useIsInNavigation();\n\n const logoElement = isInNavigation ? logo.squareLogo : logo.horizontalLogo;\n\n return <div style={minHeight}>{logoElement || null}</div>;\n };\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,YAAY,EAAEC,cAAc,QAAQ,mBAAmB;AAChE,SAASC,iBAAiB,QAAQ,mBAAmB;AAErD,MAAMC,SAAS,GAAG;EAAEA,SAAS,EAAE;AAAG,CAAC;AAEnC,OAAO,MAAMC,IAAI,GAAGJ,YAAY,CAACK,eAAe,CAAC,MAAM;EACnD,OAAO,SAASD,IAAIA,CAAA,EAAG;IACnB,MAAM;MAAEE;IAAK,CAAC,GAAGL,cAAc,CAAC,CAAC;IACjC,MAAMM,cAAc,GAAGL,iBAAiB,CAAC,CAAC;IAE1C,MAAMM,WAAW,GAAGD,cAAc,GAAGD,IAAI,CAACG,UAAU,GAAGH,IAAI,CAACI,cAAc;IAE1E,oBAAOX,KAAA,CAAAY,aAAA;MAAKC,KAAK,EAAET;IAAU,GAAEK,WAAW,IAAI,IAAU,CAAC;EAC7D,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"Logo.js","sources":["../src/Logo.tsx"],"sourcesContent":["import React from \"react\";\nimport { LogoRenderer, useAdminConfig } from \"@webiny/app-admin\";\nimport { useIsInNavigation } from \"@webiny/app-admin\";\n\nconst minHeight = { minHeight: 48 };\n\nexport const Logo = LogoRenderer.createDecorator(() => {\n return function Logo() {\n const { logo } = useAdminConfig();\n const isInNavigation = useIsInNavigation();\n\n const logoElement = isInNavigation ? logo.squareLogo : logo.horizontalLogo;\n\n return <div style={minHeight}>{logoElement || null}</div>;\n };\n});\n"],"names":["minHeight","Logo","LogoRenderer","logo","useAdminConfig","isInNavigation","useIsInNavigation","logoElement"],"mappings":";;AAIA,MAAMA,YAAY;IAAE,WAAW;AAAG;AAE3B,MAAMC,YAAOC,aAAa,eAAe,CAAC,IACtC;QACH,MAAM,EAAEC,IAAI,EAAE,GAAGC;QACjB,MAAMC,iBAAiBC;QAEvB,MAAMC,cAAcF,iBAAiBF,KAAK,UAAU,GAAGA,KAAK,cAAc;QAE1E,OAAO,WAAP,GAAO,oBAAC;YAAI,OAAOH;WAAYO,eAAe;IAClD"}
@@ -1,38 +1,34 @@
1
- import React from "react";
2
- import { NavigationRenderer, useAdminConfig } from "@webiny/app-admin";
1
+ import react from "react";
2
+ import { NavigationRenderer, SimpleLink, useAdminConfig } from "@webiny/app-admin";
3
3
  import { Sidebar } from "@webiny/admin-ui";
4
4
  import { SidebarMenuItems } from "./SidebarMenuItems.js";
5
- import { SimpleLink } from "@webiny/app-admin";
6
- export const Navigation = NavigationRenderer.createDecorator(() => {
7
- return function Navigation() {
8
- const {
9
- menus,
10
- title,
11
- logo
12
- } = useAdminConfig();
13
- const titleElement = /*#__PURE__*/React.createElement(SimpleLink, {
14
- to: "/"
15
- }, title);
16
- const icon = /*#__PURE__*/React.createElement(SimpleLink, {
17
- to: "/"
18
- }, /*#__PURE__*/React.createElement(Sidebar.Icon, {
19
- element: logo.squareLogo,
20
- label: "Webiny"
21
- }));
22
- const hasFooterMenus = menus.some(m => (m.tags || []).includes("footer"));
23
- return /*#__PURE__*/React.createElement(Sidebar, {
24
- title: titleElement,
25
- icon: icon,
26
- footer: hasFooterMenus ? /*#__PURE__*/React.createElement(SidebarMenuItems, {
27
- menus: menus,
28
- where: {
29
- tags: ["footer"]
30
- }
31
- }) : undefined
32
- }, /*#__PURE__*/React.createElement(SidebarMenuItems, {
33
- menus: menus
34
- }));
35
- };
36
- });
5
+ const Navigation_Navigation = NavigationRenderer.createDecorator(()=>function() {
6
+ const { menus, title, logo } = useAdminConfig();
7
+ const titleElement = /*#__PURE__*/ react.createElement(SimpleLink, {
8
+ to: "/"
9
+ }, title);
10
+ const icon = /*#__PURE__*/ react.createElement(SimpleLink, {
11
+ to: "/"
12
+ }, /*#__PURE__*/ react.createElement(Sidebar.Icon, {
13
+ element: logo.squareLogo,
14
+ label: "Webiny"
15
+ }));
16
+ const hasFooterMenus = menus.some((m)=>(m.tags || []).includes("footer"));
17
+ return /*#__PURE__*/ react.createElement(Sidebar, {
18
+ title: titleElement,
19
+ icon: icon,
20
+ footer: hasFooterMenus ? /*#__PURE__*/ react.createElement(SidebarMenuItems, {
21
+ menus: menus,
22
+ where: {
23
+ tags: [
24
+ "footer"
25
+ ]
26
+ }
27
+ }) : void 0
28
+ }, /*#__PURE__*/ react.createElement(SidebarMenuItems, {
29
+ menus: menus
30
+ }));
31
+ });
32
+ export { Navigation_Navigation as Navigation };
37
33
 
38
34
  //# sourceMappingURL=Navigation.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","NavigationRenderer","useAdminConfig","Sidebar","SidebarMenuItems","SimpleLink","Navigation","createDecorator","menus","title","logo","titleElement","createElement","to","icon","Icon","element","squareLogo","label","hasFooterMenus","some","m","tags","includes","footer","where","undefined"],"sources":["Navigation.tsx"],"sourcesContent":["import React from \"react\";\nimport { NavigationRenderer, useAdminConfig } from \"@webiny/app-admin\";\nimport { Sidebar } from \"@webiny/admin-ui\";\nimport { SidebarMenuItems } from \"./SidebarMenuItems.js\";\nimport { SimpleLink } from \"@webiny/app-admin\";\n\nexport const Navigation = NavigationRenderer.createDecorator(() => {\n return function Navigation() {\n const { menus, title, logo } = useAdminConfig();\n\n const titleElement = <SimpleLink to={\"/\"}>{title}</SimpleLink>;\n const icon = (\n <SimpleLink to={\"/\"}>\n <Sidebar.Icon element={logo.squareLogo} label={\"Webiny\"} />\n </SimpleLink>\n );\n\n const hasFooterMenus = menus.some(m => (m.tags || []).includes(\"footer\"));\n\n return (\n <Sidebar\n title={titleElement}\n icon={icon}\n footer={\n hasFooterMenus ? (\n <SidebarMenuItems menus={menus} where={{ tags: [\"footer\"] }} />\n ) : undefined\n }\n >\n <SidebarMenuItems menus={menus} />\n </Sidebar>\n );\n };\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,kBAAkB,EAAEC,cAAc,QAAQ,mBAAmB;AACtE,SAASC,OAAO,QAAQ,kBAAkB;AAC1C,SAASC,gBAAgB;AACzB,SAASC,UAAU,QAAQ,mBAAmB;AAE9C,OAAO,MAAMC,UAAU,GAAGL,kBAAkB,CAACM,eAAe,CAAC,MAAM;EAC/D,OAAO,SAASD,UAAUA,CAAA,EAAG;IACzB,MAAM;MAAEE,KAAK;MAAEC,KAAK;MAAEC;IAAK,CAAC,GAAGR,cAAc,CAAC,CAAC;IAE/C,MAAMS,YAAY,gBAAGX,KAAA,CAAAY,aAAA,CAACP,UAAU;MAACQ,EAAE,EAAE;IAAI,GAAEJ,KAAkB,CAAC;IAC9D,MAAMK,IAAI,gBACNd,KAAA,CAAAY,aAAA,CAACP,UAAU;MAACQ,EAAE,EAAE;IAAI,gBAChBb,KAAA,CAAAY,aAAA,CAACT,OAAO,CAACY,IAAI;MAACC,OAAO,EAAEN,IAAI,CAACO,UAAW;MAACC,KAAK,EAAE;IAAS,CAAE,CAClD,CACf;IAED,MAAMC,cAAc,GAAGX,KAAK,CAACY,IAAI,CAACC,CAAC,IAAI,CAACA,CAAC,CAACC,IAAI,IAAI,EAAE,EAAEC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEzE,oBACIvB,KAAA,CAAAY,aAAA,CAACT,OAAO;MACJM,KAAK,EAAEE,YAAa;MACpBG,IAAI,EAAEA,IAAK;MACXU,MAAM,EACFL,cAAc,gBACVnB,KAAA,CAAAY,aAAA,CAACR,gBAAgB;QAACI,KAAK,EAAEA,KAAM;QAACiB,KAAK,EAAE;UAAEH,IAAI,EAAE,CAAC,QAAQ;QAAE;MAAE,CAAE,CAAC,GAC/DI;IACP,gBAED1B,KAAA,CAAAY,aAAA,CAACR,gBAAgB;MAACI,KAAK,EAAEA;IAAM,CAAE,CAC5B,CAAC;EAElB,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"Navigation/Navigation.js","sources":["../../src/Navigation/Navigation.tsx"],"sourcesContent":["import React from \"react\";\nimport { NavigationRenderer, useAdminConfig } from \"@webiny/app-admin\";\nimport { Sidebar } from \"@webiny/admin-ui\";\nimport { SidebarMenuItems } from \"./SidebarMenuItems.js\";\nimport { SimpleLink } from \"@webiny/app-admin\";\n\nexport const Navigation = NavigationRenderer.createDecorator(() => {\n return function Navigation() {\n const { menus, title, logo } = useAdminConfig();\n\n const titleElement = <SimpleLink to={\"/\"}>{title}</SimpleLink>;\n const icon = (\n <SimpleLink to={\"/\"}>\n <Sidebar.Icon element={logo.squareLogo} label={\"Webiny\"} />\n </SimpleLink>\n );\n\n const hasFooterMenus = menus.some(m => (m.tags || []).includes(\"footer\"));\n\n return (\n <Sidebar\n title={titleElement}\n icon={icon}\n footer={\n hasFooterMenus ? (\n <SidebarMenuItems menus={menus} where={{ tags: [\"footer\"] }} />\n ) : undefined\n }\n >\n <SidebarMenuItems menus={menus} />\n </Sidebar>\n );\n };\n});\n"],"names":["Navigation","NavigationRenderer","menus","title","logo","useAdminConfig","titleElement","SimpleLink","icon","Sidebar","hasFooterMenus","m","SidebarMenuItems","undefined"],"mappings":";;;;AAMO,MAAMA,wBAAaC,mBAAmB,eAAe,CAAC,IAClD;QACH,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAGC;QAE/B,MAAMC,eAAe,WAAfA,GAAe,oBAACC,YAAUA;YAAC,IAAI;WAAMJ;QAC3C,MAAMK,OAAO,WAAPA,GACF,oBAACD,YAAUA;YAAC,IAAI;yBACZ,oBAACE,QAAQ,IAAI;YAAC,SAASL,KAAK,UAAU;YAAE,OAAO;;QAIvD,MAAMM,iBAAiBR,MAAM,IAAI,CAACS,CAAAA,IAAMA,AAAAA,CAAAA,EAAE,IAAI,IAAI,EAAC,EAAG,QAAQ,CAAC;QAE/D,OAAO,WAAP,GACI,oBAACF,SAAOA;YACJ,OAAOH;YACP,MAAME;YACN,QACIE,iBAAiB,WAAjBA,GACI,oBAACE,kBAAgBA;gBAAC,OAAOV;gBAAO,OAAO;oBAAE,MAAM;wBAAC;qBAAS;gBAAC;iBAC1DW;yBAGR,oBAACD,kBAAgBA;YAAC,OAAOV;;IAGrC"}
@@ -1,48 +1,36 @@
1
- import React from "react";
2
- // This component is called recursively to render root and nested menu items.
3
- // The menu items are defined via AdminConfig.
4
- export const SidebarMenuItems = props => {
5
- const {
6
- menus: allMenus,
7
- where = {}
8
- } = props;
9
- const filteredMenus = allMenus.filter(menu => {
10
- const whereParent = where.parent || null;
11
- const menuParent = menu.parent;
12
- if (whereParent !== menuParent) {
13
- return false;
14
- }
15
- const whereTags = where.tags || [];
16
- const menuTags = menu.tags || [];
17
- if (whereTags.length > 0) {
18
- // If not all tags are present, return false.
19
- return whereTags.every(tag => menuTags.includes(tag));
20
- }
21
- return menuTags.length === 0;
22
- });
23
- return filteredMenus.map(m => {
24
- if (! /*#__PURE__*/React.isValidElement(m.element)) {
25
- return null;
26
- }
27
- const key = [m.parent, m.name].join("-");
28
- const hasChildMenus = allMenus.some(menu => menu.parent === m.name);
29
- if (hasChildMenus) {
30
- return /*#__PURE__*/React.cloneElement(m.element, {
31
- key
32
- }, /*#__PURE__*/React.createElement(SidebarMenuItems, {
33
- menus: allMenus,
34
- where: {
35
- parent: m.name
36
- }
37
- }));
38
- }
39
- if (m.hideIfEmpty) {
40
- return null;
41
- }
42
- return /*#__PURE__*/React.cloneElement(m.element, {
43
- key
1
+ import react from "react";
2
+ const SidebarMenuItems = (props)=>{
3
+ const { menus: allMenus, where = {} } = props;
4
+ const filteredMenus = allMenus.filter((menu)=>{
5
+ const whereParent = where.parent || null;
6
+ const menuParent = menu.parent;
7
+ if (whereParent !== menuParent) return false;
8
+ const whereTags = where.tags || [];
9
+ const menuTags = menu.tags || [];
10
+ if (whereTags.length > 0) return whereTags.every((tag)=>menuTags.includes(tag));
11
+ return 0 === menuTags.length;
12
+ });
13
+ return filteredMenus.map((m)=>{
14
+ if (!/*#__PURE__*/ react.isValidElement(m.element)) return null;
15
+ const key = [
16
+ m.parent,
17
+ m.name
18
+ ].join("-");
19
+ const hasChildMenus = allMenus.some((menu)=>menu.parent === m.name);
20
+ if (hasChildMenus) return /*#__PURE__*/ react.cloneElement(m.element, {
21
+ key
22
+ }, /*#__PURE__*/ react.createElement(SidebarMenuItems, {
23
+ menus: allMenus,
24
+ where: {
25
+ parent: m.name
26
+ }
27
+ }));
28
+ if (m.hideIfEmpty) return null;
29
+ return /*#__PURE__*/ react.cloneElement(m.element, {
30
+ key
31
+ });
44
32
  });
45
- });
46
33
  };
34
+ export { SidebarMenuItems };
47
35
 
48
36
  //# sourceMappingURL=SidebarMenuItems.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","SidebarMenuItems","props","menus","allMenus","where","filteredMenus","filter","menu","whereParent","parent","menuParent","whereTags","tags","menuTags","length","every","tag","includes","map","m","isValidElement","element","key","name","join","hasChildMenus","some","cloneElement","createElement","hideIfEmpty"],"sources":["SidebarMenuItems.tsx"],"sourcesContent":["import React from \"react\";\nimport type { MenuConfig } from \"@webiny/app-admin/config/AdminConfig/Menu.js\";\n\nexport interface MenusProps {\n menus: MenuConfig[];\n where?: { tags?: string[]; parent?: string };\n}\n\n// This component is called recursively to render root and nested menu items.\n// The menu items are defined via AdminConfig.\nexport const SidebarMenuItems = (props: MenusProps) => {\n const { menus: allMenus, where = {} } = props;\n const filteredMenus = allMenus.filter(menu => {\n const whereParent = where.parent || null;\n const menuParent = menu.parent;\n if (whereParent !== menuParent) {\n return false;\n }\n\n const whereTags = where.tags || [];\n const menuTags = menu.tags || [];\n\n if (whereTags.length > 0) {\n // If not all tags are present, return false.\n return whereTags.every(tag => menuTags.includes(tag));\n }\n\n return menuTags.length === 0;\n });\n\n return filteredMenus.map(m => {\n if (!React.isValidElement(m.element)) {\n return null;\n }\n\n const key = [m.parent, m.name].join(\"-\");\n\n const hasChildMenus = allMenus.some(menu => menu.parent === m.name);\n if (hasChildMenus) {\n return React.cloneElement(\n m.element,\n { key },\n <SidebarMenuItems menus={allMenus} where={{ parent: m.name }} />\n );\n }\n\n if (m.hideIfEmpty) {\n return null;\n }\n\n return React.cloneElement(m.element, { key });\n });\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAQzB;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAIC,KAAiB,IAAK;EACnD,MAAM;IAAEC,KAAK,EAAEC,QAAQ;IAAEC,KAAK,GAAG,CAAC;EAAE,CAAC,GAAGH,KAAK;EAC7C,MAAMI,aAAa,GAAGF,QAAQ,CAACG,MAAM,CAACC,IAAI,IAAI;IAC1C,MAAMC,WAAW,GAAGJ,KAAK,CAACK,MAAM,IAAI,IAAI;IACxC,MAAMC,UAAU,GAAGH,IAAI,CAACE,MAAM;IAC9B,IAAID,WAAW,KAAKE,UAAU,EAAE;MAC5B,OAAO,KAAK;IAChB;IAEA,MAAMC,SAAS,GAAGP,KAAK,CAACQ,IAAI,IAAI,EAAE;IAClC,MAAMC,QAAQ,GAAGN,IAAI,CAACK,IAAI,IAAI,EAAE;IAEhC,IAAID,SAAS,CAACG,MAAM,GAAG,CAAC,EAAE;MACtB;MACA,OAAOH,SAAS,CAACI,KAAK,CAACC,GAAG,IAAIH,QAAQ,CAACI,QAAQ,CAACD,GAAG,CAAC,CAAC;IACzD;IAEA,OAAOH,QAAQ,CAACC,MAAM,KAAK,CAAC;EAChC,CAAC,CAAC;EAEF,OAAOT,aAAa,CAACa,GAAG,CAACC,CAAC,IAAI;IAC1B,IAAI,eAACpB,KAAK,CAACqB,cAAc,CAACD,CAAC,CAACE,OAAO,CAAC,EAAE;MAClC,OAAO,IAAI;IACf;IAEA,MAAMC,GAAG,GAAG,CAACH,CAAC,CAACV,MAAM,EAAEU,CAAC,CAACI,IAAI,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC;IAExC,MAAMC,aAAa,GAAGtB,QAAQ,CAACuB,IAAI,CAACnB,IAAI,IAAIA,IAAI,CAACE,MAAM,KAAKU,CAAC,CAACI,IAAI,CAAC;IACnE,IAAIE,aAAa,EAAE;MACf,oBAAO1B,KAAK,CAAC4B,YAAY,CACrBR,CAAC,CAACE,OAAO,EACT;QAAEC;MAAI,CAAC,eACPvB,KAAA,CAAA6B,aAAA,CAAC5B,gBAAgB;QAACE,KAAK,EAAEC,QAAS;QAACC,KAAK,EAAE;UAAEK,MAAM,EAAEU,CAAC,CAACI;QAAK;MAAE,CAAE,CACnE,CAAC;IACL;IAEA,IAAIJ,CAAC,CAACU,WAAW,EAAE;MACf,OAAO,IAAI;IACf;IAEA,oBAAO9B,KAAK,CAAC4B,YAAY,CAACR,CAAC,CAACE,OAAO,EAAE;MAAEC;IAAI,CAAC,CAAC;EACjD,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"Navigation/SidebarMenuItems.js","sources":["../../src/Navigation/SidebarMenuItems.tsx"],"sourcesContent":["import React from \"react\";\nimport type { MenuConfig } from \"@webiny/app-admin/config/AdminConfig/Menu.js\";\n\nexport interface MenusProps {\n menus: MenuConfig[];\n where?: { tags?: string[]; parent?: string };\n}\n\n// This component is called recursively to render root and nested menu items.\n// The menu items are defined via AdminConfig.\nexport const SidebarMenuItems = (props: MenusProps) => {\n const { menus: allMenus, where = {} } = props;\n const filteredMenus = allMenus.filter(menu => {\n const whereParent = where.parent || null;\n const menuParent = menu.parent;\n if (whereParent !== menuParent) {\n return false;\n }\n\n const whereTags = where.tags || [];\n const menuTags = menu.tags || [];\n\n if (whereTags.length > 0) {\n // If not all tags are present, return false.\n return whereTags.every(tag => menuTags.includes(tag));\n }\n\n return menuTags.length === 0;\n });\n\n return filteredMenus.map(m => {\n if (!React.isValidElement(m.element)) {\n return null;\n }\n\n const key = [m.parent, m.name].join(\"-\");\n\n const hasChildMenus = allMenus.some(menu => menu.parent === m.name);\n if (hasChildMenus) {\n return React.cloneElement(\n m.element,\n { key },\n <SidebarMenuItems menus={allMenus} where={{ parent: m.name }} />\n );\n }\n\n if (m.hideIfEmpty) {\n return null;\n }\n\n return React.cloneElement(m.element, { key });\n });\n};\n"],"names":["SidebarMenuItems","props","allMenus","where","filteredMenus","menu","whereParent","menuParent","whereTags","menuTags","tag","m","React","key","hasChildMenus"],"mappings":";AAUO,MAAMA,mBAAmB,CAACC;IAC7B,MAAM,EAAE,OAAOC,QAAQ,EAAEC,QAAQ,CAAC,CAAC,EAAE,GAAGF;IACxC,MAAMG,gBAAgBF,SAAS,MAAM,CAACG,CAAAA;QAClC,MAAMC,cAAcH,MAAM,MAAM,IAAI;QACpC,MAAMI,aAAaF,KAAK,MAAM;QAC9B,IAAIC,gBAAgBC,YAChB,OAAO;QAGX,MAAMC,YAAYL,MAAM,IAAI,IAAI,EAAE;QAClC,MAAMM,WAAWJ,KAAK,IAAI,IAAI,EAAE;QAEhC,IAAIG,UAAU,MAAM,GAAG,GAEnB,OAAOA,UAAU,KAAK,CAACE,CAAAA,MAAOD,SAAS,QAAQ,CAACC;QAGpD,OAAOD,AAAoB,MAApBA,SAAS,MAAM;IAC1B;IAEA,OAAOL,cAAc,GAAG,CAACO,CAAAA;QACrB,IAAI,CAAC,WAAD,GAACC,MAAAA,cAAoB,CAACD,EAAE,OAAO,GAC/B,OAAO;QAGX,MAAME,MAAM;YAACF,EAAE,MAAM;YAAEA,EAAE,IAAI;SAAC,CAAC,IAAI,CAAC;QAEpC,MAAMG,gBAAgBZ,SAAS,IAAI,CAACG,CAAAA,OAAQA,KAAK,MAAM,KAAKM,EAAE,IAAI;QAClE,IAAIG,eACA,OAAO,WAAP,GAAOF,MAAAA,YAAkB,CACrBD,EAAE,OAAO,EACT;YAAEE;QAAI,iBACN,oBAACb,kBAAgBA;YAAC,OAAOE;YAAU,OAAO;gBAAE,QAAQS,EAAE,IAAI;YAAC;;QAInE,IAAIA,EAAE,WAAW,EACb,OAAO;QAGX,OAAO,WAAP,GAAOC,MAAAA,YAAkB,CAACD,EAAE,OAAO,EAAE;YAAEE;QAAI;IAC/C;AACJ"}