@tendaui/components 1.3.0 → 1.3.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.
Files changed (142) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +176 -176
  3. package/button/_example/ghost.tsx +2 -5
  4. package/color-picker/utils/color-picker/cmyk.ts +89 -89
  5. package/color-picker/utils/color-picker/color.ts +467 -467
  6. package/color-picker/utils/color-picker/constants.ts +187 -187
  7. package/color-picker/utils/color-picker/draggable.ts +99 -99
  8. package/color-picker/utils/color-picker/format.ts +90 -90
  9. package/color-picker/utils/color-picker/gradient.ts +237 -237
  10. package/color-picker/utils/color-picker/index.ts +7 -7
  11. package/color-picker/utils/color-picker/types.ts +33 -33
  12. package/dialog/hooks/useDialogPosition.ts +35 -35
  13. package/form/type.ts +519 -519
  14. package/global-config/default-config.ts +95 -95
  15. package/global-config/locale/ar_KW.ts +259 -259
  16. package/global-config/locale/en_US.ts +265 -265
  17. package/global-config/locale/it_IT.ts +264 -264
  18. package/global-config/locale/ja_JP.ts +264 -264
  19. package/global-config/locale/ko_KR.ts +264 -264
  20. package/global-config/locale/ru_RU.ts +277 -277
  21. package/global-config/locale/zh_CN.ts +265 -265
  22. package/global-config/locale/zh_TW.ts +265 -265
  23. package/global-config/mobile/default-config.ts +6 -6
  24. package/global-config/mobile/locale/ar_KW.ts +112 -112
  25. package/global-config/mobile/locale/en_US.ts +113 -113
  26. package/global-config/mobile/locale/it_IT.ts +113 -113
  27. package/global-config/mobile/locale/ja_JP.ts +100 -100
  28. package/global-config/mobile/locale/ko_KR.ts +100 -100
  29. package/global-config/mobile/locale/ru_RU.ts +112 -112
  30. package/global-config/mobile/locale/zh_CN.ts +100 -100
  31. package/global-config/mobile/locale/zh_TW.ts +100 -100
  32. package/global-config/t.ts +111 -111
  33. package/input-number/InputNumber.tsx +124 -124
  34. package/input-number/defaultProps.ts +17 -17
  35. package/input-number/index.ts +9 -9
  36. package/input-number/style/css.js +1 -1
  37. package/input-number/style/index.js +1 -1
  38. package/input-number/useInputNumber.tsx +270 -270
  39. package/list/ListItem.tsx +36 -36
  40. package/list/ListItemMeta.tsx +40 -40
  41. package/list/defaultProps.ts +11 -11
  42. package/list/hooks/useListVirtualScroll.ts +82 -82
  43. package/list/style/css.js +1 -1
  44. package/list/style/index.js +1 -1
  45. package/locale/LocalReceiver.ts +55 -55
  46. package/locale/ar_KW.ts +7 -7
  47. package/locale/en_US.ts +7 -7
  48. package/locale/it_IT.ts +6 -6
  49. package/locale/ja_JP.ts +6 -6
  50. package/locale/ko_KR.ts +6 -6
  51. package/locale/ru_RU.ts +6 -6
  52. package/locale/zh_CN.ts +5 -5
  53. package/locale/zh_TW.ts +7 -7
  54. package/package.json +2 -2
  55. package/radio/_example/default.tsx +2 -2
  56. package/select/type.ts +382 -382
  57. package/select-input/type.ts +280 -280
  58. package/slider/SliderHandleButton.tsx +50 -50
  59. package/slider/defaultProps.ts +15 -15
  60. package/slider/style/css.js +1 -1
  61. package/slider/style/index.js +1 -1
  62. package/styles/_global.scss +40 -40
  63. package/styles/_vars.scss +374 -374
  64. package/styles/components/alert/_index.scss +175 -175
  65. package/styles/components/alert/_vars.scss +41 -41
  66. package/styles/components/badge/_index.scss +71 -71
  67. package/styles/components/badge/_vars.scss +26 -26
  68. package/styles/components/button/_index.scss +499 -499
  69. package/styles/components/button/_mixins.scss +40 -40
  70. package/styles/components/button/_vars.scss +121 -121
  71. package/styles/components/checkbox/_index.scss +158 -158
  72. package/styles/components/checkbox/_var.scss +59 -59
  73. package/styles/components/color-picker/_index.scss +586 -586
  74. package/styles/components/color-picker/_vars.scss +79 -79
  75. package/styles/components/dialog/_animate.scss +133 -133
  76. package/styles/components/dialog/_index.scss +310 -310
  77. package/styles/components/dialog/_vars.scss +60 -60
  78. package/styles/components/drawer/_index.scss +206 -206
  79. package/styles/components/drawer/_var.scss +55 -55
  80. package/styles/components/fireworks/_index.scss +86 -86
  81. package/styles/components/fireworks/_vars.scss +5 -5
  82. package/styles/components/form/_index.scss +175 -175
  83. package/styles/components/form/_mixins.scss +74 -74
  84. package/styles/components/form/_vars.scss +101 -101
  85. package/styles/components/input/_index.scss +350 -350
  86. package/styles/components/input/_mixins.scss +120 -120
  87. package/styles/components/input/_vars.scss +130 -130
  88. package/styles/components/input-number/_index.scss +327 -327
  89. package/styles/components/input-number/_vars.scss +56 -56
  90. package/styles/components/ip-input/_index.scss +277 -277
  91. package/styles/components/layout/_index.scss +47 -47
  92. package/styles/components/layout/_vars.scss +19 -19
  93. package/styles/components/layout/doc.scss +74 -74
  94. package/styles/components/list/_index.scss +172 -172
  95. package/styles/components/list/_vars.scss +42 -42
  96. package/styles/components/loading/_index.scss +113 -113
  97. package/styles/components/loading/_vars.scss +40 -40
  98. package/styles/components/notification/_index.scss +140 -140
  99. package/styles/components/notification/_mixins.scss +13 -13
  100. package/styles/components/notification/_vars.scss +60 -60
  101. package/styles/components/popup/_index.scss +78 -78
  102. package/styles/components/popup/_mixin.scss +149 -149
  103. package/styles/components/popup/_vars.scss +33 -33
  104. package/styles/components/radio/_index.scss +376 -376
  105. package/styles/components/radio/_vars.scss +89 -89
  106. package/styles/components/select/_index.scss +291 -291
  107. package/styles/components/select/_var.scss +64 -64
  108. package/styles/components/select-input/_index.scss +5 -5
  109. package/styles/components/select-input/_var.scss +4 -4
  110. package/styles/components/slider/_index.scss +241 -241
  111. package/styles/components/slider/_vars.scss +51 -51
  112. package/styles/components/switch/_index.scss +175 -175
  113. package/styles/components/switch/_vars.scss +63 -63
  114. package/styles/components/table/_index.scss +194 -194
  115. package/styles/components/table/_var.scss +52 -52
  116. package/styles/components/tabs/_index.scss +165 -165
  117. package/styles/components/tabs/_mixins.scss +11 -11
  118. package/styles/components/tabs/_vars.scss +72 -72
  119. package/styles/components/tag/_index.scss +317 -317
  120. package/styles/components/tag/_var.scss +86 -86
  121. package/styles/components/tag-input/_index.scss +164 -164
  122. package/styles/components/tag-input/_vars.scss +17 -17
  123. package/styles/mixins/_focus.scss +8 -8
  124. package/styles/mixins/_layout.scss +32 -32
  125. package/styles/mixins/_reset.scss +11 -11
  126. package/styles/mixins/_scrollbar.scss +32 -32
  127. package/styles/mixins/_text.scss +50 -50
  128. package/styles/themes/_dark.scss +169 -169
  129. package/styles/themes/_font.scss +69 -69
  130. package/styles/themes/_index.scss +5 -5
  131. package/styles/themes/_light.scss +170 -170
  132. package/styles/themes/_radius.scss +9 -9
  133. package/styles/themes/_size.scss +68 -68
  134. package/styles/utilities/_animation.scss +58 -58
  135. package/styles/utilities/_tips.scss +10 -10
  136. package/switch/_example/with-label.tsx +1 -1
  137. package/utils/input-number/large-number.ts +423 -423
  138. package/utils/input-number/number.ts +257 -257
  139. package/utils/log/index.ts +3 -3
  140. package/utils/log/log.ts +29 -29
  141. package/utils/log/types.ts +9 -9
  142. package/utils/style.ts +58 -58
