@lobehub/ui 2.7.5 → 2.8.1
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/es/GroupAvatar/GroupAvatar.d.ts +4 -0
- package/es/GroupAvatar/GroupAvatar.js +77 -0
- package/es/GroupAvatar/index.d.ts +2 -0
- package/es/GroupAvatar/index.js +1 -0
- package/es/GroupAvatar/style.d.ts +3 -0
- package/es/GroupAvatar/style.js +9 -0
- package/es/GroupAvatar/type.d.ts +13 -0
- package/es/GroupAvatar/type.js +1 -0
- package/es/Text/Text.js +5 -2
- package/es/Text/type.d.ts +1 -0
- package/es/index.d.ts +1 -0
- package/es/index.js +1 -0
- package/es/utils/smoothCorners.d.ts +39 -0
- package/es/utils/smoothCorners.js +112 -0
- package/package.json +14 -14
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
var _excluded = ["className", "style", "avatars", "size", "cornerShape", "avatarShape"];
|
|
5
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
7
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
9
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
10
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
11
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
12
|
+
import { memo, useMemo } from 'react';
|
|
13
|
+
import Avatar from "../Avatar";
|
|
14
|
+
import Block from "../Block";
|
|
15
|
+
import Grid from "../Grid";
|
|
16
|
+
import { getSmoothCornersMaskStyle } from "../utils/smoothCorners";
|
|
17
|
+
import { useStyles } from "./style";
|
|
18
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
19
|
+
var GroupAvatar = /*#__PURE__*/memo(function (_ref) {
|
|
20
|
+
var className = _ref.className,
|
|
21
|
+
style = _ref.style,
|
|
22
|
+
_ref$avatars = _ref.avatars,
|
|
23
|
+
avatars = _ref$avatars === void 0 ? [] : _ref$avatars,
|
|
24
|
+
_ref$size = _ref.size,
|
|
25
|
+
size = _ref$size === void 0 ? 32 : _ref$size,
|
|
26
|
+
_ref$cornerShape = _ref.cornerShape,
|
|
27
|
+
cornerShape = _ref$cornerShape === void 0 ? 'squircle' : _ref$cornerShape,
|
|
28
|
+
_ref$avatarShape = _ref.avatarShape,
|
|
29
|
+
avatarShape = _ref$avatarShape === void 0 ? 'circle' : _ref$avatarShape,
|
|
30
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
31
|
+
var _useStyles = useStyles(),
|
|
32
|
+
cx = _useStyles.cx,
|
|
33
|
+
styles = _useStyles.styles;
|
|
34
|
+
var smoothCornersMask = useMemo(function () {
|
|
35
|
+
return getSmoothCornersMaskStyle(cornerShape);
|
|
36
|
+
}, [cornerShape]);
|
|
37
|
+
var calcSize = useMemo(function () {
|
|
38
|
+
var isCircle = cornerShape === 'circle';
|
|
39
|
+
var avatarSize = Math.floor(size / 2 * (isCircle ? 0.65 : 0.75));
|
|
40
|
+
var gapSize = Math.floor((size - avatarSize * 2) / (isCircle ? 6 : 4));
|
|
41
|
+
return {
|
|
42
|
+
avatarSize: avatarSize,
|
|
43
|
+
gapSize: gapSize,
|
|
44
|
+
gridWidth: avatarSize * 2 + gapSize,
|
|
45
|
+
maxItemWidth: avatarSize - 1
|
|
46
|
+
};
|
|
47
|
+
}, [size, cornerShape]);
|
|
48
|
+
return /*#__PURE__*/_jsx(Block, _objectSpread(_objectSpread({
|
|
49
|
+
align: 'center',
|
|
50
|
+
className: cx(styles.root, className),
|
|
51
|
+
height: size,
|
|
52
|
+
justify: 'center',
|
|
53
|
+
style: _objectSpread(_objectSpread({}, smoothCornersMask), style),
|
|
54
|
+
width: size
|
|
55
|
+
}, rest), {}, {
|
|
56
|
+
children: /*#__PURE__*/_jsx(Grid, {
|
|
57
|
+
gap: calcSize.gapSize,
|
|
58
|
+
maxItemWidth: calcSize.maxItemWidth,
|
|
59
|
+
rows: 2,
|
|
60
|
+
width: calcSize.gridWidth,
|
|
61
|
+
children: avatars === null || avatars === void 0 ? void 0 : avatars.slice(0, 4).map(function (item, index) {
|
|
62
|
+
if (typeof item === 'string') {
|
|
63
|
+
return /*#__PURE__*/_jsx(Avatar, {
|
|
64
|
+
avatar: item,
|
|
65
|
+
shape: avatarShape,
|
|
66
|
+
size: calcSize.avatarSize
|
|
67
|
+
}, index);
|
|
68
|
+
}
|
|
69
|
+
return /*#__PURE__*/_jsx(Avatar, _objectSpread(_objectSpread({}, item), {}, {
|
|
70
|
+
shape: avatarShape,
|
|
71
|
+
size: calcSize.avatarSize
|
|
72
|
+
}), index);
|
|
73
|
+
})
|
|
74
|
+
})
|
|
75
|
+
}));
|
|
76
|
+
});
|
|
77
|
+
export default GroupAvatar;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./GroupAvatar";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
var _templateObject;
|
|
2
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
3
|
+
import { createStyles } from 'antd-style';
|
|
4
|
+
export var useStyles = createStyles(function (_ref) {
|
|
5
|
+
var css = _ref.css;
|
|
6
|
+
return {
|
|
7
|
+
root: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n overflow: hidden;\n flex: none;\n\n /* Fallback for browsers without mask support */\n border-radius: 15%;\n\n /* Apply smooth corners mask with fallback */\n @supports (mask-image: url('data:image/svg+xml;base64,')) {\n border-radius: 0;\n\n /* The mask will be applied via inline style */\n }\n "])))
|
|
8
|
+
};
|
|
9
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Ref } from 'react';
|
|
2
|
+
import type { AvatarProps } from "../Avatar/type";
|
|
3
|
+
import type { BlockProps } from "../Block/type";
|
|
4
|
+
import type { SMOOTH_CORNER_MASKS } from "../utils/smoothCorners";
|
|
5
|
+
type AvatarItem = string | Omit<AvatarProps, 'size'>;
|
|
6
|
+
export interface GroupAvatarProps extends Omit<BlockProps, 'width' | 'height' | 'variant'> {
|
|
7
|
+
avatarShape?: AvatarProps['shape'];
|
|
8
|
+
avatars?: AvatarItem[];
|
|
9
|
+
cornerShape?: keyof typeof SMOOTH_CORNER_MASKS;
|
|
10
|
+
ref?: Ref<HTMLDivElement>;
|
|
11
|
+
size?: number;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/es/Text/Text.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
var _excluded = ["as", "className", "children", "style", "type", "disabled", "strong", "italic", "underline", "delete", "fontSize", "mark", "code", "color", "weight", "ellipsis"];
|
|
3
|
+
var _excluded = ["as", "align", "className", "children", "style", "type", "disabled", "strong", "italic", "underline", "delete", "fontSize", "mark", "code", "color", "weight", "ellipsis"];
|
|
4
4
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
5
5
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6
6
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -17,6 +17,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
17
17
|
var Text = /*#__PURE__*/memo(function (_ref) {
|
|
18
18
|
var _ref$as = _ref.as,
|
|
19
19
|
Container = _ref$as === void 0 ? 'div' : _ref$as,
|
|
20
|
+
align = _ref.align,
|
|
20
21
|
className = _ref.className,
|
|
21
22
|
children = _ref.children,
|
|
22
23
|
style = _ref.style,
|
|
@@ -83,7 +84,7 @@ var Text = /*#__PURE__*/memo(function (_ref) {
|
|
|
83
84
|
}
|
|
84
85
|
});
|
|
85
86
|
}, [styles]);
|
|
86
|
-
var textStyle = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, color && {
|
|
87
|
+
var textStyle = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, color && {
|
|
87
88
|
color: color
|
|
88
89
|
}), weight && {
|
|
89
90
|
fontWeight: weight
|
|
@@ -91,6 +92,8 @@ var Text = /*#__PURE__*/memo(function (_ref) {
|
|
|
91
92
|
WebkitLineClamp: ellipsis.rows
|
|
92
93
|
}), fontSize && {
|
|
93
94
|
fontSize: fontSize
|
|
95
|
+
}), align && {
|
|
96
|
+
textAlign: align
|
|
94
97
|
}), style);
|
|
95
98
|
var content = /*#__PURE__*/_jsx(Container, _objectSpread(_objectSpread({
|
|
96
99
|
className: cx(variants({
|
package/es/Text/type.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { ElementType, Ref } from 'react';
|
|
|
2
2
|
import type { TooltipProps } from "../Tooltip";
|
|
3
3
|
import { DivProps } from "../types";
|
|
4
4
|
export interface TextProps extends DivProps {
|
|
5
|
+
align?: 'left' | 'center' | 'right';
|
|
5
6
|
as?: ElementType;
|
|
6
7
|
code?: boolean;
|
|
7
8
|
color?: string;
|
package/es/index.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export { default as Footer, type FooterProps } from './Footer';
|
|
|
25
25
|
export { default as Form, FormGroup, type FormGroupItemType, type FormGroupProps, type FormInstance, FormItem, type FormItemProps, type FormProps, FormSubmitFooter, type FormSubmitFooterProps, FormTitle, type FormTitleProps, } from './Form';
|
|
26
26
|
export { default as FormModal, type FormModalProps } from './FormModal';
|
|
27
27
|
export { default as Grid, type GridProps } from './Grid';
|
|
28
|
+
export { default as GroupAvatar, type GroupAvatarProps } from './GroupAvatar';
|
|
28
29
|
export { default as GuideCard, type GuideCardProps } from './GuideCard';
|
|
29
30
|
export { default as Header, type HeaderProps } from './Header';
|
|
30
31
|
export { default as Highlighter, type HighlighterProps, highlighterThemes, SyntaxHighlighter, type SyntaxHighlighterProps, } from './Highlighter';
|
package/es/index.js
CHANGED
|
@@ -25,6 +25,7 @@ export { default as Footer } from "./Footer";
|
|
|
25
25
|
export { default as Form, FormGroup, FormItem, FormSubmitFooter, FormTitle } from "./Form";
|
|
26
26
|
export { default as FormModal } from "./FormModal";
|
|
27
27
|
export { default as Grid } from "./Grid";
|
|
28
|
+
export { default as GroupAvatar } from "./GroupAvatar";
|
|
28
29
|
export { default as GuideCard } from "./GuideCard";
|
|
29
30
|
export { default as Header } from "./Header";
|
|
30
31
|
export { default as Highlighter, highlighterThemes, SyntaxHighlighter } from "./Highlighter";
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { CSSProperties } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Create a Base64 encoded SVG mask for smooth corners
|
|
4
|
+
* @param options - Configuration options
|
|
5
|
+
*/
|
|
6
|
+
export declare const createSmoothCornersMask: (options?: {
|
|
7
|
+
cornerValue?: number;
|
|
8
|
+
size?: number;
|
|
9
|
+
}) => string;
|
|
10
|
+
/**
|
|
11
|
+
* Create a Base64 encoded SVG mask for circle shape
|
|
12
|
+
* @param options - Configuration options
|
|
13
|
+
*/
|
|
14
|
+
export declare const createCircleMask: (options?: {
|
|
15
|
+
size?: number;
|
|
16
|
+
}) => string;
|
|
17
|
+
/**
|
|
18
|
+
* Create a Base64 encoded SVG mask for rounded rectangle
|
|
19
|
+
* @param options - Configuration options
|
|
20
|
+
*/
|
|
21
|
+
export declare const createRoundedRectMask: (options?: {
|
|
22
|
+
borderRadius?: number;
|
|
23
|
+
size?: number;
|
|
24
|
+
}) => string;
|
|
25
|
+
/**
|
|
26
|
+
* Predefined smooth corners masks for common corner values
|
|
27
|
+
*/
|
|
28
|
+
export declare const SMOOTH_CORNER_MASKS: {
|
|
29
|
+
readonly circle: string;
|
|
30
|
+
readonly ios: string;
|
|
31
|
+
readonly sharp: string;
|
|
32
|
+
readonly smooth: string;
|
|
33
|
+
readonly square: string;
|
|
34
|
+
readonly squircle: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* CSS helper to apply smooth corners mask
|
|
38
|
+
*/
|
|
39
|
+
export declare const getSmoothCornersMaskStyle: (cornerType?: keyof typeof SMOOTH_CORNER_MASKS) => CSSProperties;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smooth Corners utility using Base64 SVG mask
|
|
3
|
+
* A simpler alternative to CSS Houdini Paint API
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Generate a smooth corners SVG path using superellipse formula
|
|
8
|
+
* @param size - The size of the shape
|
|
9
|
+
* @param n - The superellipse exponent (4 = squircle, 5 = iOS style)
|
|
10
|
+
*/
|
|
11
|
+
var generateSuperellipsePath = function generateSuperellipsePath(size) {
|
|
12
|
+
var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 4;
|
|
13
|
+
var r = size / 2;
|
|
14
|
+
var points = [];
|
|
15
|
+
|
|
16
|
+
// Generate points for the superellipse
|
|
17
|
+
for (var i = 0; i <= 360; i += 2) {
|
|
18
|
+
var angle = i * Math.PI / 180;
|
|
19
|
+
var cosAngle = Math.cos(angle);
|
|
20
|
+
var sinAngle = Math.sin(angle);
|
|
21
|
+
|
|
22
|
+
// Superellipse formula
|
|
23
|
+
var x = r * Math.sign(cosAngle) * Math.pow(Math.abs(cosAngle), 2 / n);
|
|
24
|
+
var y = r * Math.sign(sinAngle) * Math.pow(Math.abs(sinAngle), 2 / n);
|
|
25
|
+
points.push("".concat(r + x, ",").concat(r + y));
|
|
26
|
+
}
|
|
27
|
+
return "M".concat(points[0], "L").concat(points.slice(1).join('L'), "Z");
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Create a Base64 encoded SVG mask for smooth corners
|
|
32
|
+
* @param options - Configuration options
|
|
33
|
+
*/
|
|
34
|
+
export var createSmoothCornersMask = function createSmoothCornersMask() {
|
|
35
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
36
|
+
var _options$size = options.size,
|
|
37
|
+
size = _options$size === void 0 ? 100 : _options$size,
|
|
38
|
+
_options$cornerValue = options.cornerValue,
|
|
39
|
+
cornerValue = _options$cornerValue === void 0 ? 4 : _options$cornerValue;
|
|
40
|
+
var path = generateSuperellipsePath(size, cornerValue);
|
|
41
|
+
var svg = "\n <svg width=\"".concat(size, "\" height=\"").concat(size, "\" viewBox=\"0 0 ").concat(size, " ").concat(size, "\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"").concat(path, "\" fill=\"white\"/>\n </svg>\n ").trim().replaceAll(/\s+/g, ' ');
|
|
42
|
+
return "data:image/svg+xml;base64,".concat(btoa(svg));
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Create a Base64 encoded SVG mask for circle shape
|
|
47
|
+
* @param options - Configuration options
|
|
48
|
+
*/
|
|
49
|
+
export var createCircleMask = function createCircleMask() {
|
|
50
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
51
|
+
var _options$size2 = options.size,
|
|
52
|
+
size = _options$size2 === void 0 ? 100 : _options$size2;
|
|
53
|
+
var r = size / 2;
|
|
54
|
+
var svg = "\n <svg width=\"".concat(size, "\" height=\"").concat(size, "\" viewBox=\"0 0 ").concat(size, " ").concat(size, "\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"").concat(r, "\" cy=\"").concat(r, "\" r=\"").concat(r, "\" fill=\"white\"/>\n </svg>\n ").trim().replaceAll(/\s+/g, ' ');
|
|
55
|
+
return "data:image/svg+xml;base64,".concat(btoa(svg));
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Create a Base64 encoded SVG mask for rounded rectangle
|
|
60
|
+
* @param options - Configuration options
|
|
61
|
+
*/
|
|
62
|
+
export var createRoundedRectMask = function createRoundedRectMask() {
|
|
63
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
64
|
+
var _options$size3 = options.size,
|
|
65
|
+
size = _options$size3 === void 0 ? 100 : _options$size3,
|
|
66
|
+
_options$borderRadius = options.borderRadius,
|
|
67
|
+
borderRadius = _options$borderRadius === void 0 ? 15 : _options$borderRadius;
|
|
68
|
+
var svg = "\n <svg width=\"".concat(size, "\" height=\"").concat(size, "\" viewBox=\"0 0 ").concat(size, " ").concat(size, "\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0\" y=\"0\" width=\"").concat(size, "\" height=\"").concat(size, "\" rx=\"").concat(borderRadius, "\" ry=\"").concat(borderRadius, "\" fill=\"white\"/>\n </svg>\n ").trim().replaceAll(/\s+/g, ' ');
|
|
69
|
+
return "data:image/svg+xml;base64,".concat(btoa(svg));
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Predefined smooth corners masks for common corner values
|
|
74
|
+
*/
|
|
75
|
+
export var SMOOTH_CORNER_MASKS = {
|
|
76
|
+
// Basic shapes
|
|
77
|
+
circle: createCircleMask(),
|
|
78
|
+
// Superellipse shapes
|
|
79
|
+
ios: createSmoothCornersMask({
|
|
80
|
+
cornerValue: 5
|
|
81
|
+
}),
|
|
82
|
+
sharp: createSmoothCornersMask({
|
|
83
|
+
cornerValue: 6
|
|
84
|
+
}),
|
|
85
|
+
smooth: createSmoothCornersMask({
|
|
86
|
+
cornerValue: 3
|
|
87
|
+
}),
|
|
88
|
+
square: createRoundedRectMask({
|
|
89
|
+
borderRadius: 15
|
|
90
|
+
}),
|
|
91
|
+
squircle: createSmoothCornersMask({
|
|
92
|
+
cornerValue: 4
|
|
93
|
+
})
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* CSS helper to apply smooth corners mask
|
|
98
|
+
*/
|
|
99
|
+
export var getSmoothCornersMaskStyle = function getSmoothCornersMaskStyle() {
|
|
100
|
+
var cornerType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'squircle';
|
|
101
|
+
return {
|
|
102
|
+
// WebKit prefix for better browser support
|
|
103
|
+
WebkitMaskImage: "url(\"".concat(SMOOTH_CORNER_MASKS[cornerType], "\")"),
|
|
104
|
+
WebkitMaskPosition: 'center',
|
|
105
|
+
WebkitMaskRepeat: 'no-repeat',
|
|
106
|
+
WebkitMaskSize: '100% 100%',
|
|
107
|
+
maskImage: "url(\"".concat(SMOOTH_CORNER_MASKS[cornerType], "\")"),
|
|
108
|
+
maskPosition: 'center',
|
|
109
|
+
maskRepeat: 'no-repeat',
|
|
110
|
+
maskSize: '100% 100%'
|
|
111
|
+
};
|
|
112
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lobehub/ui",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.1",
|
|
4
4
|
"description": "Lobe UI is an open-source UI component library for building AIGC web apps",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"lobehub",
|
|
@@ -45,42 +45,42 @@
|
|
|
45
45
|
"icons.js"
|
|
46
46
|
],
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@ant-design/cssinjs": "^1.
|
|
48
|
+
"@ant-design/cssinjs": "^1.24.0",
|
|
49
49
|
"@dnd-kit/core": "^6.3.1",
|
|
50
50
|
"@dnd-kit/modifiers": "^9.0.0",
|
|
51
51
|
"@dnd-kit/sortable": "^10.0.0",
|
|
52
52
|
"@dnd-kit/utilities": "^3.2.2",
|
|
53
53
|
"@emoji-mart/data": "^1.2.1",
|
|
54
54
|
"@emoji-mart/react": "^1.1.1",
|
|
55
|
-
"@floating-ui/react": "^0.27.
|
|
55
|
+
"@floating-ui/react": "^0.27.14",
|
|
56
56
|
"@giscus/react": "^3.1.0",
|
|
57
57
|
"@lobehub/fluent-emoji": "^2.0.0",
|
|
58
|
-
"@lobehub/icons": "^2.
|
|
58
|
+
"@lobehub/icons": "^2.19.0",
|
|
59
59
|
"@mdx-js/mdx": "^3.1.0",
|
|
60
60
|
"@mdx-js/react": "^3.1.0",
|
|
61
|
-
"@radix-ui/react-slot": "^1.
|
|
62
|
-
"@shikijs/transformers": "^3.
|
|
61
|
+
"@radix-ui/react-slot": "^1.2.3",
|
|
62
|
+
"@shikijs/transformers": "^3.8.1",
|
|
63
63
|
"@splinetool/runtime": "0.9.526",
|
|
64
|
-
"ahooks": "^3.
|
|
64
|
+
"ahooks": "^3.9.0",
|
|
65
65
|
"antd-style": "^3.7.1",
|
|
66
66
|
"chroma-js": "^3.1.2",
|
|
67
67
|
"class-variance-authority": "^0.7.1",
|
|
68
68
|
"dayjs": "^1.11.13",
|
|
69
69
|
"emoji-mart": "^5.6.0",
|
|
70
70
|
"fast-deep-equal": "^3.1.3",
|
|
71
|
-
"framer-motion": "^12.
|
|
71
|
+
"framer-motion": "^12.23.11",
|
|
72
72
|
"immer": "^10.1.1",
|
|
73
|
-
"katex": "^0.16.
|
|
73
|
+
"katex": "^0.16.22",
|
|
74
74
|
"leva": "^0.10.0",
|
|
75
75
|
"lodash-es": "^4.17.21",
|
|
76
76
|
"lucide-react": "^0.525.0",
|
|
77
|
-
"mermaid": "^11.
|
|
77
|
+
"mermaid": "^11.9.0",
|
|
78
78
|
"numeral": "^2.0.6",
|
|
79
79
|
"polished": "^4.3.1",
|
|
80
|
-
"query-string": "^9.
|
|
80
|
+
"query-string": "^9.2.2",
|
|
81
81
|
"rc-collapse": "^4.0.0",
|
|
82
82
|
"rc-footer": "^0.6.8",
|
|
83
|
-
"rc-image": "^7.
|
|
83
|
+
"rc-image": "^7.12.0",
|
|
84
84
|
"rc-menu": "^9.16.1",
|
|
85
85
|
"re-resizable": "^6.11.2",
|
|
86
86
|
"react-avatar-editor": "^13.0.2",
|
|
@@ -98,8 +98,8 @@
|
|
|
98
98
|
"remark-gfm": "^4.0.1",
|
|
99
99
|
"remark-github": "^12.0.0",
|
|
100
100
|
"remark-math": "^6.0.0",
|
|
101
|
-
"shiki": "^3.
|
|
102
|
-
"swr": "^2.3.
|
|
101
|
+
"shiki": "^3.8.1",
|
|
102
|
+
"swr": "^2.3.4",
|
|
103
103
|
"ts-md5": "^1.3.1",
|
|
104
104
|
"unified": "^11.0.5",
|
|
105
105
|
"url-join": "^5.0.0",
|