@tendaui/components 1.0.0 → 1.0.2

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 (270) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +176 -176
  3. package/alert/Alert.tsx +3 -2
  4. package/button/_example/base.tsx +10 -0
  5. package/button/_example/icon.tsx +20 -0
  6. package/color-picker/ColorPickPanel.tsx +9 -0
  7. package/color-picker/ColorPicker.tsx +67 -0
  8. package/color-picker/components/panel/alpha.tsx +32 -0
  9. package/color-picker/components/panel/format/index.tsx +47 -0
  10. package/color-picker/components/panel/format/inputs.tsx +119 -0
  11. package/color-picker/components/panel/header.tsx +37 -0
  12. package/color-picker/components/panel/hue.tsx +20 -0
  13. package/color-picker/components/panel/index.tsx +191 -0
  14. package/color-picker/components/panel/saturation.tsx +81 -0
  15. package/color-picker/components/panel/slider.tsx +76 -0
  16. package/color-picker/components/panel/swatches.tsx +84 -0
  17. package/color-picker/components/trigger.tsx +49 -0
  18. package/color-picker/defaultProps.ts +7 -0
  19. package/color-picker/helpers.ts +53 -0
  20. package/color-picker/hooks/useClassNames.ts +9 -0
  21. package/color-picker/hooks/useStyles.ts +39 -0
  22. package/color-picker/index.ts +12 -0
  23. package/color-picker/style/css.js +1 -0
  24. package/color-picker/style/index.js +1 -0
  25. package/color-picker/type.ts +143 -0
  26. package/color-picker/utils/color-picker/cmyk.ts +89 -0
  27. package/color-picker/utils/color-picker/color.ts +467 -0
  28. package/color-picker/utils/color-picker/constants.ts +187 -0
  29. package/color-picker/utils/color-picker/draggable.ts +100 -0
  30. package/color-picker/utils/color-picker/format.ts +95 -0
  31. package/color-picker/utils/color-picker/gradient.ts +243 -0
  32. package/color-picker/utils/color-picker/index.ts +7 -0
  33. package/color-picker/utils/color-picker/types.ts +33 -0
  34. package/common/observe.ts +33 -0
  35. package/common.ts +20 -0
  36. package/config-provider/ConfigContext.tsx +4 -1
  37. package/config-provider/index.ts +1 -1
  38. package/dialog/DialogCard.tsx +4 -6
  39. package/dialog/hooks/useDialogPosition.ts +1 -2
  40. package/dialog/plugin.tsx +3 -2
  41. package/drawer/Drawer.tsx +264 -0
  42. package/drawer/defaultProps.ts +19 -0
  43. package/drawer/hooks/useDrag.ts +98 -0
  44. package/drawer/hooks/useLockStyle.ts +36 -0
  45. package/drawer/index.ts +5 -0
  46. package/drawer/style/css.js +1 -0
  47. package/drawer/style/index.js +1 -0
  48. package/drawer/type.ts +193 -0
  49. package/drawer/utils/index.ts +76 -0
  50. package/fireworks/Fireworks.tsx +138 -0
  51. package/fireworks/index.ts +10 -0
  52. package/fireworks/style/css.js +0 -0
  53. package/fireworks/style/index.js +0 -0
  54. package/fireworks/type.ts +72 -0
  55. package/form/FormItem.tsx +5 -5
  56. package/form/easing.ts +10 -0
  57. package/form/scroll.ts +124 -0
  58. package/form/type.ts +519 -519
  59. package/global-config/default-config.ts +95 -0
  60. package/global-config/locale/ar_KW.ts +270 -0
  61. package/global-config/locale/en_US.ts +280 -0
  62. package/global-config/locale/it_IT.ts +287 -0
  63. package/global-config/locale/ja_JP.ts +279 -0
  64. package/global-config/locale/ko_KR.ts +279 -0
  65. package/global-config/locale/ru_RU.ts +288 -0
  66. package/global-config/locale/zh_CN.ts +279 -0
  67. package/global-config/locale/zh_TW.ts +279 -0
  68. package/global-config/mobile/default-config.ts +6 -0
  69. package/global-config/mobile/locale/ar_KW.ts +113 -0
  70. package/global-config/mobile/locale/en_US.ts +114 -0
  71. package/global-config/mobile/locale/it_IT.ts +114 -0
  72. package/global-config/mobile/locale/ja_JP.ts +101 -0
  73. package/global-config/mobile/locale/ko_KR.ts +101 -0
  74. package/global-config/mobile/locale/ru_RU.ts +113 -0
  75. package/global-config/mobile/locale/zh_CN.ts +101 -0
  76. package/global-config/mobile/locale/zh_TW.ts +101 -0
  77. package/global-config/t.ts +111 -0
  78. package/hooks/useControlled.ts +3 -3
  79. package/hooks/useDeepEffect.ts +32 -0
  80. package/hooks/useGlobalIcon.ts +10 -3
  81. package/hooks/useLastest.ts +2 -6
  82. package/hooks/useResizeObserve.ts +36 -0
  83. package/index.ts +10 -7
  84. package/input/Input.tsx +4 -1
  85. package/input/defaultProps.ts +0 -2
  86. package/input/type.ts +1 -6
  87. package/input-number/InputNumber.tsx +124 -0
  88. package/input-number/defaultProps.ts +17 -0
  89. package/input-number/index.ts +9 -0
  90. package/input-number/style/css.js +1 -0
  91. package/input-number/style/index.js +1 -0
  92. package/input-number/type.ts +147 -0
  93. package/input-number/useInputNumber.tsx +270 -0
  94. package/ip-input/IPInput.tsx +516 -0
  95. package/ip-input/defaultProps.ts +11 -0
  96. package/ip-input/index.ts +3 -0
  97. package/ip-input/style/css.js +1 -0
  98. package/ip-input/style/index.js +1 -0
  99. package/ip-input/type.ts +115 -0
  100. package/ip-input/utils.ts +112 -0
  101. package/layout/Aside.tsx +38 -0
  102. package/layout/Layout.tsx +104 -0
  103. package/layout/defaultProps.ts +9 -0
  104. package/layout/index.ts +9 -0
  105. package/layout/style/css.js +1 -0
  106. package/layout/style/index.js +1 -0
  107. package/layout/type.ts +43 -0
  108. package/list/List.tsx +144 -0
  109. package/list/ListItem.tsx +36 -0
  110. package/list/ListItemMeta.tsx +40 -0
  111. package/list/defaultProps.ts +11 -0
  112. package/list/hooks/useListVirtualScroll.ts +82 -0
  113. package/list/index.ts +11 -0
  114. package/list/style/css.js +1 -0
  115. package/list/style/index.js +1 -0
  116. package/list/type.ts +93 -0
  117. package/locale/LocalReceiver.ts +55 -0
  118. package/locale/ar_KW.ts +7 -0
  119. package/locale/en_US.ts +7 -0
  120. package/locale/it_IT.ts +6 -0
  121. package/locale/ja_JP.ts +6 -0
  122. package/locale/ko_KR.ts +6 -0
  123. package/locale/ru_RU.ts +6 -0
  124. package/locale/zh_CN.ts +5 -0
  125. package/locale/zh_TW.ts +7 -0
  126. package/notification/NotifyContainer.tsx +2 -2
  127. package/notification/NotifyContext.tsx +1 -0
  128. package/package.json +6 -3
  129. package/popup/Popup.tsx +34 -10
  130. package/radio/Radio.tsx +24 -0
  131. package/radio/RadioGroup.tsx +159 -0
  132. package/radio/defaultProps.ts +18 -0
  133. package/radio/index.ts +12 -0
  134. package/radio/style/css.js +0 -0
  135. package/radio/style/index.js +1 -0
  136. package/radio/type.ts +115 -0
  137. package/radio/useKeyboard.ts +36 -0
  138. package/select/hooks/useOptions.ts +10 -7
  139. package/select/hooks/usePanelVirtualScroll.ts +1 -1
  140. package/select/type.ts +382 -382
  141. package/select-input/type.ts +280 -280
  142. package/slider/Slider.tsx +270 -0
  143. package/slider/SliderHandleButton.tsx +50 -0
  144. package/slider/defaultProps.ts +15 -0
  145. package/slider/index.ts +9 -0
  146. package/slider/style/css.js +1 -0
  147. package/slider/style/index.js +1 -0
  148. package/slider/type.ts +77 -0
  149. package/style/all.js +26 -0
  150. package/styles/_global.scss +39 -39
  151. package/styles/_vars.scss +358 -386
  152. package/styles/components/alert/_index.scss +175 -175
  153. package/styles/components/alert/_vars.scss +39 -39
  154. package/styles/components/badge/_index.scss +70 -70
  155. package/styles/components/badge/_vars.scss +25 -25
  156. package/styles/components/button/_index.scss +499 -511
  157. package/styles/components/button/_mixins.scss +39 -39
  158. package/styles/components/button/_vars.scss +120 -122
  159. package/styles/components/checkbox/_index.scss +158 -158
  160. package/styles/components/checkbox/_var.scss +60 -60
  161. package/styles/components/color-picker/_index.scss +586 -0
  162. package/styles/components/color-picker/_mixins.scss +0 -0
  163. package/styles/components/color-picker/_vars.scss +84 -0
  164. package/styles/components/dialog/_animate.scss +135 -135
  165. package/styles/components/dialog/_index.scss +311 -311
  166. package/styles/components/dialog/_vars.scss +59 -59
  167. package/styles/components/drawer/_index.scss +205 -0
  168. package/styles/components/drawer/_mixins.scss +1 -0
  169. package/styles/components/drawer/_var.scss +53 -0
  170. package/styles/components/fireworks/_index.scss +86 -0
  171. package/styles/components/fireworks/_vars.scss +4 -0
  172. package/styles/components/form/_index.scss +174 -174
  173. package/styles/components/form/_mixins.scss +76 -76
  174. package/styles/components/form/_vars.scss +100 -100
  175. package/styles/components/input/_index.scss +349 -349
  176. package/styles/components/input/_mixins.scss +116 -116
  177. package/styles/components/input/_vars.scss +134 -134
  178. package/styles/components/input-number/_index.scss +353 -0
  179. package/styles/components/input-number/_mixins.scss +0 -0
  180. package/styles/components/input-number/_vars.scss +65 -0
  181. package/styles/components/ip-input/_index.scss +280 -0
  182. package/styles/components/layout/_index.scss +47 -0
  183. package/styles/components/layout/_mixin.scss +0 -0
  184. package/styles/components/layout/_vars.scss +18 -0
  185. package/styles/components/layout/doc.scss +74 -0
  186. package/styles/components/list/_index.scss +172 -0
  187. package/styles/components/list/_mixins.scss +0 -0
  188. package/styles/components/list/_vars.scss +41 -0
  189. package/styles/components/loading/_index.scss +112 -112
  190. package/styles/components/loading/_vars.scss +39 -39
  191. package/styles/components/notification/_index.scss +160 -160
  192. package/styles/components/notification/_mixins.scss +12 -12
  193. package/styles/components/notification/_vars.scss +59 -59
  194. package/styles/components/popup/_index.scss +82 -82
  195. package/styles/components/popup/_mixin.scss +149 -149
  196. package/styles/components/popup/_var.scss +31 -31
  197. package/styles/components/radio/_index.scss +376 -0
  198. package/styles/components/radio/_mixins.scss +0 -0
  199. package/styles/components/radio/_var.scss +92 -0
  200. package/styles/components/select/_index.scss +290 -290
  201. package/styles/components/select/_var.scss +65 -65
  202. package/styles/components/select-input/_index.scss +5 -5
  203. package/styles/components/select-input/_var.scss +3 -3
  204. package/styles/components/slider/_index.scss +241 -0
  205. package/styles/components/slider/_mixins.scss +0 -0
  206. package/styles/components/slider/_vars.scss +50 -0
  207. package/styles/components/switch/_index.scss +279 -279
  208. package/styles/components/switch/_vars.scss +61 -61
  209. package/styles/components/table/_index.scss +193 -0
  210. package/styles/components/table/_var.scss +52 -0
  211. package/styles/components/tabs/_index.scss +165 -0
  212. package/styles/components/tabs/_mixins.scss +11 -0
  213. package/styles/components/tabs/_vars.scss +71 -0
  214. package/styles/components/tag/_index.scss +316 -316
  215. package/styles/components/tag/_var.scss +85 -85
  216. package/styles/components/tag-input/_index.scss +163 -163
  217. package/styles/components/tag-input/_vars.scss +16 -16
  218. package/styles/globals.css +250 -250
  219. package/styles/mixins/_focus.scss +7 -7
  220. package/styles/mixins/_layout.scss +32 -32
  221. package/styles/mixins/_reset.scss +10 -10
  222. package/styles/mixins/_scrollbar.scss +31 -31
  223. package/styles/mixins/_text.scss +48 -48
  224. package/styles/rillple.css +16 -16
  225. package/styles/scrollbar.css +41 -41
  226. package/styles/themes/_dark.scss +191 -191
  227. package/styles/themes/_font.scss +69 -79
  228. package/styles/themes/_index.scss +5 -5
  229. package/styles/themes/_light.scss +190 -190
  230. package/styles/themes/_radius.scss +9 -9
  231. package/styles/themes/_size.scss +68 -68
  232. package/styles/themes.css +66 -66
  233. package/styles/utilities/_animation.scss +57 -57
  234. package/styles/utilities/_tips.scss +9 -9
  235. package/tab/TabBar.tsx +85 -0
  236. package/tab/TabNav.tsx +103 -0
  237. package/tab/TabNavItem.tsx +80 -0
  238. package/tab/TabPanel.tsx +42 -0
  239. package/tab/Tabs.tsx +71 -0
  240. package/tab/defaultProps.ts +19 -0
  241. package/tab/index.ts +7 -0
  242. package/tab/style/index.js +1 -0
  243. package/tab/type.ts +125 -0
  244. package/tab/useTabClass.ts +20 -0
  245. package/table/Cell.tsx +109 -0
  246. package/table/TBody.tsx +77 -0
  247. package/table/THead.tsx +63 -0
  248. package/table/TR.tsx +78 -0
  249. package/table/Table.tsx +73 -0
  250. package/table/defaultProps.ts +14 -0
  251. package/table/hooks/index.ts +4 -0
  252. package/table/hooks/useTableClassName.ts +63 -0
  253. package/table/hooks/useTableStyle.ts +93 -0
  254. package/table/index.ts +7 -0
  255. package/table/style/css.js +1 -0
  256. package/table/style/index.js +1 -0
  257. package/table/type.ts +192 -0
  258. package/tag/Tag.tsx +1 -1
  259. package/tag-input/hooks/useTagList.tsx +1 -1
  260. package/utils/dom.ts +4 -0
  261. package/utils/forwardRefWithStatics.ts +1 -4
  262. package/utils/input-number/large-number.ts +423 -0
  263. package/utils/input-number/number.ts +257 -0
  264. package/utils/isFragment.ts +6 -6
  265. package/utils/log/index.ts +3 -0
  266. package/utils/log/log.ts +30 -0
  267. package/utils/log/types.ts +12 -0
  268. package/utils/number.ts +21 -0
  269. package/utils/scroll.ts +26 -0
  270. package/utils/style.ts +2 -4