@@ -1,56 +1,56 @@
1
- @use "../../_vars.scss" as *;
2
- // 颜色
3
- $input-number-border-color: $border-level-2-color; // 数字输入框边框颜色
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
- $input-number-right-bg-color: $bg-color-container; // 右侧调整数字输入框背景颜色
11
- $input-number-right-button-border-color: $border-level-2-color; // 右侧调整数字输入框操作按钮边框颜色
12
- $input-number-border-color-hover: $brand-color-hover; // 数字输入框hover边框颜色
13
- $input-number-right-border-color-hover: $brand-color-hover; // 数字输入框操作按钮hover边框颜色
14
- $input-number-button-color-hover: $brand-color; // 数字输入框操作按钮hover字体颜色
15
- $input-number-bg-color-disabled: $bg-color-component-disabled; // 数字输入区域disabled背景颜色
16
- $input-number-inner-color-disabled: $text-color-disabled; // 数字输入区域disabled文字颜色
17
- $input-number-button-color-disabled: $text-color-disabled; // 数字输入框操作按钮disabled图标颜色
18
- $input-number-button-bg-color-disabled: $bg-color-component-disabled; // 数字输入框操作按钮disabled背景颜色
19
-
20
- $input-number-text-color-tips: $text-color-placeholder;
21
- $input-number-text-color-success: $success-color;
22
- $input-number-text-color-warning: $warning-color;
23
- $input-number-text-color-error: $error-color;
24
-
25
- // 尺寸
26
- $input-number-width-s: 120px; // 数字输入组件宽度
27
- $input-number-width: 144px; // 数字输入组件宽度
28
- $input-number-width-l: 168px; // 数字输入组件宽度
29
- $input-number-button-width-s: $comp-size-xs; // 数字输入框操作按钮宽度
30
- $input-number-button-width: $comp-size-m; // 数字输入框操作按钮的宽度
31
- $input-number-button-width-l: $comp-size-xl; // 数字输入框操作按钮宽度
32
- $input-number-button-height-s: $comp-size-xs; // 数字输入框操作按钮高度
33
- $input-number-button-height: $comp-size-m; // 数字输入框操作按钮的高度
34
- $input-number-button-height-l: $comp-size-xl; // 数字输入框操作按钮高度
35
- $input-number-inner-height-s: $comp-size-xs; // 数字输入框高度
36
- $input-number-inner-height: $comp-size-m; // 数字输入框高度
37
- $input-number-inner-height-l: $comp-size-xl; // 数字输入框高度
38
- $input-number-right-width-s: 88px; // 右侧调整数字输入组件宽度
39
- $input-number-right-width: 96px; // 右侧调整数字输入组件宽度
40
- $input-number-right-width-l: 120px; // 右侧调整数字输入组件宽度
41
- $input-number-right-button-width: $comp-size-m; // 右侧调整数字输入框操作按钮宽度
42
- $input-number-right-button-width-l: $comp-size-xl; // 右侧调整数字输入框操作按钮宽度
43
- $input-number-button-column-height-s: calc(calc($comp-size-xs / 2) - 2px); // 右侧调整数字操作按钮的高度
44
- $input-number-button-column-height: calc(calc($comp-size-m / 2) - 2px); // 右侧调整数字操作按钮的高度
45
- $input-number-button-column-height-l: calc(calc($comp-size-xl / 2) - 2px); // 右侧调整数字操作按钮的高度
46
- $input-number-padding-horizontal-default: $comp-paddingLR-s;
47
-
48
- // 字号
49
- $input-number-font-size: $font-size-l; // 数字输入框操作按钮字号
50
- $input-number-font-size-s: $font-size-base; // 小尺寸数字输入框操作按钮字号
51
- $input-number-font-size-l: ($font-size * 1.8); // 大尺寸数字输入框操作按钮字号
52
-
53
- $input-number-right-font-size: $font-size-s; // 右侧调整数字输入框操作按钮字号
54
- $input-number-right-font-size-l: $font-size-l; // 大尺寸右侧调整数字输入框操作按钮字号
55
-
56
- $input-number-tips-font-size: $font-size-s;
1
+ @use "../../_vars.scss" as *;
2
+ // 颜色
3
+ $input-number-border-color: $border-level-2-color; // 数字输入框边框颜色
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
+ $input-number-right-bg-color: $bg-color-container; // 右侧调整数字输入框背景颜色
11
+ $input-number-right-button-border-color: $border-level-2-color; // 右侧调整数字输入框操作按钮边框颜色
12
+ $input-number-border-color-hover: $brand-color-hover; // 数字输入框hover边框颜色
13
+ $input-number-right-border-color-hover: $brand-color-hover; // 数字输入框操作按钮hover边框颜色
14
+ $input-number-button-color-hover: $brand-color; // 数字输入框操作按钮hover字体颜色
15
+ $input-number-bg-color-disabled: $bg-color-component-disabled; // 数字输入区域disabled背景颜色
16
+ $input-number-inner-color-disabled: $text-color-disabled; // 数字输入区域disabled文字颜色
17
+ $input-number-button-color-disabled: $text-color-disabled; // 数字输入框操作按钮disabled图标颜色
18
+ $input-number-button-bg-color-disabled: $bg-color-component-disabled; // 数字输入框操作按钮disabled背景颜色
19
+
20
+ $input-number-text-color-tips: $text-color-placeholder;
21
+ $input-number-text-color-success: $success-color;
22
+ $input-number-text-color-warning: $warning-color;
23
+ $input-number-text-color-error: $error-color;
24
+
25
+ // 尺寸
26
+ $input-number-width-s: 120px; // 数字输入组件宽度
27
+ $input-number-width: 144px; // 数字输入组件宽度
28
+ $input-number-width-l: 168px; // 数字输入组件宽度
29
+ $input-number-button-width-s: $comp-size-xs; // 数字输入框操作按钮宽度
30
+ $input-number-button-width: $comp-size-m; // 数字输入框操作按钮的宽度
31
+ $input-number-button-width-l: $comp-size-xl; // 数字输入框操作按钮宽度
32
+ $input-number-button-height-s: $comp-size-xs; // 数字输入框操作按钮高度
33
+ $input-number-button-height: $comp-size-m; // 数字输入框操作按钮的高度
34
+ $input-number-button-height-l: $comp-size-xl; // 数字输入框操作按钮高度
35
+ $input-number-inner-height-s: $comp-size-xs; // 数字输入框高度
36
+ $input-number-inner-height: $comp-size-m; // 数字输入框高度
37
+ $input-number-inner-height-l: $comp-size-xl; // 数字输入框高度
38
+ $input-number-right-width-s: 88px; // 右侧调整数字输入组件宽度
39
+ $input-number-right-width: 96px; // 右侧调整数字输入组件宽度
40
+ $input-number-right-width-l: 120px; // 右侧调整数字输入组件宽度
41
+ $input-number-right-button-width: $comp-size-m; // 右侧调整数字输入框操作按钮宽度
42
+ $input-number-right-button-width-l: $comp-size-xl; // 右侧调整数字输入框操作按钮宽度
43
+ $input-number-button-column-height-s: calc(calc($comp-size-xs / 2) - 2px); // 右侧调整数字操作按钮的高度
44
+ $input-number-button-column-height: calc(calc($comp-size-m / 2) - 2px); // 右侧调整数字操作按钮的高度
45
+ $input-number-button-column-height-l: calc(calc($comp-size-xl / 2) - 2px); // 右侧调整数字操作按钮的高度
46
+ $input-number-padding-horizontal-default: $comp-paddingLR-s;
47
+
48
+ // 字号
49
+ $input-number-font-size: $font-size-l; // 数字输入框操作按钮字号
50
+ $input-number-font-size-s: $font-size-base; // 小尺寸数字输入框操作按钮字号
51
+ $input-number-font-size-l: ($font-size * 1.8); // 大尺寸数字输入框操作按钮字号
52
+
53
+ $input-number-right-font-size: $font-size-s; // 右侧调整数字输入框操作按钮字号
54
+ $input-number-right-font-size-l: $font-size-l; // 大尺寸右侧调整数字输入框操作按钮字号
55
+
56
+ $input-number-tips-font-size: $font-size-s;
@@ -1,277 +1,277 @@
1
- @use "../../_vars.scss" as *;
2
- @use "../input/_vars.scss" as *;
3
- @use "../input/_mixins.scss" as *;
4
- @use "../../mixins/_reset.scss" as *;
5
- @use "../../utilities/_tips.scss" as *;
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
- }
1
+ @use "../../_vars.scss" as *;
2
+ @use "../input/_vars.scss" as *;
3
+ @use "../input/_mixins.scss" as *;
4
+ @use "../../mixins/_reset.scss" as *;
5
+ @use "../../utilities/_tips.scss" as *;
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
+ }