@uxf/cms 10.0.0-beta.67 → 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