@uxf/cms 10.0.0-beta.7 → 10.0.0-beta.70

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 (45) hide show
  1. package/lib/layout/breadcrumbs.js +3 -3
  2. package/lib/layout/layout-container.js +3 -3
  3. package/lib/layout/layout.js +22 -21
  4. package/lib/layout/sidebar.js +33 -19
  5. package/lib/layout/types.d.ts +1 -0
  6. package/lib/login-layout/login-layout.js +6 -8
  7. package/lib/menu/factory.d.ts +4 -4
  8. package/lib/menu/factory.js +6 -4
  9. package/lib/menu/mobile-bar.d.ts +4 -2
  10. package/lib/menu/mobile-bar.js +8 -10
  11. package/lib/menu/model.d.ts +6 -2
  12. package/lib/menu/model.js +7 -0
  13. package/lib/menu/ui/list-item/list-item.js +16 -15
  14. package/lib/menu/ui/list-item/types.d.ts +5 -4
  15. package/lib/menu/ui/menu-custom-item.js +2 -4
  16. package/lib/menu/ui/menu-item.js +10 -11
  17. package/lib/menu/ui/menu-super-section-item.js +3 -5
  18. package/lib/menu/ui/menu.js +1 -1
  19. package/lib/menu/ui/sub-menu/{sub-menuItem.js → sub-menu-item.js} +4 -6
  20. package/lib/menu/ui/sub-menu/sub-menu-mobile.js +4 -4
  21. package/lib/menu/ui/sub-menu/sub-menu.js +4 -4
  22. package/lib/menu/ui/sub-menu/use-sub-menu.d.ts +2 -2
  23. package/lib/menu/ui/sub-menu/use-sub-menu.js +1 -1
  24. package/lib/menu/ui/user-menu.js +12 -12
  25. package/package.json +15 -38
  26. package/pages/grid-page/grid-page.js +2 -2
  27. package/ui/avatar/avatar.d.ts +11 -0
  28. package/ui/avatar/avatar.js +47 -0
  29. package/ui/avatar/get-avatar-user-letters.d.ts +1 -0
  30. package/ui/avatar/get-avatar-user-letters.js +17 -0
  31. package/ui/avatar/index.d.ts +3 -0
  32. package/ui/avatar/index.js +5 -0
  33. package/ui/avatar/theme.d.ts +11 -0
  34. package/ui/avatar/theme.js +2 -0
  35. package/ui/styles/avatar.css +50 -0
  36. package/ui/styles/breadcrumbs.css +30 -0
  37. package/ui/styles/layout.css +132 -0
  38. package/ui/styles/login-layout.css +52 -0
  39. package/ui/styles/menu.css +217 -0
  40. package/ui/styles/mobile-bar.css +34 -0
  41. package/ui/styles/sidebar.css +108 -0
  42. package/utils/icons.config.js +1 -1
  43. package/utils/styles.css +7 -43
  44. package/utils/tailwind.config.js +5 -0
  45. /package/lib/menu/ui/sub-menu/{sub-menuItem.d.ts → sub-menu-item.d.ts} +0 -0
@@ -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
  });
