@siyahi/ui 0.1.9-next.7 → 0.1.9-next.8

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.
Files changed (41) hide show
  1. package/README.md +32 -5
  2. package/dist/components/registry/dashboard-01/section-cards.js +1 -1
  3. package/dist/components/registry/dashboardcn/kpi-row-card.js +1 -1
  4. package/dist/components/registry/niko-table/ui/table.js +2 -2
  5. package/dist/components/siyahi/panel-grid.d.ts +22 -0
  6. package/dist/components/siyahi/panel-grid.js +34 -0
  7. package/dist/components/siyahi/siyahi-provider.d.ts +13 -2
  8. package/dist/components/siyahi/siyahi-provider.js +17 -4
  9. package/dist/components/ui/accordion.js +5 -5
  10. package/dist/components/ui/alert.js +2 -2
  11. package/dist/components/ui/badge.js +1 -1
  12. package/dist/components/ui/breadcrumb.js +2 -2
  13. package/dist/components/ui/button.js +10 -10
  14. package/dist/components/ui/calendar.js +1 -1
  15. package/dist/components/ui/card.js +4 -4
  16. package/dist/components/ui/chart.js +1 -1
  17. package/dist/components/ui/code-block.js +13 -12
  18. package/dist/components/ui/command.js +7 -6
  19. package/dist/components/ui/context-menu.js +7 -7
  20. package/dist/components/ui/dialog.js +5 -5
  21. package/dist/components/ui/dropdown-menu.js +8 -8
  22. package/dist/components/ui/input-group.js +11 -11
  23. package/dist/components/ui/input.js +1 -1
  24. package/dist/components/ui/popover.js +3 -3
  25. package/dist/components/ui/progress.js +1 -1
  26. package/dist/components/ui/select.js +6 -6
  27. package/dist/components/ui/sheet.js +5 -5
  28. package/dist/components/ui/sidebar.js +17 -18
  29. package/dist/components/ui/skeleton.js +1 -1
  30. package/dist/components/ui/slider.js +2 -2
  31. package/dist/components/ui/table.js +2 -2
  32. package/dist/components/ui/tabs.js +2 -2
  33. package/dist/components/ui/textarea.js +1 -1
  34. package/dist/components/ui/toggle-group.js +2 -2
  35. package/dist/components/ui/toggle.js +4 -4
  36. package/dist/components/ui/tooltip.js +2 -2
  37. package/dist/index.d.ts +3 -2
  38. package/dist/index.js +3 -2
  39. package/package.json +1 -1
  40. package/report.css +11 -11
  41. package/styles/siyahi.css +51 -11
package/README.md CHANGED
@@ -67,8 +67,8 @@ Every merge to `main` also attaches both tarballs to a GitHub release
67
67
 
68
68
  ## What is in it
69
69
 
70
- - **shadcn/ui components** in the `base-luma` style, installed with the shadcn
71
- CLI and never edited.
70
+ - **shadcn/ui components** in the `base-nova` style, shadcn's flat and compact
71
+ one, installed with the shadcn CLI and never edited.
72
72
  - **Registry add-ons**, copied once with their origin and licence recorded:
73
73
  bar, area and line chart cards from shadcn's chart blocks, a data table on
74
74
  TanStack Table, calendar, weekday and status heatmaps, a ranked
@@ -82,9 +82,12 @@ Every merge to `main` also attaches both tarballs to a GitHub release
82
82
  `PageSection`, `PageSubheading`, `DataList` and `InlineCode`, the data table
83
83
  parts `DataTableSortHeader` (sorts on one click) and `DataTableRowCount`
84
84
  ("12 of 48"), `DataBar` (a figure in a table cell with a bar giving its size
85
- against the column's largest), and `SiyahiProvider`.
86
- - **Cards and badges as installed**: every `Card`, stat tiles included, keeps
87
- luma's `rounded-4xl`, `shadow-md` and faint ring. A category (a sector, a
85
+ against the column's largest), `PanelGrid` (data blocks side by side, with
86
+ hairlines between them on a ruled page), and `SiyahiProvider`.
87
+ - **Surfaces**: by default a data block has no box. Every `Card` on a ruled
88
+ page, chart cards and stat tiles included, loses its fill, corner and ring,
89
+ and a `PanelGrid` draws hairlines between blocks; see Surfaces below. A
90
+ category (a sector, a
88
91
  broker, a unit's kind) is an outline `Badge`: categories stay neutral, and
89
92
  colour is left to the four meaning colours and the charts. On a narrow card
90
93
  (header under 24rem, so any phone) a header action such as a toggle drops
@@ -127,6 +130,8 @@ Every merge to `main` also attaches both tarballs to a GitHub release
127
130
  | Label and value pairs, such as a record's fields | `DataList` and `DataListItem` |
128
131
  | A command or file to copy, wrapped or scrolling | `CodeBlock` with `CodeBlockCopyButton` |
129
132
  | A labelled copy action, such as "Copy all" for a section | `CopyButton` |
133
+ | Data blocks side by side: charts, tables, a strip of figures | `PanelGrid` |
134
+ | Boxes back, or no lines at all, for a page or a part of one | `SiyahiProvider` with `surface="card"` or `surface="open"` |
130
135
  | A command, file or identifier inside prose | `InlineCode` |
131
136
  | A signed figure (a gain, a loss, a change) | `Delta` |
132
137
  | A time, with the viewer's own clock on hover | `LocalTime` |
@@ -171,6 +176,28 @@ loss, a change) goes through `<Delta>`, which adds ▲ or ▼ and the meaning
171
176
  colour. Time zone names come from the runtime's ICU data; a slim Node or
