@abhir9/pd-design-system 0.1.17 → 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 CHANGED
@@ -21,21 +21,38 @@ npm install @pd-design/system
21
21
  ## Quick Start
22
22
 
23
23
  ```tsx
24
- import { ThemeProvider, Button, Input } from '@pd-design/system';
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
- <ThemeProvider adapter="shadcn" theme="base" mode="light">
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
- </ThemeProvider>
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 as the public contract. Themes can be switched without rebuilding:
211
+ The design system uses **scoped CSS variables** under `.pd-root`. Themes can be switched without rebuilding:
195
212
 
196
213
  ```tsx
197
- <ThemeProvider theme="base" mode="dark">
214
+ <PdProvider theme="dark">
198
215
  {/* Dark mode */}
199
- </ThemeProvider>
216
+ </PdProvider>
200
217
  ```
201
218
 
202
219
  ### Custom Themes
203
220
 
204
- You can extend themes by overriding CSS variables:
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
- :root {
208
- --pd-intent-primary: #your-color;
209
- --pd-intent-primary-hover: #your-hover-color;
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
- └── components/ # Public components
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-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--border-blue)] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
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
- outline: "border"
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)] disabled:bg-[var(--background-secondary)] disabled:text-[var(--content-subtle)]"
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(--background-green)] text-[var(--content-green)] hover:bg-[var(--background-green-on-hover)] active:bg-[var(--background-green)] border-[var(--border-green)]"
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(--background-yellow)] text-[var(--content-yellow)] hover:bg-[var(--background-yellow-on-hover)] active:bg-[var(--background-yellow)] border-[var(--border-yellow)]"
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(--background-red)] text-[var(--content-red)] hover:bg-[var(--background-red-on-hover)] hover:text-[var(--content-red-on-hover)] active:bg-[var(--background-red)] border-[var(--border-red)] disabled:bg-[var(--background-red)] disabled:text-[var(--content-subtle)]"
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(--background-secondary)] text-[var(--content-primary)] hover:bg-[var(--background-low-on-hover)] active:bg-[var(--background-tertiary)] border-[var(--border-primary)]"
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 - using new semantic tokens
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-secondary)] text-[var(--content-primary)] hover:bg-[var(--background-low-on-hover)] active:bg-[var(--background-secondary)] border border-[var(--border-secondary)] disabled:bg-[var(--background-tertiary)] disabled:text-[var(--content-subtle)] disabled:border-[var(--border-subtle)]"
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(--background-green)] text-[var(--content-green)] hover:bg-[var(--background-green-on-hover)] active:bg-[var(--background-green)] border-[var(--border-green-subtle)]"
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(--background-yellow)] text-[var(--content-yellow)] hover:bg-[var(--background-yellow-on-hover)] active:bg-[var(--background-yellow)] border-[var(--border-yellow-subtle)]"
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(--background-red)] text-[var(--content-red)] hover:bg-[var(--background-red-on-hover)] hover:text-[var(--content-red-on-hover)] active:bg-[var(--background-red)] border border-[var(--border-red)]"
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(--background-low)] text-[var(--content-primary)] hover:bg-[var(--background-low-on-hover)] active:bg-[var(--background-tertiary)] border-[var(--border-subtle)]"
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 - using new semantic tokens
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-primary)] hover:bg-[var(--background-low)] hover:text-[var(--content-primary)] disabled:text-[var(--content-subtle)]"
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(--background-green)] text-[var(--content-green)] hover:text-[var(--content-green-on-hover)]"
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(--background-yellow)] text-[var(--content-yellow)] hover:text-[var(--content-yellow-on-hover)]"
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(--content-red)] hover:bg-[var(--background-red)] hover:text-[var(--content-red-on-hover)]"
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: "hover:bg-[var(--background-low)] text-[var(--content-secondary)] hover:text-[var(--content-primary)]"
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
- // Outline variant - using new semantic tokens
248
+ // Destructive variant - Red text, light red/pink background, different on hover/active/disabled
249
249
  {
250
- variant: "outline",
250
+ variant: "destructive",
251
251
  intent: "primary",
252
- class: "border-[var(--border-primary)] text-[var(--content-primary)] hover:bg-[var(--background-low)] hover:border-[var(--border-secondary)]"
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 text-[var(--content-secondary)]`
366
+ className: `${spinnerSizeClass} ${iconSpacing} pd-animate-spin ${loadingTextColor}`
356
367
  }
357
368
  ),
358
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[var(--content-secondary)]", children: loadingText || children }),
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[200],
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", "outline"];
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;