@usetheo/ui 0.15.0 → 0.16.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.
@@ -0,0 +1,15 @@
1
+ import type { AnchorHTMLAttributes, HTMLAttributes } from "react";
2
+ interface BreadcrumbLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
3
+ /** Render the consumer's element (e.g. a router <Link>) instead of a native anchor. */
4
+ asChild?: boolean;
5
+ }
6
+ declare const Breadcrumb: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & import("react").RefAttributes<HTMLElement>> & {
7
+ List: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLOListElement> & import("react").RefAttributes<HTMLOListElement>>;
8
+ Item: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLLIElement> & import("react").RefAttributes<HTMLLIElement>>;
9
+ Link: import("react").ForwardRefExoticComponent<BreadcrumbLinkProps & import("react").RefAttributes<HTMLAnchorElement>>;
10
+ Page: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLSpanElement> & import("react").RefAttributes<HTMLSpanElement>>;
11
+ Separator: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLLIElement> & import("react").RefAttributes<HTMLLIElement>>;
12
+ Ellipsis: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLSpanElement> & import("react").RefAttributes<HTMLSpanElement>>;
13
+ };
14
+ export { Breadcrumb };
15
+ export type { BreadcrumbLinkProps };
@@ -0,0 +1 @@
1
+ export { Breadcrumb, type BreadcrumbLinkProps } from "./breadcrumb.js";
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { cn } from "./lib/cn.js";
2
2
  export { Button, buttonVariants, type ButtonProps } from "./components/primitives/button/index.js";
3
3
  export { Badge, badgeVariants, type BadgeProps } from "./components/primitives/badge/index.js";
4
+ export { Breadcrumb, type BreadcrumbLinkProps, } from "./components/primitives/breadcrumb/index.js";
4
5
  export { UpdateBanner, type UpdateBannerProps, } from "./components/primitives/update-banner/index.js";
5
6
  export { Card } from "./components/primitives/card/index.js";
6
7
  export { Input, type InputProps } from "./components/primitives/input/index.js";
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import { clsx } from 'clsx';
2
2
  import { extendTailwindMerge } from 'tailwind-merge';
3
3
  import { Slot } from '@radix-ui/react-slot';
4
4
  import { cva } from 'class-variance-authority';
5
- import { forwardRef, createContext, useId, Children, isValidElement, cloneElement, Fragment as Fragment$1, useContext, useEffect, useState, useRef, useCallback, useMemo } from 'react';
5
+ import { forwardRef, createContext, useId, Children, isValidElement, cloneElement, Fragment as Fragment$1, useContext, useEffect, useState, useRef, useCallback, createElement, useMemo } from 'react';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
7
  import { ArrowUpCircle, X, AlertCircle, ChevronDown, ChevronUp, Check, Minus, Circle, ChevronRight, ChevronsUpDown, Copy, TrendingDown, TrendingUp, ArrowUpRight, Loader2, TriangleAlert, CheckCircle2, Info, ChevronsLeft, ChevronLeft, ChevronsRight, Search, Filter, GitCommit, GitBranch, Activity, Plus, Lock, EyeOff, Eye, Trash2, GitPullRequest, Server, ExternalLink, Globe, ShieldCheck, ShieldX, Clock, RotateCcw, ArrowDownLeft, MoreHorizontal } from 'lucide-react';
8
8
  import * as DialogPrimitive from '@radix-ui/react-dialog';
