@tendaui/components 1.0.0

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 (245) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +176 -0
  3. package/alert/Alert.tsx +147 -0
  4. package/alert/defaultProps.ts +3 -0
  5. package/alert/index.ts +9 -0
  6. package/alert/style/css.js +1 -0
  7. package/alert/style/index.js +1 -0
  8. package/alert/type.ts +44 -0
  9. package/badge/Badge.tsx +85 -0
  10. package/badge/defaultProps.ts +10 -0
  11. package/badge/index.ts +9 -0
  12. package/badge/style/css.js +1 -0
  13. package/badge/style/index.js +1 -0
  14. package/badge/type.ts +51 -0
  15. package/button/Button.tsx +95 -0
  16. package/button/defaultProps.ts +13 -0
  17. package/button/index.ts +7 -0
  18. package/button/style/css.js +1 -0
  19. package/button/style/index.js +1 -0
  20. package/button/type.ts +82 -0
  21. package/checkbox/Checkbox.tsx +19 -0
  22. package/checkbox/CheckboxGroup.tsx +207 -0
  23. package/checkbox/defaultProps.ts +14 -0
  24. package/checkbox/index.ts +10 -0
  25. package/checkbox/style/css.js +1 -0
  26. package/checkbox/style/index.js +1 -0
  27. package/checkbox/type.ts +117 -0
  28. package/common/Check.tsx +131 -0
  29. package/common/FakeArrow.tsx +36 -0
  30. package/common/PluginContainer.tsx +21 -0
  31. package/common/Portal.tsx +67 -0
  32. package/common.ts +76 -0
  33. package/config-provider/ConfigContext.tsx +21 -0
  34. package/config-provider/ConfigProvider.tsx +53 -0
  35. package/config-provider/index.ts +9 -0
  36. package/config-provider/type.ts +1062 -0
  37. package/dialog/Dialog.tsx +254 -0
  38. package/dialog/DialogCard.tsx +152 -0
  39. package/dialog/defaultProps.ts +25 -0
  40. package/dialog/hooks/useDialogDrag.ts +50 -0
  41. package/dialog/hooks/useDialogEsc.ts +31 -0
  42. package/dialog/hooks/useDialogPosition.ts +36 -0
  43. package/dialog/hooks/useLockStyle.ts +54 -0
  44. package/dialog/index.ts +13 -0
  45. package/dialog/plugin.tsx +78 -0
  46. package/dialog/style/css.js +1 -0
  47. package/dialog/style/index.js +1 -0
  48. package/dialog/type.ts +241 -0
  49. package/dialog/utils.ts +4 -0
  50. package/form/Form.tsx +136 -0
  51. package/form/FormContext.tsx +64 -0
  52. package/form/FormItem.tsx +554 -0
  53. package/form/FormList.tsx +303 -0
  54. package/form/const.ts +6 -0
  55. package/form/defaultProps.ts +26 -0
  56. package/form/formModel.ts +117 -0
  57. package/form/hooks/interface.ts +20 -0
  58. package/form/hooks/useForm.ts +122 -0
  59. package/form/hooks/useFormItemInitialData.ts +95 -0
  60. package/form/hooks/useFormItemStyle.tsx +122 -0
  61. package/form/hooks/useInstance.tsx +275 -0
  62. package/form/hooks/useWatch.ts +42 -0
  63. package/form/index.ts +11 -0
  64. package/form/style/css.js +1 -0
  65. package/form/style/index.js +1 -0
  66. package/form/type.ts +519 -0
  67. package/form/utils/index.ts +69 -0
  68. package/hooks/useAttach.ts +24 -0
  69. package/hooks/useCommonClassName.ts +45 -0
  70. package/hooks/useConfig.ts +3 -0
  71. package/hooks/useControlled.ts +39 -0
  72. package/hooks/useDefaultProps.ts +16 -0
  73. package/hooks/useDomCallback.ts +13 -0
  74. package/hooks/useDomRefCallback.ts +12 -0
  75. package/hooks/useDragSorter.tsx +151 -0
  76. package/hooks/useEventCallback.ts +47 -0
  77. package/hooks/useGlobalConfig.ts +14 -0
  78. package/hooks/useGlobalIcon.ts +14 -0
  79. package/hooks/useLastest.ts +13 -0
  80. package/hooks/useLayoutEffect.ts +7 -0
  81. package/hooks/useMouseEvent.ts +142 -0
  82. package/hooks/useMutationObserver.ts +56 -0
  83. package/hooks/usePopper.ts +189 -0
  84. package/hooks/useRipple.ts +0 -0
  85. package/hooks/useSetState.ts +25 -0
  86. package/hooks/useVirtualScroll.ts +246 -0
  87. package/hooks/useWindowSize.ts +31 -0
  88. package/index.ts +70 -0
  89. package/input/Input.tsx +383 -0
  90. package/input/InputGroup.tsx +29 -0
  91. package/input/defaultProps.ts +22 -0
  92. package/input/index.ts +11 -0
  93. package/input/style/css.js +1 -0
  94. package/input/style/index.js +1 -0
  95. package/input/type.ts +219 -0
  96. package/loading/Gradient.tsx +36 -0
  97. package/loading/Loading.tsx +169 -0
  98. package/loading/circleAdapter.ts +44 -0
  99. package/loading/defaultProps.ts +12 -0
  100. package/loading/index.ts +13 -0
  101. package/loading/style/css.js +1 -0
  102. package/loading/style/index.js +1 -0
  103. package/loading/type.ts +71 -0
  104. package/loading/utils/setStyle.ts +13 -0
  105. package/myform/index.ts +0 -0
  106. package/notification/Notify.ts +24 -0
  107. package/notification/NotifyContainer.tsx +90 -0
  108. package/notification/NotifyContext.tsx +173 -0
  109. package/notification/NotifyItem.tsx +121 -0
  110. package/notification/index.ts +3 -0
  111. package/notification/style/css.js +1 -0
  112. package/notification/style/index.js +1 -0
  113. package/notification/type.ts +23 -0
  114. package/package.json +52 -0
  115. package/popup/Popup.tsx +264 -0
  116. package/popup/defaultProps.ts +13 -0
  117. package/popup/hooks/useTrigger.ts +276 -0
  118. package/popup/index.ts +6 -0
  119. package/popup/style/css.js +1 -0
  120. package/popup/style/index.js +1 -0
  121. package/popup/type.ts +130 -0
  122. package/portal/Portal.tsx +63 -0
  123. package/portal/index.ts +1 -0
  124. package/select/Option.tsx +162 -0
  125. package/select/OptionGroup.tsx +30 -0
  126. package/select/PopupContent.tsx +271 -0
  127. package/select/Select.tsx +586 -0
  128. package/select/defaultProps.ts +27 -0
  129. package/select/hooks/useOptions.ts +120 -0
  130. package/select/hooks/usePanelVirtualScroll.ts +111 -0
  131. package/select/index.ts +9 -0
  132. package/select/style/css.js +1 -0
  133. package/select/style/index.js +2 -0
  134. package/select/type.ts +382 -0
  135. package/select/utils/helper.ts +256 -0
  136. package/select-input/SelectInput.tsx +98 -0
  137. package/select-input/defaultProps.ts +15 -0
  138. package/select-input/hook/useMultiple.tsx +100 -0
  139. package/select-input/hook/useOverlayInnerStyle.ts +84 -0
  140. package/select-input/hook/useSingle.tsx +112 -0
  141. package/select-input/index.ts +6 -0
  142. package/select-input/interface.ts +18 -0
  143. package/select-input/style/css.js +1 -0
  144. package/select-input/style/index.js +1 -0
  145. package/select-input/type.ts +280 -0
  146. package/space/defaultProps.ts +0 -0
  147. package/space/index.ts +0 -0
  148. package/space/type.ts +0 -0
  149. package/style/index.js +2 -0
  150. package/styles/_global.scss +39 -0
  151. package/styles/_vars.scss +386 -0
  152. package/styles/components/alert/_index.scss +175 -0
  153. package/styles/components/alert/_vars.scss +39 -0
  154. package/styles/components/badge/_index.scss +70 -0
  155. package/styles/components/badge/_vars.scss +25 -0
  156. package/styles/components/button/_index.scss +511 -0
  157. package/styles/components/button/_mixins.scss +39 -0
  158. package/styles/components/button/_vars.scss +122 -0
  159. package/styles/components/checkbox/_index.scss +158 -0
  160. package/styles/components/checkbox/_mixin.scss +0 -0
  161. package/styles/components/checkbox/_var.scss +60 -0
  162. package/styles/components/dialog/_animate.scss +135 -0
  163. package/styles/components/dialog/_index.scss +311 -0
  164. package/styles/components/dialog/_mixins.scss +0 -0
  165. package/styles/components/dialog/_vars.scss +59 -0
  166. package/styles/components/form/_index.scss +174 -0
  167. package/styles/components/form/_mixins.scss +76 -0
  168. package/styles/components/form/_vars.scss +100 -0
  169. package/styles/components/input/_index.scss +349 -0
  170. package/styles/components/input/_map.scss +0 -0
  171. package/styles/components/input/_mixins.scss +116 -0
  172. package/styles/components/input/_vars.scss +134 -0
  173. package/styles/components/loading/_index.scss +112 -0
  174. package/styles/components/loading/_vars.scss +39 -0
  175. package/styles/components/notification/_index.scss +160 -0
  176. package/styles/components/notification/_mixins.scss +12 -0
  177. package/styles/components/notification/_vars.scss +59 -0
  178. package/styles/components/popup/_index.scss +82 -0
  179. package/styles/components/popup/_mixin.scss +149 -0
  180. package/styles/components/popup/_var.scss +31 -0
  181. package/styles/components/select/_index.scss +290 -0
  182. package/styles/components/select/_var.scss +65 -0
  183. package/styles/components/select-input/_index.scss +5 -0
  184. package/styles/components/select-input/_var.scss +3 -0
  185. package/styles/components/switch/_index.scss +279 -0
  186. package/styles/components/switch/_mixins.scss +0 -0
  187. package/styles/components/switch/_vars.scss +61 -0
  188. package/styles/components/tag/_index.scss +316 -0
  189. package/styles/components/tag/_var.scss +85 -0
  190. package/styles/components/tag-input/_index.scss +163 -0
  191. package/styles/components/tag-input/_vars.scss +16 -0
  192. package/styles/globals.css +250 -0
  193. package/styles/mixins/_focus.scss +7 -0
  194. package/styles/mixins/_layout.scss +32 -0
  195. package/styles/mixins/_reset.scss +10 -0
  196. package/styles/mixins/_scrollbar.scss +31 -0
  197. package/styles/mixins/_text.scss +48 -0
  198. package/styles/rillple.css +16 -0
  199. package/styles/scrollbar.css +42 -0
  200. package/styles/themes/_dark.scss +191 -0
  201. package/styles/themes/_font.scss +79 -0
  202. package/styles/themes/_index.scss +5 -0
  203. package/styles/themes/_light.scss +190 -0
  204. package/styles/themes/_radius.scss +9 -0
  205. package/styles/themes/_size.scss +68 -0
  206. package/styles/themes.css +66 -0
  207. package/styles/utilities/_animation.scss +57 -0
  208. package/styles/utilities/_tips.scss +9 -0
  209. package/switch/Switch.tsx +120 -0
  210. package/switch/defaultProps.ts +3 -0
  211. package/switch/index.ts +7 -0
  212. package/switch/style/css.js +1 -0
  213. package/switch/style/index.js +1 -0
  214. package/switch/type.ts +46 -0
  215. package/tag/Tag.tsx +149 -0
  216. package/tag/defaultProps.ts +19 -0
  217. package/tag/index.ts +8 -0
  218. package/tag/style/css.js +1 -0
  219. package/tag/style/index.js +1 -0
  220. package/tag/type.ts +170 -0
  221. package/tag-input/TagInput.tsx +215 -0
  222. package/tag-input/defaultProps.ts +15 -0
  223. package/tag-input/hooks/useHover.ts +28 -0
  224. package/tag-input/hooks/useTagList.tsx +131 -0
  225. package/tag-input/hooks/useTagScroll.ts +105 -0
  226. package/tag-input/index.ts +9 -0
  227. package/tag-input/style/css.js +1 -0
  228. package/tag-input/style/index.js +1 -0
  229. package/tag-input/type.ts +224 -0
  230. package/tag-input/useTagList.tsx +131 -0
  231. package/utils/composeRefs.ts +14 -0
  232. package/utils/dom.ts +29 -0
  233. package/utils/forwardRefWithStatics.ts +12 -0
  234. package/utils/getScrollbarWidth.ts +11 -0
  235. package/utils/helper.ts +161 -0
  236. package/utils/isFragment.ts +22 -0
  237. package/utils/listener.ts +37 -0
  238. package/utils/noop.ts +3 -0
  239. package/utils/parentTNode.ts +38 -0
  240. package/utils/parseTNode.ts +38 -0
  241. package/utils/react-render.ts +108 -0
  242. package/utils/ref.ts +6 -0
  243. package/utils/refs.ts +81 -0
  244. package/utils/style.ts +60 -0
  245. package/utils/transition.ts +28 -0
