@dsh-plugin/dsh-ui-components 0.0.1 → 0.1.0-dev.43616582648

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.
Files changed (65) hide show
  1. package/LICENSE +21 -21
  2. package/NOTICE +21 -21
  3. package/README.md +136 -136
  4. package/README.zh_CN.md +136 -136
  5. package/docs/tokens.md +67 -67
  6. package/lib/basic/form.js +49 -49
  7. package/lib/basic/styles.js +391 -391
  8. package/lib/composites/styles.js +427 -427
  9. package/lib/data/styles.js +257 -257
  10. package/lib/display/styles.js +310 -310
  11. package/lib/feedback/styles.js +228 -228
  12. package/lib/foundation/bridge.js +203 -203
  13. package/lib/navigation/styles.js +417 -417
  14. package/package.json +104 -104
  15. package/scripts/check-size.mjs +69 -69
  16. package/scripts/dump-npm-latest.mjs +59 -59
  17. package/scripts/gen-host-tokens.mjs +61 -61
  18. package/scripts/gen-icons.mjs +188 -178
  19. package/scripts/verify-no-literal-colors.mjs +63 -63
  20. package/scripts/verify-tokens.mjs +135 -135
  21. package/src/basic/button.tsx +76 -76
  22. package/src/basic/form.tsx +187 -187
  23. package/src/basic/icon-button.tsx +66 -66
  24. package/src/basic/index.ts +38 -38
  25. package/src/basic/input.tsx +140 -140
  26. package/src/basic/select.tsx +120 -120
  27. package/src/basic/styles.ts +412 -412
  28. package/src/basic/toggle.tsx +116 -116
  29. package/src/composites/data-view.tsx +189 -189
  30. package/src/composites/index.ts +11 -11
  31. package/src/composites/indicator.tsx +90 -90
  32. package/src/composites/menu-select.tsx +230 -230
  33. package/src/composites/panel.tsx +72 -72
  34. package/src/composites/settings.tsx +80 -80
  35. package/src/composites/styles.ts +450 -450
  36. package/src/data/collection.tsx +71 -71
  37. package/src/data/index.ts +39 -39
  38. package/src/data/info.tsx +89 -89
  39. package/src/data/picker.tsx +113 -113
  40. package/src/data/styles.ts +278 -278
  41. package/src/display/container.tsx +67 -67
  42. package/src/display/feedback.tsx +92 -92
  43. package/src/display/index.ts +44 -44
  44. package/src/display/label.tsx +165 -165
  45. package/src/display/overlay.tsx +103 -103
  46. package/src/display/styles.ts +332 -332
  47. package/src/feedback/global.tsx +110 -110
  48. package/src/feedback/index.ts +19 -19
  49. package/src/feedback/inline.tsx +50 -50
  50. package/src/feedback/panel.tsx +93 -93
  51. package/src/feedback/styles.ts +250 -250
  52. package/src/foundation/bridge.ts +318 -318
  53. package/src/foundation/icons.tsx +315 -315
  54. package/src/foundation/index.ts +33 -33
  55. package/src/foundation/palette.ts +153 -153
  56. package/src/foundation/provider.tsx +62 -62
  57. package/src/foundation/style.ts +63 -63
  58. package/src/foundation/tokens.ts +62 -62
  59. package/src/index.ts +18 -18
  60. package/src/navigation/hierarchy.tsx +82 -82
  61. package/src/navigation/index.ts +21 -21
  62. package/src/navigation/indicator.tsx +125 -125
  63. package/src/navigation/menu.tsx +94 -94
  64. package/src/navigation/segmented.tsx +136 -136
  65. package/src/navigation/styles.ts +438 -438