@@ -189,6 +189,103 @@ var Dot = forwardRef(
189
189
  Dot.displayName = "Badge.Dot";
190
190
  var BadgeWithDot = Badge;
191
191
  BadgeWithDot.Dot = Dot;
192
+
193
+ // src/lib/safe-href.ts
194
+ var DANGEROUS_PROTOCOL_PATTERNS = [
195
+ /^javascript:/i,
196
+ /^vbscript:/i,
197
+ /^data:text\/html/i
198
+ ];
199
+ function safeHref(url) {
200
+ if (url === null || url === void 0) return void 0;
201
+ const trimmed = url.trim();
202
+ if (trimmed.length === 0) return void 0;
203
+ for (const pattern of DANGEROUS_PROTOCOL_PATTERNS) {
204
+ if (pattern.test(trimmed)) return void 0;
205
+ }
206
+ return url;
207
+ }
208
+ function sub(tag, slot, displayName, baseClass, attrs, defaultChildren) {
209
+ const Component = forwardRef(
210
+ ({ className, children, ...props }, ref) => createElement(
211
+ tag,
212
+ {
213
+ "data-slot": slot,
214
+ ref,
215
+ ...attrs,
216
+ className: cn(baseClass, className),
217
+ ...props
218
+ },
219
+ children ?? defaultChildren
220
+ )
221
+ );
222
+ Component.displayName = displayName;
223
+ return Component;
224
+ }
225
+ var Root = forwardRef((props, ref) => /* @__PURE__ */ jsx("nav", { "data-slot": "breadcrumb", ref, "aria-label": "breadcrumb", ...props }));
226
+ Root.displayName = "Breadcrumb";
227
+ var List = sub(
228
+ "ol",
229
+ "breadcrumb-list",
230
+ "Breadcrumb.List",
231
+ "flex flex-wrap items-center gap-1.5 break-words text-body-sm text-muted-foreground sm:gap-2.5"
232
+ );
233
+ var Item = sub(
234
+ "li",
235
+ "breadcrumb-item",
236
+ "Breadcrumb.Item",
237
+ "inline-flex items-center gap-1.5"
238
+ );
239
+ var Link = forwardRef(
240
+ ({ asChild, className, href, ...props }, ref) => {
241
+ const Comp = asChild ? Slot : "a";
242
+ return /* @__PURE__ */ jsx(
243
+ Comp,
244
+ {
245
+ "data-slot": "breadcrumb-link",
246
+ ref,
247
+ className: cn("transition-colors hover:text-foreground", className),
248
+ href: asChild ? href : safeHref(href),
249
+ ...props
250
+ }
251
+ );
252
+ }
253
+ );
254
+ Link.displayName = "Breadcrumb.Link";
255
+ var Page = sub(
256
+ "span",
257
+ "breadcrumb-page",
258
+ "Breadcrumb.Page",
259
+ "font-normal text-foreground",
260
+ { role: "link", "aria-disabled": "true", "aria-current": "page" }
261
+ );
262
+ var Separator = sub(
263
+ "li",
264
+ "breadcrumb-separator",
265
+ "Breadcrumb.Separator",
266
+ "[&>svg]:size-3.5",
267
+ { role: "presentation", "aria-hidden": "true" },
268
+ /* @__PURE__ */ jsx(ChevronRight, {})
269
+ );
270
+ var Ellipsis = sub(
271
+ "span",
272
+ "breadcrumb-ellipsis",
273
+ "Breadcrumb.Ellipsis",
274
+ "flex size-9 items-center justify-center",
275
+ { role: "presentation", "aria-hidden": "true" },
276
+ /* @__PURE__ */ jsxs(Fragment, { children: [
277
+ /* @__PURE__ */ jsx(MoreHorizontal, { className: "size-4" }),
278
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "More" })
279
+ ] })
280
+ );
281
+ var Breadcrumb = Object.assign(Root, {
282
+ List,
283
+ Item,
284
+ Link,
285
+ Page,
286
+ Separator,
287
+ Ellipsis
288
+ });
192
289
  var UpdateBanner = forwardRef(
193
290
  ({
194
291
  currentVersion,
@@ -264,7 +361,7 @@ var UpdateBanner = forwardRef(
264
361
  UpdateBanner.displayName = "UpdateBanner";
265
362
  var CardContext = createContext({ size: "md" });
266
363
  var useCardSize = () => useContext(CardContext).size;
267
- var Root = forwardRef(
364
+ var Root2 = forwardRef(
268
365
  ({ className, size = "md", ...props }, ref) => /* @__PURE__ */ jsx(CardContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx(
269
366
  "div",
270
367
  {
@@ -279,7 +376,7 @@ var Root = forwardRef(
279
376
  }
280
377
  ) })
281
378
  );
282
- Root.displayName = "Card";
379
+ Root2.displayName = "Card";
283
380
  var headerPadBySize = {
284
381
  sm: "gap-1 p-3 pb-1.5",
285
382
  md: "gap-1.5 p-5 pb-2.5",
@@ -381,7 +478,7 @@ var Footer = forwardRef(
381
478
  }
382
479
  );
383
480
  Footer.displayName = "Card.Footer";
384
- var Card = /* @__PURE__ */ Object.assign(Root, {
481
+ var Card = /* @__PURE__ */ Object.assign(Root2, {
385
482
  Header,
386
483
  Title,
387
484
  Description,
@@ -524,7 +621,7 @@ var Dialog = /* @__PURE__ */ Object.assign(DialogPrimitive.Root, {
524
621
  Title: Title3,
525
622
  Description: Description3
526
623
  });
527
- var List2 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
624
+ var List3 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
528
625
  TabsPrimitive.List,
529
626
  {
530
627
  "data-slot": "tabs-list",
@@ -536,7 +633,7 @@ var List2 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
536
633
  ...props
537
634
  }
538
635
  ));
539
- List2.displayName = "Tabs.List";
636
+ List3.displayName = "Tabs.List";
540
637
  var Trigger3 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
541
638
  TabsPrimitive.Trigger,
542
639
  {
@@ -572,12 +669,12 @@ var Content4 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
572
669
  ));
573
670
  Content4.displayName = "Tabs.Content";
574
671
  var Tabs = /* @__PURE__ */ Object.assign(TabsPrimitive.Root, {
575
- List: List2,
672
+ List: List3,
576
673
  Trigger: Trigger3,
577
674
  Content: Content4
578
675
  });
579
676
  var Provider2 = TooltipPrimitive.Provider;
580
- var Root5 = TooltipPrimitive.Root;
677
+ var Root6 = TooltipPrimitive.Root;
581
678
  var Trigger5 = TooltipPrimitive.Trigger;
582
679
  var Content6 = forwardRef(({ className, sideOffset = 6, ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx(
583
680
  TooltipPrimitive.Content,
@@ -605,13 +702,13 @@ var Tooltip = ({
605
702
  delayDuration = 200,
606
703
  children,
607
704
  ...rootProps
608
- }) => /* @__PURE__ */ jsx(Provider2, { delayDuration, children: /* @__PURE__ */ jsxs(Root5, { ...rootProps, children: [
705
+ }) => /* @__PURE__ */ jsx(Provider2, { delayDuration, children: /* @__PURE__ */ jsxs(Root6, { ...rootProps, children: [
609
706
  /* @__PURE__ */ jsx(Trigger5, { asChild: true, children }),
610
707
  /* @__PURE__ */ jsx(Content6, { side, align, children: label })
611
708
  ] }) });
612
709
  var TooltipWithStatics = Tooltip;
613
710
  TooltipWithStatics.Provider = Provider2;
614
- TooltipWithStatics.Root = Root5;
711
+ TooltipWithStatics.Root = Root6;
615
712
  TooltipWithStatics.Trigger = Trigger5;
616
713
  TooltipWithStatics.Content = Content6;
617
714
  var ScrollAreaRoot = forwardRef(
@@ -1463,7 +1560,7 @@ var Textarea = forwardRef(
1463
1560
  )
1464
1561
  );
1465
1562
  Textarea.displayName = "Textarea";
1466
- var Root15 = forwardRef(
1563
+ var Root16 = forwardRef(
1467
1564
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1468
1565
  "aside",
1469
1566
  {
@@ -1477,7 +1574,7 @@ var Root15 = forwardRef(
1477
1574
  }
1478
1575
  )
1479
1576
  );
1480
- Root15.displayName = "Sidebar";
1577
+ Root16.displayName = "Sidebar";
1481
1578
  var Header3 = forwardRef(
1482
1579
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1483
1580
  "div",
@@ -1506,7 +1603,7 @@ var Section = forwardRef(
1506
1603
  )
1507
1604
  );
1508
1605
  Section.displayName = "Sidebar.Section";
1509
- var Item3 = forwardRef(
1606
+ var Item4 = forwardRef(
1510
1607
  ({ className, icon: Icon2, active, count, as = "button", href, children, ...props }, ref) => {
1511
1608
  const classes = cn(
1512
1609
  "group flex w-full items-center gap-3 rounded-lg px-2 py-2",
@@ -1566,7 +1663,7 @@ var Item3 = forwardRef(
1566
1663
  );
1567
1664
  }
1568
1665
  );
1569
- Item3.displayName = "Sidebar.Item";
1666
+ Item4.displayName = "Sidebar.Item";
1570
1667
  var Footer3 = forwardRef(
1571
1668
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1572
1669
  "div",
@@ -1579,13 +1676,13 @@ var Footer3 = forwardRef(
1579
1676
  )
1580
1677
  );
1581
1678
  Footer3.displayName = "Sidebar.Footer";
1582
- var Sidebar = /* @__PURE__ */ Object.assign(Root15, {
1679
+ var Sidebar = /* @__PURE__ */ Object.assign(Root16, {
1583
1680
  Header: Header3,
1584
1681
  Section,
1585
- Item: Item3,
1682
+ Item: Item4,
1586
1683
  Footer: Footer3
1587
1684
  });
1588
- var Root16 = forwardRef(
1685
+ var Root17 = forwardRef(
1589
1686
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1590
1687
  "header",
1591
1688
  {
@@ -1599,7 +1696,7 @@ var Root16 = forwardRef(
1599
1696
  }
1600
1697
  )
1601
1698
  );
1602
- Root16.displayName = "TopNav";
1699
+ Root17.displayName = "TopNav";
1603
1700
  var Left = forwardRef(
1604
1701
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1605
1702
  "div",
@@ -1734,7 +1831,7 @@ var ModeSwitcher = forwardRef(
1734
1831
  }
1735
1832
  );
1736
1833
  ModeSwitcher.displayName = "TopNav.ModeSwitcher";
1737
- var TopNav = /* @__PURE__ */ Object.assign(Root16, {
1834
+ var TopNav = /* @__PURE__ */ Object.assign(Root17, {
1738
1835
  Left,
1739
1836
  Center,
1740
1837
  Right,
@@ -2030,7 +2127,7 @@ var alignClass = {
2030
2127
  center: "text-center",
2031
2128
  right: "text-right"
2032
2129
  };
2033
- var Root18 = forwardRef(
2130
+ var Root19 = forwardRef(
2034
2131
  ({ className, density = "default", children, ...props }, ref) => /* @__PURE__ */ jsx(TableDensityContext.Provider, { value: density, children: /* @__PURE__ */ jsx(
2035
2132
  "table",
2036
2133
  {
@@ -2042,7 +2139,7 @@ var Root18 = forwardRef(
2042
2139
  }
2043
2140
  ) })
2044
2141
  );
2045
- Root18.displayName = "Table";
2142
+ Root19.displayName = "Table";
2046
2143
  var Header5 = forwardRef(
2047
2144
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2048
2145
  "thead",
@@ -2162,7 +2259,7 @@ var HeaderCell = forwardRef(
2162
2259
  }
2163
2260
  );
2164
2261
  HeaderCell.displayName = "Table.HeaderCell";
2165
- var Table = Object.assign(Root18, { Header: Header5, Body: Body4, Row, Cell, HeaderCell });
2262
+ var Table = Object.assign(Root19, { Header: Header5, Body: Body4, Row, Cell, HeaderCell });
2166
2263
 
2167
2264
  // src/lib/env.ts
2168
2265
  function readNodeEnv() {
@@ -2539,7 +2636,7 @@ var StatTile = forwardRef(
2539
2636
  }
2540
2637
  );
2541
2638
  StatTile.displayName = "StatTile";
2542
- var Root19 = forwardRef(
2639
+ var Root20 = forwardRef(
2543
2640
  ({ className, title = "Danger Zone", children, ...props }, ref) => /* @__PURE__ */ jsxs(
2544
2641
  "section",
2545
2642
  {
@@ -2555,7 +2652,7 @@ var Root19 = forwardRef(
2555
2652
  }
2556
2653
  )
2557
2654
  );
2558
- Root19.displayName = "DangerZone";
2655
+ Root20.displayName = "DangerZone";
2559
2656
  var Action2 = forwardRef(
2560
2657
  ({ className, title, description, action, ...props }, ref) => /* @__PURE__ */ jsxs(
2561
2658
  "div",
@@ -2578,7 +2675,7 @@ var Action2 = forwardRef(
2578
2675
  )
2579
2676
  );
2580
2677
  Action2.displayName = "DangerZone.Action";
2581
- var DangerZone = Object.assign(Root19, { Action: Action2 });
2678
+ var DangerZone = Object.assign(Root20, { Action: Action2 });
2582
2679
  var ConfirmDialog = forwardRef(
2583
2680
  ({
2584
2681
  open,
@@ -3107,7 +3204,7 @@ var Content11 = forwardRef(({ className, sideOffset = 4, ...props }, ref) => /*
3107
3204
  }
3108
3205
  ) }));
3109
3206
  Content11.displayName = "DropdownMenu.Content";
3110
- var Item5 = forwardRef(
3207
+ var Item6 = forwardRef(
3111
3208
  ({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
3112
3209
  DropdownMenuPrimitive.Item,
3113
3210
  {
@@ -3126,7 +3223,7 @@ var Item5 = forwardRef(
3126
3223
  }
3127
3224
  )
3128
3225
  );
3129
- Item5.displayName = "DropdownMenu.Item";
3226
+ Item6.displayName = "DropdownMenu.Item";
3130
3227
  var CheckboxItem2 = forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
3131
3228
  DropdownMenuPrimitive.CheckboxItem,
3132
3229
  {
@@ -3184,7 +3281,7 @@ var Label4 = forwardRef(
3184
3281
  )
3185
3282
  );
3186
3283
  Label4.displayName = "DropdownMenu.Label";
3187
- var Separator3 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3284
+ var Separator4 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3188
3285
  DropdownMenuPrimitive.Separator,
3189
3286
  {
3190
3287
  "data-slot": "dropdown-menu-separator",
@@ -3193,7 +3290,7 @@ var Separator3 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ js
3193
3290
  ...props
3194
3291
  }
3195
3292
  ));
3196
- Separator3.displayName = "DropdownMenu.Separator";
3293
+ Separator4.displayName = "DropdownMenu.Separator";
3197
3294
  var Shortcut = ({ className, ...props }) => /* @__PURE__ */ jsx(
3198
3295
  "span",
3199
3296
  {
@@ -3242,11 +3339,11 @@ var DropdownMenu = Object.assign(DropdownMenuPrimitive.Root, {
3242
3339
  Trigger: Trigger9,
3243
3340
  Portal: Portal6,
3244
3341
  Content: Content11,
3245
- Item: Item5,
3342
+ Item: Item6,
3246
3343
  CheckboxItem: CheckboxItem2,
3247
3344
  RadioItem: RadioItem2,
3248
3345
  Label: Label4,
3249
- Separator: Separator3,
3346
+ Separator: Separator4,
3250
3347
  Shortcut,
3251
3348
  Group: Group3,
3252
3349
  Sub: Sub2,
@@ -4067,22 +4164,6 @@ var DeploymentRow = forwardRef(
4067
4164
  }
4068
4165
  );
4069
4166
  DeploymentRow.displayName = "DeploymentRow";
4070
-
4071
- // src/lib/safe-href.ts
4072
- var DANGEROUS_PROTOCOL_PATTERNS = [
4073
- /^javascript:/i,
4074
- /^vbscript:/i,
4075
- /^data:text\/html/i
4076
- ];
4077
- function safeHref(url) {
4078
- if (url === null || url === void 0) return void 0;
4079
- const trimmed = url.trim();
4080
- if (trimmed.length === 0) return void 0;
4081
- for (const pattern of DANGEROUS_PROTOCOL_PATTERNS) {
4082
- if (pattern.test(trimmed)) return void 0;
4083
- }
4084
- return url;
4085
- }
4086
4167
  var statusToVariant2 = {
4087
4168
  queued: "warning",
4088
4169
  building: "primary",
@@ -4707,4 +4788,4 @@ function CommandPalette({
4707
4788
  ] }) });
4708
4789
  }
4709
4790
 
4710
- export { AccountMenu, ActionBar, Alert, Avatar, BadgeWithDot as Badge, Button, Card, Checkbox, CodeBlock, CommandPalette, ConfirmDialog, CopyButton, DangerZone, DataTable, DeploymentRow, Dialog, DomainConfig, DropdownMenu, EmptyState, EnvVarEditor, FormField, Input, Label, LoginSplit, MetricCard, MetricsPanel, PageShell, Pagination, PinInput, PlanBadge, PreviewEnvCard, Progress, ProjectCard, RadioGroup, RollbackUI, ScrollArea, Select, Sheet, Sidebar, Skeleton, SocialAuthRow, StatTile, StatusDot, StatusIndicator, Switch, Table, Tabs, TaskHeader, Textarea, Timestamp, Toast, Toaster, TooltipWithStatics as Tooltip, TopNav, UpdateBanner, avatarVariants, badgeVariants, buttonVariants, cn, computePageRange, isNearBottom, sheetVariants, useStickToBottom, useToast };
4791
+ export { AccountMenu, ActionBar, Alert, Avatar, BadgeWithDot as Badge, Breadcrumb, Button, Card, Checkbox, CodeBlock, CommandPalette, ConfirmDialog, CopyButton, DangerZone, DataTable, DeploymentRow, Dialog, DomainConfig, DropdownMenu, EmptyState, EnvVarEditor, FormField, Input, Label, LoginSplit, MetricCard, MetricsPanel, PageShell, Pagination, PinInput, PlanBadge, PreviewEnvCard, Progress, ProjectCard, RadioGroup, RollbackUI, ScrollArea, Select, Sheet, Sidebar, Skeleton, SocialAuthRow, StatTile, StatusDot, StatusIndicator, Switch, Table, Tabs, TaskHeader, Textarea, Timestamp, Toast, Toaster, TooltipWithStatics as Tooltip, TopNav, UpdateBanner, avatarVariants, badgeVariants, buttonVariants, cn, computePageRange, isNearBottom, sheetVariants, useStickToBottom, useToast };
package/package.json CHANGED
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "name": "@usetheo/ui",
3
- "version": "0.15.0",
4
- "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be",
3
+ "version": "0.16.0",
5
4
  "type": "module",
6
5
  "license": "Apache-2.0",
7
6
  "description": "Violet Forge design system — generic React components + primitives (the non-AI foundation of @theokit/ui).",
@@ -22,18 +21,6 @@
22
21
  "engines": {
23
22
  "node": ">=20"
24
23
  },
25
- "scripts": {
26
- "typecheck": "tsc --noEmit",
27
- "lint": "biome check src",
28
- "lint:ci": "biome check src",
29
- "format:check": "biome format src",
30
- "test": "vitest run",
31
- "test:run": "vitest run",
32
- "build": "tsup && tsc -p tsconfig.dts.json",
33
- "prepublishOnly": "npm run build",
34
- "registry:build": "tsx scripts/build-registry.ts",
35
- "registry:validate": "tsx scripts/validate-registry.ts"
36
- },
37
24
  "peerDependencies": {
38
25
  "react": ">=18",
39
26
  "react-dom": ">=18"
@@ -72,6 +59,7 @@
72
59
  "react": ">=18.2.0 <20",
73
60
  "react-dom": ">=18.2.0 <20",
74
61
  "tailwindcss": "^4.0.0",
62
+ "ts-prune": "^0.10.3",
75
63
  "tsup": "^8.3.5",
76
64
  "tsx": "^4.19.2",
77
65
  "typescript": "^5.7.3",
@@ -79,5 +67,16 @@
79
67
  "vitest": "^4.1.8",
80
68
  "vitest-axe": "^0.1.0"
81
69
  },
82
- "_provenance": "seeded from theo-ui @ 2b46eca (2026-07-03, pivot M-B)"
83
- }
70
+ "_provenance": "seeded from theo-ui @ 2b46eca (2026-07-03, pivot M-B)",
71
+ "scripts": {
72
+ "typecheck": "tsc --noEmit",
73
+ "lint": "biome check src",
74
+ "lint:ci": "biome check src",
75
+ "format:check": "biome format src",
76
+ "test": "vitest run",
77
+ "test:run": "vitest run",
78
+ "build": "tsup && tsc -p tsconfig.dts.json",
79
+ "registry:build": "tsx scripts/build-registry.ts",
80
+ "registry:validate": "tsx scripts/validate-registry.ts"
81
+ }
82
+ }