@phsa.tec/design-system-react 0.1.10 → 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 +413 -124
- package/dist/index.css +2549 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.mts +148 -35
- package/dist/index.d.ts +148 -35
- package/dist/index.js +1114 -1357
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1064 -1309
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +1 -2534
- package/dist/styles.js +1 -0
- package/package.json +12 -4
- package/dist/styles.css.map +0 -1
- package/dist/styles.d.mts +0 -2
- package/dist/styles.d.ts +0 -2
package/README.md
CHANGED
|
@@ -1,137 +1,240 @@
|
|
|
1
1
|
# 🎨 PHSA Design System React
|
|
2
2
|
|
|
3
|
-
A modern React component library built with TypeScript, Tailwind CSS, and Radix UI.
|
|
3
|
+
A modern, **fully isolated** React component library built with TypeScript, Tailwind CSS, and Radix UI. **No Tailwind installation required** in your project!
|
|
4
|
+
|
|
5
|
+
## ✨ Features
|
|
6
|
+
|
|
7
|
+
- 🎯 **Zero Configuration** - Works out of the box, no Tailwind setup needed
|
|
8
|
+
- 🔒 **Fully Isolated** - CSS is completely isolated, won't conflict with your project's styles
|
|
9
|
+
- 🎨 **Customizable** - Easy theme customization via Provider props
|
|
10
|
+
- 📦 **Lightweight** - Only includes the CSS you actually use
|
|
11
|
+
- ♿ **Accessible** - Built with Radix UI primitives
|
|
12
|
+
- 🌙 **Dark Mode** - Built-in dark mode support
|
|
4
13
|
|
|
5
14
|
## 📚 Documentation
|
|
6
15
|
|
|
7
16
|
🌐 **[View Live Documentation](https://henriques4nti4go.github.io/phsa-design-system/)**
|
|
8
17
|
|
|
9
|
-
## 🚀
|
|
18
|
+
## 🚀 Quick Start
|
|
19
|
+
|
|
20
|
+
### 1. Install
|
|
10
21
|
|
|
11
22
|
```bash
|
|
12
23
|
npm install @phsa.tec/design-system-react
|
|
24
|
+
# or
|
|
25
|
+
yarn add @phsa.tec/design-system-react
|
|
26
|
+
# or
|
|
27
|
+
pnpm add @phsa.tec/design-system-react
|
|
13
28
|
```
|
|
14
29
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
### 1. Import Styles
|
|
30
|
+
### 2. Wrap Your App
|
|
18
31
|
|
|
19
|
-
|
|
32
|
+
```tsx
|
|
33
|
+
import { DesignSystemProvider, Button, Card } from "@phsa.tec/design-system-react";
|
|
20
34
|
|
|
21
|
-
|
|
22
|
-
|
|
35
|
+
function App() {
|
|
36
|
+
return (
|
|
37
|
+
<DesignSystemProvider>
|
|
38
|
+
<Card>
|
|
39
|
+
<Button>Click me</Button>
|
|
40
|
+
</Card>
|
|
41
|
+
</DesignSystemProvider>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
23
44
|
```
|
|
24
45
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
},
|
|
45
|
-
secondary: {
|
|
46
|
-
DEFAULT: "hsl(var(--secondary))",
|
|
47
|
-
foreground: "hsl(var(--secondary-foreground))",
|
|
48
|
-
},
|
|
49
|
-
muted: {
|
|
50
|
-
DEFAULT: "hsl(var(--muted))",
|
|
51
|
-
foreground: "hsl(var(--muted-foreground))",
|
|
46
|
+
**That's it!** The CSS is automatically injected. No configuration needed.
|
|
47
|
+
|
|
48
|
+
## 🎨 Customization
|
|
49
|
+
|
|
50
|
+
You can customize **all Tailwind properties** through the `DesignSystemProvider`:
|
|
51
|
+
|
|
52
|
+
### Complete Theme Customization
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
import { DesignSystemProvider } from "@phsa.tec/design-system-react";
|
|
56
|
+
|
|
57
|
+
function App() {
|
|
58
|
+
return (
|
|
59
|
+
<DesignSystemProvider
|
|
60
|
+
theme={{
|
|
61
|
+
colors: {
|
|
62
|
+
primary: "#3b82f6",
|
|
63
|
+
secondary: "#10b981",
|
|
64
|
+
// ... all color options
|
|
52
65
|
},
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
66
|
+
spacing: {
|
|
67
|
+
base: "0.25rem", // 4px
|
|
68
|
+
sm: "0.5rem", // 8px
|
|
69
|
+
md: "1rem", // 16px
|
|
70
|
+
lg: "1.5rem", // 24px
|
|
71
|
+
xl: "2rem", // 32px
|
|
56
72
|
},
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
73
|
+
typography: {
|
|
74
|
+
fontFamily: "Inter, sans-serif",
|
|
75
|
+
fontSize: {
|
|
76
|
+
sm: "0.875rem",
|
|
77
|
+
base: "1rem",
|
|
78
|
+
lg: "1.125rem",
|
|
79
|
+
},
|
|
60
80
|
},
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
81
|
+
borderRadius: {
|
|
82
|
+
sm: "0.25rem",
|
|
83
|
+
md: "0.5rem",
|
|
84
|
+
lg: "0.75rem",
|
|
64
85
|
},
|
|
65
|
-
}
|
|
86
|
+
}}
|
|
87
|
+
>
|
|
88
|
+
{/* Your app */}
|
|
89
|
+
</DesignSystemProvider>
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Simple Color Customization (Legacy)
|
|
95
|
+
|
|
96
|
+
For backward compatibility, you can still use the `colors` prop:
|
|
97
|
+
|
|
98
|
+
```tsx
|
|
99
|
+
<DesignSystemProvider
|
|
100
|
+
colors={{
|
|
101
|
+
primary: "#3b82f6",
|
|
102
|
+
secondary: "#10b981",
|
|
103
|
+
}}
|
|
104
|
+
>
|
|
105
|
+
{/* Your app */}
|
|
106
|
+
</DesignSystemProvider>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Available Theme Properties
|
|
110
|
+
|
|
111
|
+
#### Colors (`theme.colors`)
|
|
112
|
+
|
|
113
|
+
- `primary`, `primaryForeground`
|
|
114
|
+
- `secondary`, `secondaryForeground`
|
|
115
|
+
- `accent`, `accentForeground`
|
|
116
|
+
- `destructive`, `destructiveForeground`
|
|
117
|
+
- `success`, `successForeground`
|
|
118
|
+
- `warning`
|
|
119
|
+
- `muted`, `mutedForeground`
|
|
120
|
+
- `background`, `foreground`
|
|
121
|
+
- `card`, `cardForeground`
|
|
122
|
+
- `popover`, `popoverForeground`
|
|
123
|
+
- `border`, `input`, `ring`
|
|
124
|
+
- `radius`
|
|
125
|
+
|
|
126
|
+
**Color formats supported:**
|
|
127
|
+
- **Hex**: `"#3b82f6"`
|
|
128
|
+
- **HSL**: `"217 91% 60%"` (without `hsl()` wrapper)
|
|
129
|
+
- **RGB**: Standard RGB values
|
|
130
|
+
|
|
131
|
+
#### Spacing (`theme.spacing`)
|
|
132
|
+
|
|
133
|
+
Customize spacing scale used by padding, margin, gap utilities:
|
|
134
|
+
|
|
135
|
+
```tsx
|
|
136
|
+
theme={{
|
|
137
|
+
spacing: {
|
|
138
|
+
base: "0.25rem", // Base unit (default: 4px)
|
|
139
|
+
xs: "0.5rem", // Extra small
|
|
140
|
+
sm: "0.75rem", // Small
|
|
141
|
+
md: "1rem", // Medium
|
|
142
|
+
lg: "1.5rem", // Large
|
|
143
|
+
xl: "2rem", // Extra large
|
|
144
|
+
"2xl": "3rem", // 2x extra large
|
|
145
|
+
"3xl": "4rem", // 3x extra large
|
|
146
|
+
}
|
|
147
|
+
}}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
#### Typography (`theme.typography`)
|
|
151
|
+
|
|
152
|
+
```tsx
|
|
153
|
+
theme={{
|
|
154
|
+
typography: {
|
|
155
|
+
fontFamily: "Inter, sans-serif",
|
|
156
|
+
fontSize: {
|
|
157
|
+
xs: "0.75rem",
|
|
158
|
+
sm: "0.875rem",
|
|
159
|
+
base: "1rem",
|
|
160
|
+
lg: "1.125rem",
|
|
161
|
+
xl: "1.25rem",
|
|
162
|
+
"2xl": "1.5rem",
|
|
163
|
+
"3xl": "1.875rem",
|
|
164
|
+
"4xl": "2.25rem",
|
|
165
|
+
"5xl": "3rem",
|
|
166
|
+
},
|
|
167
|
+
fontWeight: {
|
|
168
|
+
light: "300",
|
|
169
|
+
normal: "400",
|
|
170
|
+
medium: "500",
|
|
171
|
+
semibold: "600",
|
|
172
|
+
bold: "700",
|
|
173
|
+
},
|
|
174
|
+
lineHeight: {
|
|
175
|
+
none: "1",
|
|
176
|
+
tight: "1.25",
|
|
177
|
+
snug: "1.375",
|
|
178
|
+
normal: "1.5",
|
|
179
|
+
relaxed: "1.75",
|
|
180
|
+
loose: "2",
|
|
66
181
|
},
|
|
67
|
-
},
|
|
68
|
-
plugins: [require("tailwindcss-animate")],
|
|
69
|
-
};
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### 3. Add CSS Variables
|
|
73
|
-
|
|
74
|
-
Add these variables to your global CSS file:
|
|
75
|
-
|
|
76
|
-
```css
|
|
77
|
-
@tailwind base;
|
|
78
|
-
@tailwind components;
|
|
79
|
-
@tailwind utilities;
|
|
80
|
-
|
|
81
|
-
@layer base {
|
|
82
|
-
:root {
|
|
83
|
-
--background: 0 0% 100%;
|
|
84
|
-
--foreground: 150 6% 25%;
|
|
85
|
-
--primary: 145 63% 42%;
|
|
86
|
-
--primary-foreground: 0 0% 98%;
|
|
87
|
-
--secondary: 150 10% 96%;
|
|
88
|
-
--secondary-foreground: 150 6% 25%;
|
|
89
|
-
--muted: 150 10% 96%;
|
|
90
|
-
--muted-foreground: 150 6% 45%;
|
|
91
|
-
--accent: 150 10% 96%;
|
|
92
|
-
--accent-foreground: 150 6% 25%;
|
|
93
|
-
--destructive: 0 84.2% 60.2%;
|
|
94
|
-
--destructive-foreground: 0 0% 98%;
|
|
95
|
-
--success: 145 63% 42%;
|
|
96
|
-
--success-foreground: 0 0% 98%;
|
|
97
|
-
--border: 150 12% 88%;
|
|
98
|
-
--input: 150 12% 88%;
|
|
99
|
-
--ring: 145 63% 42%;
|
|
100
|
-
--radius: 0.5rem;
|
|
101
182
|
}
|
|
183
|
+
}}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
#### Border Radius (`theme.borderRadius`)
|
|
102
187
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
--destructive: 0 62.8% 30.6%;
|
|
115
|
-
--destructive-foreground: 0 0% 98%;
|
|
116
|
-
--border: 150 12% 18%;
|
|
117
|
-
--input: 150 12% 18%;
|
|
118
|
-
--ring: 145 63% 48%;
|
|
188
|
+
```tsx
|
|
189
|
+
theme={{
|
|
190
|
+
borderRadius: {
|
|
191
|
+
none: "0px",
|
|
192
|
+
sm: "0.25rem",
|
|
193
|
+
md: "0.5rem",
|
|
194
|
+
lg: "0.75rem",
|
|
195
|
+
xl: "1rem",
|
|
196
|
+
"2xl": "1.5rem",
|
|
197
|
+
"3xl": "2rem",
|
|
198
|
+
full: "9999px",
|
|
119
199
|
}
|
|
120
|
-
}
|
|
200
|
+
}}
|
|
201
|
+
```
|
|
121
202
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
203
|
+
#### Box Shadow (`theme.boxShadow`)
|
|
204
|
+
|
|
205
|
+
```tsx
|
|
206
|
+
theme={{
|
|
207
|
+
boxShadow: {
|
|
208
|
+
sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
|
|
209
|
+
md: "0 4px 6px -1px rgb(0 0 0 / 0.1)",
|
|
210
|
+
lg: "0 10px 15px -3px rgb(0 0 0 / 0.1)",
|
|
211
|
+
xl: "0 20px 25px -5px rgb(0 0 0 / 0.1)",
|
|
212
|
+
"2xl": "0 25px 50px -12px rgb(0 0 0 / 0.25)",
|
|
213
|
+
inner: "inset 0 2px 4px 0 rgb(0 0 0 / 0.05)",
|
|
214
|
+
none: "none",
|
|
125
215
|
}
|
|
126
|
-
|
|
127
|
-
|
|
216
|
+
}}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
#### Breakpoints (`theme.breakpoints`)
|
|
220
|
+
|
|
221
|
+
```tsx
|
|
222
|
+
theme={{
|
|
223
|
+
breakpoints: {
|
|
224
|
+
sm: "640px",
|
|
225
|
+
md: "768px",
|
|
226
|
+
lg: "1024px",
|
|
227
|
+
xl: "1280px",
|
|
228
|
+
"2xl": "1536px",
|
|
128
229
|
}
|
|
129
|
-
}
|
|
230
|
+
}}
|
|
130
231
|
```
|
|
131
232
|
|
|
132
|
-
## 🎯 Usage
|
|
233
|
+
## 🎯 Usage Examples
|
|
133
234
|
|
|
134
|
-
|
|
235
|
+
### Basic Components
|
|
236
|
+
|
|
237
|
+
```tsx
|
|
135
238
|
import {
|
|
136
239
|
Button,
|
|
137
240
|
Input,
|
|
@@ -139,49 +242,235 @@ import {
|
|
|
139
242
|
CardContent,
|
|
140
243
|
CardHeader,
|
|
141
244
|
CardTitle,
|
|
245
|
+
DesignSystemProvider,
|
|
142
246
|
} from "@phsa.tec/design-system-react";
|
|
143
247
|
|
|
144
248
|
function App() {
|
|
145
249
|
return (
|
|
146
|
-
<
|
|
147
|
-
<
|
|
148
|
-
<
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
<
|
|
152
|
-
<
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
250
|
+
<DesignSystemProvider>
|
|
251
|
+
<Card>
|
|
252
|
+
<CardHeader>
|
|
253
|
+
<CardTitle>Hello World</CardTitle>
|
|
254
|
+
</CardHeader>
|
|
255
|
+
<CardContent>
|
|
256
|
+
<div style={{ display: "flex", flexDirection: "column", gap: "1rem" }}>
|
|
257
|
+
<Input placeholder="Enter text..." />
|
|
258
|
+
<Button>Click me</Button>
|
|
259
|
+
</div>
|
|
260
|
+
</CardContent>
|
|
261
|
+
</Card>
|
|
262
|
+
</DesignSystemProvider>
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### With Custom Theme
|
|
268
|
+
|
|
269
|
+
```tsx
|
|
270
|
+
import { DesignSystemProvider, Button } from "@phsa.tec/design-system-react";
|
|
271
|
+
|
|
272
|
+
function App() {
|
|
273
|
+
return (
|
|
274
|
+
<DesignSystemProvider
|
|
275
|
+
theme={{
|
|
276
|
+
colors: {
|
|
277
|
+
primary: "#8b5cf6", // Purple
|
|
278
|
+
secondary: "#06b6d4", // Cyan
|
|
279
|
+
},
|
|
280
|
+
spacing: {
|
|
281
|
+
md: "1.25rem", // Custom medium spacing
|
|
282
|
+
lg: "2rem", // Custom large spacing
|
|
283
|
+
},
|
|
284
|
+
typography: {
|
|
285
|
+
fontFamily: "Inter, sans-serif",
|
|
286
|
+
},
|
|
287
|
+
}}
|
|
288
|
+
>
|
|
289
|
+
<Button variant="default">Primary Button</Button>
|
|
290
|
+
<Button variant="secondary">Secondary Button</Button>
|
|
291
|
+
</DesignSystemProvider>
|
|
292
|
+
);
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Advanced Customization Example
|
|
297
|
+
|
|
298
|
+
```tsx
|
|
299
|
+
import { DesignSystemProvider, Card, Button } from "@phsa.tec/design-system-react";
|
|
300
|
+
|
|
301
|
+
function App() {
|
|
302
|
+
return (
|
|
303
|
+
<DesignSystemProvider
|
|
304
|
+
theme={{
|
|
305
|
+
colors: {
|
|
306
|
+
primary: "#6366f1",
|
|
307
|
+
secondary: "#8b5cf6",
|
|
308
|
+
},
|
|
309
|
+
spacing: {
|
|
310
|
+
base: "0.5rem", // 8px base (instead of 4px)
|
|
311
|
+
md: "1.5rem", // 24px medium
|
|
312
|
+
lg: "3rem", // 48px large
|
|
313
|
+
},
|
|
314
|
+
typography: {
|
|
315
|
+
fontFamily: "'Inter', 'Roboto', sans-serif",
|
|
316
|
+
fontSize: {
|
|
317
|
+
base: "16px",
|
|
318
|
+
lg: "18px",
|
|
319
|
+
xl: "20px",
|
|
320
|
+
},
|
|
321
|
+
fontWeight: {
|
|
322
|
+
normal: "400",
|
|
323
|
+
semibold: "600",
|
|
324
|
+
bold: "700",
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
borderRadius: {
|
|
328
|
+
md: "0.75rem",
|
|
329
|
+
lg: "1rem",
|
|
330
|
+
},
|
|
331
|
+
boxShadow: {
|
|
332
|
+
md: "0 8px 16px -4px rgb(0 0 0 / 0.15)",
|
|
333
|
+
lg: "0 16px 32px -8px rgb(0 0 0 / 0.2)",
|
|
334
|
+
},
|
|
335
|
+
}}
|
|
336
|
+
>
|
|
337
|
+
<Card>
|
|
338
|
+
<Button>Customized Button</Button>
|
|
339
|
+
</Card>
|
|
340
|
+
</DesignSystemProvider>
|
|
157
341
|
);
|
|
158
342
|
}
|
|
159
343
|
```
|
|
160
344
|
|
|
161
345
|
## 🧩 Available Components
|
|
162
346
|
|
|
163
|
-
|
|
164
|
-
- **
|
|
165
|
-
- **
|
|
166
|
-
- **
|
|
167
|
-
- **
|
|
347
|
+
### Layout
|
|
348
|
+
- **Card** - Container component with header, content, and footer
|
|
349
|
+
- **Sheet** - Slide-over panel
|
|
350
|
+
- **Tabs** - Tab navigation
|
|
351
|
+
- **Separator** - Visual divider
|
|
352
|
+
- **PageLayout** - Full page layout wrapper
|
|
353
|
+
|
|
354
|
+
### Forms
|
|
355
|
+
- **Input** - Text input with validation support
|
|
356
|
+
- **Button** - Button with multiple variants
|
|
357
|
+
- **Select** - Dropdown selection
|
|
358
|
+
- **Checkbox** - Checkbox input
|
|
359
|
+
- **Switch** - Toggle switch
|
|
360
|
+
- **Form** - Form wrapper with React Hook Form integration
|
|
361
|
+
|
|
362
|
+
### Data Display
|
|
363
|
+
- **DataTable** - Advanced table with sorting, filtering, pagination
|
|
364
|
+
- **Badge** - Status badge
|
|
365
|
+
- **Avatar** - User avatar
|
|
366
|
+
- **Text** - Typography component
|
|
168
367
|
|
|
169
|
-
|
|
368
|
+
### Feedback
|
|
369
|
+
- **Dialog** - Modal dialog
|
|
370
|
+
- **AlertDialog** - Confirmation dialog
|
|
371
|
+
- **Toast** - Notification toast
|
|
372
|
+
- **Alert** - Alert message
|
|
373
|
+
- **Spinner** - Loading spinner
|
|
170
374
|
|
|
171
|
-
|
|
375
|
+
### Navigation
|
|
376
|
+
- **DropdownMenu** - Dropdown menu
|
|
377
|
+
- **Breadcrumbs** - Breadcrumb navigation
|
|
378
|
+
- **Command** - Command palette
|
|
379
|
+
|
|
380
|
+
## 🌙 Dark Mode
|
|
381
|
+
|
|
382
|
+
The design system supports dark mode automatically. Add the `dark` class to your root element:
|
|
383
|
+
|
|
384
|
+
```tsx
|
|
385
|
+
// Toggle dark mode
|
|
386
|
+
document.documentElement.classList.toggle('dark');
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
Or use `next-themes` for React:
|
|
172
390
|
|
|
173
391
|
```bash
|
|
174
392
|
npm install next-themes
|
|
175
393
|
```
|
|
176
394
|
|
|
177
|
-
```
|
|
395
|
+
```tsx
|
|
178
396
|
import { ThemeProvider } from "next-themes";
|
|
397
|
+
import { DesignSystemProvider } from "@phsa.tec/design-system-react";
|
|
179
398
|
|
|
180
399
|
function App() {
|
|
181
400
|
return (
|
|
182
401
|
<ThemeProvider attribute="class" defaultTheme="system" enableSystem>
|
|
183
|
-
|
|
402
|
+
<DesignSystemProvider>
|
|
403
|
+
{/* Your app */}
|
|
404
|
+
</DesignSystemProvider>
|
|
184
405
|
</ThemeProvider>
|
|
185
406
|
);
|
|
186
407
|
}
|
|
187
408
|
```
|
|
409
|
+
|
|
410
|
+
## 🔒 Isolation & Compatibility
|
|
411
|
+
|
|
412
|
+
### ✅ Works With
|
|
413
|
+
|
|
414
|
+
- ✅ Projects **without** Tailwind CSS
|
|
415
|
+
- ✅ Projects **with** Tailwind CSS (no conflicts!)
|
|
416
|
+
- ✅ Next.js, Vite, Create React App, etc.
|
|
417
|
+
- ✅ Any React framework
|
|
418
|
+
|
|
419
|
+
### How It Works
|
|
420
|
+
|
|
421
|
+
The design system:
|
|
422
|
+
1. **Compiles CSS at build time** - All Tailwind classes are pre-compiled
|
|
423
|
+
2. **Uses unique class prefixes** - Classes are prefixed with `phsa-` to avoid conflicts
|
|
424
|
+
3. **Scopes CSS with `.ds`** - All styles are scoped to prevent interference
|
|
425
|
+
4. **Auto-injects CSS** - CSS is automatically loaded when you use `DesignSystemProvider`
|
|
426
|
+
|
|
427
|
+
## 📦 Package Exports
|
|
428
|
+
|
|
429
|
+
```typescript
|
|
430
|
+
// Components
|
|
431
|
+
import { Button, Card } from "@phsa.tec/design-system-react";
|
|
432
|
+
|
|
433
|
+
// Styles (if you need manual import)
|
|
434
|
+
import "@phsa.tec/design-system-react/styles";
|
|
435
|
+
// or
|
|
436
|
+
import styles from "@phsa.tec/design-system-react/styles";
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
## 🛠️ Development
|
|
440
|
+
|
|
441
|
+
For local development and contributing:
|
|
442
|
+
|
|
443
|
+
```bash
|
|
444
|
+
# Install dependencies
|
|
445
|
+
yarn install
|
|
446
|
+
|
|
447
|
+
# Run Storybook
|
|
448
|
+
yarn storybook
|
|
449
|
+
|
|
450
|
+
# Build library
|
|
451
|
+
yarn build:lib
|
|
452
|
+
|
|
453
|
+
# Watch mode
|
|
454
|
+
yarn build:lib:watch
|
|
455
|
+
|
|
456
|
+
# Run tests
|
|
457
|
+
yarn test
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
## 📄 License
|
|
461
|
+
|
|
462
|
+
MIT License - see [LICENSE](LICENSE) file for details.
|
|
463
|
+
|
|
464
|
+
## 🤝 Contributing
|
|
465
|
+
|
|
466
|
+
Contributions are welcome! Please read our contributing guidelines before submitting PRs.
|
|
467
|
+
|
|
468
|
+
## 📞 Support
|
|
469
|
+
|
|
470
|
+
- **Documentation**: [View Live Docs](https://henriques4nti4go.github.io/phsa-design-system/)
|
|
471
|
+
- **Issues**: [GitHub Issues](https://github.com/henriques4nti4go/phsa-design-system/issues)
|
|
472
|
+
- **Package**: [npm](https://www.npmjs.com/package/@phsa.tec/design-system-react)
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
Built with ❤️ by the PHSA team
|