@@ -10,10 +10,10 @@ export declare function useSubMenu(options: SubMenuOptions): {
10
10
  y: number;
11
11
  update: () => void;
12
12
  context: {
13
- placement: import("@floating-ui/react").Placement;
14
- strategy: import("@floating-ui/react").Strategy;
15
13
  x: number;
16
14
  y: number;
15
+ placement: import("@floating-ui/react").Placement;
16
+ strategy: import("@floating-ui/react").Strategy;
17
17
  middlewareData: import("@floating-ui/react").MiddlewareData;
18
18
  update: () => void;
19
19
  isPositioned: boolean;
@@ -7,7 +7,7 @@ function useSubMenu(options) {
7
7
  const [open, setOpen] = (0, react_1.useState)(false);
8
8
  const data = (0, react_2.useFloating)({
9
9
  middleware: [
10
- (0, react_2.offset)(options.isMobile ? 24 : 16),
10
+ (0, react_2.offset)(options.isMobile ? 12 : 16),
11
11
  (0, react_2.flip)(),
12
12
  (0, react_2.shift)({ padding: 8 }),
13
13
  (0, react_2.size)({
@@ -25,27 +25,27 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.UserMenu = void 0;
27
27
  const react_1 = __importStar(require("react"));
28
- const avatar_1 = require("@uxf/ui/avatar");
29
28
  const icon_1 = require("@uxf/ui/icon");
30
29
  const list_item_1 = require("./list-item");
30
+ const classes_1 = require("@uxf/core/constants/classes");
31
+ const avatar_1 = require("../../../ui/avatar");
32
+ const get_avatar_user_letters_1 = require("../../../ui/avatar/get-avatar-user-letters");
31
33
  const Component = (props) => {
32
34
  const [isSubmenuOpen, setIsSubmenuOpen] = (0, react_1.useState)(false);
33
35
  const hasSubmenu = props.submenu.length > 0;
34
36
  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 })))))));
37
+ return (react_1.default.createElement("div", { className: `uxf-cms-user-menu ${isSubmenuOpen ? classes_1.CLASSES.IS_OPEN : ""}` },
38
+ react_1.default.createElement("button", { className: "uxf-cms-user-menu__button", onClick: toggle },
39
+ react_1.default.createElement(avatar_1.Avatar, { className: "uxf-cms-user-menu__avatar", letters: (0, get_avatar_user_letters_1.getAvatarUserLetters)(props.name), size: "sm", src: props.avatar, variant: "rounded" }),
40
+ react_1.default.createElement("div", { className: "uxf-cms-user-menu__label-wrapper" },
41
+ react_1.default.createElement("div", { className: "uxf-cms-user-menu__name" }, props.name),
42
+ react_1.default.createElement("div", { className: "uxf-cms-user-menu__roles" }, props.roles)),
43
+ 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 : ""}` })))),
44
+ 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, { endElement: item.endElement, href: item.url, label: item.title, route: item.route, params: item.routeParams, icon: item.icon, key: index })))))));
43
45
  };
44
46
  const UserMenu = (props) => {
45
47
  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);
48
+ const userMenu = props.menu.find((item) => !!item.userMenuData);
49
49
  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
50
  };
51
51
  exports.UserMenu = UserMenu;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/cms",
3
- "version": "10.0.0-beta.7",
3
+ "version": "10.0.0-beta.70",
4
4
  "description": "UXF Cms",
5
5
  "author": "UXFans <dev@uxf.cz>",
6
6
  "homepage": "https://gitlab.com/uxf-npm/cms#readme",
@@ -40,52 +40,29 @@
40
40
  "@types/qs": "^6.9.7",
41
41
  "@types/react": "18.2.6",
42
42
  "@types/react-dom": "18.2.4",
43
- "@uxf/core": "^4.5.1",
44
- "@uxf/data-grid": "10.0.0-beta.4",
45
- "@uxf/eslint-config": "^1.3.0",
46
- "@uxf/form": "10.0.0-beta.4",
47
- "@uxf/icons-generator": "^1.3.0",
48
- "@uxf/router": "10.0.0-beta.3",
49
- "@uxf/ui": "10.0.0-beta.4",
50
- "@uxf/wysiwyg": "2.0.0-beta.28",
51
- "autoprefixer": "^10.4.14",
43
+ "@uxf/core": "10.0.0-beta.37",
44
+ "@uxf/data-grid": "10.0.0-beta.70",
45
+ "@uxf/form": "10.0.0-beta.69",
46
+ "@uxf/icons-generator": "10.0.0-beta.19",
47
+ "@uxf/router": "10.0.0-beta.15",
48
+ "@uxf/ui": "10.0.0-beta.69",
49
+ "@uxf/wysiwyg": "10.0.0-beta.69",
52
50
  "axios": "^1.4.0",
53
51
  "axios-hooks": "^4.0.0",
54
- "concurrently": "^8.1.0",
55
- "coordinate-parser": "^1.0.7",
52
+ "coordinate-parser": "1.0.7",
56
53
  "dayjs": "^1.11.7",
57
- "eslint": "^8.41.0",
58
- "eslint-plugin-tailwindcss": "3.12.1",
59
- "express": "^4.18.2",
60
- "express-http-proxy": "^1.6.3",
61
- "http-proxy-middleware": "^2.0.6",
62
54
  "next": "^13.4.4",
63
55
  "path": "^0.12.7",
64
- "postcss": "^8.4.24",
65
- "postcss-focus-visible": "^8.0.2",
66
- "postcss-import": "^15.1.0",
67
- "postcss-pxtorem": "^6.0.0",
68
- "postcss-syntax": "^0.36.2",
69
- "prettier": "^2.8.8",
70
- "prettier-plugin-tailwindcss": "^0.3.0",
71
56
  "qs": "^6.11.2",
72
57
  "react": "^18.2.0",
73
- "react-dom": "^18.2.0",
74
- "redux-devtools-extension": "^2.13.9",
75
- "stylelint": "^15.6.2",
76
- "stylelint-config-standard": "^33.0.0",
77
- "stylelint-config-tailwindcss": "^0.0.7",
78
- "stylelint-use-nesting": "^4.1.0",
79
- "tailwindcss": "^3.3.2",
80
- "ts-node": "^10.9.1",
81
- "typescript": "^5.0.4"
58
+ "react-dom": "^18.2.0"
82
59
  },
83
60
  "peerDependencies": {
84
- "@uxf/core": ">= 4.5.1",
85
- "@uxf/data-grid": "10.0.0-beta.7",
86
- "@uxf/form": "10.0.0-beta.7",
87
- "@uxf/ui": "10.0.0-beta.7",
88
- "@uxf/wysiwyg": "2.0.0-beta.28",
61
+ "@uxf/core": "10.0.0-beta.37",
62
+ "@uxf/data-grid": "10.0.0-beta.70",
63
+ "@uxf/form": "10.0.0-beta.69",
64
+ "@uxf/ui": "10.0.0-beta.69",
65
+ "@uxf/wysiwyg": "10.0.0-beta.69",
89
66
  "axios": "^1.4.0",
90
67
  "axios-hooks": "^4.0.0",
91
68
  "dayjs": "^1.11.7",
@@ -84,12 +84,12 @@ const GridPageComponent = (props) => {
84
84
  ].filter(Boolean);
85
85
  return (react_1.default.createElement(Layout, { key: entityAlias, title: (_a = title !== null && title !== void 0 ? title : metaSchema === null || metaSchema === void 0 ? void 0 : metaSchema.title) !== null && _a !== void 0 ? _a : "" },
86
86
  react_1.default.createElement("div", { className: "mb-10" },
87
- react_1.default.createElement(tailwindui_1.DataGrid, { noBorder: true, callbackRef: callbackRef, schema: gridSchema, initialState: query.filter ? (0, router_1.queryParamToString)(query.filter) : undefined, title: title !== null && title !== void 0 ? title : metaSchema === null || metaSchema === void 0 ? void 0 : metaSchema.title, gridName: entityAlias, loader: loader !== null && loader !== void 0 ? loader : universalLoader, ...hiddenColumnProps, onOpen: onOpen && ((row) => onOpen(entityAlias, row, actionsBag)), getOpenUrl: getOpenUrl && ((row) => getOpenUrl(entityAlias, row)), onEdit: onEdit && ((row) => onEdit(entityAlias, row, actionsBag)), getEditUrl: getEditUrl && ((row) => getEditUrl(entityAlias, row)), onRemove: onRemove && ((row) => onRemove(entityAlias, row, actionsBag)), rowHeight: rowHeight, defaultConfig: defaultConfig, ui: dataGridUi, selectedRows: selectable ? selectedRows : undefined, onChangeSelectedRows: selectable ? setSelectedRows : undefined, customActions: cActions, mode: (_b = uiContextValues === null || uiContextValues === void 0 ? void 0 : uiContextValues.colorScheme.getUserSettings()) !== null && _b !== void 0 ? _b : "light" }))));
87
+ react_1.default.createElement(tailwindui_1.DataGrid, { noBorder: true, callbackRef: callbackRef, schema: gridSchema, initialState: query.filter ? (0, router_1.queryParamToString)(query.filter) : undefined, title: title !== null && title !== void 0 ? title : metaSchema === null || metaSchema === void 0 ? void 0 : metaSchema.title, gridName: entityAlias, loader: loader !== null && loader !== void 0 ? loader : universalLoader, ...hiddenColumnProps, onOpen: onOpen && ((row) => onOpen(entityAlias, row, actionsBag)), getOpenUrl: getOpenUrl && ((row) => getOpenUrl(entityAlias, row)), onEdit: onEdit && ((row) => onEdit(entityAlias, row, actionsBag)), getEditUrl: getEditUrl && ((row) => getEditUrl(entityAlias, row)), onRemove: onRemove && ((row) => onRemove(entityAlias, row, actionsBag)), rowHeight: rowHeight, defaultConfig: defaultConfig, ui: dataGridUi, selectedRows: selectable ? selectedRows : undefined, onChangeSelectedRows: selectable ? setSelectedRows : undefined, customActions: cActions, mode: (_b = uiContextValues === null || uiContextValues === void 0 ? void 0 : uiContextValues.colorScheme.getUserSettings()) !== null && _b !== void 0 ? _b : "light", onCsvDownload: (r) => window.open(`/api/cms/datagrid/export/${entityAlias}?${(0, qs_1.stringify)(r)}`) }))));
88
88
  };
89
89
  GridPageComponent.displayName = "GridPageComponent";
90
90
  const GridPage = (config) => {
91
91
  const Component = (props) => {
92
- return (react_1.default.createElement(GridPageComponent, { ...props, title: config.title, loader: config.loader, onEdit: config.onEdit, getEditUrl: config.getEditUrl, onAdd: config.onAdd, onRemove: config.onRemove, onOpen: config.onOpen, getOpenUrl: config.getOpenUrl, rowHeight: config.rowHeight, defaultConfig: config.defaultConfig, AddIcon: config.AddIcon, onAddTitle: config.onAddTitle, ui: config.ui, selectable: config.selectable }));
92
+ return (react_1.default.createElement(GridPageComponent, { ...props, AddIcon: config.AddIcon, customActions: config.customActions, defaultConfig: config.defaultConfig, getEditUrl: config.getEditUrl, getOpenUrl: config.getOpenUrl, loader: config.loader, onAdd: config.onAdd, onAddTitle: config.onAddTitle, onEdit: config.onEdit, onOpen: config.onOpen, onRemove: config.onRemove, rowHeight: config.rowHeight, selectable: config.selectable, title: config.title, ui: config.ui }));
93
93
  };
94
94
  Component.getInitialProps = async (ctx) => {
95
95
  const entityAlias = typeof config.entityAlias === "function" ? config.entityAlias(ctx) : config.entityAlias;
@@ -0,0 +1,11 @@
1
+ import { ImageSource } from "@uxf/core/utils/resizer";
2
+ import React, { HTMLAttributes } from "react";
3
+ import { AvatarSize, AvatarVariant } from "./theme";
4
+ export interface AvatarProps extends Omit<HTMLAttributes<HTMLDivElement>, "src"> {
5
+ alt?: string;
6
+ size?: AvatarSize;
7
+ src?: ImageSource | null;
8
+ letters?: string;
9
+ variant?: AvatarVariant;
10
+ }
11
+ export declare const Avatar: React.MemoExoticComponent<React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLDivElement>>>;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Avatar = void 0;
27
+ const cx_1 = require("@uxf/core/utils/cx");
28
+ const raster_image_1 = require("@uxf/ui/raster-image");
29
+ const react_1 = __importStar(require("react"));
30
+ const AVATAR_SIZES = {
31
+ sm: 40,
32
+ default: 88,
33
+ lg: 120,
34
+ };
35
+ const Component = (props, ref) => {
36
+ // eslint-disable-next-line react/destructuring-assignment
37
+ const { alt, className, size = "default", src, letters, variant = "default", ...restProps } = props;
38
+ const avatarClassName = (0, cx_1.cx)("cms-avatar", `cms-avatar--size-${size}`, `cms-avatar--variant-${variant}`, className);
39
+ const imgAlt = alt !== null && alt !== void 0 ? alt : "";
40
+ if (src) {
41
+ return (react_1.default.createElement("span", { className: avatarClassName, ref: ref, ...restProps },
42
+ react_1.default.createElement(raster_image_1.RasterImage, { alt: imgAlt, className: "cms-avatar__image", height: AVATAR_SIZES[size], loading: "lazy", mode: "cover", src: src, width: AVATAR_SIZES[size] })));
43
+ }
44
+ return (react_1.default.createElement("div", { className: avatarClassName, ...restProps }, letters));
45
+ };
46
+ exports.Avatar = (0, react_1.memo)((0, react_1.forwardRef)(Component));
47
+ exports.Avatar.displayName = "CmsAvatar";
@@ -0,0 +1 @@
1
+ export declare function getAvatarUserLetters(name: string): string;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAvatarUserLetters = void 0;
4
+ function getAvatarUserLetters(name) {
5
+ let letters = name
6
+ .split(" ")
7
+ .slice(0, 2)
8
+ .filter((i) => i);
9
+ if (letters.length === 1) {
10
+ letters = letters[0].slice(0, 2);
11
+ }
12
+ else {
13
+ letters = letters.map((i) => i.slice(0, 1)).join("");
14
+ }
15
+ return letters.toUpperCase();
16
+ }
17
+ exports.getAvatarUserLetters = getAvatarUserLetters;
@@ -0,0 +1,3 @@
1
+ export { Avatar } from "./avatar";
2
+ export type { AvatarProps } from "./avatar";
3
+ export type { AvatarSize, AvatarVariant } from "./theme";
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Avatar = void 0;
4
+ var avatar_1 = require("./avatar");
5
+ Object.defineProperty(exports, "Avatar", { enumerable: true, get: function () { return avatar_1.Avatar; } });
@@ -0,0 +1,11 @@
1
+ export interface AvatarVariants {
2
+ default: true;
3
+ rounded: true;
4
+ }
5
+ export type AvatarVariant = keyof AvatarVariants;
6
+ export interface AvatarSizes {
7
+ sm: true;
8
+ default: true;
9
+ lg: true;
10
+ }
11
+ export type AvatarSize = keyof AvatarSizes;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,50 @@
1
+ .cms-avatar {
2
+ --bg-color: theme("colors.primary.DEFAULT");
3
+
4
+ align-items: center;
5
+ background-color: var(--bg-color);
6
+ background-position: center;
7
+ background-repeat: no-repeat;
8
+ background-size: cover;
9
+ border-radius: var(--border-radius);
10
+ color: theme("colors.white");
11
+ display: inline-flex;
12
+ flex-shrink: 0;
13
+ height: var(--size);
14
+ justify-content: center;
15
+ position: relative;
16
+ text-transform: uppercase;
17
+ width: var(--size);
18
+
19
+ &__image {
20
+ border-radius: inherit;
21
+ height: 100%;
22
+ width: 100%;
23
+ }
24
+
25
+ .uxf-raster-image__img {
26
+ border-radius: inherit;
27
+ }
28
+
29
+ &--variant-rounded {
30
+ --border-radius: 999px;
31
+ }
32
+
33
+ &--size-sm {
34
+ --size: theme("avatarSize.sm");
35
+
36
+ font-size: theme("fontSize.body");
37
+ }
38
+
39
+ &--size-default {
40
+ --size: theme("avatarSize.default");
41
+
42
+ font-size: 20px;
43
+ }
44
+
45
+ &--size-lg {
46
+ --size: theme("avatarSize.lg");
47
+
48
+ font-size: theme("fontSize.desktopH3");
49
+ }
50
+ }
@@ -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
+ display: inline;
20
+ margin-right: theme("spacing.2");
21
+ }
22
+
23
+ &__link {
24
+ @apply transition-colors;
25
+
26
+ &:hover {
27
+ color: theme("colors.lightHigh");
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,132 @@
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
+ @screen md {
26
+ margin-left: var(--drawer-width);
27
+ padding-bottom: 0;
28
+ width: calc(100% - var(--drawer-width));
29
+ }
30
+ }
31
+
32
+ &__loading {
33
+ align-items: center;
34
+ display: flex;
35
+ flex-direction: column;
36
+ height: theme("spacing.96");
37
+ justify-content: center;
38
+
39
+ &-inner {
40
+ text-align: center;
41
+ }
42
+
43
+ &-text {
44
+ margin-top: theme("spacing.2");
45
+ }
46
+ }
47
+
48
+ &__header {
49
+ :root .light & {
50
+ background-color: theme("colors.white");
51
+ }
52
+
53
+ :root .dark & {
54
+ background-color: theme("colors.gray.950");
55
+ }
56
+
57
+ &--sticky {
58
+ box-shadow: theme("boxShadow.md");
59
+ position: sticky;
60
+ top: 0;
61
+ z-index: 10;
62
+
63
+ :root .light & {
64
+ background-color: theme("colors.white");
65
+ }
66
+
67
+ :root .dark & {
68
+ background-color: theme("colors.gray.950");
69
+ }
70
+ }
71
+ }
72
+
73
+ &__toolbar {
74
+ align-items: center;
75
+ background-color: theme("colors.sidebar.background");
76
+ display: flex;
77
+ height: theme("spacing.12");
78
+ justify-content: flex-end;
79
+ padding: 0 theme("spacing.6");
80
+
81
+ :root .light & {
82
+ color: theme("colors.darkMedium");
83
+ }
84
+
85
+ :root .dark & {
86
+ color: theme("colors.lightMedium");
87
+ }
88
+ }
89
+
90
+ &__container {
91
+ margin: 0 auto;
92
+ padding: 0 theme("spacing.4");
93
+
94
+ @screen md {
95
+ padding-left: theme("spacing.10");
96
+ padding-right: theme("spacing.10");
97
+ }
98
+
99
+ &--basic {
100
+ padding-bottom: theme("spacing.9");
101
+ padding-top: theme("spacing.12");
102
+ }
103
+
104
+ &--narrow {
105
+ max-width: 49.25rem;
106
+ }
107
+
108
+ &--wide {
109
+ max-width: 64rem;
110
+ }
111
+ }
112
+
113
+ &__title-wrapper {
114
+ align-items: center;
115
+ display: flex;
116
+ justify-content: space-between;
117
+ }
118
+
119
+ &__avatar-title-wrapper {
120
+ align-items: center;
121
+ display: flex;
122
+ gap: 20px;
123
+ }
124
+
125
+ &__breadcrumbs-title-wrapper {
126
+ width: 100%;
127
+ }
128
+
129
+ &__title {
130
+ @apply uxf-typo-h4;
131
+ }
132
+ }
@@ -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
+ }