knight-ui 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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "knight-ui",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "基于React的Knight-ui前端UI组件库",
5
5
  "main": "index.js",
6
6
  "module": "index.js",
@@ -16,9 +16,12 @@
16
16
  "import": "./index.js",
17
17
  "require": "./index.js",
18
18
  "default": "./index.js"
19
- }
19
+ },
20
+ "./tokens/tokens.css": "./tokens/tokens.css"
20
21
  },
21
- "sideEffects": false,
22
+ "sideEffects": [
23
+ "**/*.css"
24
+ ],
22
25
  "peerDependencies": {
23
26
  "react": ">=18.0.0",
24
27
  "react-dom": ">=18.0.0"
package/test/index.d.ts CHANGED
@@ -1 +1 @@
1
- import "../component/_tokens/tokens.css";
1
+ import "../component/tokens/tokens.css";
@@ -0,0 +1,497 @@
1
+ /* ===== Knight UI 设计 Token ===== */
2
+ /* Design Token 体系. */
3
+
4
+ :root {
5
+ /* ---- 基础色 ---- */
6
+ --ku-grey-9: 249, 249, 249;
7
+ --ku-white: 255, 255, 255;
8
+ --ku-black: 0, 0, 0;
9
+
10
+ /* ---- 主色 ---- */
11
+ --ku-color-primary: #8b5cf6;
12
+ --ku-color-primary-hover: #a78bfa;
13
+ --ku-color-primary-active: #7c3aed;
14
+ --ku-color-primary-disabled: #5b3e9e;
15
+ --ku-color-primary-light-default: rgba(139, 92, 246, 0.08);
16
+ --ku-color-primary-light-hover: rgba(139, 92, 246, 0.15);
17
+ --ku-color-primary-light-active: rgba(139, 92, 246, 0.2);
18
+
19
+ /* ---- 语义色 ---- */
20
+ --ku-color-success: #22c55e;
21
+ --ku-color-warning: #f59e0b;
22
+ --ku-color-danger: #ef4444;
23
+ --ku-color-info: #3b82f6;
24
+
25
+ /* ---- 文字色 ---- */
26
+ --ku-color-text-0: rgba(var(--ku-grey-9), 1);
27
+ --ku-color-text-1: rgba(var(--ku-grey-9), 0.8);
28
+ --ku-color-text-2: rgba(var(--ku-grey-9), 0.62);
29
+ --ku-color-text-3: rgba(var(--ku-grey-9), 0.35);
30
+
31
+ /* ---- 背景色 ---- */
32
+ --ku-color-bg-0: #0a0a14;
33
+ --ku-color-bg-1: #12121e;
34
+ --ku-color-bg-2: #16162a;
35
+ --ku-color-bg-3: #1e1e32;
36
+ --ku-color-bg-4: #2a2a3e;
37
+
38
+ /* ---- 填充色 ---- */
39
+ --ku-color-fill-0: #111122;
40
+ --ku-color-fill-1: #282840;
41
+ --ku-color-fill-2: #323250;
42
+
43
+ /* ---- 边框 ---- */
44
+ --ku-color-border: rgba(var(--ku-white), 0.08);
45
+
46
+ /* ---- 链接 ---- */
47
+ --ku-color-link: #8b5cf6;
48
+ --ku-color-link-hover: #a78bfa;
49
+ --ku-color-link-active: #7c3aed;
50
+
51
+ /* ---- 禁用 ---- */
52
+ --ku-color-disabled-text: rgba(var(--ku-grey-9), 0.35);
53
+ --ku-color-disabled-border: transparent;
54
+ --ku-color-disabled-bg: rgba(var(--ku-grey-9), 0.04);
55
+ --ku-color-disabled-fill: rgba(var(--ku-grey-9), 0.04);
56
+
57
+ /* ---- 阴影 ---- */
58
+ --ku-color-shadow: rgba(var(--ku-black), 0.04);
59
+ --ku-shadow-elevated: 0 0 1px rgba(0,0,0,0.3), 0 4px 14px rgba(0,0,0,0.1);
60
+
61
+ /* ---- 字号 ---- */
62
+ --ku-font-size-xs: 10px;
63
+ --ku-font-size-sm: 11px;
64
+ --ku-font-size-base: 12px;
65
+ --ku-font-size-md: 13px;
66
+ --ku-font-size-lg: 14px;
67
+ --ku-font-size-xl: 16px;
68
+ --ku-font-size-2xl: 18px;
69
+ --ku-font-size-3xl: 20px;
70
+ --ku-font-size-4xl: 24px;
71
+
72
+ /* ---- 圆角 ---- */
73
+ --ku-radius-xs: 2px;
74
+ --ku-radius-sm: 3px;
75
+ --ku-radius-base: 4px;
76
+ --ku-radius-md: 6px;
77
+ --ku-radius-lg: 8px;
78
+ --ku-radius-xl: 10px;
79
+
80
+ /* ---- 间距 ---- */
81
+ --ku-spacing-xs: 2px;
82
+ --ku-spacing-sm: 4px;
83
+ --ku-spacing-base: 8px;
84
+ --ku-spacing-md: 12px;
85
+ --ku-spacing-lg: 16px;
86
+ --ku-spacing-xl: 20px;
87
+
88
+ /* ---- z-index ---- */
89
+ --ku-z-mask: 1000;
90
+ --ku-z-overlay: 1010;
91
+ --ku-z-modal: 1020;
92
+ --ku-z-toast: 1030;
93
+
94
+ /* ---- 过渡 ---- */
95
+ --ku-transition-fast: 100ms ease;
96
+ --ku-transition-base: 200ms ease;
97
+ --ku-transition-slow: 300ms ease;
98
+
99
+ /* ---- 组件通用 ---- */
100
+ --ku-font-family: "Inter", "PingFang SC", "Microsoft YaHei", sans-serif;
101
+ }
102
+
103
+ /* ===== 亮色主题覆盖 ===== */
104
+
105
+ :root[data-ku-theme="light"] {
106
+ --ku-grey-9: 28, 31, 35;
107
+ --ku-color-bg-0: #f0f2f5;
108
+ --ku-color-bg-1: #f7f8fa;
109
+ --ku-color-bg-2: #ffffff;
110
+ --ku-color-bg-3: #e7eaf0;
111
+ --ku-color-bg-4: #dce0e6;
112
+ --ku-color-fill-0: #f4f4f5;
113
+ --ku-color-fill-1: #ebebed;
114
+ --ku-color-fill-2: #e2e2e5;
115
+ --ku-color-border: rgba(var(--ku-grey-9), 0.08);
116
+ }
117
+
118
+ /* ===== 动画关键帧 ===== */
119
+
120
+ @keyframes ku-spin {
121
+ from { transform: rotate(0deg); }
122
+ to { transform: rotate(360deg); }
123
+ }
124
+
125
+ /* ===== 全局交互基类 ===== */
126
+
127
+ /* 可聚焦元素焦点环 */
128
+ .ku-focus-ring:focus-visible,
129
+ .ku-select-trigger:focus-visible,
130
+ .ku-input-core:focus-visible,
131
+ .ku-dropdown button:focus-visible {
132
+ outline: 2px solid var(--ku-color-primary);
133
+ outline-offset: 1px;
134
+ }
135
+
136
+ /* 通用禁用态 */
137
+ .ku-disabled {
138
+ pointer-events: none !important;
139
+ opacity: 0.5 !important;
140
+ cursor: not-allowed !important;
141
+ }
142
+
143
+ /* 通用按钮基础 */
144
+ .ku-btn-base {
145
+ display: inline-flex;
146
+ align-items: center;
147
+ justify-content: center;
148
+ gap: var(--ku-spacing-sm);
149
+ font-family: var(--ku-font-family);
150
+ font-weight: 600;
151
+ border: none;
152
+ cursor: pointer;
153
+ user-select: none;
154
+ white-space: nowrap;
155
+ transition: background-color var(--ku-transition-fast),
156
+ color var(--ku-transition-fast),
157
+ box-shadow var(--ku-transition-fast),
158
+ filter var(--ku-transition-fast);
159
+ }
160
+
161
+ .ku-btn-base:disabled {
162
+ cursor: not-allowed;
163
+ opacity: 0.5;
164
+ }
165
+
166
+ /* ===== Button 按钮 ===== */
167
+
168
+ .ku-button {
169
+ border-radius: var(--ku-radius-base);
170
+ transition: filter 0.15s ease, background-color 0.15s ease, color 0.15s ease;
171
+ }
172
+ .ku-button:hover:not(:disabled) {
173
+ filter: brightness(1.3);
174
+ }
175
+ .ku-button:active:not(:disabled) {
176
+ filter: brightness(0.75);
177
+ }
178
+ .ku-button:focus-visible {
179
+ outline: 2px solid var(--ku-color-primary);
180
+ outline-offset: 2px;
181
+ }
182
+
183
+ /* ===== FloatButton 悬浮按钮 ===== */
184
+
185
+ .ku-float-button {
186
+ box-shadow: var(--ku-shadow-elevated);
187
+ transition: transform 0.15s ease, box-shadow 0.15s ease, background-color 0.15s ease;
188
+ }
189
+ .ku-float-button:hover {
190
+ transform: scale(1.08);
191
+ box-shadow: 0 0 2px rgba(0,0,0,0.3), 0 8px 24px rgba(0,0,0,0.15);
192
+ }
193
+ .ku-float-button:active {
194
+ transform: scale(0.95);
195
+ }
196
+
197
+ /* ===== Input 输入框 ===== */
198
+
199
+ .ku-input:hover {
200
+ border-color: var(--ku-color-primary-hover);
201
+ }
202
+ .ku-input:focus-within {
203
+ border-color: var(--ku-color-primary);
204
+ box-shadow: 0 0 0 2px var(--ku-color-primary-light-default);
205
+ }
206
+
207
+ /* ===== InputNumber 数字输入 ===== */
208
+
209
+ .ku-input-number button:hover:not(:disabled) {
210
+ background-color: var(--ku-color-fill-1);
211
+ }
212
+ .ku-input-number button:active:not(:disabled) {
213
+ background-color: var(--ku-color-fill-2);
214
+ }
215
+
216
+ /* ===== Select 选择器 ===== */
217
+
218
+ .ku-select { position: relative; }
219
+ .ku-select-trigger {
220
+ cursor: pointer;
221
+ transition: border-color var(--ku-transition-fast), box-shadow var(--ku-transition-fast);
222
+ }
223
+ .ku-select-trigger:hover { border-color: var(--ku-color-primary-hover); }
224
+ .ku-select-option {
225
+ cursor: pointer;
226
+ transition: background-color var(--ku-transition-fast);
227
+ }
228
+ .ku-select-option:hover { background-color: var(--ku-color-fill-0); }
229
+ .ku-select-option.ku-selected {
230
+ color: var(--ku-color-primary);
231
+ background-color: var(--ku-color-primary-light-default);
232
+ }
233
+
234
+ /* ===== Dropdown 下拉菜单 ===== */
235
+
236
+ .ku-dropdown-item {
237
+ cursor: pointer;
238
+ transition: background-color var(--ku-transition-fast);
239
+ }
240
+ .ku-dropdown-item:hover:not(.ku-dropdown-item-disabled) {
241
+ background-color: var(--ku-color-fill-0);
242
+ }
243
+
244
+ /* ===== Modal 对话框 ===== */
245
+
246
+ .ku-modal-close:hover {
247
+ background-color: var(--ku-color-fill-1);
248
+ color: var(--ku-color-text-0);
249
+ }
250
+ .ku-modal-btn:hover {
251
+ background-color: var(--ku-color-fill-1);
252
+ }
253
+ .ku-modal-btn-primary:hover {
254
+ filter: brightness(1.2);
255
+ }
256
+ .ku-modal-btn-primary:active {
257
+ filter: brightness(0.85);
258
+ }
259
+
260
+ /* ===== Switch 开关 ===== */
261
+
262
+ .ku-switch {
263
+ transition: background-color var(--ku-transition-base);
264
+ cursor: pointer;
265
+ }
266
+ .ku-switch:hover { opacity: 0.9; }
267
+ .ku-switch:active { transform: none; }
268
+ .ku-switch-knob {
269
+ transition: transform var(--ku-transition-base);
270
+ }
271
+
272
+ /* ===== Checkbox / Radio 复选框/单选框 ===== */
273
+
274
+ .ku-checkbox, .ku-radio {
275
+ -webkit-tap-highlight-color: transparent;
276
+ cursor: pointer;
277
+ }
278
+ .ku-checkbox:hover .ku-checkbox-box,
279
+ .ku-radio:hover .ku-radio-box {
280
+ border-color: var(--ku-color-primary);
281
+ }
282
+
283
+ /* ===== Slider 滑块 ===== */
284
+
285
+ .ku-slider-track { cursor: pointer; }
286
+ .ku-slider-handle {
287
+ cursor: grab;
288
+ transition: box-shadow var(--ku-transition-fast), transform var(--ku-transition-fast);
289
+ }
290
+ .ku-slider-handle:hover { transform: scale(1.15); }
291
+ .ku-slider-handle:active { cursor: grabbing; transform: scale(1.05); }
292
+
293
+ /* ===== Rating 评分 ===== */
294
+
295
+ .ku-rating-star {
296
+ cursor: pointer;
297
+ transition: transform var(--ku-transition-fast), color var(--ku-transition-fast);
298
+ }
299
+ .ku-rating-star:hover { transform: scale(1.2); }
300
+
301
+ /* ===== Tag 标签 ===== */
302
+
303
+ .ku-tag {
304
+ transition: background-color var(--ku-transition-fast);
305
+ }
306
+ .ku-tag.ku-tag-closable .ku-tag-close {
307
+ cursor: pointer;
308
+ transition: color var(--ku-transition-fast);
309
+ }
310
+ .ku-tag .ku-tag-close:hover {
311
+ color: var(--ku-color-text-0);
312
+ }
313
+
314
+ /* ===== Tabs 选项卡 ===== */
315
+
316
+ .ku-tabs-tab {
317
+ cursor: pointer;
318
+ transition: color var(--ku-transition-fast), border-color var(--ku-transition-fast);
319
+ }
320
+ .ku-tabs-tab:hover { color: var(--ku-color-primary); }
321
+ .ku-tabs-tab.ku-active { color: var(--ku-color-primary); }
322
+
323
+ /* ===== Collapse 折叠面板 ===== */
324
+
325
+ .ku-collapse-header {
326
+ cursor: pointer;
327
+ transition: background-color var(--ku-transition-fast);
328
+ }
329
+ .ku-collapse-header:hover { background-color: var(--ku-color-fill-0); }
330
+
331
+ /* ===== Breadcrumb 面包屑 ===== */
332
+
333
+ .ku-breadcrumb-item {
334
+ cursor: pointer;
335
+ transition: color var(--ku-transition-fast);
336
+ }
337
+ .ku-breadcrumb-item:hover { color: var(--ku-color-primary); }
338
+
339
+ /* ===== Pagination 分页 ===== */
340
+
341
+ .ku-pagination-item {
342
+ cursor: pointer;
343
+ transition: background-color var(--ku-transition-fast), color var(--ku-transition-fast);
344
+ }
345
+ .ku-pagination-item:hover:not(.ku-pagination-active) { background-color: var(--ku-color-fill-0); }
346
+ .ku-pagination-item.ku-pagination-active {
347
+ background-color: var(--ku-color-primary);
348
+ color: #fff;
349
+ }
350
+
351
+ /* ===== Tree 树 ===== */
352
+
353
+ .ku-tree-node {
354
+ cursor: pointer;
355
+ transition: background-color var(--ku-transition-fast);
356
+ }
357
+ .ku-tree-node:hover { background-color: var(--ku-color-fill-0); }
358
+ .ku-tree-node.ku-selected { background-color: var(--ku-color-primary-light-default); }
359
+
360
+ /* ===== Steps 步骤条 ===== */
361
+
362
+ .ku-steps-item { cursor: pointer; }
363
+
364
+ /* ===== Timeline 时间轴 ===== */
365
+
366
+ .ku-timeline-item { transition: color var(--ku-transition-fast); }
367
+
368
+ /* ===== Card 卡片 ===== */
369
+
370
+ .ku-card:hover { box-shadow: var(--ku-shadow-elevated); }
371
+ .ku-card { transition: box-shadow var(--ku-transition-base); }
372
+
373
+ /* ===== Avatar 头像 ===== */
374
+
375
+ .ku-avatar { flex-shrink: 0; }
376
+
377
+ /* ===== Badge 徽标 ===== */
378
+
379
+ .ku-badge {
380
+ position: relative;
381
+ display: inline-flex;
382
+ }
383
+
384
+ /* ===== Table 表格 ===== */
385
+
386
+ .ku-table-row { transition: background-color var(--ku-transition-fast); }
387
+ .ku-table-row:hover { background-color: var(--ku-color-fill-0); }
388
+ .ku-table-sort { cursor: pointer; }
389
+ .ku-table-sort:hover { color: var(--ku-color-primary); }
390
+
391
+ /* ===== Calendar 日历 ===== */
392
+
393
+ .ku-calendar-cell {
394
+ cursor: pointer;
395
+ transition: background-color var(--ku-transition-fast);
396
+ }
397
+ .ku-calendar-cell:hover:not(.ku-calendar-cell-disabled) {
398
+ background-color: var(--ku-color-fill-0);
399
+ }
400
+ .ku-calendar-cell.ku-calendar-cell-today {
401
+ color: var(--ku-color-primary);
402
+ font-weight: 700;
403
+ }
404
+ .ku-calendar-cell.ku-calendar-cell-selected {
405
+ background-color: var(--ku-color-primary);
406
+ color: #fff;
407
+ }
408
+
409
+ /* ===== Carousel 轮播 ===== */
410
+
411
+ .ku-carousel-dot {
412
+ cursor: pointer;
413
+ transition: background-color var(--ku-transition-fast), width var(--ku-transition-fast);
414
+ }
415
+
416
+ /* ===== Sidebar 侧边栏 ===== */
417
+
418
+ .ku-sidebar-item {
419
+ cursor: pointer;
420
+ transition: background-color var(--ku-transition-fast), color var(--ku-transition-fast);
421
+ }
422
+ .ku-sidebar-item:hover { background-color: var(--ku-color-fill-0); }
423
+ .ku-sidebar-item.ku-sidebar-active {
424
+ color: var(--ku-color-primary);
425
+ background-color: var(--ku-color-primary-light-default);
426
+ }
427
+
428
+ /* ===== Navigation 导航 ===== */
429
+
430
+ .ku-nav-item {
431
+ cursor: pointer;
432
+ transition: background-color var(--ku-transition-fast), color var(--ku-transition-fast);
433
+ }
434
+ .ku-nav-item:hover { background-color: var(--ku-color-fill-0); }
435
+ .ku-nav-item.ku-nav-active {
436
+ color: var(--ku-color-primary);
437
+ background-color: var(--ku-color-primary-light-default);
438
+ }
439
+
440
+ /* ===== Toast 轻提示 ===== */
441
+
442
+ .ku-toast-item { pointer-events: auto; cursor: pointer; }
443
+
444
+ /* ===== Banner 横幅 ===== */
445
+
446
+ .ku-banner-close {
447
+ cursor: pointer;
448
+ transition: color var(--ku-transition-fast), background-color var(--ku-transition-fast);
449
+ }
450
+ .ku-banner-close:hover {
451
+ color: var(--ku-color-text-0);
452
+ background-color: var(--ku-color-fill-0);
453
+ }
454
+
455
+ /* ===== Resizable 拖拽把手 ===== */
456
+
457
+ .ku-resizable-handle {
458
+ position: absolute;
459
+ z-index: 10;
460
+ }
461
+
462
+ /* ===== Layout Sider 触发按钮 ===== */
463
+
464
+ .ku-layout-sider-trigger {
465
+ cursor: pointer;
466
+ text-align: center;
467
+ padding: 8px 0;
468
+ border-top: 1px solid var(--ku-color-border);
469
+ background-color: var(--ku-color-bg-2);
470
+ transition: background-color var(--ku-transition-fast);
471
+ }
472
+ .ku-layout-sider-trigger:hover {
473
+ background-color: var(--ku-color-bg-3);
474
+ }
475
+
476
+ /* ===== 移除原生控件样式 ===== */
477
+
478
+ .ku-input-number input[type="number"]::-webkit-inner-spin-button,
479
+ .ku-input-number input[type="number"]::-webkit-outer-spin-button {
480
+ -webkit-appearance: none;
481
+ margin: 0;
482
+ }
483
+ .ku-input-number input[type="number"] {
484
+ -moz-appearance: textfield;
485
+ }
486
+
487
+ /* ===== 滚动条美化 ===== */
488
+
489
+ .ku-scrollbar::-webkit-scrollbar { width: 4px; height: 4px; }
490
+ .ku-scrollbar::-webkit-scrollbar-track { background: transparent; }
491
+ .ku-scrollbar::-webkit-scrollbar-thumb {
492
+ background: var(--ku-color-fill-2);
493
+ border-radius: 4px;
494
+ }
495
+ .ku-scrollbar::-webkit-scrollbar-thumb:hover {
496
+ background: var(--ku-color-fill-1);
497
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes