@canlooks/can-ui 0.0.43 → 0.0.45

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.
@@ -38,11 +38,11 @@ exports.style = (0, utils_1.defineCss)(({ spacing, mode, background, divider, bo
38
38
  `
39
39
  : (0, react_1.css) `
40
40
  &[data-elevation="0"] {
41
- background-color: ${gray(.12)};
41
+ background-color: ${gray(.1)};
42
42
  }
43
43
 
44
44
  &[data-elevation="1"] {
45
- background-color: ${gray(.17)};
45
+ background-color: ${gray(.14)};
46
46
  }
47
47
 
48
48
  &[data-elevation="2"] {
@@ -49,7 +49,7 @@ export type FormRef<V extends FormValue = FormValue> = {
49
49
  isFieldTouched(field: FieldPath): boolean;
50
50
  };
51
51
  export declare const Form: {
52
- <V extends FormValue, C extends ElementType>(props: FormProps<V, C>): ReactElement;
52
+ <V extends FormValue, C extends ElementType = "form">(props: FormProps<V, C>): ReactElement;
53
53
  Item: typeof FormItem;
54
54
  Relatable: typeof FormRelatable;
55
55
  };
@@ -15,15 +15,15 @@ exports.imagePreset = {
15
15
  info: 'data:image/png;base64,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',
16
16
  searching: 'data:image/png;base64,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'
17
17
  };
18
- exports.Placeholder = (0, react_1.memo)(({ slots = {}, slotProps = {}, status = 'empty', image, title = status === 'warning' ? '警告'
18
+ exports.Placeholder = (0, react_1.memo)(({ slots, slotProps, status = 'empty', image, title = status === 'warning' ? '警告'
19
19
  : status === 'error' ? '出错啦'
20
20
  : status === 'success' ? '成功'
21
21
  : void 0, description = status === 'empty' ? '暂无数据'
22
22
  : status === 'searching' ? '搜索中...'
23
23
  : void 0, extra, ...props }) => {
24
24
  const { mode } = (0, theme_1.useTheme)();
25
- const { title: Title = 'div', description: Description = 'div', extra: Extra = 'div' } = slots;
26
- const { title: titleProps, description: descriptionProps, extra: extraProps } = slotProps;
25
+ const { title: Title = 'div', description: Description = 'div', extra: Extra = 'div' } = slots || {};
26
+ const { title: titleProps, description: descriptionProps, extra: extraProps } = slotProps || {};
27
27
  return ((0, jsx_runtime_1.jsxs)("div", { ...props, css: placeholder_style_1.style, className: (0, utils_1.clsx)(placeholder_style_1.classes.root, props.className), children: [image ??
28
28
  (0, jsx_runtime_1.jsx)("img", { className: placeholder_style_1.classes.image, src: status === 'empty'
29
29
  ? (mode === 'light' ? exports.imagePreset.emptyLight : exports.imagePreset.emptyDark)
@@ -1,5 +1,5 @@
1
1
  import { ReactElement } from 'react';
2
- import { DivProps, Id, Obj, Size } from '../../types';
2
+ import { ColorPropsValue, DivProps, Id, Obj, Size } from '../../types';
3
3
  import { SegmentedOption, SegmentedOptionProps } from './SegmentedOption';
4
4
  export type ISegmentedOption = SegmentedOptionProps & Obj;
5
5
  export interface SegmentedProps<O extends ISegmentedOption, V extends Id = Id> extends Omit<DivProps, 'defaultValue' | 'onChange'> {
@@ -9,6 +9,8 @@ export interface SegmentedProps<O extends ISegmentedOption, V extends Id = Id> e
9
9
  labelKey?: keyof O;
10
10
  primaryKey?: keyof O;
11
11
  fullWidth?: boolean;
12
+ /** 指示器的颜色,默认为`background.content` */
13
+ indicatorColor?: ColorPropsValue;
12
14
  defaultValue?: V;
13
15
  value?: V;
14
16
  onChange?(value: V): void;
@@ -7,7 +7,7 @@ const segmented_style_1 = require("./segmented.style");
7
7
  const utils_1 = require("../../utils");
8
8
  const SegmentedOption_1 = require("./SegmentedOption");
9
9
  const theme_1 = require("../theme");
10
- exports.Segmented = (0, react_1.memo)(({ options, orientation = 'horizontal', size, labelKey = 'label', primaryKey = 'value', fullWidth, defaultValue, value, onChange, readOnly, disabled, ...props }) => {
10
+ exports.Segmented = (0, react_1.memo)(({ options, orientation = 'horizontal', size, labelKey = 'label', primaryKey = 'value', fullWidth, indicatorColor = 'background.content', defaultValue, value, onChange, readOnly, disabled, ...props }) => {
11
11
  const theme = (0, theme_1.useTheme)();
12
12
  size ??= theme.size;
13
13
  const [animating, setAnimating] = (0, react_1.useState)(false);
@@ -77,6 +77,6 @@ exports.Segmented = (0, react_1.memo)(({ options, orientation = 'horizontal', si
77
77
  return c;
78
78
  });
79
79
  };
80
- return ((0, jsx_runtime_1.jsxs)("div", { ...props, css: segmented_style_1.style, className: (0, utils_1.clsx)(segmented_style_1.classes.root, props.className), "data-full-width": fullWidth, "data-animating": animating, "data-orientation": orientation, "data-size": size, "data-read-only": readOnly, "data-disabled": disabled, children: [(0, jsx_runtime_1.jsx)("div", { className: segmented_style_1.classes.indicator, onTransitionEnd: () => setAnimating(false), style: indicatorRect.current }), renderOptions()] }));
80
+ return ((0, jsx_runtime_1.jsxs)("div", { ...props, css: (0, segmented_style_1.useStyle)({ indicatorColor }), className: (0, utils_1.clsx)(segmented_style_1.classes.root, props.className), "data-full-width": fullWidth, "data-animating": animating, "data-orientation": orientation, "data-size": size, "data-read-only": readOnly, "data-disabled": disabled, children: [(0, jsx_runtime_1.jsx)("div", { className: segmented_style_1.classes.indicator, onTransitionEnd: () => setAnimating(false), style: indicatorRect.current }), renderOptions()] }));
81
81
  });
82
82
  exports.Segmented.Option = SegmentedOption_1.SegmentedOption;
@@ -1,3 +1,4 @@
1
+ import { ColorPropsValue } from '../../types';
1
2
  export declare const classes: {
2
3
  label: string;
3
4
  option: string;
@@ -7,4 +8,6 @@ export declare const classes: {
7
8
  } & {
8
9
  root: string;
9
10
  };
10
- export declare const style: () => import("@emotion/react").SerializedStyles;
11
+ export declare function useStyle({ indicatorColor }: {
12
+ indicatorColor: ColorPropsValue;
13
+ }): import("@emotion/react").SerializedStyles;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.style = exports.classes = void 0;
3
+ exports.classes = void 0;
4
+ exports.useStyle = useStyle;
4
5
  const tslib_1 = require("tslib");
5
6
  const react_1 = require("@emotion/react");
6
7
  const utils_1 = require("../../utils");
@@ -12,115 +13,118 @@ exports.classes = (0, utils_1.defineInnerClasses)('segmented', [
12
13
  'suffix',
13
14
  'indicator'
14
15
  ]);
15
- exports.style = (0, utils_1.defineCss)(({ mode, background, borderRadius, easing, text }) => {
16
- const bgColor = (0, color_1.default)(background.body);
17
- const hoverBg = bgColor.darken(mode === 'light' ? .04 : .12).hex();
18
- const activeBg = bgColor.darken(mode === 'light' ? .08 : .24).hex();
19
- return (0, react_1.css) `
20
- display: inline-flex;
21
- background-color: ${background.body};
22
- border-radius: ${borderRadius}px;
23
- padding: 2px;
24
- position: relative;
25
-
26
- .${exports.classes.option} {
27
- display: flex;
28
- align-items: center;
29
- justify-content: center;
30
- gap: 6px;
31
- padding: 4px 12px;
16
+ function useStyle({ indicatorColor }) {
17
+ const indicatorColorValue = (0, utils_1.useColor)(indicatorColor);
18
+ return (0, utils_1.useCss)(({ mode, background, borderRadius, easing, text }) => {
19
+ const bgColor = (0, color_1.default)(background.body);
20
+ const hoverBg = bgColor.darken(mode === 'light' ? .04 : .12).hex();
21
+ const activeBg = bgColor.darken(mode === 'light' ? .08 : .24).hex();
22
+ return (0, react_1.css) `
23
+ display: inline-flex;
24
+ background-color: ${background.body};
32
25
  border-radius: ${borderRadius}px;
33
- white-space: nowrap;
34
- text-overflow: ellipsis;
35
- overflow: hidden;
36
- z-index: 1;
37
- transition: background-color .3s ${easing.easeOut};
38
- -webkit-tap-highlight-color: transparent;
39
-
40
- &[data-active=true] {
41
- transition: background-color 0s;
42
- }
26
+ padding: 2px;
27
+ position: relative;
43
28
 
44
- &[data-orientation=vertical] {
45
- flex-direction: column;
46
- }
29
+ .${exports.classes.option} {
30
+ display: flex;
31
+ align-items: center;
32
+ justify-content: center;
33
+ gap: 6px;
34
+ padding: 4px 12px;
35
+ border-radius: ${borderRadius}px;
36
+ white-space: nowrap;
37
+ text-overflow: ellipsis;
38
+ overflow: hidden;
39
+ z-index: 1;
40
+ transition: background-color .3s ${easing.easeOut};
41
+ -webkit-tap-highlight-color: transparent;
47
42
 
48
- &[data-disabled=true] {
49
- cursor: not-allowed;
50
- color: ${text.disabled};
51
- }
52
- }
43
+ &[data-active=true] {
44
+ transition: background-color 0s;
45
+ }
53
46
 
54
- &[data-size=small] {
55
- .${exports.classes.option} {
56
- padding: 3px 12px;
57
- }
58
- }
47
+ &[data-orientation=vertical] {
48
+ flex-direction: column;
49
+ }
59
50
 
60
- &[data-size=large] {
61
- .${exports.classes.option} {
62
- padding: 11px 12px;
51
+ &[data-disabled=true] {
52
+ cursor: not-allowed;
53
+ color: ${text.disabled};
54
+ }
63
55
  }
64
- }
65
56
 
66
- &[data-full-width=true] {
67
- display: flex;
57
+ &[data-size=small] {
58
+ .${exports.classes.option} {
59
+ padding: 3px 12px;
60
+ }
61
+ }
68
62
 
69
- .${exports.classes.option} {
70
- flex: 1;
63
+ &[data-size=large] {
64
+ .${exports.classes.option} {
65
+ padding: 11px 12px;
66
+ }
71
67
  }
72
- }
73
68
 
74
- &[data-orientation=vertical] {
75
- flex-direction: column;
76
- }
69
+ &[data-full-width=true] {
70
+ display: flex;
77
71
 
78
- .${exports.classes.indicator} {
79
- border-radius: ${borderRadius}px;
80
- background-color: ${background.content};
81
- box-shadow: 0 1px 4px rgba(0, 0, 0, .1);
82
- position: absolute;
83
- transition: all .3s ${easing.bounce};
84
- }
72
+ .${exports.classes.option} {
73
+ flex: 1;
74
+ }
75
+ }
85
76
 
86
- &[data-animating=true] {
87
- .${exports.classes.option} {
88
- transition: background-color 0s;
77
+ &[data-orientation=vertical] {
78
+ flex-direction: column;
89
79
  }
90
- }
91
80
 
92
- &:not([data-animating=true]) {
93
- .${exports.classes.option}[data-active=true] {
94
- background-color: ${background.content};
81
+ .${exports.classes.indicator} {
82
+ border-radius: ${borderRadius}px;
83
+ background-color: ${indicatorColorValue};
95
84
  box-shadow: 0 1px 4px rgba(0, 0, 0, .1);
85
+ position: absolute;
86
+ transition: all .3s ${easing.bounce};
96
87
  }
97
- }
98
88
 
99
- &:not(:has([data-active=true])) {
100
- .${exports.classes.indicator} {
101
- display: none;
89
+ &[data-animating=true] {
90
+ .${exports.classes.option} {
91
+ transition: background-color 0s;
92
+ }
102
93
  }
103
- }
104
-
105
- &:not([data-read-only=true]):not([data-disabled=true]) {
106
- .${exports.classes.option}:not([data-disabled=true]) {
107
- cursor: pointer;
108
-
109
- &:not([data-active=true]):hover {
110
- background-color: ${hoverBg};
94
+
95
+ &:not([data-animating=true]) {
96
+ .${exports.classes.option}[data-active=true] {
97
+ background-color: ${indicatorColorValue};
98
+ box-shadow: 0 1px 4px rgba(0, 0, 0, .1);
111
99
  }
112
-
113
- &:not([data-active=true]):active {
114
- transition: background-color 0s;
115
- background-color: ${activeBg};
100
+ }
101
+
102
+ &:not(:has([data-active=true])) {
103
+ .${exports.classes.indicator} {
104
+ display: none;
116
105
  }
117
106
  }
118
- }
119
107
 
120
- &[data-disabled=true] {
121
- .${exports.classes.option} {
122
- cursor: not-allowed;
108
+ &:not([data-read-only=true]):not([data-disabled=true]) {
109
+ .${exports.classes.option}:not([data-disabled=true]) {
110
+ cursor: pointer;
111
+
112
+ &:not([data-active=true]):hover {
113
+ background-color: ${hoverBg};
114
+ }
115
+
116
+ &:not([data-active=true]):active {
117
+ transition: background-color 0s;
118
+ background-color: ${activeBg};
119
+ }
120
+ }
121
+ }
122
+
123
+ &[data-disabled=true] {
124
+ .${exports.classes.option} {
125
+ cursor: not-allowed;
126
+ }
123
127
  }
124
- }
125
- `;
126
- });
128
+ `;
129
+ }, [indicatorColorValue]);
130
+ }
@@ -185,15 +185,15 @@ exports.defaultLightTheme = {
185
185
  exports.defaultDarkTheme = {
186
186
  mode: 'dark',
187
187
  background: {
188
- /* content: rGray(.2), */
189
- content: '#333333',
190
- /* body: rGray(.15), */
191
- body: '#252525',
188
+ /* content: rGray(.14), */
189
+ content: '#242424',
190
+ /* body: rGray(.1), */
191
+ body: '#1a1a1a',
192
192
  fixed: 'rgba(255, 255, 255, .06)'
193
193
  },
194
194
  gray: rGray,
195
- /* divider: rGray(.36), */
196
- divider: '#5c5c5c',
195
+ /* divider: rGray(.28), */
196
+ divider: '#474747',
197
197
  colors: {
198
198
  /* primary: Color(defaultLightTheme.colors!.primary).lighten(.1).hex(), */
199
199
  primary: '#3780EE',
@@ -46,7 +46,7 @@ export type SlotsAndProps<Default extends Record<string, any>> = {
46
46
  [P in keyof Default]?: ElementType;
47
47
  };
48
48
  slotProps?: {
49
- [P in keyof Default]?: Default[P] & Obj;
49
+ [P in keyof Default]?: Default[P] | Obj;
50
50
  };
51
51
  };
52
52
  /**
@@ -71,7 +71,7 @@ function useCss(callback, deps) {
71
71
  * @param theme
72
72
  */
73
73
  function colorTransfer(colorPropsValue, theme) {
74
- const { colors, text } = theme;
74
+ const { colors, text, background } = theme;
75
75
  if (colorPropsValue in colors) {
76
76
  return colors[colorPropsValue].main;
77
77
  }
@@ -84,6 +84,10 @@ function colorTransfer(colorPropsValue, theme) {
84
84
  return text[member];
85
85
  }
86
86
  }
87
+ if (colorPropsValue.startsWith('background')) {
88
+ const [, member] = colorPropsValue.split('.');
89
+ return background[member];
90
+ }
87
91
  return colorPropsValue;
88
92
  }
89
93
  /**
@@ -35,11 +35,11 @@ export const style = defineCss(({ spacing, mode, background, divider, boxShadow,
35
35
  `
36
36
  : css `
37
37
  &[data-elevation="0"] {
38
- background-color: ${gray(.12)};
38
+ background-color: ${gray(.1)};
39
39
  }
40
40
 
41
41
  &[data-elevation="1"] {
42
- background-color: ${gray(.17)};
42
+ background-color: ${gray(.14)};
43
43
  }
44
44
 
45
45
  &[data-elevation="2"] {
@@ -49,7 +49,7 @@ export type FormRef<V extends FormValue = FormValue> = {
49
49
  isFieldTouched(field: FieldPath): boolean;
50
50
  };
51
51
  export declare const Form: {
52
- <V extends FormValue, C extends ElementType>(props: FormProps<V, C>): ReactElement;
52
+ <V extends FormValue, C extends ElementType = "form">(props: FormProps<V, C>): ReactElement;
53
53
  Item: typeof FormItem;
54
54
  Relatable: typeof FormRelatable;
55
55
  };
@@ -12,15 +12,15 @@ export const imagePreset = {
12
12
  info: 'data:image/png;base64,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',
13
13
  searching: 'data:image/png;base64,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'
14
14
  };
15
- export const Placeholder = memo(({ slots = {}, slotProps = {}, status = 'empty', image, title = status === 'warning' ? '警告'
15
+ export const Placeholder = memo(({ slots, slotProps, status = 'empty', image, title = status === 'warning' ? '警告'
16
16
  : status === 'error' ? '出错啦'
17
17
  : status === 'success' ? '成功'
18
18
  : void 0, description = status === 'empty' ? '暂无数据'
19
19
  : status === 'searching' ? '搜索中...'
20
20
  : void 0, extra, ...props }) => {
21
21
  const { mode } = useTheme();
22
- const { title: Title = 'div', description: Description = 'div', extra: Extra = 'div' } = slots;
23
- const { title: titleProps, description: descriptionProps, extra: extraProps } = slotProps;
22
+ const { title: Title = 'div', description: Description = 'div', extra: Extra = 'div' } = slots || {};
23
+ const { title: titleProps, description: descriptionProps, extra: extraProps } = slotProps || {};
24
24
  return (_jsxs("div", { ...props, css: style, className: clsx(classes.root, props.className), children: [image ??
25
25
  _jsx("img", { className: classes.image, src: status === 'empty'
26
26
  ? (mode === 'light' ? imagePreset.emptyLight : imagePreset.emptyDark)
@@ -1,5 +1,5 @@
1
1
  import { ReactElement } from 'react';
2
- import { DivProps, Id, Obj, Size } from '../../types';
2
+ import { ColorPropsValue, DivProps, Id, Obj, Size } from '../../types';
3
3
  import { SegmentedOption, SegmentedOptionProps } from './SegmentedOption';
4
4
  export type ISegmentedOption = SegmentedOptionProps & Obj;
5
5
  export interface SegmentedProps<O extends ISegmentedOption, V extends Id = Id> extends Omit<DivProps, 'defaultValue' | 'onChange'> {
@@ -9,6 +9,8 @@ export interface SegmentedProps<O extends ISegmentedOption, V extends Id = Id> e
9
9
  labelKey?: keyof O;
10
10
  primaryKey?: keyof O;
11
11
  fullWidth?: boolean;
12
+ /** 指示器的颜色,默认为`background.content` */
13
+ indicatorColor?: ColorPropsValue;
12
14
  defaultValue?: V;
13
15
  value?: V;
14
16
  onChange?(value: V): void;
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
2
  import { Children, cloneElement, isValidElement, memo, useEffect, useRef, useState } from 'react';
3
- import { classes, style } from './segmented.style';
3
+ import { classes, useStyle } from './segmented.style';
4
4
  import { clsx, cloneRef, isUnset, useControlled, useDerivedState } from '../../utils';
5
5
  import { SegmentedOption } from './SegmentedOption';
6
6
  import { useTheme } from '../theme';
7
- export const Segmented = memo(({ options, orientation = 'horizontal', size, labelKey = 'label', primaryKey = 'value', fullWidth, defaultValue, value, onChange, readOnly, disabled, ...props }) => {
7
+ export const Segmented = memo(({ options, orientation = 'horizontal', size, labelKey = 'label', primaryKey = 'value', fullWidth, indicatorColor = 'background.content', defaultValue, value, onChange, readOnly, disabled, ...props }) => {
8
8
  const theme = useTheme();
9
9
  size ??= theme.size;
10
10
  const [animating, setAnimating] = useState(false);
@@ -74,6 +74,6 @@ export const Segmented = memo(({ options, orientation = 'horizontal', size, labe
74
74
  return c;
75
75
  });
76
76
  };
77
- return (_jsxs("div", { ...props, css: style, className: clsx(classes.root, props.className), "data-full-width": fullWidth, "data-animating": animating, "data-orientation": orientation, "data-size": size, "data-read-only": readOnly, "data-disabled": disabled, children: [_jsx("div", { className: classes.indicator, onTransitionEnd: () => setAnimating(false), style: indicatorRect.current }), renderOptions()] }));
77
+ return (_jsxs("div", { ...props, css: useStyle({ indicatorColor }), className: clsx(classes.root, props.className), "data-full-width": fullWidth, "data-animating": animating, "data-orientation": orientation, "data-size": size, "data-read-only": readOnly, "data-disabled": disabled, children: [_jsx("div", { className: classes.indicator, onTransitionEnd: () => setAnimating(false), style: indicatorRect.current }), renderOptions()] }));
78
78
  });
79
79
  Segmented.Option = SegmentedOption;
@@ -1,3 +1,4 @@
1
+ import { ColorPropsValue } from '../../types';
1
2
  export declare const classes: {
2
3
  label: string;
3
4
  option: string;
@@ -7,4 +8,6 @@ export declare const classes: {
7
8
  } & {
8
9
  root: string;
9
10
  };
10
- export declare const style: () => import("@emotion/react").SerializedStyles;
11
+ export declare function useStyle({ indicatorColor }: {
12
+ indicatorColor: ColorPropsValue;
13
+ }): import("@emotion/react").SerializedStyles;