@uxf/cms 10.0.0-beta.68 → 10.0.0-beta.69
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/menu/mobile-bar.js +3 -3
- package/lib/menu/model.d.ts +2 -1
- package/lib/menu/ui/user-menu.js +3 -2
- package/package.json +9 -9
- 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/utils/styles.css +1 -0
- package/utils/tailwind.config.js +5 -0
package/lib/menu/mobile-bar.js
CHANGED
|
@@ -9,8 +9,9 @@ const link_1 = __importDefault(require("next/link"));
|
|
|
9
9
|
const icon_1 = require("@uxf/ui/icon");
|
|
10
10
|
const sub_menu_mobile_1 = require("./ui/sub-menu/sub-menu-mobile");
|
|
11
11
|
const config_1 = require("../../config");
|
|
12
|
-
const avatar_1 = require("
|
|
12
|
+
const avatar_1 = require("../../ui/avatar");
|
|
13
13
|
const cx_1 = require("@uxf/core/utils/cx");
|
|
14
|
+
const get_avatar_user_letters_1 = require("../../ui/avatar/get-avatar-user-letters");
|
|
14
15
|
const MobileBar = (props) => {
|
|
15
16
|
const useLoggedUser = config_1.container.get("useLoggedUser");
|
|
16
17
|
const loggedUser = useLoggedUser();
|
|
@@ -36,8 +37,7 @@ const MobileBar = (props) => {
|
|
|
36
37
|
var _a, _b, _c, _d;
|
|
37
38
|
if (item.children.length) {
|
|
38
39
|
return (react_1.default.createElement(sub_menu_mobile_1.SubMenuMobile, { key: index, content: item.children, title: item.title },
|
|
39
|
-
react_1.default.createElement("button", { type: "button", className: buttonClassName }, item.userMenuData ? (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,
|
|
40
|
+
react_1.default.createElement("button", { type: "button", className: buttonClassName }, item.userMenuData ? (react_1.default.createElement(avatar_1.Avatar, { className: "uxf-cms-mobile-bar__avatar", letters: (0, get_avatar_user_letters_1.getAvatarUserLetters)(item.userMenuData.name), size: "sm", src: item.userMenuData.avatar, variant: "rounded" })) : (react_1.default.createElement(react_1.default.Fragment, null,
|
|
41
41
|
react_1.default.createElement(icon_1.Icon, { name: (_a = item.icon) !== null && _a !== void 0 ? _a : "", size: 24 }),
|
|
42
42
|
react_1.default.createElement(icon_1.Icon, { name: "caretDown", size: 16, className: "uxf-cms-mobile-bar__caret" }))))));
|
|
43
43
|
}
|
package/lib/menu/model.d.ts
CHANGED
|
@@ -3,9 +3,10 @@ import { Resolver } from "./types";
|
|
|
3
3
|
import { NextRouter } from "next/router";
|
|
4
4
|
import { IconName } from "@uxf/ui/icon/types";
|
|
5
5
|
import { ReactElement, ReactNode } from "react";
|
|
6
|
+
import { ImageSource } from "@uxf/core/utils/resizer";
|
|
6
7
|
type ItemType = "custom" | "super-section" | "section" | "link";
|
|
7
8
|
export type UserMenuData = {
|
|
8
|
-
avatar?:
|
|
9
|
+
avatar?: ImageSource;
|
|
9
10
|
name: string;
|
|
10
11
|
roles: string;
|
|
11
12
|
};
|
package/lib/menu/ui/user-menu.js
CHANGED
|
@@ -25,17 +25,18 @@ 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");
|
|
31
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");
|
|
32
33
|
const Component = (props) => {
|
|
33
34
|
const [isSubmenuOpen, setIsSubmenuOpen] = (0, react_1.useState)(false);
|
|
34
35
|
const hasSubmenu = props.submenu.length > 0;
|
|
35
36
|
const toggle = hasSubmenu ? () => setIsSubmenuOpen((prev) => !prev) : undefined;
|
|
36
37
|
return (react_1.default.createElement("div", { className: `uxf-cms-user-menu ${isSubmenuOpen ? classes_1.CLASSES.IS_OPEN : ""}` },
|
|
37
38
|
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(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" }),
|
|
39
40
|
react_1.default.createElement("div", { className: "uxf-cms-user-menu__label-wrapper" },
|
|
40
41
|
react_1.default.createElement("div", { className: "uxf-cms-user-menu__name" }, props.name),
|
|
41
42
|
react_1.default.createElement("div", { className: "uxf-cms-user-menu__roles" }, props.roles)),
|
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.69",
|
|
4
4
|
"description": "UXF Cms",
|
|
5
5
|
"author": "UXFans <dev@uxf.cz>",
|
|
6
6
|
"homepage": "https://gitlab.com/uxf-npm/cms#readme",
|
|
@@ -41,12 +41,12 @@
|
|
|
41
41
|
"@types/react": "18.2.6",
|
|
42
42
|
"@types/react-dom": "18.2.4",
|
|
43
43
|
"@uxf/core": "10.0.0-beta.37",
|
|
44
|
-
"@uxf/data-grid": "10.0.0-beta.
|
|
45
|
-
"@uxf/form": "10.0.0-beta.
|
|
44
|
+
"@uxf/data-grid": "10.0.0-beta.69",
|
|
45
|
+
"@uxf/form": "10.0.0-beta.69",
|
|
46
46
|
"@uxf/icons-generator": "10.0.0-beta.19",
|
|
47
47
|
"@uxf/router": "10.0.0-beta.15",
|
|
48
|
-
"@uxf/ui": "10.0.0-beta.
|
|
49
|
-
"@uxf/wysiwyg": "10.0.0-beta.
|
|
48
|
+
"@uxf/ui": "10.0.0-beta.69",
|
|
49
|
+
"@uxf/wysiwyg": "10.0.0-beta.69",
|
|
50
50
|
"axios": "^1.4.0",
|
|
51
51
|
"axios-hooks": "^4.0.0",
|
|
52
52
|
"coordinate-parser": "1.0.7",
|
|
@@ -59,10 +59,10 @@
|
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|
|
61
61
|
"@uxf/core": "10.0.0-beta.37",
|
|
62
|
-
"@uxf/data-grid": "10.0.0-beta.
|
|
63
|
-
"@uxf/form": "10.0.0-beta.
|
|
64
|
-
"@uxf/ui": "10.0.0-beta.
|
|
65
|
-
"@uxf/wysiwyg": "10.0.0-beta.
|
|
62
|
+
"@uxf/data-grid": "10.0.0-beta.69",
|
|
63
|
+
"@uxf/form": "10.0.0-beta.69",
|
|
64
|
+
"@uxf/ui": "10.0.0-beta.69",
|
|
65
|
+
"@uxf/wysiwyg": "10.0.0-beta.69",
|
|
66
66
|
"axios": "^1.4.0",
|
|
67
67
|
"axios-hooks": "^4.0.0",
|
|
68
68
|
"dayjs": "^1.11.7",
|
|
@@ -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
|
+
}
|
package/utils/styles.css
CHANGED
package/utils/tailwind.config.js
CHANGED