@uxf/cms 10.0.0-beta.7 → 10.0.0-beta.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/layout/breadcrumbs.js +3 -3
- package/lib/layout/layout-container.js +3 -3
- package/lib/layout/layout.js +22 -21
- package/lib/layout/sidebar.js +33 -19
- package/lib/layout/types.d.ts +1 -0
- package/lib/login-layout/login-layout.js +6 -8
- package/lib/menu/factory.d.ts +4 -4
- package/lib/menu/factory.js +6 -4
- package/lib/menu/mobile-bar.d.ts +4 -2
- package/lib/menu/mobile-bar.js +8 -10
- package/lib/menu/model.d.ts +6 -2
- package/lib/menu/model.js +7 -0
- package/lib/menu/ui/list-item/list-item.js +16 -15
- package/lib/menu/ui/list-item/types.d.ts +5 -4
- package/lib/menu/ui/menu-custom-item.js +2 -4
- package/lib/menu/ui/menu-item.js +10 -11
- package/lib/menu/ui/menu-super-section-item.js +3 -5
- package/lib/menu/ui/menu.js +1 -1
- package/lib/menu/ui/sub-menu/{sub-menuItem.js → sub-menu-item.js} +4 -6
- package/lib/menu/ui/sub-menu/sub-menu-mobile.js +4 -4
- package/lib/menu/ui/sub-menu/sub-menu.js +4 -4
- package/lib/menu/ui/sub-menu/use-sub-menu.d.ts +2 -2
- package/lib/menu/ui/sub-menu/use-sub-menu.js +1 -1
- package/lib/menu/ui/user-menu.js +12 -12
- package/package.json +15 -38
- package/pages/grid-page/grid-page.js +2 -2
- package/ui/avatar/avatar.d.ts +11 -0
- package/ui/avatar/avatar.js +47 -0
- package/ui/avatar/get-avatar-user-letters.d.ts +1 -0
- package/ui/avatar/get-avatar-user-letters.js +17 -0
- package/ui/avatar/index.d.ts +3 -0
- package/ui/avatar/index.js +5 -0
- package/ui/avatar/theme.d.ts +11 -0
- package/ui/avatar/theme.js +2 -0
- package/ui/styles/avatar.css +50 -0
- package/ui/styles/breadcrumbs.css +30 -0
- package/ui/styles/layout.css +132 -0
- package/ui/styles/login-layout.css +52 -0
- package/ui/styles/menu.css +217 -0
- package/ui/styles/mobile-bar.css +34 -0
- package/ui/styles/sidebar.css +108 -0
- package/utils/icons.config.js +1 -1
- package/utils/styles.css +7 -43
- package/utils/tailwind.config.js +5 -0
- /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
|
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: "
|
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: "
|
45
|
-
}) }, content.map((item, index) => (react_1.default.createElement(
|
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 ?
|
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)({
|
package/lib/menu/ui/user-menu.js
CHANGED
@@ -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:
|
36
|
-
react_1.default.createElement("button", { className: "
|
37
|
-
react_1.default.createElement(avatar_1.Avatar, { className: "
|
38
|
-
react_1.default.createElement("div", { className: "
|
39
|
-
react_1.default.createElement("div", { className: "uxf-
|
40
|
-
react_1.default.createElement("div", { className: "uxf-
|
41
|
-
react_1.default.createElement("div", { className: "
|
42
|
-
isSubmenuOpen && (react_1.default.createElement("div", { className: "
|
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
|
-
|
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.
|
3
|
+
"version": "10.0.0-beta.71",
|
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": "
|
44
|
-
"@uxf/data-grid": "10.0.0-beta.
|
45
|
-
"@uxf/
|
46
|
-
"@uxf/
|
47
|
-
"@uxf/
|
48
|
-
"@uxf/
|
49
|
-
"@uxf/
|
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.71",
|
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
|
-
"
|
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": "
|
85
|
-
"@uxf/data-grid": "10.0.0-beta.
|
86
|
-
"@uxf/form": "10.0.0-beta.
|
87
|
-
"@uxf/ui": "10.0.0-beta.
|
88
|
-
"@uxf/wysiwyg": "
|
61
|
+
"@uxf/core": "10.0.0-beta.37",
|
62
|
+
"@uxf/data-grid": "10.0.0-beta.71",
|
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,
|
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,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
|
+
}
|