@webiny/app-admin-ui 6.4.11 → 6.6.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) 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 +10 -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 +14 -0
  64. package/CommandPalette/usePaletteHotkeys.js +35 -0
  65. package/CommandPalette/usePaletteHotkeys.js.map +1 -0
  66. package/Layout.js +48 -20
  67. package/Layout.js.map +1 -1
  68. package/index.js +1 -1
  69. package/index.js.map +1 -1
  70. package/package.json +8 -7
  71. package/Navigation/SidebarProvider.d.ts +0 -6
  72. package/Navigation/SidebarProvider.js +0 -26
  73. package/Navigation/SidebarProvider.js.map +0 -1
  74. package/Navigation.d.ts +0 -2
  75. package/Navigation.js +0 -10
  76. package/Navigation.js.map +0 -1
@@ -0,0 +1,13 @@
1
+ import type { AiChatPresenter } from "@webiny/app-admin";
2
+ import type { PaletteMode } from "./PaletteMode.js";
3
+ /**
4
+ * The assistant, as a palette mode.
5
+ *
6
+ * Everything specific to it lives here: what the input row shows, what Enter and Backspace do, and
7
+ * what fills the panel. The conversation itself belongs to `AiChatPresenter`.
8
+ *
9
+ * A plain object rather than a hook. `appearance` and `body` are getters, so reading them during a
10
+ * reactive component's render tracks the presenter's observables and re-renders on a new turn, with
11
+ * no dependency arrays to keep honest.
12
+ */
13
+ export declare const createAiMode: (presenter: AiChatPresenter.Interface) => PaletteMode;
@@ -0,0 +1,80 @@
1
+ import react from "react";
2
+ import { ReactComponent } from "@webiny/icons/auto_awesome.svg";
3
+ import { ReactComponent as keyboard_return_svg_ReactComponent } from "@webiny/icons/keyboard_return.svg";
4
+ import { ReactComponent as backspace_svg_ReactComponent } from "@webiny/icons/backspace.svg";
5
+ import { AiModeBadge, AiSuggestions, AiTurn, HintIcon } from "../components/index.js";
6
+ const HINTS = [
7
+ {
8
+ keys: /*#__PURE__*/ react.createElement(HintIcon, {
9
+ element: /*#__PURE__*/ react.createElement(keyboard_return_svg_ReactComponent, null)
10
+ }),
11
+ label: "Ask"
12
+ },
13
+ {
14
+ keys: /*#__PURE__*/ react.createElement(HintIcon, {
15
+ element: /*#__PURE__*/ react.createElement(backspace_svg_ReactComponent, null)
16
+ }),
17
+ label: "Commands"
18
+ },
19
+ {
20
+ keys: "esc",
21
+ label: "Close"
22
+ }
23
+ ];
24
+ const createAiMode = (presenter)=>({
25
+ get appearance () {
26
+ const started = presenter.vm.turns.length > 0;
27
+ return {
28
+ icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
29
+ iconColor: "accent",
30
+ iconLabel: "Ask AI",
31
+ badge: /*#__PURE__*/ react.createElement(AiModeBadge, null),
32
+ placeholder: started ? "Ask a follow-up…" : "Ask about your content…",
33
+ footerLabel: "Webiny AI",
34
+ hints: HINTS,
35
+ tall: true
36
+ };
37
+ },
38
+ get body () {
39
+ const { turns, busy } = presenter.vm;
40
+ if (0 === turns.length) return /*#__PURE__*/ react.createElement(AiSuggestions, {
41
+ onAsk: (question)=>presenter.ask(question)
42
+ });
43
+ return turns.map((turn, index)=>/*#__PURE__*/ react.createElement(AiTurn, {
44
+ key: index,
45
+ turn: turn,
46
+ initials: "You",
47
+ busy: busy,
48
+ onApprove: ()=>presenter.decide(index, true),
49
+ onReject: ()=>presenter.decide(index, false)
50
+ }));
51
+ },
52
+ enter (seed) {
53
+ if (seed?.trim()) presenter.ask(seed);
54
+ },
55
+ reset () {
56
+ presenter.reset();
57
+ },
58
+ handleKey (event, context) {
59
+ if ("Enter" === event.key) {
60
+ event.preventDefault();
61
+ presenter.ask(context.query);
62
+ context.setQuery("");
63
+ return true;
64
+ }
65
+ if ("Backspace" === event.key && "" === context.query) {
66
+ event.preventDefault();
67
+ context.exit();
68
+ return true;
69
+ }
70
+ return false;
71
+ },
72
+ afterRender (container) {
73
+ container.scrollTo({
74
+ top: container.scrollHeight
75
+ });
76
+ }
77
+ });
78
+ export { createAiMode };
79
+
80
+ //# sourceMappingURL=createAiMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette/modes/createAiMode.js","sources":["../../../src/CommandPalette/modes/createAiMode.tsx"],"sourcesContent":["import React from \"react\";\nimport type { AiChatPresenter } from \"@webiny/app-admin\";\nimport { ReactComponent as AiIcon } from \"@webiny/icons/auto_awesome.svg\";\nimport { ReactComponent as ReturnIcon } from \"@webiny/icons/keyboard_return.svg\";\nimport { ReactComponent as BackspaceIcon } from \"@webiny/icons/backspace.svg\";\nimport { AiModeBadge, AiSuggestions, AiTurn, HintIcon, type Hint } from \"../components/index.js\";\nimport type { PaletteMode, PaletteModeKeyContext } from \"./PaletteMode.js\";\n\nconst HINTS: Hint[] = [\n { keys: <HintIcon element={<ReturnIcon />} />, label: \"Ask\" },\n { keys: <HintIcon element={<BackspaceIcon />} />, label: \"Commands\" },\n { keys: \"esc\", label: \"Close\" }\n];\n\n/**\n * The assistant, as a palette mode.\n *\n * Everything specific to it lives here: what the input row shows, what Enter and Backspace do, and\n * what fills the panel. The conversation itself belongs to `AiChatPresenter`.\n *\n * A plain object rather than a hook. `appearance` and `body` are getters, so reading them during a\n * reactive component's render tracks the presenter's observables and re-renders on a new turn, with\n * no dependency arrays to keep honest.\n */\nexport const createAiMode = (presenter: AiChatPresenter.Interface): PaletteMode => ({\n get appearance() {\n const started = presenter.vm.turns.length > 0;\n\n return {\n icon: <AiIcon />,\n iconColor: \"accent\" as const,\n iconLabel: \"Ask AI\",\n badge: <AiModeBadge />,\n placeholder: started ? \"Ask a follow-up…\" : \"Ask about your content…\",\n footerLabel: \"Webiny AI\",\n hints: HINTS,\n tall: true\n };\n },\n\n get body() {\n const { turns, busy } = presenter.vm;\n\n if (turns.length === 0) {\n return <AiSuggestions onAsk={question => presenter.ask(question)} />;\n }\n\n return turns.map((turn, index) => (\n <AiTurn\n key={index}\n turn={turn}\n initials=\"You\"\n busy={busy}\n onApprove={() => presenter.decide(index, true)}\n onReject={() => presenter.decide(index, false)}\n />\n ));\n },\n\n // A seed only arrives from the no-results \"Ask AI\" button; see `PaletteMode.enter`.\n enter(seed?: string) {\n if (seed?.trim()) {\n presenter.ask(seed);\n }\n },\n\n reset() {\n presenter.reset();\n },\n\n handleKey(event: React.KeyboardEvent, context: PaletteModeKeyContext) {\n if (event.key === \"Enter\") {\n event.preventDefault();\n presenter.ask(context.query);\n context.setQuery(\"\");\n return true;\n }\n\n // Backspace on an empty input leaves the mode, mirroring how space entered it.\n if (event.key === \"Backspace\" && context.query === \"\") {\n event.preventDefault();\n context.exit();\n return true;\n }\n\n return false;\n },\n\n // Answers are long enough to push earlier turns off-screen, so keep the newest one visible.\n afterRender(container: HTMLElement) {\n container.scrollTo({ top: container.scrollHeight });\n }\n});\n"],"names":["HINTS","HintIcon","ReturnIcon","BackspaceIcon","createAiMode","presenter","started","AiIcon","AiModeBadge","turns","busy","AiSuggestions","question","turn","index","AiTurn","seed","event","context","container"],"mappings":";;;;;AAQA,MAAMA,QAAgB;IAClB;QAAE,MAAM,WAAN,GAAM,oBAACC,UAAQA;YAAC,uBAAS,oBAACC,oCAAUA;;QAAS,OAAO;IAAM;IAC5D;QAAE,MAAM,WAAN,GAAM,oBAACD,UAAQA;YAAC,uBAAS,oBAACE,8BAAaA;;QAAS,OAAO;IAAW;IACpE;QAAE,MAAM;QAAO,OAAO;IAAQ;CACjC;AAYM,MAAMC,eAAe,CAACC,YAAuD;QAChF,IAAI,cAAa;YACb,MAAMC,UAAUD,UAAU,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG;YAE5C,OAAO;gBACH,MAAM,WAAN,GAAM,oBAACE,gBAAMA;gBACb,WAAW;gBACX,WAAW;gBACX,OAAO,WAAP,GAAO,oBAACC,aAAWA;gBACnB,aAAaF,UAAU,qBAAqB;gBAC5C,aAAa;gBACb,OAAON;gBACP,MAAM;YACV;QACJ;QAEA,IAAI,QAAO;YACP,MAAM,EAAES,KAAK,EAAEC,IAAI,EAAE,GAAGL,UAAU,EAAE;YAEpC,IAAII,AAAiB,MAAjBA,MAAM,MAAM,EACZ,OAAO,WAAP,GAAO,oBAACE,eAAaA;gBAAC,OAAOC,CAAAA,WAAYP,UAAU,GAAG,CAACO;;YAG3D,OAAOH,MAAM,GAAG,CAAC,CAACI,MAAMC,QAAAA,WAAAA,GACpB,oBAACC,QAAMA;oBACH,KAAKD;oBACL,MAAMD;oBACN,UAAS;oBACT,MAAMH;oBACN,WAAW,IAAML,UAAU,MAAM,CAACS,OAAO;oBACzC,UAAU,IAAMT,UAAU,MAAM,CAACS,OAAO;;QAGpD;QAGA,OAAME,IAAa;YACf,IAAIA,MAAM,QACNX,UAAU,GAAG,CAACW;QAEtB;QAEA;YACIX,UAAU,KAAK;QACnB;QAEA,WAAUY,KAA0B,EAAEC,OAA8B;YAChE,IAAID,AAAc,YAAdA,MAAM,GAAG,EAAc;gBACvBA,MAAM,cAAc;gBACpBZ,UAAU,GAAG,CAACa,QAAQ,KAAK;gBAC3BA,QAAQ,QAAQ,CAAC;gBACjB,OAAO;YACX;YAGA,IAAID,AAAc,gBAAdA,MAAM,GAAG,IAAoBC,AAAkB,OAAlBA,QAAQ,KAAK,EAAS;gBACnDD,MAAM,cAAc;gBACpBC,QAAQ,IAAI;gBACZ,OAAO;YACX;YAEA,OAAO;QACX;QAGA,aAAYC,SAAsB;YAC9BA,UAAU,QAAQ,CAAC;gBAAE,KAAKA,UAAU,YAAY;YAAC;QACrD;IACJ"}
@@ -0,0 +1,2 @@
1
+ export { createAiMode } from "./createAiMode.js";
2
+ export type { PaletteMode, PaletteModeAppearance, PaletteModeKeyContext } from "./PaletteMode.js";
@@ -0,0 +1 @@
1
+ export { createAiMode } from "./createAiMode.js";
@@ -0,0 +1,15 @@
1
+ import type React from "react";
2
+ export interface CommandRow {
3
+ key: string;
4
+ value: string;
5
+ label: string;
6
+ sub?: string;
7
+ icon?: React.ReactNode;
8
+ shortcut?: string[];
9
+ verb: string;
10
+ onRun: () => void;
11
+ }
12
+ export interface CommandGroup {
13
+ title: string;
14
+ rows: CommandRow[];
15
+ }
File without changes
@@ -0,0 +1,14 @@
1
+ import { type CommandPalettePresenter } from "@webiny/app-admin";
2
+ interface PaletteHotkeysParams {
3
+ presenter: CommandPalettePresenter.Interface;
4
+ close: () => void;
5
+ }
6
+ /**
7
+ * The palette's global keys: the ones that work while it is closed, or while focus is not in the
8
+ * input. Keys that only mean something while typing stay on the input's `onKeyDown`.
9
+ *
10
+ * Reads the view model during render, so a reactive component calling this still re-renders when
11
+ * the palette opens, a detail view appears, or AI mode is entered.
12
+ */
13
+ export declare const usePaletteHotkeys: ({ presenter, close }: PaletteHotkeysParams) => void;
14
+ export {};
@@ -0,0 +1,35 @@
1
+ import { useMemo } from "react";
2
+ import { useHotkeys } from "@webiny/app-admin";
3
+ import { PALETTE_HOTKEY_ZINDEX } from "./constants.js";
4
+ const usePaletteHotkeys = ({ presenter, close })=>{
5
+ const { isOpen, activeCommand, aiModeActive } = presenter.vm;
6
+ const keys = useMemo(()=>({
7
+ "mod+k": (e)=>{
8
+ e.preventDefault();
9
+ if (!isOpen) return void presenter.open();
10
+ if (activeCommand) return void presenter.cancelCommand();
11
+ if (!aiModeActive) return void presenter.enterAiMode();
12
+ close();
13
+ },
14
+ backspace: (e)=>{
15
+ if (e.target instanceof HTMLInputElement) return;
16
+ e.preventDefault();
17
+ presenter.cancelCommand();
18
+ },
19
+ ...presenter.shortcutKeys
20
+ }), [
21
+ presenter,
22
+ presenter.shortcutKeys,
23
+ isOpen,
24
+ activeCommand,
25
+ aiModeActive,
26
+ close
27
+ ]);
28
+ useHotkeys({
29
+ zIndex: PALETTE_HOTKEY_ZINDEX,
30
+ keys
31
+ });
32
+ };
33
+ export { usePaletteHotkeys };
34
+
35
+ //# sourceMappingURL=usePaletteHotkeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette/usePaletteHotkeys.js","sources":["../../src/CommandPalette/usePaletteHotkeys.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useHotkeys, type CommandPalettePresenter } from \"@webiny/app-admin\";\nimport { PALETTE_HOTKEY_ZINDEX } from \"./constants.js\";\n\ninterface PaletteHotkeysParams {\n presenter: CommandPalettePresenter.Interface;\n /* Not `presenter.close`: closing also resets the mode, which is the palette's business. */\n close: () => void;\n}\n\n/**\n * The palette's global keys: the ones that work while it is closed, or while focus is not in the\n * input. Keys that only mean something while typing stay on the input's `onKeyDown`.\n *\n * Reads the view model during render, so a reactive component calling this still re-renders when\n * the palette opens, a detail view appears, or AI mode is entered.\n */\nexport const usePaletteHotkeys = ({ presenter, close }: PaletteHotkeysParams) => {\n const { isOpen, activeCommand, aiModeActive } = presenter.vm;\n\n /*\n * mod+k cycles closed -> commands -> AI -> closed, so the same key that opens the palette also\n * reaches the assistant without the user having to know about the space shortcut. Closing from AI\n * mode keeps mod+k a way OUT of the palette, which is what it does everywhere else.\n * Backspace backs out of a detail view; command shortcuts run directly.\n */\n const keys = useMemo(\n () => ({\n \"mod+k\": (e: KeyboardEvent) => {\n e.preventDefault();\n\n if (!isOpen) {\n presenter.open();\n return;\n }\n\n /*\n * A detail view renders in place of the command list, so switching to AI mode from\n * there would put the user in a mode they cannot see. Back out to the list instead.\n */\n if (activeCommand) {\n presenter.cancelCommand();\n return;\n }\n\n if (!aiModeActive) {\n presenter.enterAiMode();\n return;\n }\n\n close();\n },\n backspace: (e: KeyboardEvent) => {\n if (e.target instanceof HTMLInputElement) {\n return;\n }\n e.preventDefault();\n presenter.cancelCommand();\n },\n ...presenter.shortcutKeys\n }),\n [presenter, presenter.shortcutKeys, isOpen, activeCommand, aiModeActive, close]\n );\n\n useHotkeys({ zIndex: PALETTE_HOTKEY_ZINDEX, keys });\n};\n"],"names":["usePaletteHotkeys","presenter","close","isOpen","activeCommand","aiModeActive","keys","useMemo","e","HTMLInputElement","useHotkeys","PALETTE_HOTKEY_ZINDEX"],"mappings":";;;AAiBO,MAAMA,oBAAoB,CAAC,EAAEC,SAAS,EAAEC,KAAK,EAAwB;IACxE,MAAM,EAAEC,MAAM,EAAEC,aAAa,EAAEC,YAAY,EAAE,GAAGJ,UAAU,EAAE;IAQ5D,MAAMK,OAAOC,QACT,IAAO;YACH,SAAS,CAACC;gBACNA,EAAE,cAAc;gBAEhB,IAAI,CAACL,QAAQ,YACTF,UAAU,IAAI;gBAQlB,IAAIG,eAAe,YACfH,UAAU,aAAa;gBAI3B,IAAI,CAACI,cAAc,YACfJ,UAAU,WAAW;gBAIzBC;YACJ;YACA,WAAW,CAACM;gBACR,IAAIA,EAAE,MAAM,YAAYC,kBACpB;gBAEJD,EAAE,cAAc;gBAChBP,UAAU,aAAa;YAC3B;YACA,GAAGA,UAAU,YAAY;QAC7B,IACA;QAACA;QAAWA,UAAU,YAAY;QAAEE;QAAQC;QAAeC;QAAcH;KAAM;IAGnFQ,WAAW;QAAE,QAAQC;QAAuBL;IAAK;AACrD"}
package/Layout.js CHANGED
@@ -1,25 +1,53 @@
1
- import react from "react";
1
+ import react, { useCallback, useMemo, useRef } from "react";
2
2
  import react_helmet from "react-helmet";