172
177
  browser build may print `GMT+5:30` where a full one prints `IST`.
173
178
 
179
+ ## Surfaces
180
+
181
+ A data block sits on the page in one of three ways, set by `SiyahiProvider`'s
182
+ `surface`:
183
+
184
+ - `"ruled"`, the default: no box. Every `Card` loses its fill, corner and ring,
185
+ and blocks side by side in a `PanelGrid` are parted by hairlines, with a rule
186
+ above and below the grid. One surface, as on a trading screen.
187
+ - `"open"`: no box and no lines. The card's padding goes too, so a block's
188
+ content sits level with the page's text; for pages read top to bottom.
189
+ - `"card"`: shadcn's own Nova card, a filled box with a 1px ring.
190
+
191
+ A component outside any provider is ruled. A nested provider sets the surface
192
+ for one part of a page. A picked `SectionCards` tile keeps its ring on every
193
+ surface.
194
+
195
+ ```tsx
196
+ <SiyahiProvider surface="open">
197
+ <PageSection title="Why XIRR fell">…</PageSection>
198
+ </SiyahiProvider>
199
+ ```
200
+
174
201
  ## Dark mode
175
202
 
176
203
  The colour scheme follows the device (`prefers-color-scheme`). There is no
@@ -26,7 +26,7 @@ function SectionCards({ items, selected, onSelect }) {
26
26
  "aria-pressed": item.label === selected,
27
27
  disabled: item.disabled,
28
28
  onClick: () => onSelect(item.label),
29
- className: "absolute inset-0 z-10 rounded-4xl outline-none focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-inset"
29
+ className: "absolute inset-0 z-10 rounded-[inherit] outline-none focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-inset"
30
30
  }),
