@kb-labs/studio-ui-kit 2.118.2 → 2.119.0-canary.0b4b21a55
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/README.md +3 -3
- package/dist/index.css +63 -63
- package/dist/index.css.map +1 -1
- package/dist/index.js +52 -29
- package/dist/index.js.map +1 -1
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -47,7 +47,7 @@ function MyComponent() {
|
|
|
47
47
|
## 📊 Component Stats
|
|
48
48
|
|
|
49
49
|
- **Total Components:** 52
|
|
50
|
-
- **With Tests:**
|
|
50
|
+
- **With Tests:** 6/52 (12%)
|
|
51
51
|
|
|
52
52
|
**By Category:**
|
|
53
53
|
|
|
@@ -87,7 +87,7 @@ Essential UI components
|
|
|
87
87
|
| **UICopyButton** | UICopyButton — one-click copy with built-in visual feedback. | ❌ |
|
|
88
88
|
| **UIIcon** | UIIcon component - Icon wrapper with proper theming | ❌ |
|
|
89
89
|
| **UIShimmerText** | UIShimmerText - Animated gradient shimmer on text | ❌ |
|
|
90
|
-
| **UITag** | UITag component - Label/category tag with semantic colors |
|
|
90
|
+
| **UITag** | UITag component - Label/category tag with semantic colors | ✅ |
|
|
91
91
|
| **UITitle** | UITitle component - Page/section titles with hierarchy | ❌ |
|
|
92
92
|
|
|
93
93
|
### Layout
|
|
@@ -153,7 +153,7 @@ Feedback and notification components
|
|
|
153
153
|
| **UIEmptyState** | UIEmptyState component - Empty state placeholder | ❌ |
|
|
154
154
|
| **UIErrorState** | UIErrorState component - Error state display | ❌ |
|
|
155
155
|
| **UIResult** | UIResult component - Result page | ❌ |
|
|
156
|
-
| **UISkeleton** | UISkeleton component - Loading skeleton |
|
|
156
|
+
| **UISkeleton** | UISkeleton component - Loading skeleton | ✅ |
|
|
157
157
|
| **UISpin** | UISpin component - Loading spinner | ❌ |
|
|
158
158
|
|
|
159
159
|
### Overlay
|
package/dist/index.css
CHANGED
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
/* src/core/UIButton.module.css */
|
|
2
|
-
.
|
|
1
|
+
/* kb-css-modules-css:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/core/UIButton.module.css?kb-css-modules-css */
|
|
2
|
+
.uiButton_3Yg7B {
|
|
3
3
|
}
|
|
4
|
-
.
|
|
4
|
+
.uiButton_3Yg7B svg {
|
|
5
5
|
color: inherit !important;
|
|
6
6
|
stroke: currentColor !important;
|
|
7
7
|
fill: currentColor !important;
|
|
8
8
|
}
|
|
9
|
-
.
|
|
10
|
-
.
|
|
9
|
+
.uiButton_3Yg7B:disabled svg,
|
|
10
|
+
.uiButton_3Yg7B.ant-btn-disabled svg {
|
|
11
11
|
opacity: 0.4;
|
|
12
12
|
}
|
|
13
|
-
.
|
|
13
|
+
.uiButton_3Yg7B.ant-btn-sm svg {
|
|
14
14
|
width: 14px;
|
|
15
15
|
height: 14px;
|
|
16
16
|
}
|
|
17
|
-
.
|
|
17
|
+
.uiButton_3Yg7B svg {
|
|
18
18
|
width: 16px;
|
|
19
19
|
height: 16px;
|
|
20
20
|
}
|
|
21
|
-
.
|
|
21
|
+
.uiButton_3Yg7B.ant-btn-lg svg {
|
|
22
22
|
width: 18px;
|
|
23
23
|
height: 18px;
|
|
24
24
|
}
|
|
25
|
-
.
|
|
25
|
+
.uiButton_3Yg7B .ant-btn-icon {
|
|
26
26
|
color: inherit !important;
|
|
27
27
|
display: inline-flex;
|
|
28
28
|
align-items: center;
|
|
29
29
|
justify-content: center;
|
|
30
30
|
}
|
|
31
|
-
.
|
|
31
|
+
.uiButton_3Yg7B .ant-btn-icon svg {
|
|
32
32
|
vertical-align: middle;
|
|
33
33
|
display: block;
|
|
34
34
|
}
|
|
35
|
-
.
|
|
35
|
+
.uiButton_3Yg7B {
|
|
36
36
|
transition:
|
|
37
37
|
transform 100ms ease,
|
|
38
38
|
box-shadow 150ms ease,
|
|
39
39
|
opacity 100ms ease;
|
|
40
40
|
}
|
|
41
|
-
.
|
|
41
|
+
.uiButton_3Yg7B:active:not(:disabled):not(.ant-btn-disabled) {
|
|
42
42
|
transform: scale(0.96);
|
|
43
43
|
transition: transform 60ms ease;
|
|
44
44
|
}
|
|
45
|
-
.
|
|
45
|
+
.uiButton_3Yg7B.ant-btn-primary {
|
|
46
46
|
transition: transform 150ms ease, box-shadow 150ms ease;
|
|
47
47
|
}
|
|
48
|
-
.
|
|
48
|
+
.uiButton_3Yg7B.ant-btn-primary:hover:not(:disabled):not(.ant-btn-disabled) {
|
|
49
49
|
transform: translateY(-1px);
|
|
50
50
|
box-shadow: 0 4px 12px rgba(12, 102, 255, 0.3);
|
|
51
51
|
}
|
|
52
|
-
.
|
|
52
|
+
.uiButton_3Yg7B.ant-btn-primary:active:not(:disabled):not(.ant-btn-disabled) {
|
|
53
53
|
transform: scale(0.97);
|
|
54
54
|
box-shadow: none;
|
|
55
55
|
transition: transform 60ms ease;
|
|
56
56
|
}
|
|
57
|
-
.
|
|
58
|
-
.
|
|
57
|
+
.uiButton_3Yg7B.ant-btn-default:active:not(:disabled):not(.ant-btn-disabled),
|
|
58
|
+
.uiButton_3Yg7B.ant-btn-dashed:active:not(:disabled):not(.ant-btn-disabled) {
|
|
59
59
|
opacity: 0.75;
|
|
60
60
|
}
|
|
61
|
-
.
|
|
62
|
-
.
|
|
61
|
+
.uiButton_3Yg7B.ant-btn-text:active:not(:disabled):not(.ant-btn-disabled),
|
|
62
|
+
.uiButton_3Yg7B.ant-btn-link:active:not(:disabled):not(.ant-btn-disabled) {
|
|
63
63
|
background: rgba(0, 0, 0, 0.06) !important;
|
|
64
64
|
transform: scale(0.95);
|
|
65
65
|
}
|
|
66
|
-
[dir=rtl] .
|
|
66
|
+
[dir=rtl] .uiButton_3Yg7B .ant-btn-icon {
|
|
67
67
|
transform: scaleX(-1);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
/* src/core/UICard.module.css */
|
|
71
|
-
.
|
|
70
|
+
/* kb-css-modules-css:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/core/UICard.module.css?kb-css-modules-css */
|
|
71
|
+
.card_0vX7- {
|
|
72
72
|
--card-accent: var(--border-primary);
|
|
73
73
|
box-shadow: 0 1px 2px var(--shadow);
|
|
74
74
|
transition:
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
border-color 200ms ease;
|
|
78
78
|
position: relative;
|
|
79
79
|
}
|
|
80
|
-
.
|
|
80
|
+
.card_0vX7-::before {
|
|
81
81
|
content: "";
|
|
82
82
|
position: absolute;
|
|
83
83
|
top: 0;
|
|
@@ -89,17 +89,17 @@
|
|
|
89
89
|
opacity: 0;
|
|
90
90
|
transition: opacity 200ms ease;
|
|
91
91
|
}
|
|
92
|
-
.
|
|
92
|
+
.card_0vX7-.accented_yICrq::before {
|
|
93
93
|
opacity: 1;
|
|
94
94
|
}
|
|
95
|
-
.
|
|
95
|
+
.card_0vX7-.hoverable_NBVEA:hover {
|
|
96
96
|
box-shadow: 0 8px 20px -4px var(--shadow-hover);
|
|
97
97
|
border-color: var(--border-secondary);
|
|
98
98
|
transform: translateY(-1px);
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
/* src/core/UITag.module.css */
|
|
102
|
-
.kb-ui-
|
|
101
|
+
/* kb-css-modules-css:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/core/UITag.module.css?kb-css-modules-css */
|
|
102
|
+
.kb-ui-tag_D2ji0 {
|
|
103
103
|
transition:
|
|
104
104
|
opacity 100ms ease,
|
|
105
105
|
transform 100ms ease,
|
|
@@ -108,105 +108,105 @@
|
|
|
108
108
|
background-color 150ms ease,
|
|
109
109
|
filter 150ms ease;
|
|
110
110
|
}
|
|
111
|
-
.kb-ui-
|
|
111
|
+
.kb-ui-tag_D2ji0:not([disabled]):hover {
|
|
112
112
|
filter: brightness(1.06);
|
|
113
113
|
}
|
|
114
|
-
.kb-ui-tag--
|
|
114
|
+
.kb-ui-tag--clickable_FGDC8 {
|
|
115
115
|
cursor: pointer;
|
|
116
116
|
}
|
|
117
|
-
.kb-ui-tag--
|
|
117
|
+
.kb-ui-tag--clickable_FGDC8:not([disabled]):hover {
|
|
118
118
|
transform: translateY(-1px);
|
|
119
119
|
box-shadow: 0 2px 8px var(--shadow-hover, rgba(0, 0, 0, 0.1));
|
|
120
120
|
border-color: var(--border-secondary);
|
|
121
121
|
}
|
|
122
|
-
.kb-ui-tag--
|
|
122
|
+
.kb-ui-tag--clickable_FGDC8:not([disabled]):active {
|
|
123
123
|
opacity: 0.7;
|
|
124
124
|
transform: scale(0.94);
|
|
125
125
|
box-shadow: none;
|
|
126
126
|
transition: opacity 50ms ease, transform 50ms ease;
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
/* src/core/UIIcon.module.css */
|
|
130
|
-
.
|
|
129
|
+
/* kb-css-modules-css:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/core/UIIcon.module.css?kb-css-modules-css */
|
|
130
|
+
.uiIcon_k0ec4 {
|
|
131
131
|
display: inline-flex;
|
|
132
132
|
align-items: center;
|
|
133
133
|
justify-content: center;
|
|
134
134
|
vertical-align: middle;
|
|
135
135
|
}
|
|
136
|
-
.
|
|
136
|
+
.uiIcon_k0ec4 svg {
|
|
137
137
|
color: currentColor;
|
|
138
138
|
stroke: currentColor;
|
|
139
139
|
fill: none;
|
|
140
140
|
display: block;
|
|
141
141
|
}
|
|
142
|
-
.
|
|
142
|
+
.uiIcon_k0ec4 .anticon {
|
|
143
143
|
color: currentColor;
|
|
144
144
|
}
|
|
145
|
-
.
|
|
145
|
+
.uiIcon_k0ec4.clickable_OssZj {
|
|
146
146
|
cursor: pointer;
|
|
147
147
|
transition: opacity 0.2s ease, transform 0.1s ease;
|
|
148
148
|
}
|
|
149
|
-
.
|
|
149
|
+
.uiIcon_k0ec4.clickable_OssZj:hover {
|
|
150
150
|
opacity: 0.8;
|
|
151
151
|
}
|
|
152
|
-
.
|
|
152
|
+
.uiIcon_k0ec4.clickable_OssZj:active {
|
|
153
153
|
transform: scale(0.95);
|
|
154
154
|
}
|
|
155
|
-
.
|
|
155
|
+
.uiIcon_k0ec4.size-xs_M79Cj {
|
|
156
156
|
font-size: 12px;
|
|
157
157
|
width: 12px;
|
|
158
158
|
height: 12px;
|
|
159
159
|
}
|
|
160
|
-
.
|
|
160
|
+
.uiIcon_k0ec4.size-sm_10jDl {
|
|
161
161
|
font-size: 14px;
|
|
162
162
|
width: 14px;
|
|
163
163
|
height: 14px;
|
|
164
164
|
}
|
|
165
|
-
.
|
|
165
|
+
.uiIcon_k0ec4.size-base_h9Lkp {
|
|
166
166
|
font-size: 16px;
|
|
167
167
|
width: 16px;
|
|
168
168
|
height: 16px;
|
|
169
169
|
}
|
|
170
|
-
.
|
|
170
|
+
.uiIcon_k0ec4.size-lg_O0C5x {
|
|
171
171
|
font-size: 20px;
|
|
172
172
|
width: 20px;
|
|
173
173
|
height: 20px;
|
|
174
174
|
}
|
|
175
|
-
.
|
|
175
|
+
.uiIcon_k0ec4.size-xl_WXfPC {
|
|
176
176
|
font-size: 24px;
|
|
177
177
|
width: 24px;
|
|
178
178
|
height: 24px;
|
|
179
179
|
}
|
|
180
|
-
.
|
|
180
|
+
.uiIcon_k0ec4.size-2xl_32DCm {
|
|
181
181
|
font-size: 32px;
|
|
182
182
|
width: 32px;
|
|
183
183
|
height: 32px;
|
|
184
184
|
}
|
|
185
|
-
.
|
|
185
|
+
.uiIcon_k0ec4.color-primary_h3CLu {
|
|
186
186
|
color: var(--link, #2563EB);
|
|
187
187
|
}
|
|
188
|
-
.
|
|
188
|
+
.uiIcon_k0ec4.color-secondary_4pb5w {
|
|
189
189
|
color: var(--text-secondary, #6B7280);
|
|
190
190
|
}
|
|
191
|
-
.
|
|
191
|
+
.uiIcon_k0ec4.color-success_O8h6- {
|
|
192
192
|
color: var(--success, #16A34A);
|
|
193
193
|
}
|
|
194
|
-
.
|
|
194
|
+
.uiIcon_k0ec4.color-warning_dYWdv {
|
|
195
195
|
color: var(--warning, #F59E0B);
|
|
196
196
|
}
|
|
197
|
-
.
|
|
197
|
+
.uiIcon_k0ec4.color-error_adjhG {
|
|
198
198
|
color: var(--error, #DC2626);
|
|
199
199
|
}
|
|
200
|
-
.
|
|
200
|
+
.uiIcon_k0ec4.color-info_TwzBK {
|
|
201
201
|
color: var(--info, #0EA5E9);
|
|
202
202
|
}
|
|
203
|
-
.
|
|
203
|
+
.uiIcon_k0ec4.color-inherit_YCf-Z {
|
|
204
204
|
color: inherit;
|
|
205
205
|
}
|
|
206
|
-
.
|
|
207
|
-
animation:
|
|
206
|
+
.uiIcon_k0ec4.spin_rwV9G {
|
|
207
|
+
animation: uiIconSpin_JA9h9 1s linear infinite;
|
|
208
208
|
}
|
|
209
|
-
@keyframes
|
|
209
|
+
@keyframes uiIconSpin_JA9h9 {
|
|
210
210
|
from {
|
|
211
211
|
transform: rotate(0deg);
|
|
212
212
|
}
|
|
@@ -214,14 +214,14 @@
|
|
|
214
214
|
transform: rotate(360deg);
|
|
215
215
|
}
|
|
216
216
|
}
|
|
217
|
-
.
|
|
217
|
+
.uiIcon_k0ec4.disabled_sSgts {
|
|
218
218
|
opacity: 0.4;
|
|
219
219
|
cursor: not-allowed;
|
|
220
220
|
pointer-events: none;
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
/* src/core/UIShimmerText.module.css */
|
|
224
|
-
.
|
|
223
|
+
/* kb-css-modules-css:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/core/UIShimmerText.module.css?kb-css-modules-css */
|
|
224
|
+
.shimmer_Vu6DO {
|
|
225
225
|
background:
|
|
226
226
|
linear-gradient(
|
|
227
227
|
90deg,
|
|
@@ -235,10 +235,10 @@
|
|
|
235
235
|
background-clip: text;
|
|
236
236
|
-webkit-text-fill-color: transparent;
|
|
237
237
|
color: transparent;
|
|
238
|
-
animation:
|
|
238
|
+
animation: shimmerMove_64hFq var(--shimmer-duration, 2s) linear infinite;
|
|
239
239
|
display: inline-block;
|
|
240
240
|
}
|
|
241
|
-
@keyframes
|
|
241
|
+
@keyframes shimmerMove_64hFq {
|
|
242
242
|
0% {
|
|
243
243
|
background-position: 100% 0;
|
|
244
244
|
}
|
|
@@ -247,8 +247,8 @@
|
|
|
247
247
|
}
|
|
248
248
|
}
|
|
249
249
|
|
|
250
|
-
/* src/feedback/UISkeleton.module.css */
|
|
251
|
-
@keyframes
|
|
250
|
+
/* kb-css-modules-css:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/feedback/UISkeleton.module.css?kb-css-modules-css */
|
|
251
|
+
@keyframes skeletonLoading_Cb6ey {
|
|
252
252
|
0% {
|
|
253
253
|
background-position: 100% 50%;
|
|
254
254
|
}
|
|
@@ -256,7 +256,7 @@
|
|
|
256
256
|
background-position: 0% 50%;
|
|
257
257
|
}
|
|
258
258
|
}
|
|
259
|
-
.
|
|
260
|
-
animation:
|
|
259
|
+
.skeletonText_D4KLj {
|
|
260
|
+
animation: skeletonLoading_Cb6ey 1.4s ease infinite;
|
|
261
261
|
}
|
|
262
262
|
/*# sourceMappingURL=index.css.map */
|
package/dist/index.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/UIButton.module.css","../src/core/UICard.module.css","../src/core/UITag.module.css","../src/core/UIIcon.module.css","../src/core/UIShimmerText.module.css","../src/feedback/UISkeleton.module.css"],"sourcesContent":["/**\n * UIButton styles - Proper SVG icon theming\n *\n * This ensures all SVG icons (lucide-react, etc.) inherit colors from CSS variables\n * and work correctly in both light and dark themes.\n */\n\n.uiButton {\n /* Button inherits theme colors from Ant Design tokens */\n}\n\n/*\n * CRITICAL: SVG icon color inheritance\n *\n * Force all SVG icons to inherit button text color automatically\n * Works for lucide-react, heroicons, and any other icon libraries\n */\n.uiButton svg {\n color: inherit !important;\n stroke: currentColor !important;\n fill: currentColor !important;\n}\n\n/*\n * Disabled state - reduce opacity\n */\n.uiButton:disabled svg,\n.uiButton.ant-btn-disabled svg {\n opacity: 0.4;\n}\n\n/*\n * Size variants - ensure SVG scales properly\n */\n.uiButton.ant-btn-sm svg {\n /* Small button icons */\n width: 14px;\n height: 14px;\n}\n\n.uiButton svg {\n /* Default (middle) button icons */\n width: 16px;\n height: 16px;\n}\n\n.uiButton.ant-btn-lg svg {\n /* Large button icons */\n width: 18px;\n height: 18px;\n}\n\n/*\n * Icon positioning within button\n * Ensures proper spacing between icon and text\n */\n.uiButton .ant-btn-icon {\n /* Icon wrapper - CRITICAL: must inherit color for SVG to get correct color */\n color: inherit !important;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.uiButton .ant-btn-icon svg {\n /* SVG inside icon wrapper */\n vertical-align: middle;\n display: block; /* Remove inline spacing */\n}\n\n/*\n * All buttons — base transition and press feedback\n */\n.uiButton {\n transition: transform 100ms ease, box-shadow 150ms ease, opacity 100ms ease;\n}\n\n.uiButton:active:not(:disabled):not(.ant-btn-disabled) {\n transform: scale(0.96);\n transition: transform 60ms ease;\n}\n\n/*\n * Primary button — subtle lift on hover, snap back on press\n */\n.uiButton.ant-btn-primary {\n transition: transform 150ms ease, box-shadow 150ms ease;\n}\n\n.uiButton.ant-btn-primary:hover:not(:disabled):not(.ant-btn-disabled) {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(12, 102, 255, 0.3);\n}\n\n.uiButton.ant-btn-primary:active:not(:disabled):not(.ant-btn-disabled) {\n transform: scale(0.97);\n box-shadow: none;\n transition: transform 60ms ease;\n}\n\n/*\n * Default / dashed — dim on press\n */\n.uiButton.ant-btn-default:active:not(:disabled):not(.ant-btn-disabled),\n.uiButton.ant-btn-dashed:active:not(:disabled):not(.ant-btn-disabled) {\n opacity: 0.75;\n}\n\n/*\n * Text / link — background flash on press for clear tactile signal\n */\n.uiButton.ant-btn-text:active:not(:disabled):not(.ant-btn-disabled),\n.uiButton.ant-btn-link:active:not(:disabled):not(.ant-btn-disabled) {\n background: rgba(0, 0, 0, 0.06) !important;\n transform: scale(0.95);\n}\n\n/*\n * RTL (Right-to-Left) support\n */\n[dir='rtl'] .uiButton .ant-btn-icon {\n /* Mirror icon position in RTL */\n transform: scaleX(-1);\n}\n",".card {\n --card-accent: var(--border-primary);\n box-shadow: 0 1px 2px var(--shadow);\n transition: box-shadow 200ms ease, transform 200ms ease, border-color 200ms ease;\n position: relative;\n}\n\n.card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 16px;\n right: 16px;\n height: 2px;\n border-radius: 0 0 2px 2px;\n background: var(--card-accent);\n opacity: 0;\n transition: opacity 200ms ease;\n}\n\n.card.accented::before {\n opacity: 1;\n}\n\n.card.hoverable:hover {\n box-shadow: 0 8px 20px -4px var(--shadow-hover);\n border-color: var(--border-secondary);\n transform: translateY(-1px);\n}\n","/*\n * UITag styles — interactive feedback for clickable tags\n *\n * Class name is hardcoded ('kb-ui-tag') because tsup doesn't map\n * CSS module class names in the dist bundle — styles.className is always {}.\n */\n\n.kb-ui-tag {\n transition: opacity 100ms ease, transform 100ms ease, box-shadow 150ms ease, border-color 150ms ease, background-color 150ms ease, filter 150ms ease;\n}\n\n/*\n * All tags, even plain informational ones (e.g. capability badges on a\n * card), get a subtle brightness lift on hover so the whole UI feels alive.\n */\n.kb-ui-tag:not([disabled]):hover {\n filter: brightness(1.06);\n}\n\n/* Tags with an onClick additionally get lift/press feedback — they're pressable. */\n.kb-ui-tag--clickable {\n cursor: pointer;\n}\n\n.kb-ui-tag--clickable:not([disabled]):hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px var(--shadow-hover, rgba(0, 0, 0, 0.1));\n border-color: var(--border-secondary);\n}\n\n.kb-ui-tag--clickable:not([disabled]):active {\n opacity: 0.7;\n transform: scale(0.94);\n box-shadow: none;\n transition: opacity 50ms ease, transform 50ms ease;\n}\n","/**\n * UIIcon styles - Proper SVG and icon font theming\n *\n * Ensures all icons (Ant Design icons, lucide-react, custom SVG)\n * inherit colors from CSS variables and work in both light and dark themes.\n */\n\n.uiIcon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n}\n\n/*\n * SVG icons (lucide-react, custom SVG)\n * Use currentColor to inherit from parent color\n */\n.uiIcon svg {\n color: currentColor;\n stroke: currentColor;\n fill: none; /* Most icon libraries use stroke, not fill */\n display: block; /* Remove inline spacing */\n}\n\n/*\n * Ant Design icons (icon fonts)\n * Already use currentColor by default, but ensure it's explicit\n */\n.uiIcon .anticon {\n color: currentColor;\n}\n\n/*\n * Clickable icons (icon buttons)\n */\n.uiIcon.clickable {\n cursor: pointer;\n transition: opacity 0.2s ease, transform 0.1s ease;\n}\n\n.uiIcon.clickable:hover {\n opacity: 0.8;\n}\n\n.uiIcon.clickable:active {\n transform: scale(0.95);\n}\n\n/*\n * Size variants\n */\n.uiIcon.size-xs {\n font-size: 12px;\n width: 12px;\n height: 12px;\n}\n\n.uiIcon.size-sm {\n font-size: 14px;\n width: 14px;\n height: 14px;\n}\n\n.uiIcon.size-base {\n font-size: 16px;\n width: 16px;\n height: 16px;\n}\n\n.uiIcon.size-lg {\n font-size: 20px;\n width: 20px;\n height: 20px;\n}\n\n.uiIcon.size-xl {\n font-size: 24px;\n width: 24px;\n height: 24px;\n}\n\n.uiIcon.size-2xl {\n font-size: 32px;\n width: 32px;\n height: 32px;\n}\n\n/*\n * Color variants using CSS variables\n */\n.uiIcon.color-primary {\n color: var(--link, #2563EB);\n}\n\n.uiIcon.color-secondary {\n color: var(--text-secondary, #6B7280);\n}\n\n.uiIcon.color-success {\n color: var(--success, #16A34A);\n}\n\n.uiIcon.color-warning {\n color: var(--warning, #F59E0B);\n}\n\n.uiIcon.color-error {\n color: var(--error, #DC2626);\n}\n\n.uiIcon.color-info {\n color: var(--info, #0EA5E9);\n}\n\n.uiIcon.color-inherit {\n color: inherit;\n}\n\n/*\n * Spin animation\n */\n.uiIcon.spin {\n animation: uiIconSpin 1s linear infinite;\n}\n\n@keyframes uiIconSpin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/*\n * Disabled state\n */\n.uiIcon.disabled {\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n}\n","/**\n * UIShimmerText - Animated gradient shimmer on text\n * Classic \"Cursor / ClickUp\" loading text effect.\n */\n\n.shimmer {\n background: linear-gradient(\n 90deg,\n var(--shimmer-color-1, #888) 0%,\n var(--shimmer-color-2, #888) 25%,\n var(--shimmer-highlight, #fff) 50%,\n var(--shimmer-color-2, #888) 75%,\n var(--shimmer-color-1, #888) 100%\n );\n background-size: 200% 100%;\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n color: transparent;\n animation: shimmerMove var(--shimmer-duration, 2s) linear infinite;\n display: inline-block;\n}\n\n@keyframes shimmerMove {\n 0% { background-position: 100% 0; }\n 100% { background-position: -100% 0; }\n}\n","@keyframes skeletonLoading {\n 0% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n}\n\n.skeletonText {\n animation: skeletonLoading 1.4s ease infinite;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["kb-css-modules-css:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/core/UIButton.module.css?kb-css-modules-css","kb-css-modules-css:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/core/UICard.module.css?kb-css-modules-css","kb-css-modules-css:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/core/UITag.module.css?kb-css-modules-css","kb-css-modules-css:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/core/UIIcon.module.css?kb-css-modules-css","kb-css-modules-css:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/core/UIShimmerText.module.css?kb-css-modules-css","kb-css-modules-css:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/feedback/UISkeleton.module.css?kb-css-modules-css"],"sourcesContent":["/**\n * UIButton styles - Proper SVG icon theming\n *\n * This ensures all SVG icons (lucide-react, etc.) inherit colors from CSS variables\n * and work correctly in both light and dark themes.\n *\n * `.ant-btn-*` / `.ant-btn-icon` are Ant Design's own (unscoped) classes on the\n * rendered DOM — wrapped in :global() so CSS Modules doesn't hash them away\n * from under the real selectors.\n */\n\n.uiButton_3Yg7B {\n /* Button inherits theme colors from Ant Design tokens */\n}\n\n/*\n * CRITICAL: SVG icon color inheritance\n *\n * Force all SVG icons to inherit button text color automatically\n * Works for lucide-react, heroicons, and any other icon libraries\n */\n.uiButton_3Yg7B svg {\n color: inherit !important;\n stroke: currentColor !important;\n fill: currentColor !important;\n}\n\n/*\n * Disabled state - reduce opacity\n */\n.uiButton_3Yg7B:disabled svg,\n.uiButton_3Yg7B.ant-btn-disabled svg {\n opacity: 0.4;\n}\n\n/*\n * Size variants - ensure SVG scales properly\n */\n.uiButton_3Yg7B.ant-btn-sm svg {\n /* Small button icons */\n width: 14px;\n height: 14px;\n}\n\n.uiButton_3Yg7B svg {\n /* Default (middle) button icons */\n width: 16px;\n height: 16px;\n}\n\n.uiButton_3Yg7B.ant-btn-lg svg {\n /* Large button icons */\n width: 18px;\n height: 18px;\n}\n\n/*\n * Icon positioning within button\n * Ensures proper spacing between icon and text\n */\n.uiButton_3Yg7B .ant-btn-icon {\n /* Icon wrapper - CRITICAL: must inherit color for SVG to get correct color */\n color: inherit !important;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.uiButton_3Yg7B .ant-btn-icon svg {\n /* SVG inside icon wrapper */\n vertical-align: middle;\n display: block; /* Remove inline spacing */\n}\n\n/*\n * All buttons — base transition and press feedback\n */\n.uiButton_3Yg7B {\n transition: transform 100ms ease, box-shadow 150ms ease, opacity 100ms ease;\n}\n\n.uiButton_3Yg7B:active:not(:disabled):not(.ant-btn-disabled) {\n transform: scale(0.96);\n transition: transform 60ms ease;\n}\n\n/*\n * Primary button — subtle lift on hover, snap back on press\n */\n.uiButton_3Yg7B.ant-btn-primary {\n transition: transform 150ms ease, box-shadow 150ms ease;\n}\n\n.uiButton_3Yg7B.ant-btn-primary:hover:not(:disabled):not(.ant-btn-disabled) {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(12, 102, 255, 0.3);\n}\n\n.uiButton_3Yg7B.ant-btn-primary:active:not(:disabled):not(.ant-btn-disabled) {\n transform: scale(0.97);\n box-shadow: none;\n transition: transform 60ms ease;\n}\n\n/*\n * Default / dashed — dim on press\n */\n.uiButton_3Yg7B.ant-btn-default:active:not(:disabled):not(.ant-btn-disabled),\n.uiButton_3Yg7B.ant-btn-dashed:active:not(:disabled):not(.ant-btn-disabled) {\n opacity: 0.75;\n}\n\n/*\n * Text / link — background flash on press for clear tactile signal\n */\n.uiButton_3Yg7B.ant-btn-text:active:not(:disabled):not(.ant-btn-disabled),\n.uiButton_3Yg7B.ant-btn-link:active:not(:disabled):not(.ant-btn-disabled) {\n background: rgba(0, 0, 0, 0.06) !important;\n transform: scale(0.95);\n}\n\n/*\n * RTL (Right-to-Left) support\n */\n[dir='rtl'] .uiButton_3Yg7B .ant-btn-icon {\n /* Mirror icon position in RTL */\n transform: scaleX(-1);\n}\n",".card_0vX7- {\n --card-accent: var(--border-primary);\n box-shadow: 0 1px 2px var(--shadow);\n transition: box-shadow 200ms ease, transform 200ms ease, border-color 200ms ease;\n position: relative;\n}\n\n.card_0vX7-::before {\n content: '';\n position: absolute;\n top: 0;\n left: 16px;\n right: 16px;\n height: 2px;\n border-radius: 0 0 2px 2px;\n background: var(--card-accent);\n opacity: 0;\n transition: opacity 200ms ease;\n}\n\n.card_0vX7-.accented_yICrq::before {\n opacity: 1;\n}\n\n.card_0vX7-.hoverable_NBVEA:hover {\n box-shadow: 0 8px 20px -4px var(--shadow-hover);\n border-color: var(--border-secondary);\n transform: translateY(-1px);\n}\n","/*\n * UITag styles — interactive feedback for clickable tags\n */\n\n.kb-ui-tag_D2ji0 {\n transition: opacity 100ms ease, transform 100ms ease, box-shadow 150ms ease, border-color 150ms ease, background-color 150ms ease, filter 150ms ease;\n}\n\n/*\n * All tags, even plain informational ones (e.g. capability badges on a\n * card), get a subtle brightness lift on hover so the whole UI feels alive.\n */\n.kb-ui-tag_D2ji0:not([disabled]):hover {\n filter: brightness(1.06);\n}\n\n/* Tags with an onClick additionally get lift/press feedback — they're pressable. */\n.kb-ui-tag--clickable_FGDC8 {\n cursor: pointer;\n}\n\n.kb-ui-tag--clickable_FGDC8:not([disabled]):hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px var(--shadow-hover, rgba(0, 0, 0, 0.1));\n border-color: var(--border-secondary);\n}\n\n.kb-ui-tag--clickable_FGDC8:not([disabled]):active {\n opacity: 0.7;\n transform: scale(0.94);\n box-shadow: none;\n transition: opacity 50ms ease, transform 50ms ease;\n}\n","/**\n * UIIcon styles - Proper SVG and icon font theming\n *\n * Ensures all icons (Ant Design icons, lucide-react, custom SVG)\n * inherit colors from CSS variables and work in both light and dark themes.\n */\n\n.uiIcon_k0ec4 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n}\n\n/*\n * SVG icons (lucide-react, custom SVG)\n * Use currentColor to inherit from parent color\n */\n.uiIcon_k0ec4 svg {\n color: currentColor;\n stroke: currentColor;\n fill: none; /* Most icon libraries use stroke, not fill */\n display: block; /* Remove inline spacing */\n}\n\n/*\n * Ant Design icons (icon fonts)\n * Already use currentColor by default, but ensure it's explicit\n * `.anticon` is Ant Design's own (unscoped) class — wrapped in :global()\n * so CSS Modules doesn't hash it away from the real DOM class.\n */\n.uiIcon_k0ec4 .anticon {\n color: currentColor;\n}\n\n/*\n * Clickable icons (icon buttons)\n */\n.uiIcon_k0ec4.clickable_OssZj {\n cursor: pointer;\n transition: opacity 0.2s ease, transform 0.1s ease;\n}\n\n.uiIcon_k0ec4.clickable_OssZj:hover {\n opacity: 0.8;\n}\n\n.uiIcon_k0ec4.clickable_OssZj:active {\n transform: scale(0.95);\n}\n\n/*\n * Size variants\n */\n.uiIcon_k0ec4.size-xs_M79Cj {\n font-size: 12px;\n width: 12px;\n height: 12px;\n}\n\n.uiIcon_k0ec4.size-sm_10jDl {\n font-size: 14px;\n width: 14px;\n height: 14px;\n}\n\n.uiIcon_k0ec4.size-base_h9Lkp {\n font-size: 16px;\n width: 16px;\n height: 16px;\n}\n\n.uiIcon_k0ec4.size-lg_O0C5x {\n font-size: 20px;\n width: 20px;\n height: 20px;\n}\n\n.uiIcon_k0ec4.size-xl_WXfPC {\n font-size: 24px;\n width: 24px;\n height: 24px;\n}\n\n.uiIcon_k0ec4.size-2xl_32DCm {\n font-size: 32px;\n width: 32px;\n height: 32px;\n}\n\n/*\n * Color variants using CSS variables\n */\n.uiIcon_k0ec4.color-primary_h3CLu {\n color: var(--link, #2563EB);\n}\n\n.uiIcon_k0ec4.color-secondary_4pb5w {\n color: var(--text-secondary, #6B7280);\n}\n\n.uiIcon_k0ec4.color-success_O8h6- {\n color: var(--success, #16A34A);\n}\n\n.uiIcon_k0ec4.color-warning_dYWdv {\n color: var(--warning, #F59E0B);\n}\n\n.uiIcon_k0ec4.color-error_adjhG {\n color: var(--error, #DC2626);\n}\n\n.uiIcon_k0ec4.color-info_TwzBK {\n color: var(--info, #0EA5E9);\n}\n\n.uiIcon_k0ec4.color-inherit_YCf-Z {\n color: inherit;\n}\n\n/*\n * Spin animation\n */\n.uiIcon_k0ec4.spin_rwV9G {\n animation: uiIconSpin_JA9h9 1s linear infinite;\n}\n\n@keyframes uiIconSpin_JA9h9 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/*\n * Disabled state\n */\n.uiIcon_k0ec4.disabled_sSgts {\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n}\n","/**\n * UIShimmerText - Animated gradient shimmer on text\n * Classic \"Cursor / ClickUp\" loading text effect.\n */\n\n.shimmer_Vu6DO {\n background: linear-gradient(\n 90deg,\n var(--shimmer-color-1, #888) 0%,\n var(--shimmer-color-2, #888) 25%,\n var(--shimmer-highlight, #fff) 50%,\n var(--shimmer-color-2, #888) 75%,\n var(--shimmer-color-1, #888) 100%\n );\n background-size: 200% 100%;\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n color: transparent;\n animation: shimmerMove_64hFq var(--shimmer-duration, 2s) linear infinite;\n display: inline-block;\n}\n\n@keyframes shimmerMove_64hFq {\n 0% { background-position: 100% 0; }\n 100% { background-position: -100% 0; }\n}\n","@keyframes skeletonLoading_Cb6ey {\n 0% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n}\n\n.skeletonText_D4KLj {\n animation: skeletonLoading_Cb6ey 1.4s ease infinite;\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -3,10 +3,12 @@ import { typography, spacing } from '@kb-labs/studio-ui-core';
|
|
|
3
3
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
4
4
|
import * as React4 from 'react';
|
|
5
5
|
import { useMemo } from 'react';
|
|
6
|
+
import clsx from 'clsx';
|
|
6
7
|
import { Line, Column, Area, Pie, Bar } from '@ant-design/charts';
|
|
7
8
|
import dayjs from 'dayjs';
|
|
8
9
|
import { useNavigate, useSearchParams, useParams } from 'react-router-dom';
|
|
9
10
|
import { marked } from 'marked';
|
|
11
|
+
import DOMPurify from 'dompurify';
|
|
10
12
|
|
|
11
13
|
// src/primitives/UIText.tsx
|
|
12
14
|
var { useToken } = theme;
|
|
@@ -187,11 +189,11 @@ function UIBadge({ variant = "default", children, ...props }) {
|
|
|
187
189
|
);
|
|
188
190
|
}
|
|
189
191
|
|
|
190
|
-
// src/core/UIButton.module.css
|
|
191
|
-
var
|
|
192
|
+
// kb-css-modules-tokens:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/core/UIButton.module.css?kb-css-modules-tokens
|
|
193
|
+
var UIButton_module_default = { "uiButton": "uiButton_3Yg7B" };
|
|
192
194
|
var UIButton = React4.forwardRef(
|
|
193
195
|
function UIButton2({ variant = "default", className, ...rest }, ref) {
|
|
194
|
-
const combinedClassName = [
|
|
196
|
+
const combinedClassName = [UIButton_module_default.uiButton, className].filter(Boolean).join(" ");
|
|
195
197
|
return /* @__PURE__ */ jsx(
|
|
196
198
|
Button,
|
|
197
199
|
{
|
|
@@ -204,8 +206,8 @@ var UIButton = React4.forwardRef(
|
|
|
204
206
|
}
|
|
205
207
|
);
|
|
206
208
|
|
|
207
|
-
// src/core/UICard.module.css
|
|
208
|
-
var
|
|
209
|
+
// kb-css-modules-tokens:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/core/UICard.module.css?kb-css-modules-tokens
|
|
210
|
+
var UICard_module_default = { "card": "card_0vX7-", "accented": "accented_yICrq", "hoverable": "hoverable_NBVEA" };
|
|
209
211
|
var { useToken: useToken3 } = theme;
|
|
210
212
|
var variantTokens = {
|
|
211
213
|
default: { accent: "var(--border-primary)" },
|
|
@@ -243,12 +245,12 @@ function UICard({
|
|
|
243
245
|
hoverable: false,
|
|
244
246
|
loading,
|
|
245
247
|
...rest,
|
|
246
|
-
className:
|
|
247
|
-
|
|
248
|
-
hoverable &&
|
|
249
|
-
status !== "default" &&
|
|
248
|
+
className: clsx(
|
|
249
|
+
UICard_module_default.card,
|
|
250
|
+
hoverable && UICard_module_default.hoverable,
|
|
251
|
+
status !== "default" && UICard_module_default.accented,
|
|
250
252
|
rest.className
|
|
251
|
-
|
|
253
|
+
),
|
|
252
254
|
style: {
|
|
253
255
|
borderColor: token.colorBorder,
|
|
254
256
|
overflow: "hidden",
|
|
@@ -262,6 +264,9 @@ function UICard({
|
|
|
262
264
|
}
|
|
263
265
|
);
|
|
264
266
|
}
|
|
267
|
+
|
|
268
|
+
// kb-css-modules-tokens:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/core/UITag.module.css?kb-css-modules-tokens
|
|
269
|
+
var UITag_module_default = { "kb-ui-tag": "kb-ui-tag_D2ji0", "kb-ui-tag--clickable": "kb-ui-tag--clickable_FGDC8" };
|
|
265
270
|
function UITag({
|
|
266
271
|
variant = "default",
|
|
267
272
|
color,
|
|
@@ -281,7 +286,11 @@ function UITag({
|
|
|
281
286
|
default: void 0,
|
|
282
287
|
neutral: void 0
|
|
283
288
|
};
|
|
284
|
-
const combinedClassName =
|
|
289
|
+
const combinedClassName = clsx(
|
|
290
|
+
UITag_module_default["kb-ui-tag"],
|
|
291
|
+
onClick && UITag_module_default["kb-ui-tag--clickable"],
|
|
292
|
+
className
|
|
293
|
+
);
|
|
285
294
|
return /* @__PURE__ */ jsx(
|
|
286
295
|
Tag,
|
|
287
296
|
{
|
|
@@ -324,8 +333,8 @@ function UITitle({
|
|
|
324
333
|
return /* @__PURE__ */ jsx(AntTitle, { level, className, style: { marginBottom: spacing[3], ...style }, children });
|
|
325
334
|
}
|
|
326
335
|
|
|
327
|
-
// src/core/UIIcon.module.css
|
|
328
|
-
var
|
|
336
|
+
// kb-css-modules-tokens:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/core/UIIcon.module.css?kb-css-modules-tokens
|
|
337
|
+
var UIIcon_module_default = { "uiIcon": "uiIcon_k0ec4", "clickable": "clickable_OssZj", "size-xs": "size-xs_M79Cj", "size-sm": "size-sm_10jDl", "size-base": "size-base_h9Lkp", "size-lg": "size-lg_O0C5x", "size-xl": "size-xl_WXfPC", "size-2xl": "size-2xl_32DCm", "color-primary": "color-primary_h3CLu", "color-secondary": "color-secondary_4pb5w", "color-success": "color-success_O8h6-", "color-warning": "color-warning_dYWdv", "color-error": "color-error_adjhG", "color-info": "color-info_TwzBK", "color-inherit": "color-inherit_YCf-Z", "spin": "spin_rwV9G", "uiIconSpin": "uiIconSpin_JA9h9", "disabled": "disabled_sSgts" };
|
|
329
338
|
var _iconRenderer = null;
|
|
330
339
|
function registerIconRenderer(renderer) {
|
|
331
340
|
_iconRenderer = renderer;
|
|
@@ -340,15 +349,15 @@ function UIIcon({
|
|
|
340
349
|
className,
|
|
341
350
|
style: customStyle
|
|
342
351
|
}) {
|
|
343
|
-
const classes =
|
|
344
|
-
|
|
352
|
+
const classes = clsx(
|
|
353
|
+
UIIcon_module_default.uiIcon,
|
|
345
354
|
"anticon",
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
spin &&
|
|
349
|
-
onClick &&
|
|
355
|
+
UIIcon_module_default[`size-${size}`],
|
|
356
|
+
UIIcon_module_default[`color-${color}`],
|
|
357
|
+
spin && UIIcon_module_default.spin,
|
|
358
|
+
onClick && UIIcon_module_default.clickable,
|
|
350
359
|
className
|
|
351
|
-
|
|
360
|
+
);
|
|
352
361
|
let iconElement = null;
|
|
353
362
|
const iconName = name || (typeof icon === "string" ? icon : null);
|
|
354
363
|
if (iconName) {
|
|
@@ -412,8 +421,8 @@ function useUITheme() {
|
|
|
412
421
|
return result;
|
|
413
422
|
}
|
|
414
423
|
|
|
415
|
-
// src/core/UIShimmerText.module.css
|
|
416
|
-
var
|
|
424
|
+
// kb-css-modules-tokens:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/core/UIShimmerText.module.css?kb-css-modules-tokens
|
|
425
|
+
var UIShimmerText_module_default = { "shimmer": "shimmer_Vu6DO"};
|
|
417
426
|
function UIShimmerText({
|
|
418
427
|
children,
|
|
419
428
|
color = "var(--text-secondary, #9CA3AF)",
|
|
@@ -425,7 +434,7 @@ function UIShimmerText({
|
|
|
425
434
|
return /* @__PURE__ */ jsx(
|
|
426
435
|
"span",
|
|
427
436
|
{
|
|
428
|
-
className:
|
|
437
|
+
className: clsx(UIShimmerText_module_default.shimmer, className),
|
|
429
438
|
style: {
|
|
430
439
|
"--shimmer-color-1": color,
|
|
431
440
|
"--shimmer-color-2": color,
|
|
@@ -1719,8 +1728,8 @@ function UIErrorState({
|
|
|
1719
1728
|
] }) });
|
|
1720
1729
|
}
|
|
1721
1730
|
|
|
1722
|
-
// src/feedback/UISkeleton.module.css
|
|
1723
|
-
var
|
|
1731
|
+
// kb-css-modules-tokens:/home/runner/work/kb-labs/kb-labs/studio/ui-kit/src/feedback/UISkeleton.module.css?kb-css-modules-tokens
|
|
1732
|
+
var UISkeleton_module_default = { "skeletonText": "skeletonText_D4KLj"};
|
|
1724
1733
|
function UISkeleton({
|
|
1725
1734
|
loading = true,
|
|
1726
1735
|
children,
|
|
@@ -1777,7 +1786,7 @@ function UISkeletonText({
|
|
|
1777
1786
|
children: widths.map((w, i) => /* @__PURE__ */ jsx(
|
|
1778
1787
|
"span",
|
|
1779
1788
|
{
|
|
1780
|
-
className:
|
|
1789
|
+
className: clsx(UISkeleton_module_default.skeletonText),
|
|
1781
1790
|
style: {
|
|
1782
1791
|
display: "block",
|
|
1783
1792
|
width: isArray ? typeof w === "number" ? `${w}px` : w : "100%",
|
|
@@ -1892,6 +1901,8 @@ function UIMarkdownViewer({ content, className, style: customStyle }) {
|
|
|
1892
1901
|
const { token } = useToken16();
|
|
1893
1902
|
const css = `
|
|
1894
1903
|
.kb-md { font-size: ${token.fontSize}px; line-height: 1.6; color: ${token.colorText}; font-family: ${token.fontFamily}; }
|
|
1904
|
+
.kb-md > *:first-child { margin-top: 0; }
|
|
1905
|
+
.kb-md > *:last-child { margin-bottom: 0; }
|
|
1895
1906
|
.kb-md h1,.kb-md h2,.kb-md h3,.kb-md h4,.kb-md h5,.kb-md h6 { font-weight:600; line-height:1.3; margin:1.2em 0 0.4em; color:${token.colorTextHeading}; }
|
|
1896
1907
|
.kb-md h1:first-child,.kb-md h2:first-child,.kb-md h3:first-child { margin-top:0; }
|
|
1897
1908
|
.kb-md h1 { font-size:1.5em; padding-bottom:0.3em; border-bottom:1px solid ${token.colorBorderSecondary}; }
|
|
@@ -1905,7 +1916,12 @@ function UIMarkdownViewer({ content, className, style: customStyle }) {
|
|
|
1905
1916
|
.kb-md pre { background:${token.colorFillQuaternary}; border:1px solid ${token.colorBorderSecondary}; border-radius:${token.borderRadius}px; padding:12px 16px; overflow-x:auto; margin:0.75em 0; }
|
|
1906
1917
|
.kb-md pre code { background:none; padding:0; font-size:0.85em; color:${token.colorText}; }
|
|
1907
1918
|
.kb-md ul,.kb-md ol { padding-left:1.5em; margin:0.6em 0; }
|
|
1908
|
-
.kb-md
|
|
1919
|
+
.kb-md ul { list-style: disc; }
|
|
1920
|
+
.kb-md ol { list-style: decimal; }
|
|
1921
|
+
.kb-md ul ul { list-style: circle; }
|
|
1922
|
+
.kb-md ol ol, .kb-md ul ol { list-style: decimal; }
|
|
1923
|
+
.kb-md li { margin:0.2em 0; list-style: inherit; }
|
|
1924
|
+
.kb-md li::marker { color:${token.colorTextTertiary}; }
|
|
1909
1925
|
.kb-md blockquote { margin:0.75em 0; padding:0.4em 1em; border-left:4px solid ${token.colorPrimaryBorder}; background:${token.colorFillQuaternary}; color:${token.colorTextSecondary}; border-radius:0 ${token.borderRadiusSM}px ${token.borderRadiusSM}px 0; }
|
|
1910
1926
|
.kb-md blockquote p { margin:0; }
|
|
1911
1927
|
.kb-md hr { border:none; border-top:1px solid ${token.colorBorderSecondary}; margin:1.2em 0; }
|
|
@@ -1915,13 +1931,14 @@ function UIMarkdownViewer({ content, className, style: customStyle }) {
|
|
|
1915
1931
|
.kb-md tr:nth-child(even) td { background:${token.colorFillQuaternary}; }
|
|
1916
1932
|
.kb-md img { max-width:100%; border-radius:${token.borderRadius}px; }
|
|
1917
1933
|
`;
|
|
1934
|
+
const html = DOMPurify.sanitize(marked.parse(content));
|
|
1918
1935
|
return /* @__PURE__ */ jsxs(UIBox, { className, style: { padding: token.padding, ...customStyle }, children: [
|
|
1919
1936
|
/* @__PURE__ */ jsx("style", { children: css }),
|
|
1920
1937
|
/* @__PURE__ */ jsx(
|
|
1921
1938
|
"div",
|
|
1922
1939
|
{
|
|
1923
1940
|
className: "kb-md",
|
|
1924
|
-
dangerouslySetInnerHTML: { __html:
|
|
1941
|
+
dangerouslySetInnerHTML: { __html: html }
|
|
1925
1942
|
}
|
|
1926
1943
|
)
|
|
1927
1944
|
] });
|
|
@@ -1974,9 +1991,15 @@ function UIJsonViewer({
|
|
|
1974
1991
|
return /* @__PURE__ */ jsx(UIBox, { className, style, children: /* @__PURE__ */ jsx("pre", { style: codeStyle, children: showLineNumbers ? lines.map((line, index) => /* @__PURE__ */ jsxs("div", { children: [
|
|
1975
1992
|
/* @__PURE__ */ jsx("span", { style: lineNumberStyle, children: index + 1 }),
|
|
1976
1993
|
/* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: highlightJson(line, token) } })
|
|
1977
|
-
] }, index)) : /* @__PURE__ */ jsx(
|
|
1994
|
+
] }, index)) : /* @__PURE__ */ jsx(
|
|
1995
|
+
"span",
|
|
1996
|
+
{
|
|
1997
|
+
dangerouslySetInnerHTML: { __html: highlightedJson }
|
|
1998
|
+
}
|
|
1999
|
+
) }) });
|
|
1978
2000
|
}
|
|
1979
2001
|
function highlightJson(json, token) {
|
|
2002
|
+
json = json.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
1980
2003
|
json = json.replace(/"([^"]+)":/g, `<span style="color: ${token.colorPrimary}">"$1"</span>:`);
|
|
1981
2004
|
json = json.replace(/: "([^"]*)"/g, `: <span style="color: ${token.colorSuccess}">"$1"</span>`);
|
|
1982
2005
|
json = json.replace(/: (\d+)/g, `: <span style="color: ${token.colorWarning}">$1</span>`);
|