3
3
  import { LayoutRenderer, Navigation, TenantSelector, UserMenu } from "@webiny/app-admin";
4
- import { HeaderBar, cn, useSidebar } from "@webiny/admin-ui";
5
- const Layout_Layout = LayoutRenderer.createDecorator(()=>function({ title, startElement = null, hideNavigation = false, children }) {
6
- const { pinned } = useSidebar();
7
- const widthClassNames = {
8
- "max-w-[calc(100%-(var(--spacing-sidebar-expanded)))] ": pinned,
9
- "max-w-[calc(100%-(var(--spacing-sidebar-collapsed)))] ": !pinned
10
- };
11
- return /*#__PURE__*/ react.createElement(react.Fragment, null, title ? /*#__PURE__*/ react.createElement(react_helmet, {
12
- title: title
13
- }) : null, hideNavigation ? null : /*#__PURE__*/ react.createElement(Navigation, null), /*#__PURE__*/ react.createElement("div", {
14
- className: cn("ml-auto bg-neutral-base transition-[max-width,min-width] ease-linear w-full", hideNavigation ? void 0 : widthClassNames)
15
- }, /*#__PURE__*/ react.createElement(HeaderBar, {
16
- start: startElement,
17
- end: /*#__PURE__*/ react.createElement("div", {
18
- className: "flex gap-x-sm items-center justify-end"
19
- }, /*#__PURE__*/ react.createElement(TenantSelector, null), /*#__PURE__*/ react.createElement(UserMenu, null))
20
- }), /*#__PURE__*/ react.createElement("main", {
21
- className: "relative overflow-y-auto h-main-content"
22
- }, children)));
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 LayoutContent = ({ title, startElement = null, hideNavigation = false, children })=>{
16
+ const { pinned } = useSidebar();
17
+ const widthClassNames = {
18
+ "max-w-[calc(100%-(var(--spacing-sidebar-expanded)))] ": pinned,
19
+ "max-w-[calc(100%-(var(--spacing-sidebar-collapsed)))] ": !pinned
20
+ };
21
+ return /*#__PURE__*/ react.createElement(react.Fragment, null, title ? /*#__PURE__*/ react.createElement(react_helmet, {
22
+ title: title
23
+ }) : null, /*#__PURE__*/ react.createElement(CommandPalette, null), hideNavigation ? null : /*#__PURE__*/ react.createElement(Navigation, null), /*#__PURE__*/ react.createElement("div", {
24
+ className: cn("ml-auto bg-neutral-base transition-[max-width,min-width] ease-linear w-full", hideNavigation ? void 0 : widthClassNames)
25
+ }, /*#__PURE__*/ react.createElement(HeaderBar, {
26
+ start: /*#__PURE__*/ react.createElement("div", {
27
+ className: "flex items-center gap-sm"
28
+ }, /*#__PURE__*/ react.createElement(Breadcrumbs, null), startElement),
29
+ end: /*#__PURE__*/ react.createElement("div", {
30
+ className: "flex gap-x-sm items-center justify-end"
31
+ }, /*#__PURE__*/ react.createElement(TenantSelector, null), /*#__PURE__*/ react.createElement(UserMenu, null))
32
+ }), /*#__PURE__*/ react.createElement("main", {
33
+ className: "relative overflow-y-auto h-main-content"
34
+ }, children)));
35
+ };
36
+ const Layout_Layout = LayoutRenderer.createDecorator(()=>function(props) {
37
+ const localStorage = useLocalStorage();
38
+ const localStorageRef = useRef(localStorage);
39
+ localStorageRef.current = localStorage;
40
+ const rawState = useLocalStorageValue(SIDEBAR_STATE_KEY);
41
+ const cachedState = useMemo(()=>parseSidebarState(rawState), [
42
+ rawState
43
+ ]);
44
+ const onChangeState = useCallback((newState)=>{
45
+ localStorageRef.current.set(SIDEBAR_STATE_KEY, JSON.stringify(newState));
46
+ }, []);
47
+ return /*#__PURE__*/ react.createElement(SidebarProvider, {
48
+ state: cachedState,
49
+ onChangeState: onChangeState
50
+ }, /*#__PURE__*/ react.createElement(LayoutContent, props));
23
51
  });
24
52
  export { Layout_Layout as Layout };
25
53
 
package/Layout.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.js","sources":["../src/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"],"names":["Layout","LayoutRenderer","title","startElement","hideNavigation","children","pinned","useSidebar","widthClassNames","Helmet","Navigation","cn","undefined","HeaderBar","TenantSelector","UserMenu"],"mappings":";;;;AAMO,MAAMA,gBAASC,eAAe,eAAe,CAAC,IAC1C,SAAgB,EACnBC,KAAK,EACLC,eAAe,IAAI,EACnBC,iBAAiB,KAAK,EACtBC,QAAQ,EACE;QACV,MAAM,EAAEC,MAAM,EAAE,GAAGC;QAEnB,MAAMC,kBAAkB;YACpB,yDAAyDF;YACzD,0DAA0D,CAACA;QAC/D;QAEA,OAAO,WAAP,GACI,0CACKJ,QAAQ,WAARA,GAAQ,oBAACO,cAAMA;YAAC,OAAOP;aAAY,MACnCE,iBAAiB,OAAO,WAAP,GAAO,oBAACM,YAAUA,OAAAA,WAAAA,GACpC,oBAAC;YACG,WAAWC,GACP,+EACAP,iBAAiBQ,SAAYJ;yBAGjC,oBAACK,WAASA;YACN,OAAOV;YACP,mBACI,oBAAC;gBAAI,WAAW;6BACZ,oBAACW,gBAAcA,OAAAA,WAAAA,GACf,oBAACC,UAAQA;0BAIrB,oBAAC;YAAK,WAAW;WAA4CV;IAI7E"}
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 { LayoutRenderer, Navigation, TenantSelector, 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\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 hideNavigation ? undefined : widthClassNames\n )}\n >\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 <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","LayoutContent","title","startElement","hideNavigation","children","pinned","useSidebar","widthClassNames","Helmet","CommandPalette","Navigation","cn","undefined","HeaderBar","Breadcrumbs","TenantSelector","UserMenu","Layout","LayoutRenderer","props","localStorage","useLocalStorage","localStorageRef","useRef","rawState","useLocalStorageValue","cachedState","useMemo","onChangeState","useCallback","newState","SidebarProvider"],"mappings":";;;;;;;AASA,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;AAEA,MAAME,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,+EACAR,iBAAiBS,SAAYL;qBAGjC,oBAACM,WAASA;QACN,qBACI,oBAAC;YAAI,WAAU;yBACX,oBAACC,aAAWA,OACXZ;QAGT,mBACI,oBAAC;YAAI,WAAW;yBACZ,oBAACa,gBAAcA,OAAAA,WAAAA,GACf,oBAACC,UAAQA;sBAIrB,oBAAC;QAAK,WAAW;OAA4CZ;AAI7E;AAEO,MAAMa,gBAASC,eAAe,eAAe,CAAC,IAC1C,SAAgBC,KAAkB;QACrC,MAAMC,eAAeC;QACrB,MAAMC,kBAAkBC,OAAOH;QAC/BE,gBAAgB,OAAO,GAAGF;QAE1B,MAAMI,WAAWC,qBAAqB7B;QACtC,MAAM8B,cAAcC,QAAQ,IAAM9B,kBAAkB2B,WAAW;YAACA;SAAS;QAEzE,MAAMI,gBAAgBC,YAAY,CAACC;YAC/BR,gBAAgB,OAAO,CAAC,GAAG,CAAC1B,mBAAmBG,KAAK,SAAS,CAAC+B;QAClE,GAAG,EAAE;QAEL,OAAO,WAAP,GACI,oBAACC,iBAAeA;YAAC,OAAOL;YAAa,eAAeE;yBAChD,oBAAC5B,eAAkBmB;IAG/B"}
package/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import react from "react";
2
2
  import { AdminConfig } from "@webiny/app-admin";
3
3
  import { Layout } from "./Layout.js";
4
- import { Navigation } from "./Navigation.js";
4
+ import { Navigation } from "./Navigation/Navigation.js";
5
5
  import { UserMenu } from "./UserMenu.js";
6
6
  import { Dialog } from "./Dialog.js";
7
7
  import { NotFound } from "./NotFound.js";
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig } from \"@webiny/app-admin\";\nimport { Layout } from \"./Layout.js\";\nimport { Navigation } from \"./Navigation.js\";\nimport { UserMenu } from \"~/UserMenu.js\";\nimport { Dialog } from \"./Dialog.js\";\nimport { NotFound } from \"./NotFound.js\";\nimport { Dashboard } from \"./Dashboard.js\";\nimport { Logo } from \"./Logo.js\";\nimport { AssistanceWidget, CommunityWidget } from \"./Dashboard/components/index.js\";\n\nexport const AdminUI = () => {\n return (\n <>\n <AdminConfig>\n <AdminConfig.Dashboard.Widget\n name=\"admin.assistance\"\n column=\"right\"\n pin=\"last\"\n element={<AssistanceWidget />}\n />\n <AdminConfig.Dashboard.Widget\n name=\"admin.community\"\n pin=\"last\"\n column=\"right\"\n element={<CommunityWidget />}\n />\n </AdminConfig>\n <Dashboard />\n <Dialog />\n <Layout />\n <Navigation />\n <NotFound />\n <UserMenu />\n <Logo />\n </>\n );\n};\n"],"names":["AdminUI","AdminConfig","AssistanceWidget","CommunityWidget","Dashboard","Dialog","Layout","Navigation","NotFound","UserMenu","Logo"],"mappings":";;;;;;;;;;AAWO,MAAMA,UAAU,IACZ,WAAP,GACI,wDACI,oBAACC,aAAWA,MAAAA,WAAAA,GACR,oBAACA,YAAY,SAAS,CAAC,MAAM;QACzB,MAAK;QACL,QAAO;QACP,KAAI;QACJ,uBAAS,oBAACC,kBAAgBA;sBAE9B,oBAACD,YAAY,SAAS,CAAC,MAAM;QACzB,MAAK;QACL,KAAI;QACJ,QAAO;QACP,uBAAS,oBAACE,iBAAeA;uBAGjC,oBAACC,WAASA,OAAAA,WAAAA,GACV,oBAACC,QAAMA,OAAAA,WAAAA,GACP,oBAACC,QAAMA,OAAAA,WAAAA,GACP,oBAACC,YAAUA,OAAAA,WAAAA,GACX,oBAACC,UAAQA,OAAAA,WAAAA,GACT,oBAACC,UAAQA,OAAAA,WAAAA,GACT,oBAACC,MAAIA"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig } from \"@webiny/app-admin\";\nimport { Layout } from \"./Layout.js\";\nimport { Navigation } from \"./Navigation/Navigation.js\";\nimport { UserMenu } from \"~/UserMenu.js\";\nimport { Dialog } from \"./Dialog.js\";\nimport { NotFound } from \"./NotFound.js\";\nimport { Dashboard } from \"./Dashboard.js\";\nimport { Logo } from \"./Logo.js\";\nimport { AssistanceWidget, CommunityWidget } from \"./Dashboard/components/index.js\";\n\nexport const AdminUI = () => {\n return (\n <>\n <AdminConfig>\n <AdminConfig.Dashboard.Widget\n name=\"admin.assistance\"\n column=\"right\"\n pin=\"last\"\n element={<AssistanceWidget />}\n />\n <AdminConfig.Dashboard.Widget\n name=\"admin.community\"\n pin=\"last\"\n column=\"right\"\n element={<CommunityWidget />}\n />\n </AdminConfig>\n <Dashboard />\n <Dialog />\n <Layout />\n <Navigation />\n <NotFound />\n <UserMenu />\n <Logo />\n </>\n );\n};\n"],"names":["AdminUI","AdminConfig","AssistanceWidget","CommunityWidget","Dashboard","Dialog","Layout","Navigation","NotFound","UserMenu","Logo"],"mappings":";;;;;;;;;;AAWO,MAAMA,UAAU,IACZ,WAAP,GACI,wDACI,oBAACC,aAAWA,MAAAA,WAAAA,GACR,oBAACA,YAAY,SAAS,CAAC,MAAM;QACzB,MAAK;QACL,QAAO;QACP,KAAI;QACJ,uBAAS,oBAACC,kBAAgBA;sBAE9B,oBAACD,YAAY,SAAS,CAAC,MAAM;QACzB,MAAK;QACL,KAAI;QACJ,QAAO;QACP,uBAAS,oBAACE,iBAAeA;uBAGjC,oBAACC,WAASA,OAAAA,WAAAA,GACV,oBAACC,QAAMA,OAAAA,WAAAA,GACP,oBAACC,QAAMA,OAAAA,WAAAA,GACP,oBAACC,YAAUA,OAAAA,WAAAA,GACX,oBAACC,UAAQA,OAAAA,WAAAA,GACT,oBAACC,UAAQA,OAAAA,WAAAA,GACT,oBAACC,MAAIA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-admin-ui",
3
- "version": "6.4.11",
3
+ "version": "6.6.0-alpha.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -14,19 +14,20 @@
14
14
  "license": "MIT",