@@ -1,140 +1,140 @@
1
- /**
2
- * 文本类输入控件。
3
- *
4
- * `Input` / `Textarea` 沿用 Arco 的受控与非受控行为,追加 DSH 的两项约定:
5
- * 等宽字体开关 `mono` 与校验失败标记 `invalid`。尺寸按 DSH 取 32(标准)/
6
- * 28(紧凑)/ 44(大)。
7
- *
8
- * ref 的类型沿用 Arco 自己的签名:它暴露的是 `{ dom, focus, blur }` 这样的
9
- * 句柄,而不是原生元素。需要原生元素时用 `ref.current.dom`。
10
- *
11
- * @module @dsh-plugin/dsh-ui-components/basic/input
12
- */
13
- import * as React from 'react'
14
- import { Arco } from '@dsh-plugin/dsh-loader/client'
15
- import { cx } from '../foundation/style.js'
16
- import { injectBasicStyles } from './styles.js'
17
-
18
- /** 输入控件的尺寸,与按钮分开定义,因为输入框标准高度是 32 而非 36。 */
19
- export type FieldSize = 'md' | 'sm' | 'lg'
20
-
21
- /** DSH 尺寸到 Arco 尺寸的映射。 */
22
- const ARCO_SIZE: Record<FieldSize, 'default' | 'small' | 'large'> = {
23
- md: 'default',
24
- sm: 'small',
25
- lg: 'large',
26
- }
27
-
28
- /**
29
- * 合并 Arco 的 `className`(可能是字符串数组)与 DSH 的附加类名。
30
- *
31
- * @param className - Arco 传来的类名。
32
- * @param extra - 需要追加的类名,假值忽略。
33
- * @returns 归一化后的 `className`。
34
- */
35
- function mergeClass(className: string | string[] | undefined, ...extra: Array<string | false | undefined>): string {
36
- const inherited = Array.isArray(className) ? className : className === undefined ? [] : [className]
37
- return cx(...inherited, ...extra)
38
- }
39
-
40
- /** Arco 输入框暴露的句柄。 */
41
- export type InputRef = React.ElementRef<typeof Arco.Input>
42
-
43
- /** Arco 文本域暴露的句柄。 */
44
- export type TextareaRef = React.ElementRef<typeof Arco.Input.TextArea>
45
-
46
- /** {@link Input} 的 props。 */
47
- export type InputProps = Omit<React.ComponentPropsWithoutRef<typeof Arco.Input>, 'size'> & {
48
- /** 尺寸,默认 `md`。 */
49
- size?: FieldSize
50
- /** 使用等宽字体,用于路径、命令与标识符。 */
51
- mono?: boolean
52
- /** 校验失败。同时设置 `aria-invalid`。 */
53
- invalid?: boolean
54
- }
55
-
56
- /**
57
- * 单行文本输入。
58
- *
59
- * @param props - 见 {@link InputProps}。
60
- * @param ref - Arco 的输入框句柄,含 `dom`、`focus`、`blur`。
61
- * @returns 输入框元素。
62
- */
63
- export const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<InputRef>> =
64
- React.forwardRef<InputRef, InputProps>(function Input(
65
- { size = 'md', mono, invalid, className, status, ...rest },
66
- ref,
67
- ) {
68
- injectBasicStyles()
69
- return (
70
- <Arco.Input
71
- {...rest}
72
- ref={ref}
73
- size={ARCO_SIZE[size]}
74
- status={invalid === true ? 'error' : status}
75
- aria-invalid={invalid === true ? true : undefined}
76
- className={mergeClass(className, mono === true && 'dsh-mono')}
77
- />
78
- )
79
- })
80
-
81
- /** {@link Textarea} 的 props。 */
82
- export type TextareaProps = Omit<React.ComponentPropsWithoutRef<typeof Arco.Input.TextArea>, 'className'> & {
83
- /** 尺寸,默认 `md`。Arco 的文本域不接受 `size`,此处以类名表达。 */
84
- size?: FieldSize
85
- /** 使用等宽字体。 */
86
- mono?: boolean
87
- /** 校验失败。 */
88
- invalid?: boolean
89
- /** 追加类名。 */
90
- className?: string
91
- }
92
-
93
- /**
94
- * 多行文本输入,默认最小高度 72 并允许竖向拉伸。
95
- *
96
- * @param props - 见 {@link TextareaProps}。
97
- * @param ref - Arco 的文本域句柄。
98
- * @returns 文本域元素。
99
- */
100
- export const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<TextareaRef>> =
101
- React.forwardRef<TextareaRef, TextareaProps>(function Textarea(
102
- { size = 'md', mono, invalid, className, status, ...rest },
103
- ref,
104
- ) {
105
- injectBasicStyles()
106
- return (
107
- <Arco.Input.TextArea
108
- {...rest}
109
- ref={ref}
110
- status={invalid === true ? 'error' : status}
111
- aria-invalid={invalid === true ? true : undefined}
112
- className={mergeClass(className, `dsh-textarea-${size}`, mono === true && 'dsh-mono')}
113
- />
114
- )
115
- })
116
-
117
- /** Arco 数字输入暴露的句柄。 */
118
- export type InputNumberRef = React.ElementRef<typeof Arco.InputNumber>
119
-
120
- /** {@link InputNumber} 的 props。 */
121
- export type InputNumberProps = Omit<React.ComponentPropsWithoutRef<typeof Arco.InputNumber>, 'size'> & {
122
- /** 尺寸,默认 `md`。 */
123
- size?: FieldSize
124
- }
125
-
126
- /**
127
- * 数字输入,可带步进按钮。
128
- *
129
- * @param props - 见 {@link InputNumberProps}。
130
- * @param ref - Arco 的数字输入句柄。
131
- * @returns 数字输入元素。
132
- */
133
- export const InputNumber: React.ForwardRefExoticComponent<InputNumberProps & React.RefAttributes<InputNumberRef>> =
134
- React.forwardRef<InputNumberRef, InputNumberProps>(function InputNumber(
135
- { size = 'md', ...rest },
136
- ref,
137
- ) {
138
- injectBasicStyles()
139
- return <Arco.InputNumber {...rest} ref={ref} size={ARCO_SIZE[size]} />
140
- })
1
+ /**
2
+ * 文本类输入控件。
3
+ *
4
+ * `Input` / `Textarea` 沿用 Arco 的受控与非受控行为,追加 DSH 的两项约定:
5
+ * 等宽字体开关 `mono` 与校验失败标记 `invalid`。尺寸按 DSH 取 32(标准)/
6
+ * 28(紧凑)/ 44(大)。
7
+ *
8
+ * ref 的类型沿用 Arco 自己的签名:它暴露的是 `{ dom, focus, blur }` 这样的
9
+ * 句柄,而不是原生元素。需要原生元素时用 `ref.current.dom`。
10
+ *
11
+ * @module @dsh-plugin/dsh-ui-components/basic/input
12
+ */
13
+ import * as React from 'react'
14
+ import { Arco } from '@dsh-plugin/dsh-loader/client'
15
+ import { cx } from '../foundation/style.js'
16
+ import { injectBasicStyles } from './styles.js'
17
+
18
+ /** 输入控件的尺寸,与按钮分开定义,因为输入框标准高度是 32 而非 36。 */
19
+ export type FieldSize = 'md' | 'sm' | 'lg'
20
+
21
+ /** DSH 尺寸到 Arco 尺寸的映射。 */
22
+ const ARCO_SIZE: Record<FieldSize, 'default' | 'small' | 'large'> = {
23
+ md: 'default',
24
+ sm: 'small',
25
+ lg: 'large',
26
+ }
27
+
28
+ /**
29
+ * 合并 Arco 的 `className`(可能是字符串数组)与 DSH 的附加类名。
30
+ *
31
+ * @param className - Arco 传来的类名。
32
+ * @param extra - 需要追加的类名,假值忽略。
33
+ * @returns 归一化后的 `className`。
34
+ */
35
+ function mergeClass(className: string | string[] | undefined, ...extra: Array<string | false | undefined>): string {
36
+ const inherited = Array.isArray(className) ? className : className === undefined ? [] : [className]
37
+ return cx(...inherited, ...extra)
38
+ }
39
+
40
+ /** Arco 输入框暴露的句柄。 */
41
+ export type InputRef = React.ElementRef<typeof Arco.Input>
42
+
43
+ /** Arco 文本域暴露的句柄。 */
44
+ export type TextareaRef = React.ElementRef<typeof Arco.Input.TextArea>
45
+
46
+ /** {@link Input} 的 props。 */
47
+ export type InputProps = Omit<React.ComponentPropsWithoutRef<typeof Arco.Input>, 'size'> & {
48
+ /** 尺寸,默认 `md`。 */
49
+ size?: FieldSize
50
+ /** 使用等宽字体,用于路径、命令与标识符。 */
51
+ mono?: boolean
52
+ /** 校验失败。同时设置 `aria-invalid`。 */
53
+ invalid?: boolean
54
+ }
55
+
56
+ /**
57
+ * 单行文本输入。
58
+ *
59
+ * @param props - 见 {@link InputProps}。
60
+ * @param ref - Arco 的输入框句柄,含 `dom`、`focus`、`blur`。
61
+ * @returns 输入框元素。
62
+ */
63
+ export const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<InputRef>> =
64
+ React.forwardRef<InputRef, InputProps>(function Input(
65
+ { size = 'md', mono, invalid, className, status, ...rest },
66
+ ref,
67
+ ) {
68
+ injectBasicStyles()
69
+ return (
70
+ <Arco.Input
71
+ {...rest}
72
+ ref={ref}
73
+ size={ARCO_SIZE[size]}
74
+ status={invalid === true ? 'error' : status}
75
+ aria-invalid={invalid === true ? true : undefined}
76
+ className={mergeClass(className, mono === true && 'dsh-mono')}
77
+ />
78
+ )
79
+ })
80
+
81
+ /** {@link Textarea} 的 props。 */
82
+ export type TextareaProps = Omit<React.ComponentPropsWithoutRef<typeof Arco.Input.TextArea>, 'className'> & {
83
+ /** 尺寸,默认 `md`。Arco 的文本域不接受 `size`,此处以类名表达。 */
84
+ size?: FieldSize
85
+ /** 使用等宽字体。 */
86
+ mono?: boolean
87
+ /** 校验失败。 */
88
+ invalid?: boolean
89
+ /** 追加类名。 */
90
+ className?: string
91
+ }
92
+
93
+ /**
94
+ * 多行文本输入,默认最小高度 72 并允许竖向拉伸。
95
+ *
96
+ * @param props - 见 {@link TextareaProps}。
97
+ * @param ref - Arco 的文本域句柄。
98
+ * @returns 文本域元素。
99
+ */
100
+ export const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<TextareaRef>> =
101
+ React.forwardRef<TextareaRef, TextareaProps>(function Textarea(
102
+ { size = 'md', mono, invalid, className, status, ...rest },
103
+ ref,
104
+ ) {
105
+ injectBasicStyles()
106
+ return (
107
+ <Arco.Input.TextArea
108
+ {...rest}
109
+ ref={ref}
110
+ status={invalid === true ? 'error' : status}
111
+ aria-invalid={invalid === true ? true : undefined}
112
+ className={mergeClass(className, `dsh-textarea-${size}`, mono === true && 'dsh-mono')}
113
+ />
114
+ )
115
+ })
116
+
117
+ /** Arco 数字输入暴露的句柄。 */
118
+ export type InputNumberRef = React.ElementRef<typeof Arco.InputNumber>
119
+
120
+ /** {@link InputNumber} 的 props。 */
121
+ export type InputNumberProps = Omit<React.ComponentPropsWithoutRef<typeof Arco.InputNumber>, 'size'> & {
122
+ /** 尺寸,默认 `md`。 */
123
+ size?: FieldSize
124
+ }
125
+
126
+ /**
127
+ * 数字输入,可带步进按钮。
128
+ *
129
+ * @param props - 见 {@link InputNumberProps}。
130
+ * @param ref - Arco 的数字输入句柄。
131
+ * @returns 数字输入元素。
132
+ */
133
+ export const InputNumber: React.ForwardRefExoticComponent<InputNumberProps & React.RefAttributes<InputNumberRef>> =
134
+ React.forwardRef<InputNumberRef, InputNumberProps>(function InputNumber(
135
+ { size = 'md', ...rest },
136
+ ref,
137
+ ) {
138
+ injectBasicStyles()
139
+ return <Arco.InputNumber {...rest} ref={ref} size={ARCO_SIZE[size]} />
140
+ })
@@ -1,120 +1,120 @@
1
- /**
2
- * 选择类控件。
3
- *
4
- * 选项数据统一用 `options: { value, label, disabled }[]`,与 DSH 宿主自己的
5
- * 选择器一致;`onChange` 直接回调选中的 value,而不是 DOM 事件。
6
- *
7
- * @module @dsh-plugin/dsh-ui-components/basic/select
8
- */
9
- import * as React from 'react'
10
- import { Arco } from '@dsh-plugin/dsh-loader/client'
11
- import { injectBasicStyles } from './styles.js'
12
- import { type FieldSize } from './input.js'
13
-
14
- /** DSH 尺寸到 Arco 尺寸的映射。 */
15
- const ARCO_SIZE: Record<FieldSize, 'default' | 'small' | 'large'> = {
16
- md: 'default',
17
- sm: 'small',
18
- lg: 'large',
19
- }
20
-
21
- /** 一个选项。 */
22
- export interface SelectOption {
23
- /** 提交值。 */
24
- value: string
25
- /** 展示文本。 */
26
- label: React.ReactNode
27
- /** 不可选。 */
28
- disabled?: boolean
29
- }
30
-
31
- /** {@link Select} 的 props。 */
32
- export interface SelectProps {
33
- /** 选项列表。 */
34
- options: readonly SelectOption[]
35
- /** 当前值;多选时为数组。 */
36
- value?: string | string[]
37
- /** 默认值;多选时为数组。 */
38
- defaultValue?: string | string[]
39
- /** 选中项变化时回调,参数是选项 value(多选时为数组)。 */
40
- onChange?: (value: string | string[]) => void
41
- /** 多选模式。 */
42
- multiple?: boolean
43
- /** 允许清空。 */
44
- allowClear?: boolean
45
- /** 无选中项时显示的占位文本。 */
46
- placeholder?: string
47
- /** 禁用。 */
48
- disabled?: boolean
49
- /** 尺寸,默认 `md`。 */
50
- size?: FieldSize
51
- /** 校验失败。 */
52
- invalid?: boolean
53
- /** 前置标签。 */
54
- prefix?: React.ReactNode
55
- /** 输入框 id,用于与 `Field` 的 label 关联。 */
56
- id?: string
57
- /** 追加类名。 */
58
- className?: string
59
- /** 追加内联样式。 */
60
- style?: React.CSSProperties
61
- }
62
-
63
- /**
64
- * 下拉选择。
65
- *
66
- * @param props - 见 {@link SelectProps}。
67
- * @returns 选择器元素。
68
- */
69
- export function Select({
70
- options,
71
- value,
72
- defaultValue,
73
- onChange,
74
- multiple,
75
- allowClear,
76
- placeholder,
77
- disabled,
78
- size = 'md',
79
- invalid,
80
- prefix,
81
- id,
82
- className,
83
- style,
84
- }: SelectProps): React.ReactElement {
85
- injectBasicStyles()
86
- return (
87
- <Arco.Select
88
- options={options as SelectOption[]}
89
- value={value}
90
- defaultValue={defaultValue}
91
- onChange={onChange as (value: unknown) => void}
92
- mode={multiple === true ? 'multiple' : undefined}
93
- allowClear={allowClear}
94
- placeholder={placeholder}
95
- disabled={disabled}
96
- size={ARCO_SIZE[size]}
97
- status={invalid === true ? 'error' : undefined}
98
- prefix={prefix}
99
- id={id}
100
- className={className}
101
- style={style}
102
- />
103
- )
104
- }
105
-
106
- /** {@link AutoComplete} 的 props。 */
107
- export type AutoCompleteProps = React.ComponentPropsWithoutRef<typeof Arco.AutoComplete>
108
-
109
- /**
110
- * 带候选提示的文本输入。
111
- *
112
- * 高度沿用 Arco 的尺寸,通过 `inputProps` 透传输入框属性。
113
- *
114
- * @param props - 见 {@link AutoCompleteProps}。
115
- * @returns 自动完成输入元素。
116
- */
117
- export function AutoComplete(props: AutoCompleteProps): React.ReactElement {
118
- injectBasicStyles()
119
- return <Arco.AutoComplete {...props} />
120
- }
1
+ /**
2
+ * 选择类控件。
3
+ *
4
+ * 选项数据统一用 `options: { value, label, disabled }[]`,与 DSH 宿主自己的
5
+ * 选择器一致;`onChange` 直接回调选中的 value,而不是 DOM 事件。
6
+ *
7
+ * @module @dsh-plugin/dsh-ui-components/basic/select
8
+ */
9
+ import * as React from 'react'
10
+ import { Arco } from '@dsh-plugin/dsh-loader/client'
11
+ import { injectBasicStyles } from './styles.js'
12
+ import { type FieldSize } from './input.js'
13
+
14
+ /** DSH 尺寸到 Arco 尺寸的映射。 */
15
+ const ARCO_SIZE: Record<FieldSize, 'default' | 'small' | 'large'> = {
16
+ md: 'default',
17
+ sm: 'small',
18
+ lg: 'large',
19
+ }
20
+
21
+ /** 一个选项。 */
22
+ export interface SelectOption {
23
+ /** 提交值。 */
24
+ value: string
25
+ /** 展示文本。 */
26
+ label: React.ReactNode
27
+ /** 不可选。 */
28
+ disabled?: boolean
29
+ }
30
+
31
+ /** {@link Select} 的 props。 */
32
+ export interface SelectProps {
33
+ /** 选项列表。 */
34
+ options: readonly SelectOption[]
35
+ /** 当前值;多选时为数组。 */
36
+ value?: string | string[]
37
+ /** 默认值;多选时为数组。 */
38
+ defaultValue?: string | string[]
39
+ /** 选中项变化时回调,参数是选项 value(多选时为数组)。 */
40
+ onChange?: (value: string | string[]) => void
41
+ /** 多选模式。 */
42
+ multiple?: boolean
43
+ /** 允许清空。 */
44
+ allowClear?: boolean
45
+ /** 无选中项时显示的占位文本。 */
46
+ placeholder?: string
47
+ /** 禁用。 */
48
+ disabled?: boolean
49
+ /** 尺寸,默认 `md`。 */
50
+ size?: FieldSize
51
+ /** 校验失败。 */
52
+ invalid?: boolean
53
+ /** 前置标签。 */
54
+ prefix?: React.ReactNode
55
+ /** 输入框 id,用于与 `Field` 的 label 关联。 */
56
+ id?: string
57
+ /** 追加类名。 */
58
+ className?: string
59
+ /** 追加内联样式。 */
60
+ style?: React.CSSProperties
61
+ }
62
+
63
+ /**
64
+ * 下拉选择。
65
+ *
66
+ * @param props - 见 {@link SelectProps}。
67
+ * @returns 选择器元素。
68
+ */
69
+ export function Select({
70
+ options,
71
+ value,
72
+ defaultValue,
73
+ onChange,
74
+ multiple,
75
+ allowClear,
76
+ placeholder,
77
+ disabled,
78
+ size = 'md',
79
+ invalid,
80
+ prefix,
81
+ id,
82
+ className,
83
+ style,
84
+ }: SelectProps): React.ReactElement {
85
+ injectBasicStyles()
86
+ return (
87
+ <Arco.Select
88
+ options={options as SelectOption[]}
89
+ value={value}
90
+ defaultValue={defaultValue}
91
+ onChange={onChange as (value: unknown) => void}
92
+ mode={multiple === true ? 'multiple' : undefined}
93
+ allowClear={allowClear}
94
+ placeholder={placeholder}
95
+ disabled={disabled}
96
+ size={ARCO_SIZE[size]}
97
+ status={invalid === true ? 'error' : undefined}
98
+ prefix={prefix}
99
+ id={id}
100
+ className={className}
101
+ style={style}
102
+ />
103
+ )
104
+ }
105
+
106
+ /** {@link AutoComplete} 的 props。 */
107
+ export type AutoCompleteProps = React.ComponentPropsWithoutRef<typeof Arco.AutoComplete>
108
+
109
+ /**
110
+ * 带候选提示的文本输入。
111
+ *
112
+ * 高度沿用 Arco 的尺寸,通过 `inputProps` 透传输入框属性。
113
+ *
114
+ * @param props - 见 {@link AutoCompleteProps}。
115
+ * @returns 自动完成输入元素。
116
+ */
117
+ export function AutoComplete(props: AutoCompleteProps): React.ReactElement {
118
+ injectBasicStyles()
119
+ return <Arco.AutoComplete {...props} />
120
+ }