@@ -0,0 +1,250 @@
1
+ @import 'tailwindcss';
2
+ @import './themes.css';
3
+ @import './rillple.css';
4
+ @import './scrollbar.css';
5
+ @import 'tw-animate-css';
6
+
7
+ @theme inline {
8
+ --color-background: var(--background);
9
+ --color-foreground: var(--foreground);
10
+ --color-primary: var(--primary);
11
+ --color-primary-foreground: var(--primary-foreground);
12
+ --color-default: var(--default);
13
+ --color-default-foreground: var(--default-foreground);
14
+ --color-success: var(--success);
15
+ --color-success-foreground: var(--success-foreground);
16
+ --color-warning: var(--warning);
17
+ --color-warning-foreground: var(--warning-foreground);
18
+ --color-danger: var(--danger);
19
+ --color-danger-foreground: var(--danger-foreground);
20
+ --color-border: var(--border);
21
+ --color-input: var(--input);
22
+ --color-accent: var(--accent);
23
+ --color-accent-foreground: var(--accent-foreground);
24
+ --color-muted: var(--muted);
25
+ --color-muted-foreground: var(--muted-foreground);
26
+ --color-secondary: var(--secondary);
27
+ --color-secondary-foreground: var(--secondary-foreground);
28
+ --color-success-foreground: var(--success-foreground);
29
+ --color-warning-foreground: var(--warning-foreground);
30
+ --color-danger-foreground: var(--danger-foreground);
31
+ --color-ring: var(--ring);
32
+ --color-radius: var(--radius);
33
+ --color-chart-1: var(--chart-1);
34
+ --color-chart-2: var(--chart-2);
35
+ --color-chart-3: var(--chart-3);
36
+ --color-chart-4: var(--chart-4);
37
+ --color-chart-5: var(--chart-5);
38
+ --color-sidebar-background: var(--sidebar-background);
39
+ --color-sidebar-foreground: var(--sidebar-foreground);
40
+ --color-sidebar-primary: var(--sidebar-primary);
41
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
42
+ --color-sidebar-accent: var(--sidebar-accent);
43
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
44
+ --color-sidebar-border: var(--sidebar-border);
45
+ --color-sidebar-ring: var(--sidebar-ring);
46
+ --color-info: var(--info);
47
+ --color-info-foreground: var(--info-foreground);
48
+ --color-success-background: var(--success-background);
49
+ --color-info-background: var(--info-background);
50
+ --color-warning-background: var(--warning-background);
51
+ --color-danger-background: var(--danger-background);
52
+ --color-success-border: var(--success-border);
53
+ --color-info-border: var(--info-border);
54
+ --color-warning-border: var(--warning-border);
55
+ --color-danger-border: var(--danger-border);
56
+ --color-shadow: var(--shadow);
57
+
58
+ --color-popover: var(--popover);
59
+ --color-popover-foreground: var(--popover-foreground);
60
+
61
+ --animate-slide-in: slide-in 300ms ease-in-out;
62
+
63
+ @keyframes slide-in {
64
+ from {
65
+ transform: translateY(-100%);
66
+ }
67
+
68
+ to {
69
+ transform: translateY(0);
70
+ }
71
+ }
72
+
73
+ --animate-fade-in: fade-in 300ms ease-in-out;
74
+
75
+ @keyframes fade-in {
76
+ from {
77
+ opacity: 0;
78
+ }
79
+
80
+ to {
81
+ opacity: 1;
82
+ }
83
+ }
84
+
85
+ --animate-fade-out: fade-out 300ms ease-in-out;
86
+
87
+ @keyframes fade-out {
88
+ form {
89
+ opacity: 1;
90
+ }
91
+
92
+ to {
93
+ opacity: 0;
94
+ }
95
+ }
96
+
97
+ --animate-scale-in-center: scale-in-center 0.2s
98
+ cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
99
+
100
+ @keyframes scale-in-center {
101
+ 0% {
102
+ transform: scale(0);
103
+ opacity: 0;
104
+ }
105
+
106
+ 100% {
107
+ transform: scale(1);
108
+ opacity: 1;
109
+ }
110
+ }
111
+
112
+ --animate-scale-out-center: scale-out-center 0.2s
113
+ cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
114
+
115
+ @keyframes scale-out-center {
116
+ 0% {
117
+ transform: scale(1);
118
+ opacity: 1;
119
+ }
120
+
121
+ 100% {
122
+ transform: scale(0);
123
+ opacity: 0;
124
+ }
125
+ }
126
+ }
127
+
128
+ :root {
129
+ --background: oklch(100% 0 0);
130
+ --foreground: oklch(25% 0.01 262);
131
+ --card: oklch(100% 0 0);
132
+ --card-foreground: oklch(25% 0.01 262);
133
+ --popover: rgb(255, 255, 255);
134
+ --popover-foreground: oklch(25% 0.01 262);
135
+ --primary: oklch(27% 0.01 262);
136
+ --primary-foreground: oklch(98% 0.005 262);
137
+ --secondary: oklch(96% 0.01 262);
138
+ --secondary-foreground: oklch(27% 0.01 262);
139
+ --muted: oklch(96% 0.01 262);
140
+ --muted-foreground: oklch(46% 0.01 262);
141
+ --accent: oklch(97% 0 0);
142
+ --accent-foreground: oklch(20.5% 0 0);
143
+ --destructive: oklch(65% 0.25 29);
144
+ --destructive-foreground: oklch(98% 0.005 262);
145
+ --border: oklch(92.2% 0 0);
146
+ --input: oklch(92.2% 0 0);
147
+ --ring: oklch(65% 0.01 262);
148
+ --radius: 0.5rem;
149
+ --chart-1: oklch(70% 0.15 30);
150
+ --chart-2: oklch(55% 0.15 180);
151
+ --chart-3: oklch(35% 0.1 220);
152
+ --chart-4: oklch(75% 0.15 85);
153
+ --chart-5: oklch(72% 0.18 45);
154
+ --sidebar-background: oklch(98% 0.005 262);
155
+ --sidebar-foreground: oklch(35% 0.01 262);
156
+ --sidebar-primary: oklch(27% 0.01 262);
157
+ --sidebar-primary-foreground: oklch(98% 0.005 262);
158
+ --sidebar-accent: oklch(96% 0.01 262);
159
+ --sidebar-accent-foreground: oklch(27% 0.01 262);
160
+ --sidebar-border: oklch(88% 0.02 262);
161
+ --sidebar-ring: oklch(65% 0.01 262);
162
+ --info: oklch(70% 0.3 250);
163
+ /* 蓝色淡色背景 */
164
+ --info-foreground: oklch(98% 0.005 262);
165
+
166
+ --success: oklch(70% 0.3 142);
167
+ /* 绿色淡色背景 */
168
+ --success-foreground: oklch(98% 0.005 262);
169
+
170
+ --warning: oklch(70% 0.3 80);
171
+ /* 黄色更亮一些 */
172
+ --warning-foreground: oklch(98% 0.005 262);
173
+
174
+ --danger: oklch(65% 0.25 29);
175
+ /* 红色偏橘 */
176
+ --danger-foreground: oklch(98% 0.005 262);
177
+
178
+ --success-background: oklch(0.971 0.024 142.57);
179
+ --info-background: oklch(0.945 0.051 248.85);
180
+ --warning-background: oklch(0.964 0.046 103.25);
181
+ --danger-background: oklch(0.949 0.049 28.18);
182
+
183
+ --success-border: oklch(0.835 0.141 139.67);
184
+ --info-border: oklch(0.792 0.139 250.42);
185
+ --warning-border: oklch(0.886 0.118 94.72);
186
+ --danger-border: oklch(0.841 0.104 29.18);
187
+
188
+ --shadow:
189
+ 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12),
190
+ 0 9px 28px 8px rgba(0, 0, 0, 0.05);
191
+ --shadow-2:
192
+ 0 3px 14px 2px rgba(0, 0, 0, 0.05), 0 8px 10px 1px rgba(0, 0, 0, 0.06),
193
+ 0 5px 5px -3px rgba(0, 0, 0, 0.1);
194
+ --shadow-insert-left: inset -0.5px 0 0 #e7eaef;
195
+ --shadow-insert-right: inset 0.5px 0 0 #e7eaef;
196
+ --shadow-insert-top: inset 0 0.5px 0 #e7eaef;
197
+ --shadow-insert-bottom: inset 0 -0.5px 0 #e7eaef;
198
+ }
199
+
200
+ /* 公共的dark变量 */
201
+ .dark {
202
+ --background: oklch(0.2393 0 0);
203
+ /* #1f1f1f */
204
+ --foreground: oklch(1 0 0);
205
+ /* 纯白,已是 OKLCH */
206
+ --success-background: oklch(0.173 0.032 147.99);
207
+ /* #162312 */
208
+ --info-background: oklch(0.166 0.03 261.94);
209
+ /* #111a2c */
210
+ --warning-background: oklch(0.224 0.044 78.87);
211
+ /* #2b2111 */
212
+ --danger-background: oklch(0.216 0.038 24.55);
213
+ /* #2c1618 */
214
+
215
+ --success-border: oklch(0.274 0.06 142.26);
216
+ /* #274916 */
217
+ --info-border: oklch(0.272 0.071 259.41);
218
+ /* #15325b */
219
+ --warning-border: oklch(0.394 0.088 81.45);
220
+ /* #594214 */
221
+ --danger-border: oklch(0.368 0.068 27.47);
222
+ /* #5b2526 */
223
+ --input: oklch(100% 0 0/0.15);
224
+ --shadow:
225
+ 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12),
226
+ 0 9px 28px 8px rgba(0, 0, 0, 0.05);
227
+ --popover: oklch(0.2393 0 0);
228
+ --popover-foreground: oklch(1 0 0);
229
+ --accent: oklch(37.1% 0 0);
230
+ --accent-foreground: oklch(98.5% 0 0);
231
+ }
232
+
233
+ /* 滚动条 */
234
+ ::-webkit-scrollbar {
235
+ width: 5px;
236
+ }
237
+
238
+ ::-webkit-scrollbar-track {
239
+ background: transparent;
240
+ }
241
+
242
+ ::-webkit-scrollbar-thumb {
243
+ background: hsl(var(--border));
244
+ border-radius: 5px;
245
+ }
246
+
247
+ * {
248
+ scrollbar-width: thin;
249
+ scrollbar-color: hsl(var(--border)) transparent;
250
+ }
@@ -0,0 +1,7 @@
1
+ @mixin tab-focus-style-rect() {
2
+ &:focus-visible {
3
+ outline: 2px solid $brand-color;
4
+ outline-offset: $comp-paddingTB-xs;
5
+ border-radius: 0;
6
+ }
7
+ }
@@ -0,0 +1,32 @@
1
+ @mixin horizontal-vertical-center-with-flex() {
2
+ display: flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ }
6
+
7
+ @mixin fill-with-position-absolute() {
8
+ position: absolute;
9
+ left: 0;
10
+ right: 0;
11
+ top: 0;
12
+ bottom: 0;
13
+ }
14
+
15
+ @mixin list-style-none() {
16
+ list-style: none;
17
+ padding: 0;
18
+ margin: 0;
19
+ }
20
+
21
+ @mixin input-visually-hidden() {
22
+ border: 0;
23
+ clip: rect(0 0 0 0);
24
+ height: 1px;
25
+ margin: -1px;
26
+ overflow: hidden;
27
+ padding: 0;
28
+ position: absolute;
29
+ width: 1px;
30
+ outline: 0;
31
+ appearance: none;
32
+ }
@@ -0,0 +1,10 @@
1
+ @import '../_vars.scss';
2
+
3
+ @mixin reset {
4
+ font: $font-body-medium;
5
+ color: $text-color-primary;
6
+ box-sizing: border-box;
7
+ margin: 0;
8
+ padding: 0;
9
+ list-style: none;
10
+ }
@@ -0,0 +1,31 @@
1
+ @import '../vars.scss';
2
+
3
+ // 滚动条样式 mixin
4
+ @mixin scrollbar($size: 6px, $borderSize: 0px) {
5
+ // Safari/Chrome 中滚动条样式设置
6
+ &::-webkit-scrollbar {
7
+ width: $size;
8
+ height: $size;
9
+ }
10
+
11
+ &::-webkit-scrollbar-thumb {
12
+ border: $borderSize solid transparent;
13
+ background-clip: content-box;
14
+ background-color: $scrollbar-color;
15
+ border-radius: calc(#{$size} * 2 - 1px);
16
+ }
17
+
18
+ &::-webkit-scrollbar-thumb:vertical:hover,
19
+ &::-webkit-scrollbar-thumb:horizontal:hover {
20
+ background-color: $scrollbar-hover-color;
21
+ }
22
+ }
23
+
24
+ // 隐藏滚动条 mixin
25
+ @mixin hideScrollbar {
26
+ /* Chrome / Safari */
27
+ &::-webkit-scrollbar {
28
+ display: none;
29
+ width: 0 !important;
30
+ }
31
+ }
@@ -0,0 +1,48 @@
1
+ // 变量定义
2
+ $tips-text-default: $text-color-placeholder;
3
+ $tips-text-error: $error-color;
4
+ $tips-text-warning: $warning-color;
5
+ $tips-text-success: $success-color;
6
+
7
+ // 建议维护一个 map,方便按状态取值
8
+ $tips-text-colors: (
9
+ default: $tips-text-default,
10
+ error: $tips-text-error,
11
+ warning: $tips-text-warning,
12
+ success: $tips-text-success,
13
+ );
14
+
15
+ // 单行省略
16
+ @mixin text-ellipsis() {
17
+ white-space: nowrap;
18
+ word-wrap: normal;
19
+ overflow: hidden;
20
+ text-overflow: ellipsis;
21
+ }
22
+
23
+ // 多行省略
24
+ @mixin text-ellipsis-multi-line($line: 2) {
25
+ overflow: hidden;
26
+
27
+ /* stylelint-disable-next-line */
28
+ display: -webkit-box;
29
+ -webkit-line-clamp: $line;
30
+
31
+ /* stylelint-disable-next-line */
32
+ -webkit-box-orient: vertical;
33
+ }
34
+
35
+ // 提示文本状态
36
+ @mixin tips-text-status($status) {
37
+ .#{$prefix}-tips.#{$prefix}-is-#{$status} {
38
+ // color: map-get($tips-text-colors, $status);
39
+ color: #000;
40
+ }
41
+ }
42
+
43
+ $tips-text-colors: (
44
+ default: $tips-text-default,
45
+ success: $tips-text-success,
46
+ warning: $tips-text-warning,
47
+ error: $tips-text-error,
48
+ );
@@ -0,0 +1,16 @@
1
+ .ripple {
2
+ position: absolute;
3
+ border-radius: 50%;
4
+ background: rgba(255, 255, 255, 0.4);
5
+ transform: scale(0);
6
+ animation: ripple-animation 600ms linear;
7
+ pointer-events: none;
8
+ z-index: 0;
9
+ }
10
+
11
+ @keyframes ripple-animation {
12
+ to {
13
+ transform: scale(4);
14
+ opacity: 0;
15
+ }
16
+ }
@@ -0,0 +1,42 @@
1
+ /* 自定义滚动条样式 */
2
+ .scrollbar-thin {
3
+ scrollbar-width: auto;
4
+ }
5
+
6
+ .scrollbar-thin::-webkit-scrollbar {
7
+ width: 6px;
8
+ height: 6px;
9
+ }
10
+
11
+ .scrollbar-thin::-webkit-scrollbar-track {
12
+ background: transparent;
13
+ }
14
+
15
+ .scrollbar-thin::-webkit-scrollbar-thumb {
16
+ background-color: #d1d5db;
17
+ border-radius: 3px;
18
+ transition: background-color 0.2s ease;
19
+ }
20
+
21
+ .scrollbar-thin::-webkit-scrollbar-thumb:hover {
22
+ background-color: #9ca3af;
23
+ }
24
+
25
+ /* 暗色模式 */
26
+ .dark .scrollbar-thin::-webkit-scrollbar-thumb {
27
+ background-color: #4b5563;
28
+ }
29
+
30
+ .dark .scrollbar-thin::-webkit-scrollbar-thumb:hover {
31
+ background-color: #6b7280;
32
+ }
33
+
34
+ /* 隐藏滚动条但保持功能 */
35
+ .scrollbar-hide {
36
+ -ms-overflow-style: none;
37
+ scrollbar-width: none;
38
+ }
39
+
40
+ .scrollbar-hide::-webkit-scrollbar {
41
+ display: none;
42
+ }
@@ -0,0 +1,191 @@
1
+ :root[theme-mode='dark'] {
2
+ --td-brand-color-1: #1b2f51;
3
+ --td-brand-color-2: #173463;
4
+ --td-brand-color-3: #143975;
5
+ --td-brand-color-4: #103d88;
6
+ --td-brand-color-5: #0d429a;
7
+ --td-brand-color-6: #054bbe;
8
+ --td-brand-color-7: #2667d4;
9
+ --td-brand-color-8: #4582e6;
10
+ --td-brand-color-9: #699ef5;
11
+ --td-brand-color-10: #96bbf8;
12
+ --td-warning-color-1: #4f2a1d;
13
+ --td-warning-color-2: #582f21;
14
+ --td-warning-color-3: #733c23;
15
+ --td-warning-color-4: #a75d2b;
16
+ --td-warning-color-5: #cf6e2d;
17
+ --td-warning-color-6: #dc7633;
18
+ --td-warning-color-7: #e8935c;
19
+ --td-warning-color-8: #ecbf91;
20
+ --td-warning-color-9: #eed7bf;
21
+ --td-warning-color-10: #f3e9dc;
22
+ --td-error-color-1: #472324;
23
+ --td-error-color-2: #5e2a2d;
24
+ --td-error-color-3: #703439;
25
+ --td-error-color-4: #83383e;
26
+ --td-error-color-5: #a03f46;
27
+ --td-error-color-6: #c64751;
28
+ --td-error-color-7: #de6670;
29
+ --td-error-color-8: #ec888e;
30
+ --td-error-color-9: #edb1b6;
31
+ --td-error-color-10: #eeced0;
32
+ --td-success-color-1: #193a2a;
33
+ --td-success-color-2: #1a4230;
34
+ --td-success-color-3: #17533d;
35
+ --td-success-color-4: #0d7a55;
36
+ --td-success-color-5: #059465;
37
+ --td-success-color-6: #43af8a;
38
+ --td-success-color-7: #46bf96;
39
+ --td-success-color-8: #80d2b6;
40
+ --td-success-color-9: #b4e1d3;
41
+ --td-success-color-10: #deede8;
42
+ --td-gray-color-1: #f3f3f3;
43
+ --td-gray-color-2: #eee;
44
+ --td-gray-color-3: #e8e8e8;
45
+ --td-gray-color-4: #ddd;
46
+ --td-gray-color-5: #c6c6c6;
47
+ --td-gray-color-6: #a6a6a6;
48
+ --td-gray-color-7: #8b8b8b;
49
+ --td-gray-color-8: #777;
50
+ --td-gray-color-9: #5e5e5e;
51
+ --td-gray-color-10: #4b4b4b;
52
+ --td-gray-color-11: #393939;
53
+ --td-gray-color-12: #2c2c2c;
54
+ --td-gray-color-13: #242424;
55
+ --td-gray-color-14: #181818;
56
+
57
+ // 文字 & 图标 颜色
58
+ --td-font-white-1: rgba(255, 255, 255, 90%);
59
+ --td-font-white-2: rgba(255, 255, 255, 55%);
60
+ --td-font-white-3: rgba(255, 255, 255, 35%);
61
+ --td-font-white-4: rgba(255, 255, 255, 22%);
62
+ --td-font-gray-1: rgba(0, 0, 0, 90%);
63
+ --td-font-gray-2: rgba(0, 0, 0, 60%);
64
+ --td-font-gray-3: rgba(0, 0, 0, 40%);
65
+ --td-font-gray-4: rgba(0, 0, 0, 26%);
66
+
67
+ // 基础颜色
68
+ --td-brand-color: var(--td-brand-color-8); // 色彩-品牌-可操作
69
+ --td-warning-color: var(--td-warning-color-5); // 色彩-功能-警告
70
+ --td-error-color: var(--td-error-color-6); // 色彩-功能-失败
71
+ --td-success-color: var(--td-success-color-5); // 色彩-功能-成功
72
+
73
+ // 基础颜色的扩展 用于 hover / 聚焦 / 禁用 / 点击 等状态
74
+ --td-brand-color-hover: var(--td-brand-color-7); // hover态
75
+ --td-brand-color-focus: var(--td-brand-color-2); // focus态,包括鼠标和键盘
76
+ --td-brand-color-active: var(--td-brand-color-9); // 点击态
77
+ --td-brand-color-disabled: var(--td-brand-color-3); // 禁用态
78
+ --td-brand-color-light: var(--td-brand-color-1); // 浅色的选中态
79
+ --td-brand-color-light-hover: var(--td-brand-color-2);
80
+
81
+ // 警告色扩展
82
+ --td-warning-color-hover: var(--td-warning-color-4);
83
+ --td-warning-color-focus: var(--td-warning-color-2);
84
+ --td-warning-color-active: var(--td-warning-color-6);
85
+ --td-warning-color-disabled: var(--td-warning-color-3);
86
+ --td-warning-color-light: var(--td-warning-color-1);
87
+ --td-warning-color-light-hover: var(--td-warning-color-2);
88
+
89
+ // 失败/错误色扩展
90
+ --td-error-color-hover: var(--td-error-color-5);
91
+ --td-error-color-focus: var(--td-error-color-2);
92
+ --td-error-color-active: var(--td-error-color-7);
93
+ --td-error-color-disabled: var(--td-error-color-3);
94
+ --td-error-color-light: var(--td-error-color-1);
95
+ --td-error-color-light-hover: var(--td-error-color-2);
96
+
97
+ // 成功色扩展
98
+ --td-success-color-hover: var(--td-success-color-4);
99
+ --td-success-color-focus: var(--td-success-color-2);
100
+ --td-success-color-active: var(--td-success-color-6);
101
+ --td-success-color-disabled: var(--td-success-color-3);
102
+ --td-success-color-light: var(--td-success-color-1);
103
+ --td-success-color-light-hover: var(--td-success-color-2);
104
+
105
+ // 遮罩
106
+ --td-mask-active: rgba(0, 0, 0, 40%); // 遮罩-弹出
107
+ --td-mask-disabled: rgba(0, 0, 0, 60%); // 遮罩-禁用
108
+ --td-mask-background: rgba(36, 36, 36, 96%); // 二维码遮罩
109
+
110
+ // 背景色
111
+ --td-bg-color-page: var(--td-gray-color-14); // 色彩 - page
112
+ --td-bg-color-container: var(--td-gray-color-13); // 色彩 - 容器
113
+ --td-bg-color-container-hover: var(--td-gray-color-12); // 色彩 - 容器 - hover
114
+ --td-bg-color-container-active: var(
115
+ --td-gray-color-10
116
+ ); // 色彩 - 容器 - active
117
+ --td-bg-color-container-select: var(
118
+ --td-gray-color-9
119
+ ); // 色彩 - 容器 - select
120
+ --td-bg-color-secondarycontainer: var(--td-gray-color-12); // 色彩 - 次级容器
121
+ --td-bg-color-secondarycontainer-hover: var(
122
+ --td-gray-color-11
123
+ ); // 色彩 - 次级容器 - hover
124
+ --td-bg-color-secondarycontainer-active: var(
125
+ --td-gray-color-9
126
+ ); // 色彩 - 次级容器 - active
127
+ --td-bg-color-component: var(--td-gray-color-11); // 色彩 - 组件
128
+ --td-bg-color-component-hover: var(--td-gray-color-10); // 色彩 - 组件 - hover
129
+ --td-bg-color-component-active: var(
130
+ --td-gray-color-9
131
+ ); // 色彩 - 组件 - active
132
+ --td-bg-color-secondarycomponent: var(--td-gray-color-10); // 色彩 - 次级组件
133
+ --td-bg-color-secondarycomponent-hover: var(
134
+ --td-gray-color-9
135
+ ); // 色彩 - 次级组件 - hover
136
+ --td-bg-color-secondarycomponent-active: var(
137
+ --td-gray-color-8
138
+ ); // 色彩 - 次级组件 - active
139
+ --td-bg-color-component-disabled: var(
140
+ --td-gray-color-12
141
+ ); // 色彩 - 组件 - disabled
142
+
143
+ // 特殊组件背景色,目前只用于 button、input 组件多主题场景,浅色主题下固定为白色,深色主题下为 transparent 适配背景颜色
144
+ --td-bg-color-specialcomponent: transparent;
145
+
146
+ // 文本颜色
147
+ --td-text-color-primary: var(--td-font-white-1); // 色彩-文字-主要
148
+ --td-text-color-secondary: var(--td-font-white-2); // 色彩-文字-次要
149
+ --td-text-color-placeholder: var(--td-font-white-3); // 色彩-文字-占位符/说明
150
+ --td-text-color-disabled: var(--td-font-white-4); // 色彩-文字-禁用
151
+ --td-text-color-anti: #fff; // 色彩-文字-反色
152
+ --td-text-color-brand: var(--td-brand-color-8); // 色彩-文字-品牌
153
+ --td-text-color-link: var(--td-brand-color-8); // 色彩-文字-链接
154
+ --td-text-color-watermark: rgba(255, 255, 255, 10%); // 色彩-文字-水印颜色
155
+
156
+ // 分割线
157
+ --td-border-level-1-color: var(--td-gray-color-11);
158
+ --td-component-stroke: var(--td-gray-color-11);
159
+ // 边框
160
+ --td-border-level-2-color: var(--td-gray-color-9);
161
+ --td-component-border: var(--td-gray-color-9);
162
+
163
+ // 基础/下层 投影 hover 使用的组件包括:表格 /
164
+ --td-shadow-1:
165
+ 0 4px 6px rgba(0, 0, 0, 6%), 0 1px 10px rgba(0, 0, 0, 8%),
166
+ 0 2px 4px rgba(0, 0, 0, 12%);
167
+ // 中层投影 下拉 使用的组件包括:下拉菜单 / 气泡确认框 / 选择器 /
168
+ --td-shadow-2:
169
+ 0 8px 10px rgba(0, 0, 0, 12%), 0 3px 14px rgba(0, 0, 0, 10%),
170
+ 0 5px 5px rgba(0, 0, 0, 16%);
171
+ // 上层投影(警示/弹窗)使用的组件包括:全局提示 / 消息通知
172
+ --td-shadow-3:
173
+ 0 16px 24px rgba(0, 0, 0, 14%), 0 6px 30px rgba(0, 0, 0, 12%),
174
+ 0 8px 10px rgba(0, 0, 0, 20%);
175
+ // 内投影 用于弹窗类组件(气泡确认框 / 全局提示 / 消息通知)的内描边
176
+
177
+ --td-shadow-inset-top: inset 0 0.5px 0 #5e5e5e;
178
+ --td-shadow-inset-right: inset 0.5px 0 0 #5e5e5e;
179
+ --td-shadow-inset-bottom: inset 0 -0.5px 0 #5e5e5e;
180
+ --td-shadow-inset-left: inset -0.5px 0 0 #5e5e5e;
181
+
182
+ // table 特定阴影
183
+ --td-table-shadow-color: rgba(0, 0, 0, 55%);
184
+
185
+ // 滚动条颜色
186
+ --td-scrollbar-color: rgba(255, 255, 255, 10%);
187
+ // 滚动条悬浮颜色( hover )
188
+ --td-scrollbar-hover-color: rgba(255, 255, 255, 30%);
189
+ // 滚动条轨道颜色,不能是带透明度,否则纵向滚动时,横向滚动条会穿透
190
+ --td-scroll-track-color: #333;
191
+ }