15
15
  "dependencies": {
16
16
  "@types/react": "18.3.31",
17
- "@webiny/admin-ui": "6.4.11",
18
- "@webiny/app": "6.4.11",
19
- "@webiny/app-admin": "6.4.11",
20
- "@webiny/icons": "6.4.11",
17
+ "@webiny/admin-ui": "6.6.0-alpha.1",
18
+ "@webiny/app": "6.6.0-alpha.1",
19
+ "@webiny/app-admin": "6.6.0-alpha.1",
20
+ "@webiny/icons": "6.6.0-alpha.1",
21
+ "cmdk": "1.1.1",
21
22
  "react": "18.3.1",
22
23
  "react-dom": "18.3.1",
23
24
  "react-helmet": "6.1.0"
24
25
  },
25
26
  "devDependencies": {
26
27
  "@types/react-helmet": "6.1.11",
27
- "@webiny/build-tools": "6.4.11",
28
+ "@webiny/build-tools": "6.6.0-alpha.1",
28
29
  "rimraf": "6.1.3",
29
- "typescript": "6.0.3"
30
+ "typescript": "7.0.2"
30
31
  },
31
32
  "publishConfig": {
32
33
  "access": "public"
@@ -1,6 +0,0 @@
1
- import React from "react";
2
- interface NavigationProviderProps {
3
- children?: React.ReactNode;
4
- }
5
- export declare const SidebarProvider: (Component: React.ComponentType<NavigationProviderProps>) => (props: NavigationProviderProps) => React.JSX.Element;
6
- export {};
@@ -1,26 +0,0 @@
1
- import react, { useMemo } from "react";
2
- import { SidebarProvider as admin_ui_SidebarProvider } from "@webiny/admin-ui";
3
- import { useLocalStorage, useLocalStorageValue } from "@webiny/app";
4
- const SIDEBAR_STATE_KEY = "navigation/state";
5
- const SidebarProvider_SidebarProvider = (Component)=>function(props) {
6
- const rawState = useLocalStorageValue(SIDEBAR_STATE_KEY);
7
- const { set } = useLocalStorage();
8
- const state = useMemo(()=>{
9
- try {
10
- if ("object" == typeof rawState && null !== rawState) return rawState;
11
- if ("string" == typeof rawState) return JSON.parse(rawState);
12
- } catch {}
13
- }, [
14
- rawState
15
- ]);
16
- const onChangeState = (newState)=>{
17
- set(SIDEBAR_STATE_KEY, JSON.stringify(newState));
18
- };
19
- return /*#__PURE__*/ react.createElement(admin_ui_SidebarProvider, {
20
- state: state,
21
- onChangeState: onChangeState
22
- }, /*#__PURE__*/ react.createElement(Component, props));
23
- };
24
- export { SidebarProvider_SidebarProvider as SidebarProvider };
25
-
26
- //# sourceMappingURL=SidebarProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Navigation/SidebarProvider.js","sources":["../../src/Navigation/SidebarProvider.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { SidebarProvider as AdminUiSidebar } from \"@webiny/admin-ui\";\nimport { useLocalStorage, useLocalStorageValue } from \"@webiny/app\";\n\ninterface NavigationProviderProps {\n children?: React.ReactNode;\n}\n\nconst SIDEBAR_STATE_KEY = \"navigation/state\";\n\ntype SidebarState = {\n pinned: boolean;\n expandedSections: string[];\n pinnedItems: string[];\n};\n\nexport const SidebarProvider = (Component: React.ComponentType<NavigationProviderProps>) => {\n return function SidebarProvider(props: NavigationProviderProps) {\n const rawState = useLocalStorageValue(SIDEBAR_STATE_KEY);\n const { set } = useLocalStorage();\n\n const state = useMemo(() => {\n try {\n if (typeof rawState === \"object\" && rawState !== null) {\n return rawState as SidebarState;\n }\n if (typeof rawState === \"string\") {\n return JSON.parse(rawState) as SidebarState;\n }\n } catch {\n // Ignore parse errors\n }\n return undefined;\n }, [rawState]);\n\n const onChangeState = (newState: SidebarState) => {\n set(SIDEBAR_STATE_KEY, JSON.stringify(newState));\n };\n\n return (\n <AdminUiSidebar state={state} onChangeState={onChangeState}>\n <Component {...props} />\n </AdminUiSidebar>\n );\n };\n};\n"],"names":["SIDEBAR_STATE_KEY","SidebarProvider","Component","props","rawState","useLocalStorageValue","set","useLocalStorage","state","useMemo","JSON","onChangeState","newState","AdminUiSidebar"],"mappings":";;;AAQA,MAAMA,oBAAoB;AAQnB,MAAMC,kCAAkB,CAACC,YACrB,SAAyBC,KAA8B;QAC1D,MAAMC,WAAWC,qBAAqBL;QACtC,MAAM,EAAEM,GAAG,EAAE,GAAGC;QAEhB,MAAMC,QAAQC,QAAQ;YAClB,IAAI;gBACA,IAAI,AAAoB,YAApB,OAAOL,YAAyBA,AAAa,SAAbA,UAChC,OAAOA;gBAEX,IAAI,AAAoB,YAApB,OAAOA,UACP,OAAOM,KAAK,KAAK,CAACN;YAE1B,EAAE,OAAM,CAER;QAEJ,GAAG;YAACA;SAAS;QAEb,MAAMO,gBAAgB,CAACC;YACnBN,IAAIN,mBAAmBU,KAAK,SAAS,CAACE;QAC1C;QAEA,OAAO,WAAP,GACI,oBAACC,0BAAcA;YAAC,OAAOL;YAAO,eAAeG;yBACzC,oBAACT,WAAcC;IAG3B"}
package/Navigation.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import React from "react";
2
- export declare const Navigation: () => React.JSX.Element;
package/Navigation.js DELETED
@@ -1,10 +0,0 @@
1
- import react from "react";
2
- import { Provider } from "@webiny/app-admin";
3
- import { SidebarProvider } from "./Navigation/SidebarProvider.js";
4
- import { Navigation } from "./Navigation/Navigation.js";
5
- const Navigation_Navigation = ()=>/*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Provider, {
6
- hoc: SidebarProvider
7
- }), /*#__PURE__*/ react.createElement(Navigation, null));
8
- export { Navigation_Navigation as Navigation };
9
-
10
- //# sourceMappingURL=Navigation.js.map
package/Navigation.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"Navigation.js","sources":["../src/Navigation.tsx"],"sourcesContent":["import React from \"react\";\nimport { Provider } from \"@webiny/app-admin\";\nimport { SidebarProvider } from \"./Navigation/SidebarProvider.js\";\nimport { Navigation as DecoratedNavigation } from \"./Navigation/Navigation.js\";\n\nexport const Navigation = () => {\n return (\n <>\n <Provider hoc={SidebarProvider} />\n <DecoratedNavigation />\n </>\n );\n};\n"],"names":["Navigation","Provider","SidebarProvider","DecoratedNavigation"],"mappings":";;;;AAKO,MAAMA,wBAAa,IACf,WAAP,GACI,wDACI,oBAACC,UAAQA;QAAC,KAAKC;sBACf,oBAACC,YAAmBA"}