@kb-labs/studio-ui-kit 0.2.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.
package/README.md ADDED
@@ -0,0 +1,270 @@
1
+ # @kb-labs/studio-ui-kit
2
+
3
+ Professional React UI components using Ant Design and design tokens from `@kb-labs/studio-ui-core`.
4
+
5
+ ## 🎯 Key Principles
6
+
7
+ - ✅ **NO hardcoded colors** - All colors from Ant Design tokens via `theme.useToken()`
8
+ - ✅ **NO inline styles** - All spacing/typography from design tokens
9
+ - ✅ **Type-safe** - Full TypeScript support
10
+ - ✅ **Composable** - Build complex components from primitives
11
+
12
+ ## 📦 Installation
13
+
14
+ ```bash
15
+ pnpm add @kb-labs/studio-ui-kit
16
+ ```
17
+
18
+ ## 🚀 Usage
19
+
20
+ ```tsx
21
+ import { UIText, UIBox, UIFlex, UIMetricCard, UIBadge } from '@kb-labs/studio-ui-kit';
22
+
23
+ function MyComponent() {
24
+ return (
25
+ <UIBox p={4}>
26
+ <UIText size="2xl" weight="bold">Hello World</UIText>
27
+
28
+ <UIFlex gap={2} align="center">
29
+ <UIBadge variant="success">Active</UIBadge>
30
+ <UIText size="sm" color="secondary">User is online</UIText>
31
+ </UIFlex>
32
+
33
+ <UIMetricCard
34
+ label="Active Users"
35
+ value={1234}
36
+ trend="up"
37
+ delta={15.3}
38
+ unit="users"
39
+ />
40
+ </UIBox>
41
+ );
42
+ }
43
+ ```
44
+
45
+ <!-- AUTO-GENERATED:START -->
46
+
47
+ ## 📊 Component Stats
48
+
49
+ - **Total Components:** 51
50
+ - **With Tests:** 4/51 (8%)
51
+
52
+ **By Category:**
53
+
54
+ - Primitives: 4
55
+ - Core: 8
56
+ - Layout: 4
57
+ - Form: 10
58
+ - Navigation: 7
59
+ - Composite: 4
60
+ - Feedback: 6
61
+ - Overlay: 5
62
+ - Content: 3
63
+
64
+ ## 📚 Component Reference
65
+
66
+ ### Primitives
67
+
68
+ Foundation components for layout and typography
69
+
70
+ | Component | Description | Tests |
71
+ |-----------|-------------|-------|
72
+ | **UIBox** | Box component - Layout primitive with spacing tokens | ❌ |
73
+ | **UIFlex** | Flex component - Flexbox layout primitive | ❌ |
74
+ | **UIText** | Text component - Typography primitive with design tokens | ✅ |
75
+ | **UITypography** | UITypography components - Rich text display | ❌ |
76
+
77
+ ### Core
78
+
79
+ Essential UI components
80
+
81
+ | Component | Description | Tests |
82
+ |-----------|-------------|-------|
83
+ | **UIAvatar** | UIAvatar component - User avatar | ❌ |
84
+ | **UIBadge** | Badge component - Status indicator with semantic colors | ❌ |
85
+ | **UIButton** | UIButton component - Action button with semantic variants | ✅ |
86
+ | **UICard** | UICard component - Card container with header/footer | ❌ |
87
+ | **UIIcon** | UIIcon component - Icon wrapper with proper theming | ❌ |
88
+ | **UIShimmerText** | UIShimmerText - Animated gradient shimmer on text | ❌ |
89
+ | **UITag** | UITag component - Label/category tag with semantic colors | ❌ |
90
+ | **UITitle** | UITitle component - Page/section titles with hierarchy | ❌ |
91
+
92
+ ### Layout
93
+
94
+ Layout and container components
95
+
96
+ | Component | Description | Tests |
97
+ |-----------|-------------|-------|
98
+ | **UIDivider** | UIDivider component - Visual separator | ❌ |
99
+ | **UIGrid** | UIRow / UICol components - Grid layout | ❌ |
100
+ | **UISpace** | UISpace component - Spacing container | ❌ |
101
+ | **UIStack** | UIStack component - Vertical/horizontal spacing layout | ❌ |
102
+
103
+ ### Form
104
+
105
+ Form controls and inputs
106
+
107
+ | Component | Description | Tests |
108
+ |-----------|-------------|-------|
109
+ | **UICheckbox** | UICheckbox component - Checkbox input | ❌ |
110
+ | **UIDatePicker** | UIDatePicker component - Date/time picker | ❌ |
111
+ | **UIForm** | UIForm component - Form wrapper with validation | ❌ |
112
+ | **UIInput** | UIInput component - Text input with variants | ✅ |
113
+ | **UIInputNumber** | UIInputNumber component - Numeric input | ❌ |
114
+ | **UIRadio** | UIRadio component - Radio button | ❌ |
115
+ | **UISelect** | UISelect component - Dropdown select with icon support | ❌ |
116
+ | **UISlider** | UISlider component - Slider input | ❌ |
117
+ | **UISwitch** | UISwitch component - Toggle switch | ❌ |
118
+ | **UIUpload** | UIUpload component - File upload | ❌ |
119
+
120
+ ### Navigation
121
+
122
+ Navigation and menu components
123
+
124
+ | Component | Description | Tests |
125
+ |-----------|-------------|-------|
126
+ | **UIAccordion** | UIAccordion component - Collapsible panels | ❌ |
127
+ | **UIBreadcrumb** | UIBreadcrumb component - Navigation breadcrumb trail | ❌ |
128
+ | **UIDropdown** | UIDropdown component - Dropdown menu | ❌ |
129
+ | **UIMenu** | UIMenu component - Navigation menu | ❌ |
130
+ | **UISegmented** | UISegmented component - Segmented control | ❌ |
131
+ | **UISteps** | UISteps component - Step indicator | ❌ |
132
+ | **UITabs** | UITabs component - Tabbed navigation | ❌ |
133
+
134
+ ### Composite
135
+
136
+ Complex composed components
137
+
138
+ | Component | Description | Tests |
139
+ |-----------|-------------|-------|
140
+ | **UIHeader** | UIHeader component - Page header with title, subtitle, and breadcrumbs | ✅ |
141
+ | **UIPage** | UIPage component - Page container with padding and max-width | ❌ |
142
+ | **UIPageHeader** | UIPageHeader component - Standard page header | ❌ |
143
+ | **UIPageSection** | UIPageSection component - Section within a page | ❌ |
144
+
145
+ ### Feedback
146
+
147
+ Feedback and notification components
148
+
149
+ | Component | Description | Tests |
150
+ |-----------|-------------|-------|
151
+ | **UIAlert** | UIAlert component - Alert messages and notifications | ❌ |
152
+ | **UIEmptyState** | UIEmptyState component - Empty state placeholder | ❌ |
153
+ | **UIErrorState** | UIErrorState component - Error state display | ❌ |
154
+ | **UIResult** | UIResult component - Result page | ❌ |
155
+ | **UISkeleton** | UISkeleton component - Loading skeleton | ❌ |
156
+ | **UISpin** | UISpin component - Loading spinner | ❌ |
157
+
158
+ ### Overlay
159
+
160
+ Modal and overlay components
161
+
162
+ | Component | Description | Tests |
163
+ |-----------|-------------|-------|
164
+ | **UIDrawer** | UIDrawer component - Side panel overlay | ❌ |
165
+ | **UIModal** | UIModal component - Modal dialog | ❌ |
166
+ | **UIPopconfirm** | UIPopconfirm component - Confirmation popover | ❌ |
167
+ | **UIPopover** | UIPopover component - Popover overlay | ❌ |
168
+ | **UITooltip** | UITooltip component - Tooltip overlay | ❌ |
169
+
170
+ ### Content
171
+
172
+ Content display components
173
+
174
+ | Component | Description | Tests |
175
+ |-----------|-------------|-------|
176
+ | **UIDiffViewer** | UIDiffViewer | ❌ |
177
+ | **UIJsonViewer** | UIJsonViewer component - JSON content viewer | ❌ |
178
+ | **UIMarkdownViewer** | UIMarkdownViewer component - Markdown content viewer | ❌ |
179
+
180
+ <!-- AUTO-GENERATED:END -->
181
+
182
+ ## 🎨 Design Tokens
183
+
184
+ All components use design tokens from `@kb-labs/studio-ui-core`:
185
+
186
+ ### Typography
187
+ ```tsx
188
+ <UIText size="xs">Extra small text</UIText>
189
+ <UIText size="sm">Small text</UIText>
190
+ <UIText size="base">Base text</UIText>
191
+ <UIText size="lg">Large text</UIText>
192
+ <UIText size="xl">Extra large text</UIText>
193
+ <UIText size="2xl">2X large text</UIText>
194
+ ```
195
+
196
+ ### Colors
197
+ ```tsx
198
+ <UIText color="primary">Primary text</UIText>
199
+ <UIText color="secondary">Secondary text</UIText>
200
+ <UIText color="success">Success text</UIText>
201
+ <UIText color="warning">Warning text</UIText>
202
+ <UIText color="error">Error text</UIText>
203
+ <UIText color="info">Info text</UIText>
204
+ ```
205
+
206
+ ### Spacing
207
+ ```tsx
208
+ <UIBox p={2}>Padding 0.5rem</UIBox>
209
+ <UIBox p={4}>Padding 1rem</UIBox>
210
+ <UIBox p={6}>Padding 1.5rem</UIBox>
211
+ <UIBox m={2}>Margin 0.5rem</UIBox>
212
+ ```
213
+
214
+ ## 🏗️ Component Hierarchy
215
+
216
+ ```
217
+ Primitives (Tier 1)
218
+ ├── UIText - Typography
219
+ ├── UIBox - Spacing
220
+ └── UIFlex - Layout
221
+
222
+ Components (Tier 2)
223
+ ├── UIBadge - Status indicators
224
+ └── UIMetricCard - Metric displays
225
+ ```
226
+
227
+ ## 📖 Examples
228
+
229
+ ### Metric Display
230
+ ```tsx
231
+ <UIMetricCard
232
+ label="Revenue"
233
+ value={45230}
234
+ unit="USD"
235
+ trend="up"
236
+ delta={12.5}
237
+ showDelta={true}
238
+ size="default"
239
+ />
240
+ ```
241
+
242
+ ### Badge Variants
243
+ ```tsx
244
+ <UIBadge variant="success">Success</UIBadge>
245
+ <UIBadge variant="warning">Warning</UIBadge>
246
+ <UIBadge variant="error">Error</UIBadge>
247
+ <UIBadge variant="info">Info</UIBadge>
248
+ <UIBadge variant="default">Default</UIBadge>
249
+ ```
250
+
251
+ ### Layout Composition
252
+ ```tsx
253
+ <UIBox p={4} mb={3}>
254
+ <UIFlex direction="column" gap={2}>
255
+ <UIText size="lg" weight="bold">Header</UIText>
256
+ <UIText size="sm" color="secondary">Description</UIText>
257
+ </UIFlex>
258
+ </UIBox>
259
+ ```
260
+
261
+ ## 🔗 Dependencies
262
+
263
+ - `react` (peer) - ^18.3.1
264
+ - `react-dom` (peer) - ^18.3.1
265
+ - `antd` (peer) - ^5.22.5
266
+ - `@kb-labs/studio-ui-core` - Design tokens
267
+
268
+ ## 📝 License
269
+
270
+ Private - KB Labs
package/dist/index.css ADDED
@@ -0,0 +1,169 @@
1
+ /* src/core/UIButton.module.css */
2
+ .uiButton {
3
+ }
4
+ .uiButton svg {
5
+ color: inherit !important;
6
+ stroke: currentColor !important;
7
+ fill: currentColor !important;
8
+ }
9
+ .uiButton:disabled svg,
10
+ .uiButton.ant-btn-disabled svg {
11
+ opacity: 0.4;
12
+ }
13
+ .uiButton.ant-btn-sm svg {
14
+ width: 14px;
15
+ height: 14px;
16
+ }
17
+ .uiButton svg {
18
+ width: 16px;
19
+ height: 16px;
20
+ }
21
+ .uiButton.ant-btn-lg svg {
22
+ width: 18px;
23
+ height: 18px;
24
+ }
25
+ .uiButton .ant-btn-icon {
26
+ color: inherit !important;
27
+ display: inline-flex;
28
+ align-items: center;
29
+ justify-content: center;
30
+ }
31
+ .uiButton .ant-btn-icon svg {
32
+ vertical-align: middle;
33
+ display: block;
34
+ }
35
+ .uiButton.ant-btn-primary {
36
+ transition: transform 150ms ease, box-shadow 150ms ease;
37
+ }
38
+ .uiButton.ant-btn-primary:hover:not(:disabled):not(.ant-btn-disabled) {
39
+ transform: translateY(-1px);
40
+ box-shadow: 0 4px 12px rgba(12, 102, 255, 0.3);
41
+ }
42
+ .uiButton.ant-btn-primary:active:not(:disabled):not(.ant-btn-disabled) {
43
+ transform: translateY(0);
44
+ }
45
+ [dir=rtl] .uiButton .ant-btn-icon {
46
+ transform: scaleX(-1);
47
+ }
48
+
49
+ /* src/core/UIIcon.module.css */
50
+ .uiIcon {
51
+ display: inline-flex;
52
+ align-items: center;
53
+ justify-content: center;
54
+ vertical-align: middle;
55
+ }
56
+ .uiIcon svg {
57
+ color: currentColor;
58
+ stroke: currentColor;
59
+ fill: none;
60
+ display: block;
61
+ }
62
+ .uiIcon .anticon {
63
+ color: currentColor;
64
+ }
65
+ .uiIcon.clickable {
66
+ cursor: pointer;
67
+ transition: opacity 0.2s ease, transform 0.1s ease;
68
+ }
69
+ .uiIcon.clickable:hover {
70
+ opacity: 0.8;
71
+ }
72
+ .uiIcon.clickable:active {
73
+ transform: scale(0.95);
74
+ }
75
+ .uiIcon.size-xs {
76
+ font-size: 12px;
77
+ width: 12px;
78
+ height: 12px;
79
+ }
80
+ .uiIcon.size-sm {
81
+ font-size: 14px;
82
+ width: 14px;
83
+ height: 14px;
84
+ }
85
+ .uiIcon.size-base {
86
+ font-size: 16px;
87
+ width: 16px;
88
+ height: 16px;
89
+ }
90
+ .uiIcon.size-lg {
91
+ font-size: 20px;
92
+ width: 20px;
93
+ height: 20px;
94
+ }
95
+ .uiIcon.size-xl {
96
+ font-size: 24px;
97
+ width: 24px;
98
+ height: 24px;
99
+ }
100
+ .uiIcon.size-2xl {
101
+ font-size: 32px;
102
+ width: 32px;
103
+ height: 32px;
104
+ }
105
+ .uiIcon.color-primary {
106
+ color: var(--link, #2563EB);
107
+ }
108
+ .uiIcon.color-secondary {
109
+ color: var(--text-secondary, #6B7280);
110
+ }
111
+ .uiIcon.color-success {
112
+ color: var(--success, #16A34A);
113
+ }
114
+ .uiIcon.color-warning {
115
+ color: var(--warning, #F59E0B);
116
+ }
117
+ .uiIcon.color-error {
118
+ color: var(--error, #DC2626);
119
+ }
120
+ .uiIcon.color-info {
121
+ color: var(--info, #0EA5E9);
122
+ }
123
+ .uiIcon.color-inherit {
124
+ color: inherit;
125
+ }
126
+ .uiIcon.spin {
127
+ animation: uiIconSpin 1s linear infinite;
128
+ }
129
+ @keyframes uiIconSpin {
130
+ from {
131
+ transform: rotate(0deg);
132
+ }
133
+ to {
134
+ transform: rotate(360deg);
135
+ }
136
+ }
137
+ .uiIcon.disabled {
138
+ opacity: 0.4;
139
+ cursor: not-allowed;
140
+ pointer-events: none;
141
+ }
142
+
143
+ /* src/core/UIShimmerText.module.css */
144
+ .shimmer {
145
+ background:
146
+ linear-gradient(
147
+ 90deg,
148
+ var(--shimmer-color-1, #888) 0%,
149
+ var(--shimmer-color-2, #888) 25%,
150
+ var(--shimmer-highlight, #fff) 50%,
151
+ var(--shimmer-color-2, #888) 75%,
152
+ var(--shimmer-color-1, #888) 100%);
153
+ background-size: 200% 100%;
154
+ -webkit-background-clip: text;
155
+ background-clip: text;
156
+ -webkit-text-fill-color: transparent;
157
+ color: transparent;
158
+ animation: shimmerMove var(--shimmer-duration, 2s) linear infinite;
159
+ display: inline-block;
160
+ }
161
+ @keyframes shimmerMove {
162
+ 0% {
163
+ background-position: 100% 0;
164
+ }
165
+ 100% {
166
+ background-position: -100% 0;
167
+ }
168
+ }
169
+ /*# sourceMappingURL=index.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/UIButton.module.css","../src/core/UIIcon.module.css","../src/core/UIShimmerText.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 * Primary button — subtle lift effect\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: translateY(0);\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","/**\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"],"mappings":"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","names":[]}