@uxf/cms 10.0.0-beta.12 → 10.0.0-beta.14

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.
@@ -11,9 +11,9 @@ const Breadcrumbs = (props) => {
11
11
  if (props.items.length === 0) {
12
12
  return null;
13
13
  }
14
- return (react_1.default.createElement("div", { className: "uxf-typo-body mb-4 flex flex-wrap items-center text-lightLow" }, props.items.map((item, index) => (react_1.default.createElement("span", { className: "mr-2 last:mr-0", key: index },
15
- !!index && react_1.default.createElement(icon_1.Icon, { className: "mr-2 inline", name: "angleRight", size: 16 }),
16
- item.href ? (react_1.default.createElement(link_1.default, { href: item.href, className: "transition-colors hover:text-lightHigh" },
14
+ return (react_1.default.createElement("div", { className: "uxf-cms-breadcrumbs" }, props.items.map((item, index) => (react_1.default.createElement("span", { className: "uxf-cms-breadcrumbs__item", key: index },
15
+ !!index && react_1.default.createElement(icon_1.Icon, { className: "uxf-cms-breadcrumbs__divide-icon", name: "angleRight", size: 16 }),
16
+ item.href ? (react_1.default.createElement(link_1.default, { href: item.href, className: "uxf-cms-breadcrumbs__link" },
17
17
  react_1.default.createElement("span", null, item.title))) : (react_1.default.createElement("span", null, item.title)))))));
18
18
  };
19
19
  exports.Breadcrumbs = Breadcrumbs;
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.LayoutContainer = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const maxWidthClassName = {
9
- narrow: "max-w-[788px]",
10
- wide: "max-w-[1024px]",
9
+ narrow: "uxf-cms-layout__container--narrow",
10
+ wide: "uxf-cms-layout__container--wide",
11
11
  fullWidth: "",
12
12
  none: "",
13
13
  };
@@ -17,6 +17,6 @@ const LayoutContainer = (props) => {
17
17
  if (type === "none") {
18
18
  return react_1.default.createElement(react_1.default.Fragment, null, props.children);
19
19
  }
20
- return (react_1.default.createElement("div", { className: `${maxWidthClassName[type]} mx-auto px-4 md:px-10 ${(_b = props.className) !== null && _b !== void 0 ? _b : ""}` }, props.children));
20
+ return (react_1.default.createElement("div", { className: `${maxWidthClassName[type]} uxf-cms-layout__container ${(_b = props.className) !== null && _b !== void 0 ? _b : ""}` }, props.children));
21
21
  };
22
22
  exports.LayoutContainer = LayoutContainer;
@@ -13,31 +13,29 @@ const breadcrumbs_1 = require("./breadcrumbs");
13
13
  const loader_1 = require("@uxf/ui/loader/loader");
14
14
  const layout_container_1 = require("./layout-container");
15
15
  const Layout = (props) => {
16
- var _a;
17
- // eslint-disable-next-line react/destructuring-assignment
18
- const { Header, Logo, MessageBar, TitleRightContainer, ToolbarRight, breadcrumbs, children, containerType, headerContainerType, loading, mainClassName, menuConfiguration, subtitle, title, stickyHeader, CustomHeader, } = props;
16
+ var _a, _b;
19
17
  return (react_1.default.createElement(react_1.default.Fragment, null,
20
18
  react_1.default.createElement(head_1.default, null,
21
19
  react_1.default.createElement("meta", { name: "viewport", content: "width=device-width, initial-scale=1" }),
22
20
  react_1.default.createElement("meta", { charSet: "utf-8" }),
23
- react_1.default.createElement("title", null, `${title} | ${(_a = config_1.config.get("app-name")) !== null && _a !== void 0 ? _a : ""}`)),
24
- react_1.default.createElement("div", { className: "flex" },
25
- react_1.default.createElement("div", { className: "flex w-full bg-gray-100 dark:bg-gray-900 dark:text-darkHigh" },
26
- react_1.default.createElement(sidebar_1.Sidebar, { menuConfiguration: menuConfiguration, Logo: Logo }),
27
- react_1.default.createElement("main", { className: `min-h-screen w-full pb-16 md:ml-[var(--drawerWidth)] md:w-[calc(100%_-_var(--drawerWidth))] md:pb-0 ${mainClassName !== null && mainClassName !== void 0 ? mainClassName : ""}`, style: { "--drawerWidth": `${styles_1.drawerWidth}px` } }, loading ? (react_1.default.createElement("div", { className: "flex h-96 flex-col items-center justify-center" },
28
- react_1.default.createElement("div", { className: "text-center" },
21
+ react_1.default.createElement("title", null, `${props.title} | ${config_1.config.get("app-name") || ""}`)),
22
+ react_1.default.createElement("div", { className: "uxf-cms-layout" },
23
+ react_1.default.createElement("div", { className: "uxf-cms-layout__wrapper" },
24
+ react_1.default.createElement(sidebar_1.Sidebar, { menuConfiguration: props.menuConfiguration, Logo: props.Logo }),
25
+ react_1.default.createElement("main", { className: `uxf-cms-layout__main ${(_a = props.mainClassName) !== null && _a !== void 0 ? _a : ""}`, style: { "--drawer-width": `${styles_1.drawerWidth}px` } }, props.loading ? (react_1.default.createElement("div", { className: "uxf-cms-layout__loading" },
26
+ react_1.default.createElement("div", { className: "uxf-cms-layout__loading-inner" },
29
27
  react_1.default.createElement(loader_1.Loader, null),
30
- react_1.default.createElement("p", { className: "mt-2" }, "Na\u010D\u00EDt\u00E1m\u2026")))) : (react_1.default.createElement(react_1.default.Fragment, null,
31
- CustomHeader ? (CustomHeader) : (react_1.default.createElement("div", { className: `${Header ? "bg-white dark:bg-gray-950" : ""} ${stickyHeader ? "sticky top-0 z-10 bg-white shadow-md dark:bg-gray-950" : ""}` },
32
- ToolbarRight && (react_1.default.createElement("div", { className: "flex h-12 items-center justify-end bg-sidebar-background px-6 text-darkMedium" }, ToolbarRight)),
33
- MessageBar,
34
- react_1.default.createElement(layout_container_1.LayoutContainer, { type: headerContainerType !== null && headerContainerType !== void 0 ? headerContainerType : containerType, className: "pb-9 pt-12" },
35
- breadcrumbs && react_1.default.createElement(breadcrumbs_1.Breadcrumbs, { items: breadcrumbs }),
36
- react_1.default.createElement("div", { className: "flex items-center justify-between" },
37
- react_1.default.createElement("h1", { className: "uxf-typo-h4" }, title),
38
- TitleRightContainer),
39
- subtitle,
40
- Header))),
41
- react_1.default.createElement(layout_container_1.LayoutContainer, { type: containerType }, children))))))));
28
+ react_1.default.createElement("p", { className: "uxf-cms-layout__loading-text" }, "Na\u010D\u00EDt\u00E1m\u2026")))) : (react_1.default.createElement(react_1.default.Fragment, null,
29
+ props.CustomHeader ? (props.CustomHeader) : (react_1.default.createElement("div", { className: `${props.Header ? "uxf-cms-layout__header" : ""} ${props.stickyHeader ? "uxf-cms-layout__header--sticky" : ""}` },
30
+ props.ToolbarRight && (react_1.default.createElement("div", { className: "uxf-cms-layout__toolbar" }, props.ToolbarRight)),
31
+ props.MessageBar,
32
+ react_1.default.createElement(layout_container_1.LayoutContainer, { type: (_b = props.headerContainerType) !== null && _b !== void 0 ? _b : props.containerType, className: "uxf-cms-layout__container--basic" },
33
+ props.breadcrumbs && react_1.default.createElement(breadcrumbs_1.Breadcrumbs, { items: props.breadcrumbs }),
34
+ react_1.default.createElement("div", { className: "uxf-cms-layout__title-wrapper" },
35
+ react_1.default.createElement("h1", { className: "uxf-cms-layout__title" }, props.title),
36
+ props.TitleRightContainer),
37
+ props.subtitle,
38
+ props.Header))),
39
+ react_1.default.createElement(layout_container_1.LayoutContainer, { type: props.containerType }, props.children))))))));
42
40
  };
43
41
  exports.Layout = Layout;
@@ -34,8 +34,7 @@ const uxfLogo = (react_1.default.createElement("svg", { width: "134", height: "3
34
34
  react_1.default.createElement("path", { fill: "#FFF", fillRule: "evenodd", d: "M33.563 12.874a9.103 9.103 0 0 0 0-12.874L20.69 12.874l.107.105a9.103 9.103 0 0 0 12.766-.105Zm-20.69-6.437a9.103 9.103 0 0 1 .106 12.766l-.105.107L0 6.437a9.103 9.103 0 0 1 12.874 0ZM40 33.563 27.127 20.69l-.106.107a9.103 9.103 0 0 0 12.98 12.766Zm-20.69-6.437-.107-.105A9.103 9.103 0 0 0 6.437 40l12.874-12.874Z", clipRule: "evenodd" }),
35
35
  react_1.default.createElement("path", { fill: "#FFF", fillRule: "evenodd", d: "m84.325 7.295 5.133 8.675h.199l5.158-8.675h6.078l-7.768 12.727 7.942 12.727h-6.19l-5.22-8.687h-.199l-5.22 8.687h-6.165l7.967-12.727-7.818-12.727h6.103Zm-24.194 0v16.07c0 .97.214 1.832.64 2.586a4.58 4.58 0 0 0 1.809 1.777c.779.431 1.686.647 2.722.647 1.044 0 1.953-.216 2.728-.647a4.591 4.591 0 0 0 1.802-1.777c.427-.754.64-1.616.64-2.585V7.296h5.382v16.53c0 1.856-.441 3.48-1.324 4.872-.882 1.392-2.115 2.475-3.697 3.25-1.583.775-3.426 1.162-5.531 1.162-2.113 0-3.96-.387-5.543-1.162-1.583-.775-2.813-1.858-3.692-3.25-.878-1.392-1.317-3.016-1.317-4.872V7.296h5.381ZM170.25 13.41c2.411 0 4.311.51 5.698 1.529 1.388 1.019 2.198 2.407 2.43 4.164l-4.847.298a2.555 2.555 0 0 0-.534-1.125 2.942 2.942 0 0 0-1.075-.808c-.444-.203-.972-.304-1.585-.304-.821 0-1.512.172-2.076.515-.563.344-.845.802-.845 1.374 0 .456.182.84.547 1.156.364.315.99.567 1.877.758l3.455.696c1.856.381 3.24.994 4.151 1.84.912.845 1.367 1.955 1.367 3.33 0 1.252-.366 2.35-1.1 3.294-.733.945-1.736 1.68-3.007 2.206-1.272.526-2.737.79-4.394.79-2.527 0-4.539-.529-6.034-1.585-1.496-1.057-2.372-2.496-2.629-4.32l5.208-.273c.157.77.538 1.357 1.143 1.759.605.402 1.38.603 2.324.603.928 0 1.676-.18 2.244-.54.567-.361.855-.827.864-1.4-.009-.48-.212-.875-.609-1.186-.398-.31-1.011-.55-1.84-.715l-3.306-.659c-1.864-.372-3.25-1.019-4.157-1.938-.908-.92-1.361-2.093-1.361-3.518 0-1.226.333-2.283 1-3.17.667-.886 1.608-1.57 2.821-2.05 1.214-.48 2.637-.72 4.27-.72Zm-36.686.373a12.285 12.285 0 0 0-3.051-.373c-1.525 0-2.865.23-4.021.69-1.156.46-2.098 1.114-2.827 1.964-.73.849-1.219 1.854-1.467 3.014l4.897.397c.182-.63.555-1.153 1.119-1.572.563-.418 1.321-.627 2.274-.627.903 0 1.601.215 2.094.646.493.43.74 1.04.74 1.827v.075c0 .405-.153.712-.46.92-.307.206-.8.362-1.479.465-.68.104-1.574.214-2.685.33-.944.09-1.845.248-2.703.472a7.698 7.698 0 0 0-2.293.994 4.727 4.727 0 0 0-1.591 1.74c-.39.721-.584 1.612-.584 2.673 0 1.259.275 2.31.826 3.15a5.147 5.147 0 0 0 2.256 1.902c.953.427 2.038.64 3.257.64.944 0 1.777-.126 2.498-.38a5.55 5.55 0 0 0 1.852-1.055 5.31 5.31 0 0 0 1.23-1.573h.149v2.648h5.022V19.873c0-1.135-.22-2.11-.659-2.927a5.655 5.655 0 0 0-1.796-2.007 8.039 8.039 0 0 0-2.598-1.156Zm-13.424-2.05V7.294h-16.853v25.454h5.381V22.235h10.354v-4.438h-10.354v-6.065h11.472Zm32.603 1.677c1.326 0 2.482.29 3.468.87.986.58 1.753 1.407 2.3 2.48.546 1.073.82 2.35.82 3.834V32.75h-5.295V21.539c.008-1.169-.29-2.082-.895-2.74-.605-.66-1.437-.989-2.498-.989-.713 0-1.34.153-1.883.46a3.166 3.166 0 0 0-1.268 1.336c-.302.584-.458 1.286-.466 2.107V32.75h-5.295V13.659h5.047v3.368H147a5.358 5.358 0 0 1 2.126-2.641c.994-.65 2.2-.976 3.616-.976Zm-20.061 10.782c.286-.087.512-.184.678-.292v2.026c0 .671-.17 1.272-.51 1.802-.34.53-.808.951-1.404 1.262-.597.31-1.285.466-2.064.466-.812 0-1.481-.189-2.007-.566-.526-.377-.789-.925-.789-1.646 0-.497.128-.914.385-1.25.257-.335.617-.602 1.082-.801a6.547 6.547 0 0 1 1.628-.435l.969-.143a24.15 24.15 0 0 0 1.069-.186c.356-.071.677-.15.963-.237Z", clipRule: "evenodd" })));
36
36
  const Sidebar = (props) => {
37
- // eslint-disable-next-line react/destructuring-assignment
38
- const { menuConfiguration, Logo, CustomSidebar } = props;
37
+ var _a, _b;
39
38
  const [deviceHeight, setDeviceHeight] = (0, react_1.useState)(0);
40
39
  const [isMenuOpen, setIsMenuOpen] = (0, react_1.useState)(false);
41
40
  const toggleMenu = () => setIsMenuOpen((prev) => !prev);
@@ -50,13 +49,13 @@ const Sidebar = (props) => {
50
49
  window.removeEventListener("resize", handleDeviceHeight);
51
50
  };
52
51
  });
53
- return (CustomSidebar !== null && CustomSidebar !== void 0 ? CustomSidebar : (react_1.default.createElement("div", { className: "sidebar fixed z-1 flex w-full flex-col max-md:z-[15] md:w-[var(--drawerWidth)]", style: { "--drawerWidth": `${styles_1.drawerWidth}px` } },
54
- react_1.default.createElement("div", { className: `h-[calc(var(--deviceHeight)_-_48px)] flex-col bg-sidebar-background pt-5 md:h-screen ${isMenuOpen ? "flex" : "hidden md:flex"}`, style: { "--deviceHeight": `${deviceHeight}px` } },
55
- react_1.default.createElement("div", { className: "sidebar__logo px-4" }, Logo !== null && Logo !== void 0 ? Logo : uxfLogo),
56
- menuConfiguration && menuConfiguration.length > 0 && (react_1.default.createElement(react_1.default.Fragment, null,
57
- react_1.default.createElement("div", { className: `sidebar__nav grow overflow-auto px-2 md:px-0 ${menuConfiguration[0].type === "super-section" ? "mt-4" : "mt-8"}` },
58
- react_1.default.createElement(menu_1.Menu, { menu: menuConfiguration })),
59
- react_1.default.createElement(user_menu_1.UserMenu, { menu: menuConfiguration })))),
60
- menuConfiguration && react_1.default.createElement(mobile_bar_1.MobileBar, { menuConfiguration: menuConfiguration, toggleMenu: toggleMenu }))));
52
+ return ((_a = props.CustomSidebar) !== null && _a !== void 0 ? _a : (react_1.default.createElement("div", { className: "uxf-cms-sidebar", style: { "--drawer-width": `${styles_1.drawerWidth}px` } },
53
+ react_1.default.createElement("div", { className: `uxf-cms-sidebar__content ${isMenuOpen ? "uxf-cms-sidebar__content--open" : "uxf-cms-sidebar__content--closed"}`, style: { "--device-height": `${deviceHeight}px` } },
54
+ react_1.default.createElement("div", { className: "uxf-cms-sidebar__logo" }, (_b = props.Logo) !== null && _b !== void 0 ? _b : uxfLogo),
55
+ props.menuConfiguration && props.menuConfiguration.length > 0 && (react_1.default.createElement(react_1.default.Fragment, null,
56
+ react_1.default.createElement("div", { className: `uxf-cms-sidebar__nav ${props.menuConfiguration[0].type === "super-section" ? "mt-4" : "mt-8"}` },
57
+ react_1.default.createElement(menu_1.Menu, { menu: props.menuConfiguration })),
58
+ react_1.default.createElement(user_menu_1.UserMenu, { menu: props.menuConfiguration })))),
59
+ props.menuConfiguration && (react_1.default.createElement(mobile_bar_1.MobileBar, { menuConfiguration: props.menuConfiguration, toggleMenu: toggleMenu })))));
61
60
  };
62
61
  exports.Sidebar = Sidebar;
@@ -8,14 +8,12 @@ const head_1 = __importDefault(require("next/head"));
8
8
  const react_1 = __importDefault(require("react"));
9
9
  const paper_1 = require("@uxf/ui/paper/paper");
10
10
  const LoginLayout = (props) => {
11
- // eslint-disable-next-line react/destructuring-assignment
12
- const { hideTitle, title, subTitle, pageTitle, children, Logo } = props;
13
- return (react_1.default.createElement("div", { className: "flex min-h-screen flex-col items-center justify-center bg-gray-100 p-4 dark:bg-gray-900 dark:text-darkHigh" },
11
+ return (react_1.default.createElement("div", { className: "uxf-cms-login-layout" },
14
12
  react_1.default.createElement(head_1.default, null,
15
- react_1.default.createElement("title", null, pageTitle || "")),
16
- Logo && react_1.default.createElement("div", { className: "mb-8" }, Logo),
17
- title && react_1.default.createElement("h1", { className: hideTitle ? "sr-only" : "uxf-typo-h4" }, title),
18
- subTitle && react_1.default.createElement("p", { className: "uxf-typo-body mt-2 text-lightMedium" }, subTitle),
19
- react_1.default.createElement(paper_1.Paper, { className: "mt-8 w-[448px] max-w-full p-6 dark:bg-gray-950" }, children)));
13
+ react_1.default.createElement("title", null, props.pageTitle || "")),
14
+ props.Logo && react_1.default.createElement("div", { className: "uxf-cms-login-layout__logo-wrapper" }, props.Logo),
15
+ props.title && (react_1.default.createElement("h1", { className: `uxf-cms-login-layout__title ${props.hideTitle ? "uxf-cms-login-layout__title--hidden" : ""}` }, props.title)),
16
+ props.subTitle && react_1.default.createElement("p", { className: "uxf-cms-login-layout__subtitle" }, props.subTitle),
17
+ react_1.default.createElement(paper_1.Paper, { className: "uxf-cms-login-layout__body" }, props.children)));
20
18
  };
21
19
  exports.LoginLayout = LoginLayout;
@@ -1,6 +1,8 @@
1
1
  import { FC } from "react";
2
2
  import { MenuItem } from "./model";
3
- export declare const MobileBar: FC<{
3
+ interface Props {
4
4
  menuConfiguration: MenuItem[];
5
5
  toggleMenu: () => void;
6
- }>;
6
+ }
7
+ export declare const MobileBar: FC<Props>;
8
+ export {};
@@ -12,11 +12,9 @@ const config_1 = require("../../config");
12
12
  const avatar_1 = require("@uxf/ui/avatar");
13
13
  const cx_1 = require("@uxf/core/utils/cx");
14
14
  const MobileBar = (props) => {
15
- // eslint-disable-next-line react/destructuring-assignment
16
- const { menuConfiguration, toggleMenu } = props;
17
15
  const useLoggedUser = config_1.container.get("useLoggedUser");
18
16
  const loggedUser = useLoggedUser();
19
- const mobileBarMenu = menuConfiguration
17
+ const mobileBarMenu = props.menuConfiguration
20
18
  .flatMap((item) => {
21
19
  if (item.type === "link" || item.type === "section") {
22
20
  return item;
@@ -32,16 +30,16 @@ const MobileBar = (props) => {
32
30
  .filter((i) => i)
33
31
  .filter((item) => (item === null || item === void 0 ? void 0 : item.isVisible(loggedUser)) && (!item.children.length || item.hasVisibleChildren(loggedUser)))
34
32
  .splice(0, 4);
35
- const buttonClassName = (0, cx_1.cx)("flex h-10 grow items-center justify-center shrink-0", mobileBarMenu.length === 2 && "w-1/3", mobileBarMenu.length === 3 && "w-1/4", mobileBarMenu.length === 4 && "w-1/5");
36
- return (react_1.default.createElement("div", { className: "fixed inset-x-0 bottom-0 flex h-16 items-center border-t border-gray-700 bg-sidebar-background px-1 text-darkMedium md:hidden" },
33
+ const buttonClassName = (0, cx_1.cx)("uxf-cms-mobile-bar__button", mobileBarMenu.length === 2 && "w-1/3", mobileBarMenu.length === 3 && "w-1/4", mobileBarMenu.length === 4 && "w-1/5");
34
+ return (react_1.default.createElement("div", { className: "uxf-cms-mobile-bar" },
37
35
  mobileBarMenu.map((item, index) => {
38
36
  var _a, _b, _c, _d;
39
37
  if (item.children.length) {
40
38
  return (react_1.default.createElement(sub_menu_mobile_1.SubMenuMobile, { key: index, content: item.children, title: item.title },
41
39
  react_1.default.createElement("button", { type: "button", className: buttonClassName }, item.userMenuData ? (react_1.default.createElement(react_1.default.Fragment, null,
42
- react_1.default.createElement(avatar_1.Avatar, { className: "h-7 w-7", src: item.userMenuData.avatar }))) : (react_1.default.createElement(react_1.default.Fragment, null,
40
+ react_1.default.createElement(avatar_1.Avatar, { className: "uxf-cms-mobile-bar__avatar", src: item.userMenuData.avatar }))) : (react_1.default.createElement(react_1.default.Fragment, null,
43
41
  react_1.default.createElement(icon_1.Icon, { name: (_a = item.icon) !== null && _a !== void 0 ? _a : "", size: 24 }),
44
- react_1.default.createElement(icon_1.Icon, { name: "caretDown", size: 16, className: "ml-1" }))))));
42
+ react_1.default.createElement(icon_1.Icon, { name: "caretDown", size: 16, className: "uxf-cms-mobile-bar__caret" }))))));
45
43
  }
46
44
  if (item.url || item.route) {
47
45
  return (react_1.default.createElement(link_1.default, { key: index, href: (_b = item.url) !== null && _b !== void 0 ? _b : config_1.container.get("route")(item.route, item.routeParams), target: item.isExternal ? "_blank" : undefined, rel: item.isExternal ? "noreferrer noopener" : undefined, className: buttonClassName },
@@ -50,7 +48,7 @@ const MobileBar = (props) => {
50
48
  return (react_1.default.createElement("span", { key: index, className: buttonClassName },
51
49
  react_1.default.createElement(icon_1.Icon, { name: (_d = item.icon) !== null && _d !== void 0 ? _d : "user", size: 24 })));
52
50
  }),
53
- react_1.default.createElement("button", { type: "button", className: buttonClassName, onClick: toggleMenu },
51
+ react_1.default.createElement("button", { type: "button", className: buttonClassName, onClick: props.toggleMenu },
54
52
  react_1.default.createElement(icon_1.Icon, { name: "bars", size: 24 }))));
55
53
  };
56
54
  exports.MobileBar = MobileBar;
@@ -9,27 +9,27 @@ const icon_1 = require("@uxf/ui/icon");
9
9
  const link_1 = __importDefault(require("next/link"));
10
10
  const sub_menu_1 = require("../sub-menu/sub-menu");
11
11
  const config_1 = require("../../../../config");
12
+ const classes_1 = require("@uxf/core/constants/classes");
12
13
  const ListItem = (props) => {
14
+ var _a, _b, _c, _d;
15
+ const hasSubMenu = !!((_a = props.subMenu) === null || _a === void 0 ? void 0 : _a.length);
16
+ const Content = (_b = props.children) !== null && _b !== void 0 ? _b : (react_1.default.createElement("div", { className: `uxf-cms-menu__item uxf-cms-menu__item--basic ${props.selected ? classes_1.CLASSES.IS_SELECTED : ""}` },
17
+ react_1.default.createElement("div", { className: `uxf-cms-menu__icon-wrapper ${props.level === 1 ? "uxf-cms-menu__icon-wrapper--level-one" : ""}` }, !!props.icon && props.level !== 1 && react_1.default.createElement(icon_1.Icon, { name: props.icon, size: 16 })),
18
+ react_1.default.createElement("div", { className: "uxf-cms-menu__item-label" }, props.label),
19
+ hasSubMenu && (react_1.default.createElement(icon_1.Icon, { name: "caretDown", size: 16, className: `uxf-cms-menu__caret ${!props.isOpen ? classes_1.CLASSES.IS_OPEN : ""}` }))));
13
20
  // eslint-disable-next-line react/destructuring-assignment
14
- const { children, icon, label, level = 0, selected, href, route, params, subMenu, isOpen, toggle, isInitiallyOpen, isExternal, } = props;
15
- const hasSubMenu = !!(subMenu === null || subMenu === void 0 ? void 0 : subMenu.length);
16
- const Content = children !== null && children !== void 0 ? children : (react_1.default.createElement("div", { className: `mb-0.5 flex cursor-pointer items-center rounded-lg py-2.5 pl-2.5 pr-1 hover:bg-sidebar-hover ${selected ? "bg-sidebar-highlight font-bold text-darkHigh" : "bg-sidebar-background text-darkMedium"}` },
17
- react_1.default.createElement("div", { className: level === 1 ? "w-9" : "w-7" }, !!icon && level !== 1 && react_1.default.createElement(icon_1.Icon, { name: icon, size: 16 })),
18
- react_1.default.createElement("div", { className: "uxf-typo-body2" }, label),
19
- hasSubMenu && (react_1.default.createElement(icon_1.Icon, { name: "caretDown", size: 16, className: `ml-auto mr-2 ${!isOpen ? "-rotate-90" : ""}` }))));
20
- // eslint-disable-next-line react/destructuring-assignment
21
- const Button = ({ className }) => (react_1.default.createElement("button", { type: "button", onClick: toggle, className: className }, Content));
22
- if (href || route) {
23
- if (hasSubMenu && !isInitiallyOpen) {
21
+ const Button = ({ className }) => (react_1.default.createElement("button", { type: "button", onClick: props.toggle, className: className }, Content));
22
+ if (props.href || props.route) {
23
+ if (props.subMenu && hasSubMenu && !props.isInitiallyOpen) {
24
24
  return (react_1.default.createElement(react_1.default.Fragment, null,
25
- react_1.default.createElement(sub_menu_1.SubMenu, { content: subMenu },
26
- react_1.default.createElement(link_1.default, { href: href !== null && href !== void 0 ? href : config_1.container.get("route")(route, params), target: isExternal ? "_blank" : undefined, rel: isExternal ? "noreferrer noopener" : undefined }, Content)),
27
- react_1.default.createElement(Button, { className: "w-full md:hidden" })));
25
+ react_1.default.createElement(sub_menu_1.SubMenu, { content: props.subMenu },
26
+ react_1.default.createElement(link_1.default, { href: (_c = props.href) !== null && _c !== void 0 ? _c : config_1.container.get("route")(props.route, props.params), target: props.isExternal ? "_blank" : undefined, rel: props.isExternal ? "noreferrer noopener" : undefined }, Content)),
27
+ react_1.default.createElement(Button, { className: "uxf-cms-menu__submenu-button uxf-cms-menu__submenu-button--initially-closed" })));
28
28
  }
29
29
  if (hasSubMenu) {
30
- return react_1.default.createElement(Button, { className: "w-full md:pointer-events-none" });
30
+ return react_1.default.createElement(Button, { className: "uxf-cms-menu__submenu-button uxf-cms-menu__submenu-button--initially-open" });
31
31
  }
32
- return (react_1.default.createElement(link_1.default, { href: href !== null && href !== void 0 ? href : config_1.container.get("route")(route, params), target: isExternal ? "_blank" : undefined, rel: isExternal ? "noreferrer noopener" : undefined }, Content));
32
+ return (react_1.default.createElement(link_1.default, { href: (_d = props.href) !== null && _d !== void 0 ? _d : config_1.container.get("route")(props.route, props.params), target: props.isExternal ? "_blank" : undefined, rel: props.isExternal ? "noreferrer noopener" : undefined }, Content));
33
33
  }
34
34
  return Content;
35
35
  };
@@ -7,13 +7,11 @@ exports.MenuCustomItem = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const config_1 = require("../../../config");
9
9
  const MenuCustomItem = (props) => {
10
- // eslint-disable-next-line react/destructuring-assignment
11
- const { item } = props;
12
10
  const useLoggedUser = config_1.container.get("useLoggedUser");
13
11
  const loggedUser = useLoggedUser();
14
- if (!item.isVisible(loggedUser)) {
12
+ if (!props.item.isVisible(loggedUser)) {
15
13
  return null;
16
14
  }
17
- return react_1.default.createElement("div", null, item.content);
15
+ return react_1.default.createElement("div", null, props.item.content);
18
16
  };
19
17
  exports.MenuCustomItem = MenuCustomItem;
@@ -30,24 +30,23 @@ const list_item_1 = require("./list-item");
30
30
  const router_1 = require("next/router");
31
31
  const MenuItem = (props) => {
32
32
  var _a, _b, _c, _d;
33
- // eslint-disable-next-line react/destructuring-assignment
34
- const { item } = props;
35
33
  const router = (0, router_1.useRouter)();
36
34
  const activeRoute = config_1.container.get("useActiveRoute")();
37
- const isActive = item.isActive(router, activeRoute);
38
- const hasActiveChildren = item.hasActiveChildren(router, activeRoute);
35
+ const isActive = props.item.isActive(router, activeRoute);
36
+ const hasActiveChildren = props.item.hasActiveChildren(router, activeRoute);
39
37
  const useLoggedUser = config_1.container.get("useLoggedUser");
40
38
  const loggedUser = useLoggedUser();
41
- const visibleChildren = item.children.filter((i) => i.isVisible(loggedUser));
39
+ const visibleChildren = props.item.children.filter((i) => i.isVisible(loggedUser));
42
40
  const firstVisibleChild = visibleChildren.length !== 0 ? visibleChildren[0] : undefined;
43
- const isInitiallyOpen = (isActive || hasActiveChildren) && item.children.length > 0;
41
+ const isInitiallyOpen = (isActive || hasActiveChildren) && props.item.children.length > 0;
44
42
  const [isSubmenuOpen, setIsSubmenuOpen] = (0, react_1.useState)(isInitiallyOpen);
45
43
  const toggle = () => setIsSubmenuOpen((prev) => !prev);
46
- if (!item.isVisible(loggedUser) || (item.children.length !== 0 && !item.hasVisibleChildren(loggedUser))) {
44
+ if (!props.item.isVisible(loggedUser) ||
45
+ (props.item.children.length !== 0 && !props.item.hasVisibleChildren(loggedUser))) {
47
46
  return null;
48
47
  }
49
48
  return (react_1.default.createElement(react_1.default.Fragment, null,
50
- react_1.default.createElement(list_item_1.ListItem, { label: item.title, icon: item.icon, href: (_a = item.url) !== null && _a !== void 0 ? _a : firstVisibleChild === null || firstVisibleChild === void 0 ? void 0 : firstVisibleChild.url, route: (_b = item.route) !== null && _b !== void 0 ? _b : firstVisibleChild === null || firstVisibleChild === void 0 ? void 0 : firstVisibleChild.route, params: (_d = (_c = item.routeParams) !== null && _c !== void 0 ? _c : firstVisibleChild === null || firstVisibleChild === void 0 ? void 0 : firstVisibleChild.routeParams) !== null && _d !== void 0 ? _d : null, selected: isActive, subMenu: item.children, isOpen: isSubmenuOpen, toggle: toggle, isInitiallyOpen: isInitiallyOpen, isExternal: item.isExternal }),
49
+ react_1.default.createElement(list_item_1.ListItem, { label: props.item.title, icon: props.item.icon, href: (_a = props.item.url) !== null && _a !== void 0 ? _a : firstVisibleChild === null || firstVisibleChild === void 0 ? void 0 : firstVisibleChild.url, route: (_b = props.item.route) !== null && _b !== void 0 ? _b : firstVisibleChild === null || firstVisibleChild === void 0 ? void 0 : firstVisibleChild.route, params: (_d = (_c = props.item.routeParams) !== null && _c !== void 0 ? _c : firstVisibleChild === null || firstVisibleChild === void 0 ? void 0 : firstVisibleChild.routeParams) !== null && _d !== void 0 ? _d : null, selected: isActive, subMenu: props.item.children, isOpen: isSubmenuOpen, toggle: toggle, isInitiallyOpen: isInitiallyOpen, isExternal: props.item.isExternal }),
51
50
  isSubmenuOpen && (react_1.default.createElement("div", null, visibleChildren.map((i) => {
52
51
  const isSelected = i.isActive(router, activeRoute);
53
52
  return (react_1.default.createElement(list_item_1.ListItem, { key: i.title, label: i.title, href: i.url, icon: i.icon, route: i.route, params: i.routeParams, level: 1, selected: isSelected, isExternal: i.isExternal }));
@@ -29,13 +29,11 @@ const config_1 = require("../../../config");
29
29
  const menu_item_1 = require("./menu-item");
30
30
  const menu_custom_item_1 = require("./menu-custom-item");
31
31
  const MenuSuperSectionItem = (props) => {
32
- // eslint-disable-next-line react/destructuring-assignment
33
- const { item } = props;
34
32
  const useLoggedUser = config_1.container.get("useLoggedUser");
35
33
  const loggedUser = useLoggedUser();
36
- return (react_1.default.createElement("div", { className: item.userMenuData ? "md:hidden" : undefined },
37
- item.isVisible(loggedUser) && (react_1.default.createElement("p", { className: "uxf-typo-overline mb-3 mt-6 pl-2 uppercase text-darkLow" }, item.title)),
38
- item.children.map((i, index) => (react_1.default.createElement(react_1.Fragment, { key: index },
34
+ return (react_1.default.createElement("div", { className: props.item.userMenuData ? "md:hidden" : undefined },
35
+ props.item.isVisible(loggedUser) && (react_1.default.createElement("p", { className: "uxf-cms-menu__item uxf-cms-menu__item--super" }, props.item.title)),
36
+ props.item.children.map((i, index) => (react_1.default.createElement(react_1.Fragment, { key: index },
39
37
  i.type === "custom" && react_1.default.createElement(menu_custom_item_1.MenuCustomItem, { item: i }),
40
38
  (i.type === "section" || i.type === "link") && react_1.default.createElement(menu_item_1.MenuItem, { item: i }))))));
41
39
  };
@@ -29,7 +29,7 @@ const menu_item_1 = require("./menu-item");
29
29
  const menu_custom_item_1 = require("./menu-custom-item");
30
30
  const menu_super_section_item_1 = require("./menu-super-section-item");
31
31
  const Menu = (props) => {
32
- return (react_1.default.createElement("div", { className: "bg-sidebar-background px-2 pb-4" }, props.menu.map((item, index) => (react_1.default.createElement(react_1.Fragment, { key: index },
32
+ return (react_1.default.createElement("div", { className: "uxf-cms-menu" }, props.menu.map((item, index) => (react_1.default.createElement(react_1.Fragment, { key: index },
33
33
  item.type === "custom" && react_1.default.createElement(menu_custom_item_1.MenuCustomItem, { item: item }),
34
34
  item.type === "super-section" && react_1.default.createElement(menu_super_section_item_1.MenuSuperSectionItem, { item: item }),
35
35
  (item.type === "section" || item.type === "link") && react_1.default.createElement(menu_item_1.MenuItem, { item: item }))))));
@@ -9,16 +9,14 @@ const config_1 = require("../../../../config");
9
9
  const link_1 = __importDefault(require("next/link"));
10
10
  const SubMenuItem = (props) => {
11
11
  var _a;
12
- // eslint-disable-next-line react/destructuring-assignment
13
- const { item } = props;
14
12
  const useLoggedUser = config_1.container.get("useLoggedUser");
15
13
  const loggedUser = useLoggedUser();
16
- if (!item.isVisible(loggedUser)) {
14
+ if (!props.item.isVisible(loggedUser)) {
17
15
  return null;
18
16
  }
19
- const Content = (react_1.default.createElement("div", { className: "hover:text-darkLight w-full bg-sidebar-highlight px-4 py-3.5 text-body text-darkMedium hover:bg-sidebar-background md:text-body2" }, item.title));
20
- if (item.url || item.route) {
21
- return (react_1.default.createElement(link_1.default, { href: (_a = item.url) !== null && _a !== void 0 ? _a : config_1.container.get("route")(item.route, item.routeParams), target: item.isExternal ? "_blank" : undefined, rel: item.isExternal ? "noreferrer noopener" : undefined }, Content));
17
+ const Content = react_1.default.createElement("div", { className: "uxf-cms-sub-menu__item" }, props.item.title);
18
+ if (props.item.url || props.item.route) {
19
+ return (react_1.default.createElement(link_1.default, { href: (_a = props.item.url) !== null && _a !== void 0 ? _a : config_1.container.get("route")(props.item.route, props.item.routeParams), target: props.item.isExternal ? "_blank" : undefined, rel: props.item.isExternal ? "noreferrer noopener" : undefined }, Content));
22
20
  }
23
21
  return Content;
24
22
  };
@@ -28,7 +28,7 @@ const react_1 = __importStar(require("react"));
28
28
  const forwardRef_1 = require("@uxf/core/utils/forwardRef");
29
29
  const use_sub_menu_1 = require("./use-sub-menu");
30
30
  const composeRefs_1 = require("@uxf/core/utils/composeRefs");
31
- const sub_menuItem_1 = require("./sub-menuItem");
31
+ const sub_menu_item_1 = require("./sub-menu-item");
32
32
  exports.SubMenuMobile = (0, forwardRef_1.forwardRef)("SubMenuMobile", ({ children, content, title }, ref) => {
33
33
  const subMenu = (0, use_sub_menu_1.useSubMenu)({ isMobile: true });
34
34
  const stableRef = (0, react_1.useMemo)(() => (0, composeRefs_1.composeRefs)(ref, subMenu.refs.setReference, children.ref), [ref, subMenu.refs.setReference, children]);
@@ -39,10 +39,10 @@ exports.SubMenuMobile = (0, forwardRef_1.forwardRef)("SubMenuMobile", ({ childre
39
39
  "data-state": subMenu.open ? "open" : "closed",
40
40
  })),
41
41
  subMenu.open && (react_1.default.createElement("div", { ...subMenu.getFloatingProps({
42
- className: "sidebar__scrollbar bg-sidebar-background rounded-xl overflow-y-auto z-dropdown w-[calc(100vw_-_32px)] shadow-lg left-4",
42
+ className: "uxf-cms-sidebar__scrollbar uxf-cms-sub-menu__wrapper-mobile",
43
43
  ref: subMenu.refs.setFloating,
44
44
  style: subMenu.floatingStyles,
45
45
  }) },
46
- react_1.default.createElement("div", { className: "uxf-typo-body w-full bg-sidebar-background px-4 py-3.5 font-bold text-darkHigh" }, title),
47
- content.map((item, index) => (react_1.default.createElement(sub_menuItem_1.SubMenuItem, { key: index, item: item })))))));
46
+ react_1.default.createElement("div", { className: "uxf-cms-sub-menu__title" }, title),
47
+ content.map((item, index) => (react_1.default.createElement(sub_menu_item_1.SubMenuItem, { key: index, item: item })))))));
48
48
  });
@@ -28,11 +28,11 @@ const react_1 = __importStar(require("react"));
28
28
  const forwardRef_1 = require("@uxf/core/utils/forwardRef");
29
29
  const use_sub_menu_1 = require("./use-sub-menu");
30
30
  const composeRefs_1 = require("@uxf/core/utils/composeRefs");
31
- const sub_menuItem_1 = require("./sub-menuItem");
31
+ const sub_menu_item_1 = require("./sub-menu-item");
32
32
  exports.SubMenu = (0, forwardRef_1.forwardRef)("SubMenu", ({ children, content }, ref) => {
33
33
  const subMenu = (0, use_sub_menu_1.useSubMenu)({ isMobile: false });
34
34
  const stableRef = (0, react_1.useMemo)(() => (0, composeRefs_1.composeRefs)(ref, subMenu.refs.setReference, children.ref), [ref, subMenu.refs.setReference, children]);
35
- return (react_1.default.createElement("div", { className: "hidden md:block" },
35
+ return (react_1.default.createElement("div", { className: "uxf-cms-sub-menu" },
36
36
  (0, react_1.cloneElement)(children, subMenu.getReferenceProps({
37
37
  ref: stableRef,
38
38
  ...children.props,
@@ -41,6 +41,6 @@ exports.SubMenu = (0, forwardRef_1.forwardRef)("SubMenu", ({ children, content }
41
41
  subMenu.open && (react_1.default.createElement("div", { ...subMenu.getFloatingProps({
42
42
  ref: subMenu.refs.setFloating,
43
43
  style: subMenu.floatingStyles,
44
- className: "sidebar__scrollbar bg-sidebar-highlight rounded-xl overflow-y-auto z-dropdown max-w-64 shadow-lg w-full",
45
- }) }, content.map((item, index) => (react_1.default.createElement(sub_menuItem_1.SubMenuItem, { key: index, item: item })))))));
44
+ className: "uxf-cms-sidebar__scrollbar uxf-cms-sub-menu__wrapper",
45
+ }) }, content.map((item, index) => (react_1.default.createElement(sub_menu_item_1.SubMenuItem, { key: index, item: item })))))));
46
46
  });
@@ -28,24 +28,23 @@ const react_1 = __importStar(require("react"));
28
28
  const avatar_1 = require("@uxf/ui/avatar");
29
29
  const icon_1 = require("@uxf/ui/icon");
30
30
  const list_item_1 = require("./list-item");
31
+ const classes_1 = require("@uxf/core/constants/classes");
31
32
  const Component = (props) => {
32
33
  const [isSubmenuOpen, setIsSubmenuOpen] = (0, react_1.useState)(false);
33
34
  const hasSubmenu = props.submenu.length > 0;
34
35
  const toggle = hasSubmenu ? () => setIsSubmenuOpen((prev) => !prev) : undefined;
35
- return (react_1.default.createElement("div", { className: "hidden border-t border-t-darkLow/10 p-3 pr-5 text-darkMedium md:block" },
36
- react_1.default.createElement("button", { className: "flex w-full items-center text-left", onClick: toggle },
37
- react_1.default.createElement(avatar_1.Avatar, { className: "mr-3 shrink-0", src: props.avatar }),
38
- react_1.default.createElement("div", { className: "truncate" },
39
- react_1.default.createElement("div", { className: "uxf-typo-body2 mb-1" }, props.name),
40
- react_1.default.createElement("div", { className: "uxf-typo-caption truncate text-darkLow" }, props.roles)),
41
- react_1.default.createElement("div", { className: "ml-auto" }, hasSubmenu && (react_1.default.createElement(icon_1.Icon, { name: "caretDown", size: 16, className: `ml-2 ${!isSubmenuOpen ? "-rotate-90" : ""}` })))),
42
- isSubmenuOpen && (react_1.default.createElement("div", { className: "mt-4" }, props.submenu.map((item, index) => (react_1.default.createElement(list_item_1.ListItem, { label: item.title, route: item.route, params: item.routeParams, icon: item.icon, key: index })))))));
36
+ return (react_1.default.createElement("div", { className: "uxf-cms-user-menu" },
37
+ react_1.default.createElement("button", { className: "uxf-cms-user-menu__button", onClick: toggle },
38
+ react_1.default.createElement(avatar_1.Avatar, { className: "uxf-cms-user-menu__avatar", src: props.avatar }),
39
+ react_1.default.createElement("div", { className: "uxf-cms-user-menu__label-wrapper" },
40
+ react_1.default.createElement("div", { className: "uxf-cms-user-menu__name" }, props.name),
41
+ react_1.default.createElement("div", { className: "uxf-cms-user-menu__roles" }, props.roles)),
42
+ react_1.default.createElement("div", { className: "uxf-cms-user-menu__caret-wrapper" }, hasSubmenu && (react_1.default.createElement(icon_1.Icon, { name: "caretDown", size: 16, className: `uxf-cms-user-menu__caret ${!isSubmenuOpen ? classes_1.CLASSES.IS_OPEN : ""}` })))),
43
+ isSubmenuOpen && (react_1.default.createElement("div", { className: "uxf-cms-user-menu__sub-menu" }, props.submenu.map((item, index) => (react_1.default.createElement(list_item_1.ListItem, { label: item.title, route: item.route, params: item.routeParams, icon: item.icon, key: index })))))));
43
44
  };
44
45
  const UserMenu = (props) => {
45
46
  var _a, _b, _c, _d, _e, _f;
46
- // eslint-disable-next-line react/destructuring-assignment
47
- const { menu } = props;
48
- const userMenu = menu.find((item) => !!item.userMenuData);
47
+ const userMenu = props.menu.find((item) => !!item.userMenuData);
49
48
  return (react_1.default.createElement(Component, { submenu: (_a = userMenu === null || userMenu === void 0 ? void 0 : userMenu.children) !== null && _a !== void 0 ? _a : [], name: (_c = (_b = userMenu === null || userMenu === void 0 ? void 0 : userMenu.userMenuData) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : "Uživatel", roles: (_e = (_d = userMenu === null || userMenu === void 0 ? void 0 : userMenu.userMenuData) === null || _d === void 0 ? void 0 : _d.roles) !== null && _e !== void 0 ? _e : "nepřihlášený", avatar: (_f = userMenu === null || userMenu === void 0 ? void 0 : userMenu.userMenuData) === null || _f === void 0 ? void 0 : _f.avatar }));
50
49
  };
51
50
  exports.UserMenu = UserMenu;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/cms",
3
- "version": "10.0.0-beta.12",
3
+ "version": "10.0.0-beta.14",
4
4
  "description": "UXF Cms",
5
5
  "author": "UXFans <dev@uxf.cz>",
6
6
  "homepage": "https://gitlab.com/uxf-npm/cms#readme",
@@ -0,0 +1,30 @@
1
+ .uxf-cms-breadcrumbs {
2
+ @apply uxf-typo-body;
3
+
4
+ align-items: center;
5
+ color: theme("colors.lightLow");
6
+ display: flex;
7
+ flex-wrap: wrap;
8
+ margin-bottom: theme("spacing.4");
9
+
10
+ &__item {
11
+ margin-right: theme("spacing.2");
12
+
13
+ &:last-child {
14
+ margin-right: 0;
15
+ }
16
+ }
17
+
18
+ &__divide-icon {
19
+ margin-right: theme("spacing.2");
20
+ display: inline;
21
+ }
22
+
23
+ &__link {
24
+ @apply transition-colors;
25
+
26
+ &:hover {
27
+ color: theme("colors.lightHigh");
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,124 @@
1
+ .uxf-cms-layout {
2
+ display: flex;
3
+
4
+ &__wrapper {
5
+ display: flex;
6
+ width: 100%;
7
+
8
+ :root .light & {
9
+ background-color: theme('colors.gray.100');
10
+ }
11
+
12
+ :root .dark & {
13
+ background-color: theme('colors.gray.900');
14
+ color: theme('colors.darkHigh');
15
+ }
16
+ }
17
+
18
+ &__main {
19
+ --drawer-width: 264px;
20
+
21
+ min-height: 100vh;
22
+ padding-bottom: theme('spacing.16');
23
+ width: 100%;
24
+
25
+ @media screen(md) {
26
+ margin-left: var(--drawer-width);
27
+ padding-bottom: 0;
28
+ width: calc(100% - var(--drawer-width));
29
+ }
30
+
31
+ }
32
+
33
+ &__loading {
34
+ align-items: center;
35
+ display: flex;
36
+ flex-direction: column;
37
+ height: theme('spacing.96');
38
+ justify-content: center;
39
+
40
+ &-inner {
41
+ text-align: center;
42
+ }
43
+
44
+ &-text {
45
+ margin-top: theme('spacing.2');
46
+ }
47
+ }
48
+
49
+ &__header {
50
+ :root .light & {
51
+ background-color: theme('colors.white');
52
+ }
53
+
54
+ :root .dark & {
55
+ background-color: theme('colors.gray.950');
56
+ }
57
+
58
+ &--sticky {
59
+ box-shadow: theme('boxShadow.md');
60
+ position: sticky;
61
+ top: 0;
62
+ z-index: 10;
63
+
64
+ :root .light & {
65
+ background-color: theme('colors.white');
66
+ }
67
+
68
+ :root .dark & {
69
+ background-color: theme('colors.gray.950');
70
+ }
71
+ }
72
+ }
73
+
74
+ &__toolbar {
75
+ align-items: center;
76
+ background-color: theme('colors.sidebar.background');
77
+ display: flex;
78
+ height: theme('spacing.12');
79
+ justify-content: flex-end;
80
+ padding: 0 theme('spacing.6');
81
+
82
+ :root .light & {
83
+ color: theme('colors.darkMedium');
84
+ }
85
+
86
+ :root .dark & {
87
+ color: theme('colors.lightMedium');
88
+ }
89
+
90
+ }
91
+
92
+ &__container {
93
+ margin: 0 auto;
94
+ padding: 0 theme('spacing.4');
95
+
96
+ @media screen(md) {
97
+ padding-left: theme('spacing.10');
98
+ padding-right: theme('spacing.10');
99
+ }
100
+
101
+ &--basic {
102
+ padding-bottom: theme('spacing.9');
103
+ padding-top: theme('spacing.12');
104
+ }
105
+
106
+ &--narrow {
107
+ max-width: 49.25rem;
108
+ }
109
+
110
+ &--wide {
111
+ max-width: 64rem;
112
+ }
113
+ }
114
+
115
+ &__title-wrapper {
116
+ align-items: center;
117
+ display: flex;
118
+ justify-content: space-between;
119
+ }
120
+
121
+ &__title {
122
+ @apply uxf-typo-h4;
123
+ }
124
+ }
@@ -0,0 +1,52 @@
1
+ .uxf-cms-login-layout {
2
+ align-items: center;
3
+ display: flex;
4
+ flex-direction: column;
5
+ justify-content: center;
6
+ min-height: 100vh;
7
+ padding: theme('spacing.4');
8
+
9
+ :root .light & {
10
+ background-color: theme('colors.gray.100');
11
+ }
12
+
13
+ :root .dark & {
14
+ background-color: theme('colors.gray.900');
15
+ color: theme('colors.darkHigh');
16
+ }
17
+
18
+ &__logo-wrapper {
19
+ margin-bottom: theme('spacing.8');
20
+ }
21
+
22
+ &__title {
23
+ @apply uxf-typo-h4;
24
+
25
+ &--hidden {
26
+ @apply sr-only;
27
+ }
28
+ }
29
+
30
+ &__subtitle {
31
+ margin-top: theme('spacing.2');
32
+
33
+ :root .light & {
34
+ color: theme('colors.lightMedium');
35
+ }
36
+
37
+ :root .dark & {
38
+ color: theme('colors.darkMedium');
39
+ }
40
+ }
41
+
42
+ &__body {
43
+ margin-top: theme('spacing.8');
44
+ max-width: 100%;
45
+ padding: theme('spacing.6');
46
+ width: 28rem;
47
+
48
+ :root .dark & {
49
+ background-color: theme('colors.gray.950');
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,184 @@
1
+ .uxf-cms-menu {
2
+ background-color: theme('colors.sidebar.background');
3
+ padding: 0 theme('spacing.2') theme('spacing.4');
4
+
5
+ &__item {
6
+ &--super {
7
+ @apply uxf-typo-overline;
8
+
9
+ color: theme('colors.darkLow');
10
+ margin-bottom: theme('spacing.3');
11
+ margin-top: theme('spacing.6');
12
+ padding-left: theme('spacing.2');
13
+ text-transform: uppercase;
14
+ }
15
+
16
+ &--basic {
17
+ align-items: center;
18
+ background-color: theme('colors.sidebar.background');
19
+ border-radius: theme('borderRadius.lg');
20
+ color: theme('colors.darkMedium');
21
+ cursor: pointer;
22
+ display: flex;
23
+ margin-bottom: theme('spacing[0.5]');
24
+ padding: theme('spacing[2.5]') theme('spacing.1') theme('spacing[2.5]') theme('spacing[2.5]');
25
+
26
+ &:hover {
27
+ background-color: theme('colors.sidebar.hover');
28
+ }
29
+
30
+ &.is-selected {
31
+ background-color: theme('colors.sidebar.highlight');
32
+ color: theme('colors.darkHigh');
33
+ font-weight: bold;
34
+ }
35
+
36
+ .uxf-cms-menu__icon-wrapper {
37
+ width: theme('spacing.7');
38
+
39
+ &--level-one {
40
+ width: theme('spacing.9');
41
+ }
42
+ }
43
+
44
+ .uxf-cms-menu__caret {
45
+ margin-left: auto;
46
+ margin-right: theme('spacing.2');
47
+
48
+ &.is-open {
49
+ transform: rotate(-90deg);
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+ &__submenu-button {
56
+ width: 100%;
57
+
58
+ &--initially-closed {
59
+ @media screen(md) {
60
+ display: none;
61
+ }
62
+ }
63
+
64
+ &--initially-open {
65
+ @media screen(md) {
66
+ pointer-events: none;
67
+ }
68
+ }
69
+ }
70
+ }
71
+
72
+ .uxf-cms-user-menu {
73
+ color: theme('colors.darkMedium');
74
+ display: none;
75
+ padding: theme('spacing.3') theme('spacing.5') theme('spacing.3') theme('spacing.3');
76
+
77
+ :root .light & {
78
+ border-top: 1px solid theme('colors.darkLow/10');
79
+ }
80
+
81
+ :root .dark & {
82
+ border-top: 1px solid theme('colors.gray.700/10');
83
+ }
84
+
85
+ @media screen(md) {
86
+ display: block;
87
+ }
88
+
89
+ &__button {
90
+ align-items: center;
91
+ display: flex;
92
+ text-align: left;
93
+ width: 100%;
94
+ }
95
+
96
+ &__avatar {
97
+ flex-shrink: 0;
98
+ margin-right: theme('spacing.3');
99
+ }
100
+
101
+ &__label-wrapper {
102
+ @apply truncate;
103
+ }
104
+
105
+ &__name {
106
+ @apply uxf-typo-body2;
107
+
108
+ margin-bottom: theme('spacing.1');
109
+ }
110
+
111
+ &__roles {
112
+ @apply uxf-typo-caption truncate;
113
+
114
+ color: theme('colors.darkLow');
115
+ }
116
+
117
+ &__caret-wrapper {
118
+ margin-left: auto;
119
+ }
120
+
121
+ &__caret {
122
+ margin-left: theme('spacing.2');
123
+
124
+ &.is-open {
125
+ transform: rotate(-90deg);
126
+ }
127
+ }
128
+
129
+ &__sub-menu {
130
+ margin-top: theme('spacing.4');
131
+ }
132
+ }
133
+
134
+ .uxf-cms-sub-menu {
135
+ display: none;
136
+
137
+ @media screen(md) {
138
+ display: block;
139
+ }
140
+
141
+ &__wrapper {
142
+ background-color: theme('colors.sidebar.highlight');
143
+ border-radius: theme('borderRadius.xl');
144
+ box-shadow: theme('boxShadow.lg');
145
+ overflow-y: auto;
146
+ width: 100%;
147
+ z-index: theme('zIndex.dropdown');
148
+ }
149
+
150
+ &__wrapper-mobile {
151
+ background-color: theme('colors.sidebar.background');
152
+ border-radius: theme('borderRadius.xl');
153
+ box-shadow: theme('boxShadow.lg');
154
+ left: theme('spacing.4');
155
+ overflow-y: auto;
156
+ width: calc(100vw - 32px);
157
+ z-index: theme('zIndex.dropdown');
158
+ }
159
+
160
+ &__item {
161
+ @apply md:text-body2;
162
+
163
+ background-color: theme('colors.sidebar.highlight');
164
+ color: theme('colors.darkMedium');
165
+ font-size: theme('fontSize.body');
166
+ padding: theme("spacing[3.5]");
167
+ width: 100%;
168
+
169
+ &:hover {
170
+ background-color: theme('colors.sidebar.background');
171
+ color: theme('colors.darkLow');
172
+ }
173
+ }
174
+
175
+ &__title {
176
+ @apply uxf-typo-body;
177
+
178
+ background-color: theme('colors.sidebar.background');
179
+ color: theme('colors.darkHigh');
180
+ font-weight: bold;
181
+ padding: theme("spacing[3.5]") theme("spacing.4");
182
+ width: 100%;
183
+ }
184
+ }
@@ -0,0 +1,35 @@
1
+ .uxf-cms-mobile-bar {
2
+ align-items: center;
3
+ background-color: theme('colors.sidebar.background');
4
+ border-top: 1px solid theme('colors.gray.700');
5
+ bottom: 0;
6
+ color: theme('colors.darkMedium');
7
+ display: flex;
8
+ height: theme('spacing.16');
9
+ left: 0;
10
+ padding: 0 theme('spacing.1');
11
+ position: fixed;
12
+ right: 0;
13
+
14
+ @media screen(md) {
15
+ display: none;
16
+ }
17
+
18
+ &__button {
19
+ align-items: center;
20
+ display: flex;
21
+ flex-grow: 1;
22
+ flex-shrink: 0;
23
+ height: theme('spacing.10');
24
+ justify-content: center;
25
+ }
26
+
27
+ &__avatar {
28
+ height: theme('spacing.7');
29
+ width: theme('spacing.7');
30
+ }
31
+
32
+ &__caret {
33
+ margin-left: theme('spacing.1');
34
+ }
35
+ }
@@ -0,0 +1,94 @@
1
+ .uxf-cms-sidebar {
2
+ display: flex;
3
+ flex-direction: column;
4
+ position: fixed;
5
+ width: 100%;
6
+ z-index: 15;
7
+
8
+ @media screen(md) {
9
+ width: var(--drawer-width);
10
+ z-index: 1;
11
+ }
12
+
13
+ &__content {
14
+ --device-height: 1000px;
15
+
16
+ background-color: theme("colors.sidebar.background");
17
+ flex-direction: column;
18
+ height: calc(var(--device-height) - 48px);
19
+ padding-top: theme("spacing.5");
20
+
21
+ @media screen(md) {
22
+ height: 100vh;
23
+ }
24
+
25
+ &--open {
26
+ display: flex;
27
+ }
28
+
29
+ &--closed {
30
+ display: none;
31
+
32
+ @media screen(md) {
33
+ display: flex;
34
+ }
35
+ }
36
+ }
37
+
38
+ &__logo {
39
+ padding: 0 theme("spacing.4");
40
+ }
41
+
42
+ &__nav {
43
+ flex-grow: 1;
44
+ overflow: auto;
45
+ padding: 0 theme("spacing.2");
46
+
47
+ @media screen(md) {
48
+ padding-left: 0;
49
+ padding-right: 0;
50
+ }
51
+
52
+ /* width */
53
+ &::-webkit-scrollbar {
54
+ width: 4px;
55
+ }
56
+
57
+ /* Track */
58
+ &::-webkit-scrollbar-track {
59
+ background: theme("colors.sidebar.background");
60
+ }
61
+
62
+ /* Handle */
63
+ &::-webkit-scrollbar-thumb {
64
+ background: theme("colors.sidebar.highlight");
65
+ }
66
+
67
+ /* Handle on hover */
68
+ &::-webkit-scrollbar-thumb:hover {
69
+ background: theme("colors.sidebar.hover");
70
+ }
71
+ }
72
+
73
+ &__scrollbar {
74
+ --scrollbar-color: theme("colors.darkBorder");
75
+
76
+ -ms-overflow-style: -ms-autohiding-scrollbar;
77
+ scrollbar-color: var(--scrollbar-color) transparent;
78
+ scrollbar-width: thin;
79
+
80
+ &::-webkit-scrollbar {
81
+ width: theme("spacing.2");
82
+ }
83
+
84
+ &::-webkit-scrollbar-track {
85
+ background: theme("colors.sidebar.highlight");
86
+ }
87
+
88
+ &::-webkit-scrollbar-thumb {
89
+ background-color: var(--scrollbar-color);
90
+ border-radius: 100%;
91
+ border: none;
92
+ }
93
+ }
94
+ }
package/utils/styles.css CHANGED
@@ -1,43 +1,6 @@
1
- .sidebar__nav {
2
- /* width */
3
- &::-webkit-scrollbar {
4
- width: 4px;
5
- }
6
-
7
- /* Track */
8
- &::-webkit-scrollbar-track {
9
- background: theme("colors.sidebar.background");
10
- }
11
-
12
- /* Handle */
13
- &::-webkit-scrollbar-thumb {
14
- background: theme("colors.sidebar.highlight");
15
- }
16
-
17
- /* Handle on hover */
18
- &::-webkit-scrollbar-thumb:hover {
19
- background: theme("colors.sidebar.hover");
20
- }
21
- }
22
-
23
- .sidebar__scrollbar {
24
- --scrollbar-color: theme("colors.darkBorder");
25
-
26
- -ms-overflow-style: -ms-autohiding-scrollbar;
27
- scrollbar-color: var(--scrollbar-color) transparent;
28
- scrollbar-width: thin;
29
-
30
- &::-webkit-scrollbar {
31
- @apply w-2;
32
- }
33
-
34
- &::-webkit-scrollbar-track {
35
- background: theme("colors.sidebar.highlight");
36
- }
37
-
38
- &::-webkit-scrollbar-thumb {
39
- @apply rounded-full border-none;
40
-
41
- background-color: var(--scrollbar-color);
42
- }
43
- }
1
+ @import url("./../ui/styles/layout.css");
2
+ @import url("./../ui/styles/login-layout.css");
3
+ @import url("./../ui/styles/sidebar.css");
4
+ @import url("./../ui/styles/mobile-bar.css");
5
+ @import url("./../ui/styles/menu.css");
6
+ @import url("./../ui/styles/breadcrumbs.css");