@@ -0,0 +1,353 @@
1
+ // 组件允许单个组件打包,因此默认引入公共基础样式
2
+
3
+ @import "../../_vars.scss";
4
+
5
+ @import "./_vars.scss";
6
+
7
+ @import "../../mixins/_reset.scss";
8
+
9
+ $inputCls: "#{$prefix}-input";
10
+ $inputNumberCls: "#{$prefix}-input-number";
11
+
12
+ .#{$inputNumberCls} {
13
+ @include reset;
14
+
15
+ display: inline-block;
16
+ position: relative;
17
+ box-sizing: border-box;
18
+ padding: 0 $input-number-button-width;
19
+ user-select: none;
20
+ width: $input-number-width;
21
+
22
+ &:not(&--column) {
23
+ > .#{$prefix}-input-number__decrease + .#{$prefix}-input__wrap {
24
+ margin-left: $comp-margin-xs;
25
+ }
26
+ }
27
+
28
+ input::-webkit-outer-spin-button,
29
+ input::-webkit-inner-spin-button {
30
+ appearance: none;
31
+ }
32
+
33
+ input[type="number"] {
34
+ appearance: textfield;
35
+ }
36
+
37
+ > .#{$prefix}-input__tips {
38
+ position: absolute;
39
+ left: 0;
40
+ }
41
+
42
+ // 输入框和右置内容之间需要间距
43
+ input + .#{$prefix}-input__suffix {
44
+ margin-left: $input-number-padding-horizontal-default;
45
+ }
46
+
47
+ .#{$prefix}-input__prefix {
48
+ margin-right: $input-number-padding-horizontal-default;
49
+ }
50
+
51
+ .#{$inputCls} {
52
+ color: $input-number-inner-color;
53
+ }
54
+
55
+ // autoWidth适配
56
+ &.#{$inputNumberCls}--auto-width {
57
+ width: auto;
58
+
59
+ &.#{$prefix}-is-controls-right {
60
+ min-width: auto;
61
+ width: auto;
62
+ }
63
+
64
+ .#{$prefix}-input__inner {
65
+ min-width: 42px;
66
+ }
67
+ }
68
+
69
+ & &__decrease,
70
+ & &__increase {
71
+ width: $input-number-button-width;
72
+ height: $input-number-button-height;
73
+ position: absolute;
74
+ top: 0;
75
+ border: 1px solid $input-number-button-border-color;
76
+ box-sizing: border-box;
77
+ border-radius: $border-radius-default;
78
+ background-color: $input-number-button-bg-color;
79
+ display: flex;
80
+ justify-content: center;
81
+ align-items: center;
82
+ z-index: 1;
83
+ cursor: pointer;
84
+ // transition: all @anim-time-fn-easing @anim-duration-base;
85
+
86
+ &:hover {
87
+ color: $input-number-button-color-hover;
88
+ border-color: $input-number-button-color-hover;
89
+
90
+ .t-icon {
91
+ color: $input-number-button-color-hover;
92
+ }
93
+ }
94
+
95
+ &:active {
96
+ color: $input-number-button-color-hover;
97
+ background-color: $bg-color-container-hover;
98
+ }
99
+
100
+ .t-icon {
101
+ position: relative;
102
+ z-index: 1;
103
+ font-size: $input-number-font-size;
104
+ color: $text-color-secondary;
105
+ }
106
+
107
+ &.#{$prefix}-is-disabled {
108
+ color: $input-number-button-color-disabled;
109
+ cursor: no-drop;
110
+ background-color: $input-number-button-bg-color-disabled;
111
+
112
+ .t-icon {
113
+ color: $input-number-button-color-disabled;
114
+ }
115
+
116
+ &:hover {
117
+ border-color: $input-number-button-border-color;
118
+
119
+ .t-icon {
120
+ color: $input-number-button-color-disabled;
121
+ }
122
+ }
123
+
124
+ &::placeholder {
125
+ color: $input-number-inner-color-disabled;
126
+ }
127
+ }
128
+ }
129
+
130
+ & &__decrease {
131
+ left: 0;
132
+ }
133
+
134
+ & &__increase {
135
+ right: -8px;
136
+ }
137
+ }
138
+
139
+ .#{$inputNumberCls}.#{$prefix}-is-disabled {
140
+ .#{$inputCls} {
141
+ cursor: no-drop;
142
+ background-color: $input-number-bg-color-disabled;
143
+ color: $input-number-inner-color-disabled;
144
+
145
+ &:hover,
146
+ &:focus,
147
+ &:active {
148
+ border-color: $input-number-button-border-color;
149
+ }
150
+ }
151
+
152
+ .#{$inputNumberCls}__decrease,
153
+ .#{$inputNumberCls}__increase {
154
+ color: $input-number-button-color-disabled;
155
+ cursor: no-drop;
156
+ background-color: $input-number-button-bg-color-disabled;
157
+
158
+ .t-icon {
159
+ color: $text-color-secondary;
160
+ }
161
+ }
162
+ }
163
+
164
+ .#{$inputNumberCls}.#{$prefix}-size-s {
165
+ width: $input-number-width-s;
166
+ padding: 0 $input-number-button-width-s;
167
+
168
+ .#{$inputCls} {
169
+ font-size: $font-size-s;
170
+ height: $input-number-inner-height-s;
171
+ line-height: $input-number-inner-height-s;
172
+ }
173
+
174
+ .#{$inputNumberCls}__decrease,
175
+ .#{$inputNumberCls}__increase {
176
+ font-size: $input-number-font-size-s;
177
+ width: $input-number-button-width-s;
178
+ height: $input-number-button-height-s;
179
+ }
180
+ }
181
+
182
+ .#{$inputNumberCls}.#{$prefix}-size-l {
183
+ width: $input-number-width-l;
184
+ padding: 0 $input-number-button-width-l;
185
+
186
+ .#{$inputCls} {
187
+ height: $input-number-inner-height-l;
188
+ line-height: $input-number-inner-height-l;
189
+ }
190
+
191
+ .#{$inputNumberCls}__decrease,
192
+ .#{$inputNumberCls}__increase {
193
+ font-size: $input-number-font-size-l;
194
+ width: $input-number-button-width-l;
195
+ height: $input-number-button-height-l;
196
+ }
197
+
198
+ &.#{$prefix}-is-controls-right {
199
+ .#{$inputCls} {
200
+ height: $input-number-inner-height-l;
201
+ line-height: $input-number-inner-height-l;
202
+ padding-right: calc($input-number-right-button-width-l + $input-number-padding-horizontal-default);
203
+ }
204
+
205
+ .#{$inputNumberCls}__decrease,
206
+ .#{$inputNumberCls}__increase {
207
+ width: $input-number-right-button-width-l;
208
+ font-size: $input-number-right-font-size-l;
209
+ }
210
+ }
211
+
212
+ .#{$prefix}-input--prefix {
213
+ font: $font-body-large;
214
+ padding: 0 $comp-paddingLR-m;
215
+ }
216
+ }
217
+
218
+ .#{$inputNumberCls}.#{$inputNumberCls}--normal {
219
+ padding: 0;
220
+ border-radius: $border-radius-default;
221
+
222
+ &.#{$prefix}-is-disabled {
223
+ cursor: no-drop;
224
+ color: $input-number-button-color-disabled;
225
+
226
+ &:hover {
227
+ .#{$inputCls} {
228
+ border-color: $input-number-button-border-color;
229
+ }
230
+ }
231
+
232
+ &::placeholder {
233
+ color: $input-number-inner-color-disabled;
234
+ }
235
+
236
+ .#{$inputCls}:focus {
237
+ box-shadow: none;
238
+ }
239
+ }
240
+ }
241
+ .#{$inputNumberCls}.#{$prefix}-is-controls-right {
242
+ width: $input-number-right-width;
243
+ padding: 0;
244
+
245
+ &:hover {
246
+ .#{$inputNumberCls}__decrease,
247
+ .#{$inputNumberCls}__increase {
248
+ opacity: 1;
249
+ visibility: visible;
250
+ }
251
+ }
252
+
253
+ .#{$inputCls} {
254
+ width: 100%;
255
+ box-sizing: border-box;
256
+ margin: 0;
257
+ padding-right: calc($input-number-right-button-width + $input-number-padding-horizontal-default);
258
+ border-radius: $border-radius-default;
259
+ }
260
+
261
+ .#{$inputNumberCls}__decrease,
262
+ .#{$inputNumberCls}__increase {
263
+ width: $input-number-right-button-width;
264
+ height: $input-number-button-column-height;
265
+ border: 0;
266
+ left: initial;
267
+ top: initial;
268
+ right: 1px;
269
+ border-radius: 0;
270
+ background: $input-number-right-button-bg-color;
271
+ opacity: 0;
272
+ visibility: hidden;
273
+ z-index: 2;
274
+
275
+ .t-icon {
276
+ font-size: $input-number-right-font-size;
277
+ }
278
+
279
+ &:hover {
280
+ background: $input-number-right-button-hover-bg-color;
281
+
282
+ .t-icon {
283
+ color: $text-color-primary;
284
+ }
285
+ }
286
+
287
+ &.#{$prefix}-is-disabled {
288
+ color: $input-number-button-color-disabled;
289
+ cursor: no-drop;
290
+ background-color: $input-number-button-bg-color-disabled;
291
+
292
+ .t-icon {
293
+ color: $input-number-button-color-disabled;
294
+ }
295
+
296
+ &:hover {
297
+ border-color: $input-number-button-border-color;
298
+
299
+ .t-icon {
300
+ color: $input-number-button-color-disabled;
301
+ }
302
+ }
303
+
304
+ &::placeholder {
305
+ color: $input-number-inner-color-disabled;
306
+ }
307
+ }
308
+ }
309
+
310
+ .#{$inputNumberCls}__increase {
311
+ top: 1px;
312
+ border-top-right-radius: calc($border-radius-default - 1px);
313
+ }
314
+
315
+ .#{$inputNumberCls}__decrease {
316
+ top: calc($input-number-button-column-height + 3px);
317
+ border-bottom-right-radius: calc($border-radius-default - 1px);
318
+ }
319
+
320
+ &.#{$prefix}-size-l {
321
+ width: $input-number-right-width-l;
322
+
323
+ .#{$inputNumberCls}__increase,
324
+ .#{$inputNumberCls}__decrease {
325
+ height: $input-number-button-column-height-l;
326
+ }
327
+ .#{$inputNumberCls}__decrease {
328
+ top: calc($input-number-button-column-height-l + 3px);
329
+ }
330
+ }
331
+
332
+ &.#{$prefix}-size-s {
333
+ width: $input-number-right-width-s;
334
+
335
+ .#{$inputNumberCls}__increase,
336
+ .#{$inputNumberCls}__decrease {
337
+ height: $input-number-button-column-height-s;
338
+ }
339
+ .#{$inputNumberCls}__decrease {
340
+ top: calc($input-number-button-column-height-s + 3px);
341
+ }
342
+ }
343
+ }
344
+
345
+ .#{$inputNumberCls}--row {
346
+ .#{$prefix}-input__wrap {
347
+ width: initial;
348
+ margin-right: $comp-margin-xs;
349
+ }
350
+ .#{$prefix}-input-number__increase {
351
+ right: 0;
352
+ }
353
+ }
File without changes
@@ -0,0 +1,65 @@
1
+ // 颜色
2
+ // $input-number-border-color: $border-level-2-color; // 数字输入框边框颜色
3
+
4
+ $input-number-inner-color: $text-color-primary; // 数字输入框文字颜色
5
+ $input-number-button-bg-color: transparent; // 数字输入框操作按钮背景颜色
6
+ $input-number-right-button-bg-color: $bg-color-secondarycontainer; // 右侧数字输入框操作按钮背景颜色
7
+ $input-number-right-button-hover-bg-color: $bg-color-component-hover; // 右侧数字输入框操作按钮背景颜色
8
+ $input-number-button-border-color: $border-level-2-color; // 数字输入框操作按钮边框颜色
9
+ $input-number-button-color: $text-color-disabled; // 数字输入框操作按钮图标颜色
10
+
11
+ $input-number-right-bg-color: $bg-color-container; // 右侧调整数字输入框背景颜色
12
+ $input-number-right-button-border-color: $border-level-2-color; // 右侧调整数字输入框操作按钮边框颜色
13
+
14
+ $input-number-border-color-hover: $brand-color-hover; // 数字输入框hover边框颜色
15
+ $input-number-right-border-color-hover: $brand-color-hover; // 数字输入框操作按钮hover边框颜色
16
+ $input-number-button-color-hover: $brand-color; // 数字输入框操作按钮hover字体色
17
+ $input-number-bg-color-disabled: $bg-color-component-disabled; // 数字输入区域disabled背景颜色
18
+ $input-number-inner-color-disabled: $text-color-disabled; // 数字输入区域disabled文字颜色
19
+ $input-number-button-color-disabled: $text-color-disabled; // 数字输入框操作按钮disabled图标颜色
20
+ $input-number-button-bg-color-disabled: $bg-color-component-disabled; // 数字输入框操作按钮disabled背景颜色
21
+
22
+ $input-number-text-color-tips: $text-color-placeholder;
23
+ $input-number-text-color-success: $success-color;
24
+ $input-number-text-color-warning: $warning-color;
25
+ $input-number-text-color-error: $error-color;
26
+
27
+ // 尺寸
28
+ $input-number-width-s: 120px; // 数字输入组件宽度 小
29
+ $input-number-width: 144px; // 数字输入组件宽度 中
30
+ $input-number-width-l: 168px; // 数字输入组件宽度 大
31
+
32
+ $input-number-button-width-s: $comp-size-xs; // 数字输入框操作按钮宽度 小
33
+ $input-number-button-width: $comp-size-m; // 数字输入框操作按钮的宽度 中
34
+ $input-number-button-width-l: $comp-size-xl; // 数字输入框操作按钮宽度 大
35
+
36
+ $input-number-button-height-s: $comp-size-xs; // 数字输入框操作按钮高度 小
37
+ $input-number-button-height: $comp-size-m; // 数字输入框操作按钮的高度 中
38
+ $input-number-button-height-l: $comp-size-xl; // 数字输入框操作按钮高度 大
39
+
40
+ $input-number-inner-height-s: $comp-size-xs; // 数字输入框高度 小
41
+ $input-number-inner-height: $comp-size-m; // 数字输入框高度 中
42
+ $input-number-inner-height-l: $comp-size-xl; // 数字输入框高度 大
43
+
44
+ $input-number-right-width-s: 88px; // 右侧调整数字输入组件宽度 小
45
+ $input-number-right-width: 96px; // 右侧调整数字输入组件宽度 中
46
+ $input-number-right-width-l: 120px; // 右侧调整数字输入组件宽度 大
47
+
48
+ $input-number-right-button-width: $comp-size-m; // 右侧调整数字输入框操作按钮宽度 中
49
+ $input-number-right-button-width-l: $comp-size-xl; // 右侧调整数字输入框操作按钮宽度 大
50
+
51
+ $input-number-button-column-height-s: calc(calc($comp-size-xs / 2) - 2px); // 右侧调整数字操作按钮的高度 中
52
+ $input-number-button-column-height: calc(calc($comp-size-m / 2) - 2px); // 右侧调整数字操作按钮的高度 中
53
+ $input-number-button-column-height-l: calc(calc($comp-size-xl / 2) - 2px); // 右侧调整数字操作按钮的高度 大
54
+
55
+ $input-number-padding-horizontal-default: $comp-paddingLR-s;
56
+
57
+ // 字号
58
+ $input-number-font-size: $font-size-l; // 数字输入框操作按钮字号
59
+ $input-number-font-size-s: $font-size-base; // 小尺寸数字输入框操作按钮字号
60
+ $input-number-font-size-l: ($font-size * 1.8); // 大尺寸数字输入框操作按钮字号
61
+
62
+ $input-number-right-font-size: $font-size-s; // 右侧调整数字输入框操作按钮字号
63
+ $input-number-right-font-size-l: $font-size-l; // 大尺寸右侧调整数字输入框操作按钮字号
64
+
65
+ $input-number-tips-font-size: $font-size-s;
@@ -0,0 +1,280 @@
1
+ @import "../../_vars.scss";
2
+ @import "../input/_vars.scss";
3
+ @import "../input/_mixins.scss";
4
+ @import "../../mixins/_reset.scss";
5
+ @import "../../utilities/_tips.scss";
6
+
7
+ .#{$prefix}-ip-input {
8
+ @include reset;
9
+ width: auto;
10
+ display: inline-block;
11
+ position: relative;
12
+ box-sizing: border-box;
13
+
14
+ &__wrapper {
15
+ // Windows 风格:左对齐,紧凑布局
16
+ display: inline-flex;
17
+ align-items: center;
18
+ width: auto;
19
+ min-width: fit-content;
20
+ position: relative;
21
+ }
22
+
23
+ &__segments {
24
+ // Windows 风格:输入框之间有间距
25
+ display: inline-flex;
26
+ align-items: center;
27
+ gap: 0;
28
+ }
29
+
30
+ &__segment {
31
+ // Windows 风格:固定宽度,独立边框
32
+ width: 50px;
33
+ min-width: 50px;
34
+ max-width: 50px;
35
+ height: $input-height-default;
36
+ padding: 0 6px;
37
+ border: 1px solid $input-border-color-default;
38
+ border-radius: $input-border-radius;
39
+ background-color: $input-bg-color-default;
40
+ color: $input-text-color-default;
41
+ font: $input-font;
42
+ text-align: center;
43
+ outline: none;
44
+ box-sizing: border-box;
45
+ transition: $input-inner-transition;
46
+ // 每个输入框都是独立的,有完整的边框
47
+ margin: 0;
48
+
49
+ &:focus {
50
+ // Windows 风格:聚焦时有明显的边框高亮
51
+ border-color: $input-border-color-default-focus;
52
+ box-shadow: 0 0 0 1px $input-border-color-default-focus;
53
+ z-index: 1;
54
+ position: relative;
55
+ outline: none;
56
+ }
57
+
58
+ &--focused {
59
+ border-color: $input-border-color-default-focus;
60
+ box-shadow: 0 0 0 1px $input-border-color-default-focus;
61
+ z-index: 1;
62
+ position: relative;
63
+ }
64
+
65
+ &--error {
66
+ border-color: $input-border-color-error;
67
+
68
+ // 错误状态下的聚焦样式,优先级高于普通聚焦和 --focused 类
69
+ &:focus {
70
+ border-color: $input-border-color-error !important;
71
+ box-shadow: 0 0 0 1px $input-border-color-error !important;
72
+ }
73
+
74
+ // 当同时有 --error 和 --focused 类时,确保错误样式优先
75
+ &.#{$prefix}-ip-input__segment--focused {
76
+ border-color: $input-border-color-error !important;
77
+ box-shadow: 0 0 0 1px $input-border-color-error !important;
78
+ }
79
+ }
80
+
81
+ &::placeholder {
82
+ color: $input-placeholder-color;
83
+ }
84
+
85
+ &:disabled {
86
+ background-color: $input-bg-color-disabled;
87
+ color: $input-text-color-disabled;
88
+ cursor: not-allowed;
89
+ }
90
+
91
+ &[readonly] {
92
+ background-color: $input-bg-color-readonly;
93
+ color: $input-text-color-readonly;
94
+ cursor: $input-cursor-readonly;
95
+ }
96
+ }
97
+
98
+ &__separator {
99
+ // Windows 风格:点号分隔符,有适当间距
100
+ padding: 0 4px;
101
+ margin: 0 2px;
102
+ color: $text-color-primary;
103
+ font: $input-font;
104
+ font-weight: 500;
105
+ user-select: none;
106
+ flex-shrink: 0;
107
+ line-height: $input-height-default;
108
+ display: inline-flex;
109
+ align-items: center;
110
+ justify-content: center;
111
+ }
112
+
113
+ &__cidr {
114
+ // Windows 风格:CIDR 掩码输入框也是独立样式
115
+ width: 50px;
116
+ min-width: 50px;
117
+ max-width: 50px;
118
+ height: $input-height-default;
119
+ padding: 0 6px;
120
+ border: 1px solid $input-border-color-default;
121
+ border-radius: $input-border-radius;
122
+ background-color: $input-bg-color-default;
123
+ color: $input-text-color-default;
124
+ font: $input-font;
125
+ text-align: center;
126
+ outline: none;
127
+ box-sizing: border-box;
128
+ transition: $input-inner-transition;
129
+ margin-left: 8px;
130
+
131
+ &:focus {
132
+ // Windows 风格:聚焦时有明显的边框高亮
133
+ border-color: $input-border-color-default-focus;
134
+ box-shadow: 0 0 0 1px $input-border-color-default-focus;
135
+ z-index: 1;
136
+ position: relative;
137
+ outline: none;
138
+ }
139
+
140
+ &--error {
141
+ border-color: $input-border-color-error;
142
+
143
+ &:focus {
144
+ border-color: $input-border-color-error;
145
+ box-shadow: 0 0 0 1px $input-border-color-error;
146
+ }
147
+ }
148
+
149
+ &::placeholder {
150
+ color: $input-placeholder-color;
151
+ }
152
+
153
+ &:disabled {
154
+ background-color: $input-bg-color-disabled;
155
+ color: $input-text-color-disabled;
156
+ cursor: not-allowed;
157
+ }
158
+
159
+ &[readonly] {
160
+ background-color: $input-bg-color-readonly;
161
+ color: $input-text-color-readonly;
162
+ cursor: $input-cursor-readonly;
163
+ }
164
+ }
165
+
166
+ &__ipv6-wrapper {
167
+ display: inline-flex;
168
+ align-items: center;
169
+ flex: 1;
170
+ gap: 0;
171
+ }
172
+
173
+ &__ipv6 {
174
+ flex: 1;
175
+ min-width: 0;
176
+ height: $input-height-default;
177
+ padding: 0 $comp-paddingLR-s;
178
+ border: 1px solid $input-border-color-default;
179
+ border-radius: $input-border-radius;
180
+ background-color: $input-bg-color-default;
181
+ color: $input-text-color-default;
182
+ font: $input-font;
183
+ outline: none;
184
+ box-sizing: border-box;
185
+ transition: $input-inner-transition;
186
+
187
+ &:focus {
188
+ border-color: $input-border-color-default-focus;
189
+ box-shadow: $input-box-shadow-focus;
190
+ z-index: 1;
191
+ position: relative;
192
+ }
193
+
194
+ &--error {
195
+ border-color: $input-border-color-error;
196
+
197
+ &:focus {
198
+ border-color: $input-border-color-error;
199
+ box-shadow: 0 0 0 2px $input-box-shadow-color-error-focus;
200
+ }
201
+ }
202
+
203
+ &::placeholder {
204
+ color: $input-placeholder-color;
205
+ }
206
+
207
+ &:disabled {
208
+ background-color: $input-bg-color-disabled;
209
+ color: $input-text-color-disabled;
210
+ cursor: not-allowed;
211
+ }
212
+
213
+ &[readonly] {
214
+ background-color: $input-bg-color-readonly;
215
+ color: $input-text-color-readonly;
216
+ cursor: $input-cursor-readonly;
217
+ }
218
+ }
219
+
220
+ &__clear {
221
+ position: absolute;
222
+ right: $comp-paddingLR-s;
223
+ top: 50%;
224
+ transform: translateY(-50%);
225
+ cursor: pointer;
226
+ color: $input-inner-suffix-icon-color;
227
+ transition: all $anim-duration-base linear;
228
+ z-index: 2;
229
+
230
+ &:hover {
231
+ color: $input-inner-suffix-icon-color-hover;
232
+ }
233
+ }
234
+
235
+ &__error {
236
+ margin-top: $comp-margin-xs;
237
+ font: $input-tips-font;
238
+ color: $input-text-color-error;
239
+ min-height: $input-tips-min-height;
240
+ }
241
+
242
+ &__tips {
243
+ margin-top: $comp-margin-xs;
244
+ font: $input-tips-font;
245
+ color: $input-text-color-tips;
246
+ min-height: $input-tips-min-height;
247
+ }
248
+
249
+ // 状态样式
250
+ &.#{$prefix}-is-disabled {
251
+ .#{$prefix}-ip-input__segment,
252
+ .#{$prefix}-ip-input__cidr,
253
+ .#{$prefix}-ip-input__ipv6 {
254
+ background-color: $input-bg-color-disabled;
255
+ color: $input-text-color-disabled;
256
+ cursor: not-allowed;
257
+ }
258
+ }
259
+
260
+ &.#{$prefix}-is-readonly {
261
+ .#{$prefix}-ip-input__segment,
262
+ .#{$prefix}-ip-input__cidr,
263
+ .#{$prefix}-ip-input__ipv6 {
264
+ background-color: $input-bg-color-readonly;
265
+ color: $input-text-color-readonly;
266
+ cursor: $input-cursor-readonly;
267
+ }
268
+ }
269
+
270
+ &.#{$prefix}-is-focused {
271
+ .#{$prefix}-ip-input__segment,
272
+ .#{$prefix}-ip-input__cidr,
273
+ .#{$prefix}-ip-input__ipv6 {
274
+ border-color: $input-border-color-default-focus;
275
+ }
276
+ }
277
+
278
+ // 移除整个组件的 is-error 样式,因为每个段有自己的错误状态
279
+ // 错误状态通过 __segment--error 等类来控制
280
+ }