@abhir9/pd-design-system 0.1.18 → 0.1.19
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 +71 -12
- package/dist/index.cjs +86 -70
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +1098 -429
- package/dist/index.d.cts +29 -6
- package/dist/index.d.ts +29 -6
- package/dist/index.js +86 -71
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1061 -417
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -21,21 +21,38 @@ npm install @pd-design/system
|
|
|
21
21
|
## Quick Start
|
|
22
22
|
|
|
23
23
|
```tsx
|
|
24
|
-
import {
|
|
25
|
-
import '@pd-design/system/styles';
|
|
24
|
+
import { PdProvider, Button, Input } from '@pd-design/system';
|
|
25
|
+
import '@pd-design/system/styles.css';
|
|
26
26
|
|
|
27
27
|
function App() {
|
|
28
28
|
return (
|
|
29
|
-
<
|
|
29
|
+
<PdProvider theme="light">
|
|
30
30
|
<Button variant="primary" intent="danger" size="md">
|
|
31
31
|
Delete
|
|
32
32
|
</Button>
|
|
33
33
|
<Input placeholder="Enter text..." size="md" />
|
|
34
|
-
</
|
|
34
|
+
</PdProvider>
|
|
35
35
|
);
|
|
36
36
|
}
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
+
### Important: Style Isolation
|
|
40
|
+
|
|
41
|
+
The design system uses **scoped styling** to prevent style conflicts:
|
|
42
|
+
|
|
43
|
+
- ✅ **All Tailwind classes are prefixed with `pd-`** - No collision with consumer Tailwind
|
|
44
|
+
- ✅ **All CSS variables are scoped under `.pd-root`** - No token leakage
|
|
45
|
+
- ✅ **Preflight is disabled** - Consumer styles are never reset
|
|
46
|
+
- ✅ **Works with any consumer setup** - Tailwind, MUI, AntD, Bootstrap, or plain CSS
|
|
47
|
+
|
|
48
|
+
**Always wrap your components with `PdProvider`** to create the scoped boundary:
|
|
49
|
+
|
|
50
|
+
```tsx
|
|
51
|
+
<PdProvider theme="light">
|
|
52
|
+
{/* Your design system components */}
|
|
53
|
+
</PdProvider>
|
|
54
|
+
```
|
|
55
|
+
|
|
39
56
|
## Configuration
|
|
40
57
|
|
|
41
58
|
Configure the design system globally:
|
|
@@ -191,25 +208,49 @@ No arbitrary strings or raw class overrides are allowed.
|
|
|
191
208
|
|
|
192
209
|
## Theming
|
|
193
210
|
|
|
194
|
-
The design system uses CSS variables
|
|
211
|
+
The design system uses **scoped CSS variables** under `.pd-root`. Themes can be switched without rebuilding:
|
|
195
212
|
|
|
196
213
|
```tsx
|
|
197
|
-
<
|
|
214
|
+
<PdProvider theme="dark">
|
|
198
215
|
{/* Dark mode */}
|
|
199
|
-
</
|
|
216
|
+
</PdProvider>
|
|
200
217
|
```
|
|
201
218
|
|
|
202
219
|
### Custom Themes
|
|
203
220
|
|
|
204
|
-
You can
|
|
221
|
+
You can override tokens using CSS variables scoped to `.pd-root`:
|
|
222
|
+
|
|
223
|
+
```tsx
|
|
224
|
+
<PdProvider
|
|
225
|
+
theme="light"
|
|
226
|
+
className="pd-root [--pd-primary:220_80%_50%]"
|
|
227
|
+
>
|
|
228
|
+
{/* Custom primary color */}
|
|
229
|
+
</PdProvider>
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Or via CSS:
|
|
205
233
|
|
|
206
234
|
```css
|
|
207
|
-
|
|
208
|
-
--pd-
|
|
209
|
-
--pd-
|
|
235
|
+
.pd-root {
|
|
236
|
+
--pd-primary: 220 80% 50%;
|
|
237
|
+
--pd-primary-foreground: 0 0% 98%;
|
|
210
238
|
}
|
|
211
239
|
```
|
|
212
240
|
|
|
241
|
+
### Per-Widget Theming
|
|
242
|
+
|
|
243
|
+
You can wrap only part of your page with `PdProvider` for widget-level theming:
|
|
244
|
+
|
|
245
|
+
```tsx
|
|
246
|
+
<div>
|
|
247
|
+
{/* Consumer styles */}
|
|
248
|
+
<PdProvider theme="dark">
|
|
249
|
+
{/* Design system widget with dark theme */}
|
|
250
|
+
</PdProvider>
|
|
251
|
+
</div>
|
|
252
|
+
```
|
|
253
|
+
|
|
213
254
|
## Adapter Layer
|
|
214
255
|
|
|
215
256
|
The adapter layer allows switching UI engines without changing application code:
|
|
@@ -247,9 +288,27 @@ src/
|
|
|
247
288
|
├── theme/ # Theme system & provider
|
|
248
289
|
├── primitives/ # Headless components
|
|
249
290
|
├── adapters/ # UI engine adapters
|
|
250
|
-
|
|
291
|
+
├── components/ # Public components
|
|
292
|
+
└── styles/ # Scoped CSS (tokens.css, base.css)
|
|
251
293
|
```
|
|
252
294
|
|
|
295
|
+
### Style Isolation Architecture
|
|
296
|
+
|
|
297
|
+
The design system implements **4 guardrails** to prevent style conflicts:
|
|
298
|
+
|
|
299
|
+
1. **Prefix all Tailwind classes** (`pd-`) - Utilities never collide with consumer Tailwind
|
|
300
|
+
2. **Disable Tailwind preflight** - Consumer styles are never reset
|
|
301
|
+
3. **Scope all tokens under `.pd-root`** - Tokens never leak outside the boundary
|
|
302
|
+
4. **Ship compiled CSS** - Consumer doesn't need Tailwind to use components
|
|
303
|
+
|
|
304
|
+
This ensures the design system works seamlessly with:
|
|
305
|
+
- ✅ Consumer Tailwind projects
|
|
306
|
+
- ✅ Material UI (MUI)
|
|
307
|
+
- ✅ Ant Design
|
|
308
|
+
- ✅ Bootstrap
|
|
309
|
+
- ✅ Plain CSS projects
|
|
310
|
+
- ✅ Any CSS framework or reset
|
|
311
|
+
|
|
253
312
|
## TypeScript
|
|
254
313
|
|
|
255
314
|
Full TypeScript support with autocomplete:
|
package/dist/index.cjs
CHANGED
|
@@ -144,14 +144,14 @@ function getAvailableIconNames() {
|
|
|
144
144
|
);
|
|
145
145
|
}
|
|
146
146
|
var buttonVariants = classVarianceAuthority.cva(
|
|
147
|
-
"inline-flex items-center justify-center rounded-
|
|
147
|
+
"pd-inline-flex pd-items-center pd-justify-center pd-rounded-[var(--pd-radius-base)] pd-font-medium pd-transition-colors pd-focus-visible:outline-none pd-focus-visible:ring-2 pd-focus-visible:ring-[var(--pd-border-blue)] pd-focus-visible:ring-offset-2 pd-disabled:pointer-events-none pd-disabled:cursor-not-allowed pd-disabled:hover:pd-bg-[inherit] pd-disabled:hover:pd-text-[inherit] pd-disabled:hover:pd-border-[inherit] pd-disabled:active:pd-bg-[inherit] pd-disabled:active:pd-text-[inherit] pd-disabled:active:pd-border-[inherit] [font-family:var(--pd-font-sans,Gist,sans-serif)] pd-shadow-none",
|
|
148
148
|
{
|
|
149
149
|
variants: {
|
|
150
150
|
variant: {
|
|
151
|
-
primary: "",
|
|
152
|
-
secondary: "",
|
|
153
|
-
ghost: "",
|
|
154
|
-
|
|
151
|
+
primary: "pd-border-0",
|
|
152
|
+
secondary: "pd-border",
|
|
153
|
+
ghost: "pd-border-0",
|
|
154
|
+
destructive: "pd-border-0"
|
|
155
155
|
},
|
|
156
156
|
intent: {
|
|
157
157
|
primary: "",
|
|
@@ -161,9 +161,9 @@ var buttonVariants = classVarianceAuthority.cva(
|
|
|
161
161
|
neutral: ""
|
|
162
162
|
},
|
|
163
163
|
size: {
|
|
164
|
-
sm: "h-8 px-3 text-sm",
|
|
165
|
-
md: "h-10 px-4 text-base",
|
|
166
|
-
lg: "h-12 px-6 text-lg"
|
|
164
|
+
sm: "pd-h-8 pd-px-3 pd-text-sm",
|
|
165
|
+
md: "pd-h-10 pd-px-4 pd-text-base",
|
|
166
|
+
lg: "pd-h-12 pd-px-6 pd-text-lg"
|
|
167
167
|
}
|
|
168
168
|
},
|
|
169
169
|
compoundVariants: [
|
|
@@ -171,105 +171,85 @@ var buttonVariants = classVarianceAuthority.cva(
|
|
|
171
171
|
{
|
|
172
172
|
variant: "primary",
|
|
173
173
|
intent: "primary",
|
|
174
|
-
class: "bg-[var(--background-invert)] text-[var(--content-on-color)] hover:bg-[var(--background-invert-light)] active:bg-[var(--background-invert)]
|
|
174
|
+
class: "pd-bg-[var(--pd-background-invert)] pd-text-[var(--pd-content-on-color)] hover:pd-bg-[var(--pd-background-invert-light)] active:pd-bg-[var(--pd-background-invert)]"
|
|
175
175
|
},
|
|
176
176
|
{
|
|
177
177
|
variant: "primary",
|
|
178
178
|
intent: "success",
|
|
179
|
-
class: "bg-[var(--
|
|
179
|
+
class: "pd-bg-[var(--pd-intent-success-bg)] pd-text-[var(--pd-intent-success-text)] hover:pd-bg-[var(--pd-intent-success-bg-hover)] active:pd-bg-[var(--pd-intent-success-bg-active)]"
|
|
180
180
|
},
|
|
181
181
|
{
|
|
182
182
|
variant: "primary",
|
|
183
183
|
intent: "warning",
|
|
184
|
-
class: "bg-[var(--
|
|
184
|
+
class: "pd-bg-[var(--pd-intent-warning-bg)] pd-text-[var(--pd-intent-warning-text)] hover:pd-bg-[var(--pd-intent-warning-bg-hover)] active:pd-bg-[var(--pd-intent-warning-bg-active)]"
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
variant: "primary",
|
|
188
188
|
intent: "danger",
|
|
189
|
-
class: "bg-[var(--
|
|
189
|
+
class: "pd-bg-[var(--pd-intent-danger-bg)] pd-text-[var(--pd-destructive-foreground)] hover:pd-bg-[var(--pd-intent-danger-bg-hover)] active:pd-bg-[var(--pd-intent-danger-bg-active)] pd-disabled:pd-bg-[var(--pd-intent-danger-bg)] pd-disabled:pd-text-[var(--pd-content-subtle)]"
|
|
190
190
|
},
|
|
191
191
|
{
|
|
192
192
|
variant: "primary",
|
|
193
193
|
intent: "neutral",
|
|
194
|
-
class: "bg-[var(--
|
|
194
|
+
class: "pd-bg-[var(--pd-intent-neutral-bg)] pd-text-[var(--pd-intent-neutral-text)] hover:pd-bg-[var(--pd-intent-neutral-bg-hover)] active:pd-bg-[var(--pd-intent-neutral-bg-active)]"
|
|
195
195
|
},
|
|
196
|
-
// Secondary variant -
|
|
196
|
+
// Secondary variant - White bg default, always has light grey border
|
|
197
197
|
{
|
|
198
198
|
variant: "secondary",
|
|
199
199
|
intent: "primary",
|
|
200
|
-
class: "bg-[var(--background-
|
|
200
|
+
class: "pd-bg-[var(--pd-background-primary)] pd-text-[var(--pd-content-secondary)] hover:pd-bg-[var(--pd-background-low)] hover:pd-text-[var(--pd-content-primary)] active:pd-bg-[var(--pd-background-low-on-hover)] active:pd-text-[var(--pd-content-primary)] pd-border pd-border-[var(--pd-border-secondary)]"
|
|
201
201
|
},
|
|
202
202
|
{
|
|
203
203
|
variant: "secondary",
|
|
204
204
|
intent: "success",
|
|
205
|
-
class: "bg-[var(--
|
|
205
|
+
class: "pd-bg-[var(--pd-intent-success-bg)] pd-text-[var(--pd-intent-success-text)] hover:pd-bg-[var(--pd-intent-success-bg-hover)] active:pd-bg-[var(--pd-intent-success-bg-active)] pd-border-[var(--pd-intent-success-border)]"
|
|
206
206
|
},
|
|
207
207
|
{
|
|
208
208
|
variant: "secondary",
|
|
209
209
|
intent: "warning",
|
|
210
|
-
class: "bg-[var(--
|
|
210
|
+
class: "pd-bg-[var(--pd-intent-warning-bg)] pd-text-[var(--pd-intent-warning-text)] hover:pd-bg-[var(--pd-intent-warning-bg-hover)] active:pd-bg-[var(--pd-intent-warning-bg-active)] pd-border-[var(--pd-intent-warning-border)]"
|
|
211
211
|
},
|
|
212
212
|
{
|
|
213
213
|
variant: "secondary",
|
|
214
214
|
intent: "danger",
|
|
215
|
-
class: "bg-[var(--
|
|
215
|
+
class: "pd-bg-[var(--pd-intent-danger-bg)] pd-text-[var(--pd-intent-danger-text)] hover:pd-bg-[var(--pd-intent-danger-bg-hover)] hover:pd-text-[var(--pd-intent-danger-hover)] active:pd-bg-[var(--pd-intent-danger-bg-active)] pd-border pd-border-[var(--pd-intent-danger-border)]"
|
|
216
216
|
},
|
|
217
217
|
{
|
|
218
218
|
variant: "secondary",
|
|
219
219
|
intent: "neutral",
|
|
220
|
-
class: "bg-[var(--
|
|
220
|
+
class: "pd-bg-[var(--pd-intent-neutral-bg)] pd-text-[var(--pd-intent-neutral-text)] hover:pd-bg-[var(--pd-intent-neutral-bg-hover)] active:pd-bg-[var(--pd-intent-neutral-bg-active)] pd-border-[var(--pd-intent-neutral-border)]"
|
|
221
221
|
},
|
|
222
|
-
// Ghost variant -
|
|
222
|
+
// Ghost variant - Transparent default, light grey fill on hover/pressed/loading
|
|
223
223
|
{
|
|
224
224
|
variant: "ghost",
|
|
225
225
|
intent: "primary",
|
|
226
|
-
class: "text-[var(--content-
|
|
226
|
+
class: "pd-border-0 pd-bg-transparent pd-text-[var(--pd-content-secondary)] hover:pd-bg-[var(--pd-background-low)] hover:pd-text-[var(--pd-content-primary)] active:pd-bg-[var(--pd-background-low-on-hover)] active:pd-text-[var(--pd-content-primary)] pd-disabled:pd-text-[var(--pd-content-subtle)]"
|
|
227
227
|
},
|
|
228
228
|
{
|
|
229
229
|
variant: "ghost",
|
|
230
230
|
intent: "success",
|
|
231
|
-
class: "hover:bg-[var(--
|
|
231
|
+
class: "pd-border-0 pd-bg-transparent hover:pd-bg-[var(--pd-intent-success-bg)] pd-text-[var(--pd-intent-success-text)] hover:pd-text-[var(--pd-intent-success-hover)]"
|
|
232
232
|
},
|
|
233
233
|
{
|
|
234
234
|
variant: "ghost",
|
|
235
235
|
intent: "warning",
|
|
236
|
-
class: "hover:bg-[var(--
|
|
236
|
+
class: "pd-border-0 pd-bg-transparent hover:pd-bg-[var(--pd-intent-warning-bg)] pd-text-[var(--pd-intent-warning-text)] hover:pd-text-[var(--pd-intent-warning-hover)]"
|
|
237
237
|
},
|
|
238
238
|
{
|
|
239
239
|
variant: "ghost",
|
|
240
240
|
intent: "danger",
|
|
241
|
-
class: "text-[var(--
|
|
241
|
+
class: "pd-border-0 pd-bg-transparent pd-text-[var(--pd-intent-danger-text)] hover:pd-bg-[var(--pd-intent-danger-bg)] hover:pd-text-[var(--pd-intent-danger-hover)]"
|
|
242
242
|
},
|
|
243
243
|
{
|
|
244
244
|
variant: "ghost",
|
|
245
245
|
intent: "neutral",
|
|
246
|
-
class: "
|
|
246
|
+
class: "pd-border-0 pd-bg-transparent pd-text-[var(--pd-intent-neutral-text)] hover:pd-text-[var(--pd-intent-neutral-hover)]"
|
|
247
247
|
},
|
|
248
|
-
//
|
|
248
|
+
// Destructive variant - Red text, light red/pink background, different on hover/active/disabled
|
|
249
249
|
{
|
|
250
|
-
variant: "
|
|
250
|
+
variant: "destructive",
|
|
251
251
|
intent: "primary",
|
|
252
|
-
class: "border-[var(--
|
|
253
|
-
},
|
|
254
|
-
{
|
|
255
|
-
variant: "outline",
|
|
256
|
-
intent: "success",
|
|
257
|
-
class: "border-[var(--border-green)] text-[var(--content-green)] hover:bg-[var(--background-green)] hover:border-[var(--border-green-on-hover)]"
|
|
258
|
-
},
|
|
259
|
-
{
|
|
260
|
-
variant: "outline",
|
|
261
|
-
intent: "warning",
|
|
262
|
-
class: "border-[var(--border-yellow)] text-[var(--content-yellow)] hover:bg-[var(--background-yellow)] hover:border-[var(--border-yellow-on-hover)]"
|
|
263
|
-
},
|
|
264
|
-
{
|
|
265
|
-
variant: "outline",
|
|
266
|
-
intent: "danger",
|
|
267
|
-
class: "border border-[var(--border-red)] text-[var(--content-red)] hover:bg-[var(--background-red)] hover:text-[var(--content-red-on-hover)] hover:border-[var(--border-red-on-hover)]"
|
|
268
|
-
},
|
|
269
|
-
{
|
|
270
|
-
variant: "outline",
|
|
271
|
-
intent: "neutral",
|
|
272
|
-
class: "border-[var(--border-primary)] text-[var(--content-primary)] hover:bg-[var(--background-low)] hover:border-[var(--border-secondary)]"
|
|
252
|
+
class: "pd-border-0 pd-bg-[var(--pd-background-red)] pd-text-[var(--pd-content-red)] hover:pd-bg-[var(--pd-background-red-on-hover)] hover:pd-text-[var(--pd-content-red-on-hover)] active:pd-bg-[var(--pd-intent-danger-bg-active)] pd-disabled:pd-bg-transparent pd-disabled:pd-text-[var(--pd-content-subtle)]"
|
|
273
253
|
}
|
|
274
254
|
],
|
|
275
255
|
defaultVariants: {
|
|
@@ -298,7 +278,17 @@ var ShadcnButton = React.forwardRef(
|
|
|
298
278
|
}, ref) => {
|
|
299
279
|
const buttonClasses = cn(
|
|
300
280
|
buttonVariants({ variant, intent, size }),
|
|
301
|
-
fullWidth && "w-full"
|
|
281
|
+
fullWidth && "pd-w-full",
|
|
282
|
+
// Loading states - light mode (apply to all intents for secondary and ghost)
|
|
283
|
+
loading && variant === "primary" && intent === "primary" && "pd-bg-[var(--pd-background-tertiary)] pd-text-[var(--pd-content-secondary)]",
|
|
284
|
+
loading && variant === "secondary" && "pd-bg-[var(--pd-background-tertiary)] pd-text-[var(--pd-content-secondary)] pd-border-[var(--pd-border-secondary)]",
|
|
285
|
+
loading && variant === "ghost" && "!pd-bg-[var(--pd-background-tertiary)] pd-text-[var(--pd-content-secondary)]",
|
|
286
|
+
loading && variant === "destructive" && "pd-bg-[var(--pd-background-red)] pd-text-[var(--pd-content-red)]",
|
|
287
|
+
// Disabled states - consistent across all variants (no hover/active changes)
|
|
288
|
+
disabled && variant === "primary" && "pd-bg-[var(--pd-background-tertiary)] pd-text-[var(--pd-content-subtle)]",
|
|
289
|
+
disabled && variant === "secondary" && "pd-bg-[var(--pd-background-tertiary)] pd-text-[var(--pd-content-subtle)] pd-border-[var(--pd-border-secondary)]",
|
|
290
|
+
disabled && variant === "ghost" && "pd-bg-transparent pd-text-[var(--pd-content-subtle)]",
|
|
291
|
+
disabled && variant === "destructive" && "pd-bg-transparent pd-text-[var(--pd-content-subtle)]"
|
|
302
292
|
);
|
|
303
293
|
if (href) {
|
|
304
294
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -315,7 +305,7 @@ var ShadcnButton = React.forwardRef(
|
|
|
315
305
|
className: buttonClasses,
|
|
316
306
|
"aria-disabled": disabled || loading,
|
|
317
307
|
style: { pointerEvents: disabled || loading ? "none" : void 0 },
|
|
318
|
-
children: renderButtonContent({ loading, loadingText, startIcon, endIcon, children, size })
|
|
308
|
+
children: renderButtonContent({ loading, loadingText, startIcon, endIcon, children, size, variant, intent })
|
|
319
309
|
}
|
|
320
310
|
)
|
|
321
311
|
}
|
|
@@ -329,7 +319,7 @@ var ShadcnButton = React.forwardRef(
|
|
|
329
319
|
className: buttonClasses,
|
|
330
320
|
asChild,
|
|
331
321
|
...props,
|
|
332
|
-
children: renderButtonContent({ loading, loadingText, startIcon, endIcon, children, size })
|
|
322
|
+
children: renderButtonContent({ loading, loadingText, startIcon, endIcon, children, size, variant, intent })
|
|
333
323
|
}
|
|
334
324
|
);
|
|
335
325
|
}
|
|
@@ -340,23 +330,44 @@ function renderButtonContent({
|
|
|
340
330
|
startIcon,
|
|
341
331
|
endIcon,
|
|
342
332
|
children,
|
|
343
|
-
size
|
|
333
|
+
size,
|
|
334
|
+
variant,
|
|
335
|
+
intent
|
|
344
336
|
}) {
|
|
345
|
-
const iconSizeClass = size === "sm" ? "h-3 w-3" : size === "lg" ? "h-5 w-5" : "h-4 w-4";
|
|
346
|
-
const spinnerSizeClass = size === "sm" ? "h-3 w-3" : size === "lg" ? "h-5 w-5" : "h-4 w-4";
|
|
347
|
-
const iconSpacing = size === "sm" ? "mr-1.5" : size === "lg" ? "mr-2.5" : "mr-2";
|
|
348
|
-
const iconSpacingEnd = size === "sm" ? "ml-1.5" : size === "lg" ? "ml-2.5" : "ml-2";
|
|
337
|
+
const iconSizeClass = size === "sm" ? "pd-h-3 pd-w-3" : size === "lg" ? "pd-h-5 pd-w-5" : "pd-h-4 pd-w-4";
|
|
338
|
+
const spinnerSizeClass = size === "sm" ? "pd-h-3 pd-w-3" : size === "lg" ? "pd-h-5 pd-w-5" : "pd-h-4 pd-w-4";
|
|
339
|
+
const iconSpacing = size === "sm" ? "pd-mr-1.5" : size === "lg" ? "pd-mr-2.5" : "pd-mr-2";
|
|
340
|
+
const iconSpacingEnd = size === "sm" ? "pd-ml-1.5" : size === "lg" ? "pd-ml-2.5" : "pd-ml-2";
|
|
341
|
+
const getLoadingTextColor = () => {
|
|
342
|
+
if (variant === "primary" && intent === "primary") {
|
|
343
|
+
return "pd-text-[var(--pd-content-secondary)]";
|
|
344
|
+
}
|
|
345
|
+
if (variant === "primary" && intent === "danger") {
|
|
346
|
+
return "pd-text-[var(--pd-destructive-foreground)]";
|
|
347
|
+
}
|
|
348
|
+
if (variant === "secondary" && intent === "primary") {
|
|
349
|
+
return "pd-text-[var(--pd-content-secondary)]";
|
|
350
|
+
}
|
|
351
|
+
if (variant === "ghost" && intent === "primary") {
|
|
352
|
+
return "pd-text-[var(--pd-content-secondary)]";
|
|
353
|
+
}
|
|
354
|
+
if (variant === "destructive") {
|
|
355
|
+
return "pd-text-[var(--pd-content-red)]";
|
|
356
|
+
}
|
|
357
|
+
return "pd-text-[var(--pd-content-secondary)]";
|
|
358
|
+
};
|
|
359
|
+
const loadingTextColor = getLoadingTextColor();
|
|
349
360
|
if (loading) {
|
|
350
361
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
351
362
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
352
363
|
LucideIcons.Loader2,
|
|
353
364
|
{
|
|
354
365
|
"aria-hidden": "true",
|
|
355
|
-
className: `${spinnerSizeClass} ${iconSpacing} animate-spin
|
|
366
|
+
className: `${spinnerSizeClass} ${iconSpacing} pd-animate-spin ${loadingTextColor}`
|
|
356
367
|
}
|
|
357
368
|
),
|
|
358
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className:
|
|
359
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: loadingText ? `Loading: ${loadingText}` : "Loading" })
|
|
369
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: loadingTextColor, children: loadingText || children }),
|
|
370
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "pd-sr-only", children: loadingText ? `Loading: ${loadingText}` : "Loading" })
|
|
360
371
|
] });
|
|
361
372
|
}
|
|
362
373
|
const StartIconComponent = startIcon ? getIcon(startIcon) : null;
|
|
@@ -365,27 +376,27 @@ function renderButtonContent({
|
|
|
365
376
|
const startIconSpacing = hasChildren ? iconSpacing : "";
|
|
366
377
|
const endIconSpacing = hasChildren ? iconSpacingEnd : "";
|
|
367
378
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
368
|
-
StartIconComponent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${startIconSpacing} inline-flex items-center justify-center`, children: React__default.default.createElement(StartIconComponent, { className: iconSizeClass }) }),
|
|
379
|
+
StartIconComponent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${startIconSpacing} pd-inline-flex pd-items-center pd-justify-center`, children: React__default.default.createElement(StartIconComponent, { className: iconSizeClass }) }),
|
|
369
380
|
children,
|
|
370
|
-
EndIconComponent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${endIconSpacing} inline-flex items-center justify-center`, children: React__default.default.createElement(EndIconComponent, { className: iconSizeClass }) })
|
|
381
|
+
EndIconComponent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${endIconSpacing} pd-inline-flex pd-items-center pd-justify-center`, children: React__default.default.createElement(EndIconComponent, { className: iconSizeClass }) })
|
|
371
382
|
] });
|
|
372
383
|
}
|
|
373
384
|
ShadcnButton.displayName = "ShadcnButton";
|
|
374
385
|
var buttonGroupVariants = classVarianceAuthority.cva(
|
|
375
|
-
"inline-flex",
|
|
386
|
+
"pd-inline-flex",
|
|
376
387
|
{
|
|
377
388
|
variants: {
|
|
378
389
|
orientation: {
|
|
379
|
-
horizontal: "flex-row",
|
|
380
|
-
vertical: "flex-col"
|
|
390
|
+
horizontal: "pd-flex-row",
|
|
391
|
+
vertical: "pd-flex-col"
|
|
381
392
|
},
|
|
382
393
|
gap: {
|
|
383
|
-
sm: "gap-1",
|
|
384
|
-
md: "gap-2",
|
|
385
|
-
lg: "gap-3"
|
|
394
|
+
sm: "pd-gap-1",
|
|
395
|
+
md: "pd-gap-2",
|
|
396
|
+
lg: "pd-gap-3"
|
|
386
397
|
},
|
|
387
398
|
fullWidth: {
|
|
388
|
-
true: "w-full",
|
|
399
|
+
true: "pd-w-full",
|
|
389
400
|
false: ""
|
|
390
401
|
}
|
|
391
402
|
},
|
|
@@ -532,6 +543,10 @@ var ButtonGroup = React.forwardRef(
|
|
|
532
543
|
}
|
|
533
544
|
);
|
|
534
545
|
ButtonGroup.displayName = "ButtonGroup";
|
|
546
|
+
function PdProvider({ children, theme = "light", className }) {
|
|
547
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: clsx.clsx("pd-root", theme === "dark" && "pd-dark", className), children });
|
|
548
|
+
}
|
|
549
|
+
PdProvider.displayName = "PdProvider";
|
|
535
550
|
|
|
536
551
|
// src/tokens/base.ts
|
|
537
552
|
var neutral = {
|
|
@@ -833,7 +848,7 @@ var contentTokens = {
|
|
|
833
848
|
onColor: neutral[950],
|
|
834
849
|
alwaysWhite: neutral[100],
|
|
835
850
|
alwaysBlack: neutral[950],
|
|
836
|
-
onColorInverse: neutral[
|
|
851
|
+
onColorInverse: neutral[100],
|
|
837
852
|
blue: blue[400],
|
|
838
853
|
blueDisabled: blue[800],
|
|
839
854
|
blueOnHover: blue[500],
|
|
@@ -924,7 +939,7 @@ var semanticTokens = {
|
|
|
924
939
|
content: contentTokens,
|
|
925
940
|
background: backgroundTokens
|
|
926
941
|
};
|
|
927
|
-
var VARIANTS = ["primary", "secondary", "ghost", "
|
|
942
|
+
var VARIANTS = ["primary", "secondary", "ghost", "destructive"];
|
|
928
943
|
var INTENTS = ["primary", "success", "warning", "danger", "neutral"];
|
|
929
944
|
var SIZES = ["sm", "md", "lg"];
|
|
930
945
|
var BUTTON_TYPES = ["button", "submit", "reset"];
|
|
@@ -1357,6 +1372,7 @@ exports.DEFAULT_THEME = DEFAULT_THEME;
|
|
|
1357
1372
|
exports.INPUT_TYPES = INPUT_TYPES;
|
|
1358
1373
|
exports.INTENTS = INTENTS;
|
|
1359
1374
|
exports.ORIENTATIONS = ORIENTATIONS;
|
|
1375
|
+
exports.PdProvider = PdProvider;
|
|
1360
1376
|
exports.SIZES = SIZES;
|
|
1361
1377
|
exports.SURFACE_LEVELS = SURFACE_LEVELS;
|
|
1362
1378
|
exports.THEME_MODES = THEME_MODES;
|