31
31
  /* @__PURE__ */ jsxs(CardHeader, { children: [
32
32
  /* @__PURE__ */ jsx(CardDescription, { children: item.label }),
@@ -24,7 +24,6 @@ function trendColor(change) {
24
24
  function MetricStrip({ title, description, action, items, footer, className, ...props }) {
25
25
  const columns = COLUMNS[Math.min(items.length, 8)] ?? COLUMNS[8];
26
26
  return /* @__PURE__ */ jsxs(Card, {
27
- "data-slot": "metric-strip",
28
27
  className: cn("gap-4", className),
29
28
  ...props,
30
29
  children: [
@@ -34,6 +33,7 @@ function MetricStrip({ title, description, action, items, footer, className, ...
34
33
  action && /* @__PURE__ */ jsx(CardAction, { children: action })
35
34
  ] }),
36
35
  /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx("div", {
36
+ "data-slot": "metric-strip",
37
37
  className: "@container/strip -mx-4 -my-3 overflow-hidden",
38
38
  children: /* @__PURE__ */ jsx("div", {
39
39
  className: "-mt-px -ml-px flex flex-wrap",
@@ -52,14 +52,14 @@ function TableRow({ className, ...props }) {
52
52
  function TableHead({ className, ...props }) {
53
53
  return /* @__PURE__ */ jsx("th", {
54
54
  "data-slot": "table-head",
55
- className: cn("h-12 px-3 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0 *:[[role=checkbox]]:translate-y-[2px]", className),
55
+ className: cn("h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0 *:[[role=checkbox]]:translate-y-[2px]", className),
56
56
  ...props
57
57
  });
58
58
  }
59
59
  function TableCell({ className, ...props }) {
60
60
  return /* @__PURE__ */ jsx("td", {
61
61
  "data-slot": "table-cell",
62
- className: cn("p-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 *:[[role=checkbox]]:translate-y-[2px]", className),
62
+ className: cn("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 *:[[role=checkbox]]:translate-y-[2px]", className),
63
63
  ...props
64
64
  });
65
65
  }
@@ -0,0 +1,22 @@
1
+ import { ReactNode } from "react";
2
+ //#region src/components/siyahi/panel-grid.d.ts
3
+ declare const COLUMNS: {
4
+ readonly 1: "";
5
+ readonly 2: "@2xl/panels:grid-cols-2";
6
+ readonly 3: "@2xl/panels:grid-cols-2 @5xl/panels:grid-cols-3";
7
+ readonly 4: "@2xl/panels:grid-cols-2 @5xl/panels:grid-cols-4";
8
+ };
9
+ export interface PanelGridProps {
10
+ /** Blocks across on a wide page; two on a medium one, and one on a phone. */
11
+ columns?: keyof typeof COLUMNS;
12
+ children: ReactNode;
13
+ className?: string;
14
+ }
15
+ /**
16
+ * Data blocks side by side: chart cards, tables, a MetricStrip. On a ruled surface a hairline parts them across and
17
+ * down, with a rule above and below the grid; open leaves whitespace between them, and card a gap between boxes.
18
+ * Each block's left and top edges carry its rules, and the grid clips the ones on its own edges.
19
+ */
20
+ export declare function PanelGrid({ columns, children, className }: PanelGridProps): import("react").JSX.Element;
21
+ //#endregion
22
+ export {};
@@ -0,0 +1,34 @@
1
+ import { useSurface } from "./siyahi-provider.js";
2
+ import { cn } from "cn";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { Children } from "react";
5
+ //#region src/components/siyahi/panel-grid.tsx
6
+ const COLUMNS = {
7
+ 1: "",
8
+ 2: "@2xl/panels:grid-cols-2",
9
+ 3: "@2xl/panels:grid-cols-2 @5xl/panels:grid-cols-3",
10
+ 4: "@2xl/panels:grid-cols-2 @5xl/panels:grid-cols-4"
11
+ };
12
+ /**
13
+ * Data blocks side by side: chart cards, tables, a MetricStrip. On a ruled surface a hairline parts them across and
14
+ * down, with a rule above and below the grid; open leaves whitespace between them, and card a gap between boxes.
15
+ * Each block's left and top edges carry its rules, and the grid clips the ones on its own edges.
16
+ */
17
+ function PanelGrid({ columns = 2, children, className }) {
18
+ const surface = useSurface();
19
+ const ruled = surface === "ruled";
20
+ return /* @__PURE__ */ jsx("div", {
21
+ "data-slot": "panel-grid",
22
+ className: cn("@container/panels", ruled && "overflow-hidden border-y", className),
23
+ children: /* @__PURE__ */ jsx("div", {
24
+ className: cn("grid grid-cols-1", COLUMNS[columns], ruled ? "-mt-px -ml-px" : surface === "open" ? "gap-x-10 gap-y-8" : "gap-4"),
25
+ children: Children.map(children, (child) => /* @__PURE__ */ jsx("div", {
26
+ "data-slot": "panel",
27
+ className: cn("min-w-0", ruled && "border-t border-l"),
28
+ children: child
29
+ }))
30
+ })
31
+ });
32
+ }
33
+ //#endregion
34
+ export { PanelGrid };
@@ -1,12 +1,23 @@
1
1
  import { SiyahiLocale } from "../../lib/locale.js";
2
2
  import { ReactNode } from "react";
3
3
  //#region src/components/siyahi/siyahi-provider.d.ts
4
+ /**
5
+ * How a data block sits on the page. "ruled": no box, hairlines between blocks in a PanelGrid. "open": no box and no
6
+ * lines, the block's content level with the page's text. "card": shadcn's own card, a filled box with a 1px ring.
7
+ */
8
+ export type Surface = "ruled" | "open" | "card";
4
9
  export interface SiyahiProviderProps {
5
10
  /** Any setting left out keeps its default: en-IN, INR, Asia/Kolkata. */
6
11
  locale?: Partial<SiyahiLocale>;
12
+ /**
13
+ * Set it on a nested provider for one part of a page. Left out, a provider keeps the surface around it, so a
14
+ * provider that only changes the locale changes nothing else; the outermost default is "ruled".
15
+ */
16
+ surface?: Surface;
7
17
  children: ReactNode;
8
18
  }
9
- /** Wrap the app once. Carries the locale and the tooltip provider shadcn asks for. */
10
- export declare function SiyahiProvider({ locale, children }: SiyahiProviderProps): import("react").JSX.Element;
19
+ /** Wrap the app once. Carries the locale, the surface and the tooltip provider shadcn asks for. */
20
+ export declare function SiyahiProvider({ locale, surface, children }: SiyahiProviderProps): import("react").JSX.Element;
11
21
  export declare function useLocale(): SiyahiLocale;
22
+ export declare function useSurface(): Surface;
12
23
  //#endregion
@@ -4,8 +4,9 @@ import { jsx } from "react/jsx-runtime";
4
4
  import { createContext, use, useMemo } from "react";
5
5
  //#region src/components/siyahi/siyahi-provider.tsx
6
6
  const LocaleContext = createContext(defaultLocale);
7
- /** Wrap the app once. Carries the locale and the tooltip provider shadcn asks for. */
8
- function SiyahiProvider({ locale, children }) {
7
+ const SurfaceContext = createContext("ruled");
8
+ /** Wrap the app once. Carries the locale, the surface and the tooltip provider shadcn asks for. */
9
+ function SiyahiProvider({ locale, surface, children }) {
9
10
  const { numberLocale, currency, timeZone } = {
10
11
  ...defaultLocale,
11
12
  ...locale
@@ -19,13 +20,25 @@ function SiyahiProvider({ locale, children }) {
19
20
  currency,
20
21
  timeZone
21
22
  ]);
23
+ const around = use(SurfaceContext);
22
24
  return /* @__PURE__ */ jsx(LocaleContext, {
23
25
  value,
24
- children: /* @__PURE__ */ jsx(TooltipProvider, { children })
26
+ children: /* @__PURE__ */ jsx(SurfaceContext, {
27
+ value: surface ?? around,
28
+ children: /* @__PURE__ */ jsx(TooltipProvider, { children: surface ? /* @__PURE__ */ jsx("div", {
29
+ "data-slot": "siyahi-provider",
30
+ "data-surface": surface,
31
+ className: "contents",
32
+ children
33
+ }) : children })
34
+ })
25
35
  });
26
36
  }
27
37
  function useLocale() {
28
38
  return use(LocaleContext);
29
39
  }
40
+ function useSurface() {
41
+ return use(SurfaceContext);
42
+ }
30
43
  //#endregion
31
- export { SiyahiProvider, useLocale };
44
+ export { SiyahiProvider, useLocale, useSurface };
@@ -6,14 +6,14 @@ import { jsx, jsxs } from "react/jsx-runtime";
6
6
  function Accordion({ className, ...props }) {
7
7
  return /* @__PURE__ */ jsx(Accordion$1.Root, {
8
8
  "data-slot": "accordion",
9
- className: cn("flex w-full flex-col overflow-hidden rounded-2xl border", className),
9
+ className: cn("flex w-full flex-col", className),
10
10
  ...props
11
11
  });
12
12
  }
13
13
  function AccordionItem({ className, ...props }) {
14
14
  return /* @__PURE__ */ jsx(Accordion$1.Item, {
15
15
  "data-slot": "accordion-item",
16
- className: cn("not-last:border-b data-open:bg-muted/50", className),
16
+ className: cn("not-last:border-b", className),
17
17
  ...props
18
18
  });
19
19
  }
@@ -22,7 +22,7 @@ function AccordionTrigger({ className, children, ...props }) {
22
22
  className: "flex",
23
23
  children: /* @__PURE__ */ jsxs(Accordion$1.Trigger, {
24
24
  "data-slot": "accordion-trigger",
25
- className: cn("group/accordion-trigger relative flex flex-1 items-start justify-between gap-6 border border-transparent p-4 text-left text-sm font-medium transition-all outline-none hover:underline aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground", className),
25
+ className: cn("group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground", className),
26
26
  ...props,
27
27
  children: [
28
28
  children,
@@ -41,10 +41,10 @@ function AccordionTrigger({ className, children, ...props }) {
41
41
  function AccordionContent({ className, children, ...props }) {
42
42
  return /* @__PURE__ */ jsx(Accordion$1.Panel, {
43
43
  "data-slot": "accordion-content",
44
- className: "overflow-hidden px-4 text-sm data-open:animate-accordion-down data-closed:animate-accordion-up",
44
+ className: "overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up",
45
45
  ...props,
46
46
  children: /* @__PURE__ */ jsx("div", {
47
- className: cn("h-(--accordion-panel-height) pt-0 pb-4 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", className),
47
+ className: cn("h-(--accordion-panel-height) pt-0 pb-2.5 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", className),
48
48
  children
49
49
  })
50
50
  });
@@ -3,7 +3,7 @@ import { jsx } from "react/jsx-runtime";
3
3
  import "react";
4
4
  import { cva } from "class-variance-authority";
5
5
  //#region src/components/ui/alert.tsx
6
- const alertVariants = cva("group/alert relative grid w-full gap-0.5 rounded-2xl border px-4 py-3 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4", {
6
+ const alertVariants = cva("group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4", {
7
7
  variants: { variant: {
8
8
  default: "bg-card text-card-foreground",
9
9
  destructive: "bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"
@@ -35,7 +35,7 @@ function AlertDescription({ className, ...props }) {
35
35
  function AlertAction({ className, ...props }) {
36
36
  return /* @__PURE__ */ jsx("div", {
37
37
  "data-slot": "alert-action",
38
- className: cn("absolute top-2.5 right-3", className),
38
+ className: cn("absolute top-2 right-2", className),
39
39
  ...props
40
40
  });
41
41
  }
@@ -3,7 +3,7 @@ import { cva } from "class-variance-authority";
3
3
  import { mergeProps } from "@base-ui/react/merge-props";
4
4
  import { useRender } from "@base-ui/react/use-render";
5
5
  //#region src/components/ui/badge.tsx
6
- const badgeVariants = cva("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-3xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!", {
6
+ const badgeVariants = cva("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!", {
7
7
  variants: { variant: {
8
8
  default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
9
9
  secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
@@ -16,14 +16,14 @@ function Breadcrumb({ className, ...props }) {
16
16
  function BreadcrumbList({ className, ...props }) {
17
17
  return /* @__PURE__ */ jsx("ol", {
18
18
  "data-slot": "breadcrumb-list",
19
- className: cn("flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground sm:gap-2.5", className),
19
+ className: cn("flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground", className),
20
20
  ...props
21
21
  });
22
22
  }
23
23
  function BreadcrumbItem({ className, ...props }) {
24
24
  return /* @__PURE__ */ jsx("li", {
25
25
  "data-slot": "breadcrumb-item",
26
- className: cn("inline-flex items-center gap-1.5", className),
26
+ className: cn("inline-flex items-center gap-1", className),
27
27
  ...props
28
28
  });
29
29
  }
@@ -3,25 +3,25 @@ import { jsx } from "react/jsx-runtime";
3
3
  import { cva } from "class-variance-authority";
4
4
  import { Button as Button$1 } from "@base-ui/react/button";
5
5
  //#region src/components/ui/button.tsx
6
- const buttonVariants = cva("group/button inline-flex shrink-0 items-center justify-center rounded-4xl border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/30 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
6
+ const buttonVariants = cva("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
7
7
  variants: {
8
8
  variant: {
9
9
  default: "bg-primary text-primary-foreground hover:bg-primary/80",
10
- outline: "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:bg-transparent dark:hover:bg-input/30",
10
+ outline: "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
11
11
  secondary: "bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
12
12
  ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
13
13
  destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
14
14
  link: "text-primary underline-offset-4 hover:underline"
15
15
  },
16
16
  size: {
17
- default: "h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5",
18
- xs: "h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3",
19
- sm: "h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
20
- lg: "h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
21
- icon: "size-9",
22
- "icon-xs": "size-6 [&_svg:not([class*='size-'])]:size-3",
23
- "icon-sm": "size-8",
24
- "icon-lg": "size-10"
17
+ default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
18
+ xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
19
+ sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
20
+ lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
21
+ icon: "size-8",
22
+ "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
23
+ "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
24
+ "icon-lg": "size-9"
25
25
  }
26
26
  },
27
27
  defaultVariants: {
@@ -10,7 +10,7 @@ function Calendar({ className, classNames, showOutsideDays = true, captionLayout
10
10
  const defaultClassNames = getDefaultClassNames();
11
11
  return /* @__PURE__ */ jsx(DayPicker, {
12
12
  showOutsideDays,
13
- className: cn("group/calendar bg-background p-3 [--cell-radius:var(--radius-4xl)] [--cell-size:--spacing(8)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent", String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`, String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`, className),
13
+ className: cn("group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent", String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`, String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`, className),
14
14
  captionLayout,
15
15
  locale,
16
16
  formatters: {
@@ -6,21 +6,21 @@ function Card({ className, size = "default", ...props }) {
6
6
  return /* @__PURE__ */ jsx("div", {
7
7
  "data-slot": "card",
8
8
  "data-size": size,
9
- className: cn("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-4xl bg-card py-(--card-spacing) text-sm text-card-foreground shadow-md ring-1 ring-foreground/5 [--card-spacing:--spacing(6)] has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(4)] dark:ring-foreground/10 *:[img:first-child]:rounded-t-4xl *:[img:last-child]:rounded-b-4xl", className),
9
+ className: cn("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl", className),
10
10
  ...props
11
11
  });
12
12
  }
13
13
  function CardHeader({ className, ...props }) {
14
14
  return /* @__PURE__ */ jsx("div", {
15
15
  "data-slot": "card-header",
16
- className: cn("group/card-header @container/card-header grid auto-rows-min items-start gap-1.5 rounded-t-4xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)", className),
16
+ className: cn("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)", className),
17
17
  ...props
18
18
  });
19
19
  }
20
20
  function CardTitle({ className, ...props }) {
21
21
  return /* @__PURE__ */ jsx("div", {
22
22
  "data-slot": "card-title",
23
- className: cn("font-heading text-base font-medium", className),
23
+ className: cn("font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm", className),
24
24
  ...props
25
25
  });
26
26
  }
@@ -48,7 +48,7 @@ function CardContent({ className, ...props }) {
48
48
  function CardFooter({ className, ...props }) {
49
49
  return /* @__PURE__ */ jsx("div", {
50
50
  "data-slot": "card-footer",
51
- className: cn("flex items-center rounded-b-4xl px-(--card-spacing) [.border-t]:pt-(--card-spacing)", className),
51
+ className: cn("flex items-center rounded-b-xl border-t bg-muted/50 p-(--card-spacing)", className),
52
52
  ...props
53
53
  });
54
54
  }
@@ -79,7 +79,7 @@ function ChartTooltipContent({ active, payload, className, indicator = "dot", hi
79
79
  if (!active || !payload?.length) return null;
80
80
  const nestLabel = payload.length === 1 && indicator !== "dot";
81
81
  return /* @__PURE__ */ jsxs("div", {
82
- className: cn("grid min-w-32 items-start gap-1.5 rounded-xl bg-popover px-2.5 py-1.5 text-xs text-popover-foreground shadow-lg ring-1 ring-foreground/5 dark:ring-foreground/10", className),
82
+ className: cn("grid min-w-32 items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl", className),
83
83
  children: [!nestLabel ? tooltipLabel : null, /* @__PURE__ */ jsx("div", {
84
84
  className: "grid gap-1.5",
85
85
  children: payload.filter((item) => item.type !== "none").map((item, index) => {
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { Button } from "./button.js";
2
3
  import { cn } from "cn";
3
4
  import { CheckIcon, CopyIcon } from "lucide-react";
@@ -5,10 +6,10 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
6
  import * as React$1 from "react";
6
7
  import { cva } from "class-variance-authority";
7
8
  //#region src/components/ui/code-block.tsx
8
- const codeBlockVariants = cva("group/code-block relative flex w-full min-w-0 flex-col overflow-hidden rounded-2xl text-sm has-[>[data-slot=code-block-content]:focus-visible]:ring-3 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/30 data-[size=sm]:rounded-xl data-[size=sm]:text-xs", {
9
+ const codeBlockVariants = cva("group/code-block relative flex w-full min-w-0 flex-col overflow-hidden rounded-lg text-sm has-[>[data-slot=code-block-content]:focus-visible]:ring-3 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50 data-[size=sm]:text-xs", {
9
10
  variants: { variant: {
10
- default: "bg-muted text-foreground ring-1 ring-foreground/5 dark:ring-foreground/10",
11
- destructive: "bg-destructive/5 text-destructive ring-1 ring-destructive/15 dark:bg-destructive/10 dark:ring-destructive/20"
11
+ default: "border border-input text-foreground has-[>[data-slot=code-block-content]:focus-visible]:border-ring dark:bg-input/30",
12
+ destructive: "border border-destructive/30 text-destructive dark:border-destructive/40"
12
13
  } },
13
14
  defaultVariants: { variant: "default" }
14
15
  });
@@ -24,21 +25,21 @@ function CodeBlock({ className, variant = "default", size = "default", ...props
24
25
  function CodeBlockHeader({ className, ...props }) {
25
26
  return /* @__PURE__ */ jsx("div", {
26
27
  "data-slot": "code-block-header",
27
- className: cn("flex min-w-0 shrink-0 items-center gap-2 px-5 pt-5 text-muted-foreground group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pt-3 group-data-[variant=destructive]/code-block:text-destructive *:has-[>[data-slot=code-block-title]]:min-w-0", className),
28
+ className: cn("flex min-w-0 shrink-0 items-center gap-2 px-3 pt-3 text-muted-foreground group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:pt-2.5 group-data-[variant=destructive]/code-block:text-destructive *:has-[>[data-slot=code-block-title]]:min-w-0", className),
28
29
  ...props
29
30
  });
30
31
  }
31
32
  function CodeBlockTitle({ className, ...props }) {
32
33
  return /* @__PURE__ */ jsx("div", {
33
34
  "data-slot": "code-block-title",
34
- className: cn("min-w-0 truncate font-sans text-sm font-medium text-foreground group-data-[size=sm]/code-block:text-xs group-data-[variant=destructive]/code-block:text-destructive [&_svg]:pointer-events-none [&_svg]:inline-block [&_svg]:align-middle [&_svg:not([class*='size-'])]:size-4 group-data-[size=sm]/code-block:[&_svg:not([class*='size-'])]:size-3.5 *:[svg]:me-1.5", className),
35
+ className: cn("min-w-0 truncate font-sans text-sm font-medium text-foreground group-data-[size=sm]/code-block:text-xs group-data-[variant=destructive]/code-block:text-destructive [&_svg]:pointer-events-none [&_svg]:inline-block [&_svg]:align-middle [&_svg:not([class*='size-'])]:size-3.5 *:[svg]:me-1.5", className),
35
36
  ...props
36
37
  });
37
38
  }
38
39
  function CodeBlockActions({ className, ...props }) {
39
40
  return /* @__PURE__ */ jsx("div", {
40
41
  "data-slot": "code-block-actions",
41
- className: cn("-my-1 ms-auto -me-1.5 flex shrink-0 items-center gap-1 *:data-[slot=button]:hover:bg-foreground/5 dark:*:data-[slot=button]:hover:bg-foreground/10 [[data-slot=code-block]>&]:absolute [[data-slot=code-block]>&]:end-4 [[data-slot=code-block]>&]:top-4 [[data-slot=code-block]>&]:z-10 [[data-slot=code-block]>&]:m-0 [[data-slot=code-block]>&]:opacity-0 [[data-slot=code-block]>&]:transition-opacity [[data-slot=code-block]>&]:group-focus-within/code-block:opacity-100 [[data-slot=code-block]>&]:group-hover/code-block:opacity-100 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-2 [[data-slot=code-block]>&]:pointer-coarse:opacity-100 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10", className),
42
+ className: cn("-my-1 ms-auto -me-1.5 flex shrink-0 items-center gap-1 [[data-slot=code-block]>&]:absolute [[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:top-2 [[data-slot=code-block]>&]:z-10 [[data-slot=code-block]>&]:m-0 [[data-slot=code-block]>&]:opacity-0 [[data-slot=code-block]>&]:transition-opacity [[data-slot=code-block]>&]:group-focus-within/code-block:opacity-100 [[data-slot=code-block]>&]:group-hover/code-block:opacity-100 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-1.5 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-1.5 [[data-slot=code-block]>&]:pointer-coarse:opacity-100 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10", className),
42
43
  ...props
43
44
  });
44
45
  }
@@ -55,7 +56,7 @@ function CodeBlockCopyButton({ value, variant = "ghost", size = "icon-xs", class
55
56
  variant,
56
57
  size,
57
58
  "aria-label": copied ? "Copied" : "Copy",
58
- className: cn("hover:bg-foreground/5 dark:hover:bg-foreground/10", className),
59
+ className: cn(className),
59
60
  onClick: (event) => {
60
61
  onClick?.(event);
61
62
  navigator.clipboard.writeText(value).then(() => setCopied(true)).catch(() => {});
@@ -79,7 +80,7 @@ function CodeBlockContent({ className, children, style, wrap = false, lineNumber
79
80
  counterReset: `line ${startLine - 1}`,
80
81
  ...style
81
82
  },
82
- className: cn("min-h-0 min-w-0 scroll-fade-x scrollbar-thin overflow-auto px-5 py-5 text-start font-mono leading-relaxed outline-none group-has-data-[slot=code-block-footer]/code-block:pb-2 group-has-data-[slot=code-block-header]/code-block:pt-2 group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:py-3 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5 data-wrap:scroll-fade-y data-wrap:wrap-break-word data-wrap:whitespace-pre-wrap", className),
83
+ className: cn("min-h-0 min-w-0 scroll-fade-x scrollbar-thin overflow-auto px-3 py-3 text-start font-mono leading-relaxed outline-none group-has-data-[slot=code-block-footer]/code-block:pb-2 group-has-data-[slot=code-block-header]/code-block:pt-2 group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:py-2.5 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5 data-wrap:scroll-fade-y data-wrap:wrap-break-word data-wrap:whitespace-pre-wrap", className),
83
84
  ...props,
84
85
  children: /* @__PURE__ */ jsx("code", {
85
86
  "data-slot": "code-block-code",
@@ -88,12 +89,12 @@ function CodeBlockContent({ className, children, style, wrap = false, lineNumber
88
89
  })
89
90
  });
90
91
  }
91
- const codeBlockLineVariants = cva("relative -mx-5 block min-h-lh px-5 group-data-[size=sm]/code-block:-mx-3 group-data-[size=sm]/code-block:px-3 before:min-w-6 before:text-end before:text-muted-foreground after:absolute after:start-1 after:top-0 after:text-muted-foreground after:select-none in-data-numbered:col-span-2 in-data-numbered:grid in-data-numbered:grid-cols-subgrid in-data-numbered:gap-x-3 in-data-numbered:[counter-increment:line] in-data-numbered:before:content-[counter(line)] in-data-numbered:before:select-none in-data-numbered:supports-[content:counter(line)_/_'']:before:content-[counter(line)_/_'']", {
92
+ const codeBlockLineVariants = cva("relative -mx-3 block min-h-lh px-3 group-data-[size=sm]/code-block:-mx-2.5 group-data-[size=sm]/code-block:px-2.5 before:min-w-6 before:text-end before:text-muted-foreground after:absolute after:start-1 after:top-0 after:text-muted-foreground after:select-none in-data-numbered:col-span-2 in-data-numbered:grid in-data-numbered:grid-cols-subgrid in-data-numbered:gap-x-3 in-data-numbered:[counter-increment:line] in-data-numbered:before:content-[counter(line)] in-data-numbered:before:select-none in-data-numbered:supports-[content:counter(line)_/_'']:before:content-[counter(line)_/_'']", {
92
93
  variants: { variant: {
93
94
  default: "",
94
- added: "bg-foreground/5 after:content-['+']",
95
+ added: "bg-muted after:content-['+']",
95
96
  removed: "bg-destructive/10 after:text-destructive after:content-['−']",
96
- highlighted: "bg-foreground/5"
97
+ highlighted: "bg-muted"
97
98
  } },
98
99
  defaultVariants: { variant: "default" }
99
100
  });
@@ -114,7 +115,7 @@ function CodeBlockLine({ className, variant = "default", children, ...props }) {
114
115
  function CodeBlockFooter({ className, ...props }) {
115
116
  return /* @__PURE__ */ jsx("div", {
116
117
  "data-slot": "code-block-footer",
117
- className: cn("flex min-w-0 shrink-0 items-center gap-2 px-5 pb-5 text-muted-foreground group-data-[size=sm]/code-block:px-3 group-data-[size=sm]/code-block:pb-3", className),
118
+ className: cn("flex min-w-0 shrink-0 items-center gap-2 px-3 pb-3 text-muted-foreground group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:pb-2.5", className),
118
119
  ...props
119
120
  });
120
121
  }
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "./dialog.js";
2
3
  import { InputGroup, InputGroupAddon } from "./input-group.js";
3
4
  import { cn } from "cn";
@@ -9,7 +10,7 @@ import { Command as Command$1 } from "cmdk";
9
10
  function Command({ className, ...props }) {
10
11
  return /* @__PURE__ */ jsx(Command$1, {
11
12
  "data-slot": "command",
12
- className: cn("flex size-full flex-col overflow-hidden rounded-4xl bg-popover p-1 text-popover-foreground", className),
13
+ className: cn("flex size-full flex-col overflow-hidden rounded-xl! bg-popover p-1 text-popover-foreground", className),
13
14
  ...props
14
15
  });
15
16
  }
@@ -20,7 +21,7 @@ function CommandDialog({ title = "Command Palette", description = "Search for a
20
21
  className: "sr-only",
21
22
  children: [/* @__PURE__ */ jsx(DialogTitle, { children: title }), /* @__PURE__ */ jsx(DialogDescription, { children: description })]
22
23
  }), /* @__PURE__ */ jsx(DialogContent, {
23
- className: cn("top-1/3 translate-y-0 overflow-hidden rounded-4xl! p-0", className),
24
+ className: cn("top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0", className),
24
25
  showCloseButton,
25
26
  children
26
27
  })]
@@ -31,7 +32,7 @@ function CommandInput({ className, ...props }) {
31
32
  "data-slot": "command-input-wrapper",
32
33
  className: "p-1 pb-0",
33
34
  children: /* @__PURE__ */ jsxs(InputGroup, {
34
- className: "h-9 bg-input/50",
35
+ className: "h-8! rounded-lg! border-input/30 bg-input/30 shadow-none! *:data-[slot=input-group-addon]:pl-2!",
35
36
  children: [/* @__PURE__ */ jsx(Command$1.Input, {
36
37
  "data-slot": "command-input",
37
38
  className: cn("w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50", className),
@@ -57,21 +58,21 @@ function CommandEmpty({ className, ...props }) {
57
58
  function CommandGroup({ className, ...props }) {
58
59
  return /* @__PURE__ */ jsx(Command$1.Group, {
59
60
  "data-slot": "command-group",
60
- className: cn("overflow-hidden p-1.5 text-foreground **:[[cmdk-group-heading]]:px-3 **:[[cmdk-group-heading]]:py-2 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground", className),
61
+ className: cn("overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground", className),
61
62
  ...props
62
63
  });
63
64
  }
64
65
  function CommandSeparator({ className, ...props }) {
65
66
  return /* @__PURE__ */ jsx(Command$1.Separator, {
66
67
  "data-slot": "command-separator",
67
- className: cn("my-1.5 h-px bg-border/50", className),
68
+ className: cn("-mx-1 h-px bg-border", className),
68
69
  ...props
69
70
  });
70
71
  }
71
72
  function CommandItem({ className, children, ...props }) {
72
73
  return /* @__PURE__ */ jsxs(Command$1.Item, {
73
74
  "data-slot": "command-item",
74
- className: cn("group/command-item relative flex cursor-default items-center gap-2 rounded-2xl px-3 py-2 text-sm font-medium outline-hidden select-none in-data-[slot=dialog-content]:rounded-3xl data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-selected:*:[svg]:text-foreground", className),
75
+ className: cn("group/command-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-selected:*:[svg]:text-foreground", className),
75
76
  ...props,
76
77
  children: [children, /* @__PURE__ */ jsx(CheckIcon, { className: "ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" })]
77
78
  });