@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 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
- ## 🚀 Installation
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
- ## ⚙️ Setup
16
-
17
- ### 1. Import Styles
30
+ ### 2. Wrap Your App
18
31
 
19
- Add this import to your main CSS file or app entry point:
32
+ ```tsx
33
+ import { DesignSystemProvider, Button, Card } from "@phsa.tec/design-system-react";
20
34
 
21
- ```typescript
22
- import "@phsa.tec/design-system-react/styles";
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
- ### 2. Configure Tailwind CSS
26
-
27
- Update your `tailwind.config.js`:
28
-
29
- ```javascript
30
- module.exports = {
31
- content: [
32
- "./src/**/*.{js,ts,jsx,tsx}",
33
- "./node_modules/@phsa.tec/design-system-react/**/*.{js,ts,jsx,tsx}",
34
- ],
35
- theme: {
36
- extend: {
37
- colors: {
38
- border: "hsl(var(--border))",
39
- background: "hsl(var(--background))",
40
- foreground: "hsl(var(--foreground))",
41
- primary: {
42
- DEFAULT: "hsl(var(--primary))",
43
- foreground: "hsl(var(--primary-foreground))",
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
- accent: {
54
- DEFAULT: "hsl(var(--accent))",
55
- foreground: "hsl(var(--accent-foreground))",
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
- destructive: {
58
- DEFAULT: "hsl(var(--destructive))",
59
- foreground: "hsl(var(--destructive-foreground))",
73
+ typography: {
74
+ fontFamily: "Inter, sans-serif",
75
+ fontSize: {
76
+ sm: "0.875rem",
77
+ base: "1rem",
78
+ lg: "1.125rem",
79
+ },
60
80
  },
61
- success: {
62
- DEFAULT: "hsl(var(--success))",
63
- foreground: "hsl(var(--success-foreground))",
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
- .dark {
104
- --background: 150 15% 4%;
105
- --foreground: 150 10% 95%;
106
- --primary: 145 63% 48%;
107
- --primary-foreground: 150 15% 8%;
108
- --secondary: 150 12% 12%;
109
- --secondary-foreground: 150 10% 95%;
110
- --muted: 150 12% 12%;
111
- --muted-foreground: 150 8% 60%;
112
- --accent: 150 12% 12%;
113
- --accent-foreground: 150 10% 95%;
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
- @layer base {
123
- * {
124
- @apply border-border;
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
- body {
127
- @apply bg-background text-foreground;
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
- ```typescript
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
- <Card>
147
- <CardHeader>
148
- <CardTitle>Hello World</CardTitle>
149
- </CardHeader>
150
- <CardContent>
151
- <div className="space-y-4">
152
- <Input placeholder="Enter text..." />
153
- <Button>Click me</Button>
154
- </div>
155
- </CardContent>
156
- </Card>
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
- - **Layout**: Card, Sheet, Tabs, Separator
164
- - **Forms**: Input, Button, Select, Checkbox, Switch, Form
165
- - **Data**: DataTable, Badge, Avatar
166
- - **Feedback**: Dialog, AlertDialog, Toast, Alert
167
- - **Navigation**: DropdownMenu, Command
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
- ## 🌙 Dark Mode (Optional)
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
- For theme switching support:
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
- ```typescript
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
- {/* Your app */}
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