@conscia-labs/design-system 0.2.0 → 0.3.1

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
@@ -252,6 +252,7 @@ export function ProductShell({
252
252
 
253
253
  <MainRegion>
254
254
  <TopBar>
255
+ {/* Keep the toggle in the topbar; it must remain visible when the sidebar collapses. */}
255
256
  <SidebarTrigger />
256
257
  </TopBar>
257
258
 
@@ -270,6 +271,70 @@ export function ProductShell({
270
271
  }
271
272
  ```
272
273
 
274
+ ### Typography and font loading
275
+
276
+ The design system declares the open-source Inter variable font as a runtime
277
+ dependency and loads it through its CSS entry points. Inter is distributed
278
+ under the SIL Open Font License 1.1 and supports the system's fractional
279
+ weight values. Consumers should import the published `tailwind.css` or
280
+ `styles.css` entry and should not add a separate Saans or Inter download.
281
+ Applications may override `--font-sans` only when a deliberate product-specific
282
+ type decision has been made.
283
+
284
+ ### Sidebar variants and semantic surfaces
285
+
286
+ `AppSidebar` keeps the historical dark treatment by default. Consumers that
287
+ want the sidebar to follow the application appearance can opt into the
288
+ refreshed hierarchy with `variant="auto"`; `variant="light"` is available for
289
+ an explicitly light sidebar.
290
+
291
+ ```tsx
292
+ <AppShell>
293
+ <AppSidebar variant="auto">
294
+ <AppSidebarHeader>
295
+ <ProductIdentity label="Conscia" description="Administration" />
296
+ </AppSidebarHeader>
297
+ <AppSidebarContent>{navigation}</AppSidebarContent>
298
+ <AppSidebarFooter>{accountMenu}</AppSidebarFooter>
299
+ </AppSidebar>
300
+ </AppShell>
301
+ ```
302
+
303
+ The default is intentionally backwards compatible. The sidebar scope exposes
304
+ reusable semantic aliases for its canvas, header, content, hover, active,
305
+ search, footer, text, icon, group label, count, border, and focus-ring roles.
306
+ Use the generated utilities such as `bg-sidebar-canvas`,
307
+ `bg-sidebar-hover`, `text-sidebar-primary-text`, and
308
+ `text-sidebar-metadata-text` in shared or application-owned compositions.
309
+ Legacy aliases including `bg-sidebar`, `bg-sidebar-accent`, and
310
+ `text-sidebar-foreground` remain supported.
311
+
312
+ `SidebarSearch` owns only the trigger, expanded field, Escape handling, and
313
+ focus handoff. Applications provide the query value and filtering behavior.
314
+ `NavigationGroup` accepts an optional `count`; application-owned group labels
315
+ can still be supplied as arbitrary React nodes. Routing, conversation rows,
316
+ row actions, account menus, permissions, and appearance controls remain
317
+ application-owned.
318
+
319
+ The shell uses `--ds-topbar-height` as the shared chrome-height contract. The
320
+ sidebar header aliases the historical `--ds-sidebar-header-height` token to the
321
+ same value, so the two rails stay aligned. `SidebarTrigger` should be rendered
322
+ as a child of `TopBar`, never inside `AppSidebar`; the topbar remains mounted
323
+ when the sidebar enters collapsed or mobile states.
324
+
325
+ For migration, replace a consuming application's light-only `--sidebar-*`
326
+ root override with `variant="auto"` on its shared `AppSidebar`. Remove
327
+ descendant opacity and background overrides as each shell adopts the semantic
328
+ aliases. Keep product-specific selectors only where they encode behavior or
329
+ content rather than shared sidebar presentation.
330
+
331
+ The ownership boundary is:
332
+
333
+ | Shared design system | Application-owned |
334
+ | --- | --- |
335
+ | Sidebar variant tokens, surface hierarchy, geometry, responsive drawer, focus states, active/hover/disabled styling, tooltips, and search affordance behavior | Routes, permissions, navigation data, query/filter state, conversation or inventory data, row actions, account/profile menus, sign-out, and product-specific persistence keys |
336
+ | `NavigationGroup` keyboard expansion and `SidebarNavigation` collapsed flyouts | Group labels/content, link destinations, active-route calculation, and business-specific empty states |
337
+
273
338
  ## Choosing the right component
274
339
 
275
340
  ### Table or DataTable?
@@ -11,6 +11,8 @@ declare function Button({ className, variant, size, asChild, type, ...props }: R
11
11
  asChild?: boolean;
12
12
  }): React.JSX.Element;
13
13
 
14
+ declare function Input({ className, type, ...props }: React.ComponentProps<"input">): React.JSX.Element;
15
+
14
16
  declare function Separator({ className, orientation, decorative, ...props }: React.ComponentProps<typeof SeparatorPrimitive.Root>): React.JSX.Element;
15
17
 
16
18
  declare function Card({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
@@ -19,4 +21,4 @@ declare function CardTitle({ className, ...props }: React.ComponentProps<"div">)
19
21
  declare function CardDescription({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
20
22
  declare function CardContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
21
23
 
22
- export { Button as B, Card as C, Separator as S, CardContent as a, CardDescription as b, CardHeader as c, CardTitle as d, buttonVariants as e };
24
+ export { Button as B, Card as C, Input as I, Separator as S, CardContent as a, CardDescription as b, CardHeader as c, CardTitle as d, buttonVariants as e };
@@ -232,16 +232,35 @@ function SelectScrollDownButton({ className, ...props }) {
232
232
  return /* @__PURE__ */ jsx4(SelectPrimitive.ScrollDownButton, { "data-slot": "select-scroll-down-button", className: cn("flex cursor-default items-center justify-center py-1", className), ...props, children: /* @__PURE__ */ jsx4(ChevronDownIcon, { className: "size-4" }) });
233
233
  }
234
234
 
235
+ // src/primitives/input.tsx
236
+ import { jsx as jsx5 } from "react/jsx-runtime";
237
+ function Input({ className, type, ...props }) {
238
+ return /* @__PURE__ */ jsx5(
239
+ "input",
240
+ {
241
+ type,
242
+ "data-slot": "input",
243
+ className: cn(
244
+ "border-input bg-card flex h-[var(--ds-field-control-height)] w-full min-w-0 rounded-[var(--ds-field-control-radius)] border px-[var(--ds-field-control-padding-x)] py-2 text-base shadow-none transition-colors outline-none selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
245
+ "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
246
+ "aria-invalid:border-danger aria-invalid:ring-danger/20 dark:aria-invalid:ring-danger/40",
247
+ className
248
+ ),
249
+ ...props
250
+ }
251
+ );
252
+ }
253
+
235
254
  // src/primitives/separator.tsx
236
255
  import * as SeparatorPrimitive from "@radix-ui/react-separator";
237
- import { jsx as jsx5 } from "react/jsx-runtime";
256
+ import { jsx as jsx6 } from "react/jsx-runtime";
238
257
  function Separator2({
239
258
  className,
240
259
  orientation = "horizontal",
241
260
  decorative = true,
242
261
  ...props
243
262
  }) {
244
- return /* @__PURE__ */ jsx5(
263
+ return /* @__PURE__ */ jsx6(
245
264
  SeparatorPrimitive.Root,
246
265
  {
247
266
  "data-slot": "separator",
@@ -259,30 +278,30 @@ function Separator2({
259
278
  // src/primitives/sheet.tsx
260
279
  import * as DialogPrimitive from "@radix-ui/react-dialog";
261
280
  import { XIcon } from "lucide-react";
262
- import { jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
281
+ import { jsx as jsx7, jsxs as jsxs2 } from "react/jsx-runtime";
263
282
  function Sheet({ ...props }) {
264
- return /* @__PURE__ */ jsx6(DialogPrimitive.Root, { "data-slot": "sheet", ...props });
283
+ return /* @__PURE__ */ jsx7(DialogPrimitive.Root, { "data-slot": "sheet", ...props });
265
284
  }
266
285
  function SheetTrigger({
267
286
  ...props
268
287
  }) {
269
- return /* @__PURE__ */ jsx6(DialogPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
288
+ return /* @__PURE__ */ jsx7(DialogPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
270
289
  }
271
290
  function SheetPortal({
272
291
  ...props
273
292
  }) {
274
- return /* @__PURE__ */ jsx6(DialogPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
293
+ return /* @__PURE__ */ jsx7(DialogPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
275
294
  }
276
295
  function SheetClose({
277
296
  ...props
278
297
  }) {
279
- return /* @__PURE__ */ jsx6(DialogPrimitive.Close, { "data-slot": "sheet-close", ...props });
298
+ return /* @__PURE__ */ jsx7(DialogPrimitive.Close, { "data-slot": "sheet-close", ...props });
280
299
  }
281
300
  function SheetOverlay({
282
301
  className,
283
302
  ...props
284
303
  }) {
285
- return /* @__PURE__ */ jsx6(
304
+ return /* @__PURE__ */ jsx7(
286
305
  DialogPrimitive.Overlay,
287
306
  {
288
307
  "data-slot": "sheet-overlay",
@@ -305,7 +324,7 @@ function SheetContent({
305
324
  ...props
306
325
  }) {
307
326
  return /* @__PURE__ */ jsxs2(SheetPortal, { children: [
308
- /* @__PURE__ */ jsx6(SheetOverlay, {}),
327
+ /* @__PURE__ */ jsx7(SheetOverlay, {}),
309
328
  /* @__PURE__ */ jsxs2(
310
329
  DialogPrimitive.Content,
311
330
  {
@@ -324,8 +343,8 @@ function SheetContent({
324
343
  "data-slot": "sheet-close",
325
344
  className: "absolute right-4 top-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
326
345
  children: [
327
- /* @__PURE__ */ jsx6(XIcon, {}),
328
- /* @__PURE__ */ jsx6("span", { className: "sr-only", children: closeLabel })
346
+ /* @__PURE__ */ jsx7(XIcon, {}),
347
+ /* @__PURE__ */ jsx7("span", { className: "sr-only", children: closeLabel })
329
348
  ]
330
349
  }
331
350
  )
@@ -335,13 +354,13 @@ function SheetContent({
335
354
  ] });
336
355
  }
337
356
  function SheetHeader({ className, ...props }) {
338
- return /* @__PURE__ */ jsx6("div", { "data-slot": "sheet-header", className: cn("grid gap-2 pr-8", className), ...props });
357
+ return /* @__PURE__ */ jsx7("div", { "data-slot": "sheet-header", className: cn("grid gap-2 pr-8", className), ...props });
339
358
  }
340
359
  function SheetTitle({
341
360
  className,
342
361
  ...props
343
362
  }) {
344
- return /* @__PURE__ */ jsx6(
363
+ return /* @__PURE__ */ jsx7(
345
364
  DialogPrimitive.Title,
346
365
  {
347
366
  "data-slot": "sheet-title",
@@ -354,7 +373,7 @@ function SheetDescription({
354
373
  className,
355
374
  ...props
356
375
  }) {
357
- return /* @__PURE__ */ jsx6(
376
+ return /* @__PURE__ */ jsx7(
358
377
  DialogPrimitive.Description,
359
378
  {
360
379
  "data-slot": "sheet-description",
@@ -364,7 +383,7 @@ function SheetDescription({
364
383
  );
365
384
  }
366
385
  function SheetBody({ className, ...props }) {
367
- return /* @__PURE__ */ jsx6(
386
+ return /* @__PURE__ */ jsx7(
368
387
  "div",
369
388
  {
370
389
  "data-slot": "sheet-body",
@@ -374,7 +393,7 @@ function SheetBody({ className, ...props }) {
374
393
  );
375
394
  }
376
395
  function SheetFooter({ className, ...props }) {
377
- return /* @__PURE__ */ jsx6(
396
+ return /* @__PURE__ */ jsx7(
378
397
  "div",
379
398
  {
380
399
  "data-slot": "sheet-footer",
@@ -386,15 +405,15 @@ function SheetFooter({ className, ...props }) {
386
405
 
387
406
  // src/primitives/tooltip.tsx
388
407
  import * as TooltipPrimitive from "@radix-ui/react-tooltip";
389
- import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
408
+ import { jsx as jsx8, jsxs as jsxs3 } from "react/jsx-runtime";
390
409
  function TooltipProvider({ delayDuration = 150, ...props }) {
391
- return /* @__PURE__ */ jsx7(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delayDuration, ...props });
410
+ return /* @__PURE__ */ jsx8(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delayDuration, ...props });
392
411
  }
393
412
  function Tooltip({ ...props }) {
394
- return /* @__PURE__ */ jsx7(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
413
+ return /* @__PURE__ */ jsx8(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
395
414
  }
396
415
  function TooltipTrigger({ ...props }) {
397
- return /* @__PURE__ */ jsx7(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
416
+ return /* @__PURE__ */ jsx8(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
398
417
  }
399
418
  function TooltipContent({
400
419
  className,
@@ -402,7 +421,7 @@ function TooltipContent({
402
421
  children,
403
422
  ...props
404
423
  }) {
405
- return /* @__PURE__ */ jsx7(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs3(
424
+ return /* @__PURE__ */ jsx8(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs3(
406
425
  TooltipPrimitive.Content,
407
426
  {
408
427
  "data-slot": "tooltip-content",
@@ -411,7 +430,7 @@ function TooltipContent({
411
430
  ...props,
412
431
  children: [
413
432
  children,
414
- /* @__PURE__ */ jsx7(TooltipPrimitive.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground" })
433
+ /* @__PURE__ */ jsx8(TooltipPrimitive.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground" })
415
434
  ]
416
435
  }
417
436
  ) });
@@ -420,21 +439,21 @@ function TooltipContent({
420
439
  // src/primitives/dialog.tsx
421
440
  import * as DialogPrimitive2 from "@radix-ui/react-dialog";
422
441
  import { XIcon as XIcon2 } from "lucide-react";
423
- import { jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
442
+ import { jsx as jsx9, jsxs as jsxs4 } from "react/jsx-runtime";
424
443
  function Dialog({ ...props }) {
425
- return /* @__PURE__ */ jsx8(DialogPrimitive2.Root, { "data-slot": "dialog", ...props });
444
+ return /* @__PURE__ */ jsx9(DialogPrimitive2.Root, { "data-slot": "dialog", ...props });
426
445
  }
427
446
  function DialogTrigger({ ...props }) {
428
- return /* @__PURE__ */ jsx8(DialogPrimitive2.Trigger, { "data-slot": "dialog-trigger", ...props });
447
+ return /* @__PURE__ */ jsx9(DialogPrimitive2.Trigger, { "data-slot": "dialog-trigger", ...props });
429
448
  }
430
449
  function DialogClose({ ...props }) {
431
- return /* @__PURE__ */ jsx8(DialogPrimitive2.Close, { "data-slot": "dialog-close", ...props });
450
+ return /* @__PURE__ */ jsx9(DialogPrimitive2.Close, { "data-slot": "dialog-close", ...props });
432
451
  }
433
452
  function DialogPortal({ ...props }) {
434
- return /* @__PURE__ */ jsx8(DialogPrimitive2.Portal, { "data-slot": "dialog-portal", ...props });
453
+ return /* @__PURE__ */ jsx9(DialogPrimitive2.Portal, { "data-slot": "dialog-portal", ...props });
435
454
  }
436
455
  function DialogOverlay({ className, ...props }) {
437
- return /* @__PURE__ */ jsx8(DialogPrimitive2.Overlay, { "data-slot": "dialog-overlay", className: cn("fixed inset-0 z-50 bg-black/50", className), ...props });
456
+ return /* @__PURE__ */ jsx9(DialogPrimitive2.Overlay, { "data-slot": "dialog-overlay", className: cn("fixed inset-0 z-50 bg-black/50", className), ...props });
438
457
  }
439
458
  function DialogContent({
440
459
  className,
@@ -445,7 +464,7 @@ function DialogContent({
445
464
  ...props
446
465
  }) {
447
466
  return /* @__PURE__ */ jsxs4(DialogPortal, { children: [
448
- /* @__PURE__ */ jsx8(DialogOverlay, {}),
467
+ /* @__PURE__ */ jsx9(DialogOverlay, {}),
449
468
  /* @__PURE__ */ jsxs4(
450
469
  DialogPrimitive2.Content,
451
470
  {
@@ -465,8 +484,8 @@ function DialogContent({
465
484
  "data-slot": "dialog-close",
466
485
  className: "absolute right-4 top-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
467
486
  children: [
468
- /* @__PURE__ */ jsx8(XIcon2, { className: "size-4" }),
469
- /* @__PURE__ */ jsx8("span", { className: "sr-only", children: closeLabel })
487
+ /* @__PURE__ */ jsx9(XIcon2, { className: "size-4" }),
488
+ /* @__PURE__ */ jsx9("span", { className: "sr-only", children: closeLabel })
470
489
  ]
471
490
  }
472
491
  ) : null
@@ -476,26 +495,26 @@ function DialogContent({
476
495
  ] });
477
496
  }
478
497
  function DialogHeader({ className, ...props }) {
479
- return /* @__PURE__ */ jsx8("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2 text-left", className), ...props });
498
+ return /* @__PURE__ */ jsx9("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2 text-left", className), ...props });
480
499
  }
481
500
  function DialogTitle({ className, ...props }) {
482
- return /* @__PURE__ */ jsx8(DialogPrimitive2.Title, { "data-slot": "dialog-title", className: cn("text-base font-semibold leading-none", className), ...props });
501
+ return /* @__PURE__ */ jsx9(DialogPrimitive2.Title, { "data-slot": "dialog-title", className: cn("text-base font-semibold leading-none", className), ...props });
483
502
  }
484
503
  function DialogDescription({ className, ...props }) {
485
- return /* @__PURE__ */ jsx8(DialogPrimitive2.Description, { "data-slot": "dialog-description", className: cn("text-sm text-muted-foreground", className), ...props });
504
+ return /* @__PURE__ */ jsx9(DialogPrimitive2.Description, { "data-slot": "dialog-description", className: cn("text-sm text-muted-foreground", className), ...props });
486
505
  }
487
506
  function DialogBody({ className, ...props }) {
488
- return /* @__PURE__ */ jsx8("div", { "data-slot": "dialog-body", className: cn("min-h-0 overflow-y-auto text-sm", className), ...props });
507
+ return /* @__PURE__ */ jsx9("div", { "data-slot": "dialog-body", className: cn("min-h-0 overflow-y-auto text-sm", className), ...props });
489
508
  }
490
509
  function DialogFooter({ className, ...props }) {
491
- return /* @__PURE__ */ jsx8("div", { "data-slot": "dialog-footer", className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className), ...props });
510
+ return /* @__PURE__ */ jsx9("div", { "data-slot": "dialog-footer", className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className), ...props });
492
511
  }
493
512
 
494
513
  // src/primitives/tabs.tsx
495
514
  import * as React from "react";
496
515
  import * as TabsPrimitive from "@radix-ui/react-tabs";
497
516
  import { Slot as Slot2 } from "@radix-ui/react-slot";
498
- import { jsx as jsx9 } from "react/jsx-runtime";
517
+ import { jsx as jsx10 } from "react/jsx-runtime";
499
518
  var defaultTabsVisualContext = {
500
519
  variant: "underline",
501
520
  size: "default"
@@ -546,7 +565,7 @@ function Tabs({
546
565
  size = "default",
547
566
  ...props
548
567
  }) {
549
- return /* @__PURE__ */ jsx9(TabsRootVisualContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsx9(
568
+ return /* @__PURE__ */ jsx10(TabsRootVisualContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsx10(
550
569
  TabsPrimitive.Root,
551
570
  {
552
571
  "data-slot": "tabs",
@@ -570,7 +589,7 @@ function TabsList({
570
589
  const resolvedVariant = variant ?? rootVisuals.variant;
571
590
  const resolvedSize = size ?? rootVisuals.size;
572
591
  const [scrollPosition, scrollRailRef, updateScrollPosition] = useHorizontalScrollRail(externalRef);
573
- return /* @__PURE__ */ jsx9(
592
+ return /* @__PURE__ */ jsx10(
574
593
  TabsPrimitive.List,
575
594
  {
576
595
  "data-slot": "tabs-list",
@@ -590,7 +609,7 @@ function TabsList({
590
609
  className
591
610
  ),
592
611
  ...props,
593
- children: /* @__PURE__ */ jsx9(
612
+ children: /* @__PURE__ */ jsx10(
594
613
  TabsListVisualContext.Provider,
595
614
  {
596
615
  value: { variant: resolvedVariant, size: resolvedSize },
@@ -609,7 +628,7 @@ function TabsTrigger({
609
628
  const listVisuals = React.useContext(TabsListVisualContext);
610
629
  const resolvedVariant = variant ?? listVisuals.variant;
611
630
  const resolvedSize = size ?? listVisuals.size;
612
- return /* @__PURE__ */ jsx9(
631
+ return /* @__PURE__ */ jsx10(
613
632
  TabsPrimitive.Trigger,
614
633
  {
615
634
  "data-slot": "tabs-trigger",
@@ -632,7 +651,7 @@ function TabsContent({
632
651
  className,
633
652
  ...props
634
653
  }) {
635
- return /* @__PURE__ */ jsx9(
654
+ return /* @__PURE__ */ jsx10(
636
655
  TabsPrimitive.Content,
637
656
  {
638
657
  "data-slot": "tabs-content",
@@ -648,7 +667,7 @@ function NavigationTabs({
648
667
  className,
649
668
  ...props
650
669
  }) {
651
- return /* @__PURE__ */ jsx9(
670
+ return /* @__PURE__ */ jsx10(
652
671
  "nav",
653
672
  {
654
673
  "data-slot": "navigation-tabs",
@@ -664,7 +683,7 @@ function NavigationTabsList({
664
683
  ...props
665
684
  }) {
666
685
  const [scrollPosition, scrollRailRef, updateScrollPosition] = useHorizontalScrollRail(externalRef);
667
- return /* @__PURE__ */ jsx9(
686
+ return /* @__PURE__ */ jsx10(
668
687
  "div",
669
688
  {
670
689
  "data-slot": "navigation-tabs-list",
@@ -707,7 +726,7 @@ function NavigationTab({
707
726
  inline: "nearest"
708
727
  });
709
728
  }, [active]);
710
- return /* @__PURE__ */ jsx9(
729
+ return /* @__PURE__ */ jsx10(
711
730
  Comp,
712
731
  {
713
732
  ...props,
@@ -724,9 +743,9 @@ function NavigationTab({
724
743
  }
725
744
 
726
745
  // src/primitives/card.tsx
727
- import { jsx as jsx10 } from "react/jsx-runtime";
746
+ import { jsx as jsx11 } from "react/jsx-runtime";
728
747
  function Card({ className, ...props }) {
729
- return /* @__PURE__ */ jsx10(
748
+ return /* @__PURE__ */ jsx11(
730
749
  "div",
731
750
  {
732
751
  "data-slot": "card",
@@ -736,22 +755,22 @@ function Card({ className, ...props }) {
736
755
  );
737
756
  }
738
757
  function CardHeader({ className, ...props }) {
739
- return /* @__PURE__ */ jsx10("div", { "data-slot": "card-header", className: cn("grid auto-rows-min gap-1.5 px-[var(--ds-surface-padding)]", className), ...props });
758
+ return /* @__PURE__ */ jsx11("div", { "data-slot": "card-header", className: cn("grid auto-rows-min gap-1.5 px-[var(--ds-surface-padding)]", className), ...props });
740
759
  }
741
760
  function CardTitle({ className, ...props }) {
742
- return /* @__PURE__ */ jsx10("div", { "data-slot": "card-title", className: cn("font-semibold leading-none", className), ...props });
761
+ return /* @__PURE__ */ jsx11("div", { "data-slot": "card-title", className: cn("font-semibold leading-none", className), ...props });
743
762
  }
744
763
  function CardDescription({ className, ...props }) {
745
- return /* @__PURE__ */ jsx10("div", { "data-slot": "card-description", className: cn("text-sm text-muted-foreground", className), ...props });
764
+ return /* @__PURE__ */ jsx11("div", { "data-slot": "card-description", className: cn("text-sm text-muted-foreground", className), ...props });
746
765
  }
747
766
  function CardContent({ className, ...props }) {
748
- return /* @__PURE__ */ jsx10("div", { "data-slot": "card-content", className: cn("px-[var(--ds-surface-padding)]", className), ...props });
767
+ return /* @__PURE__ */ jsx11("div", { "data-slot": "card-content", className: cn("px-[var(--ds-surface-padding)]", className), ...props });
749
768
  }
750
769
 
751
770
  // src/primitives/skeleton.tsx
752
- import { jsx as jsx11 } from "react/jsx-runtime";
771
+ import { jsx as jsx12 } from "react/jsx-runtime";
753
772
  function Skeleton({ className, ...props }) {
754
- return /* @__PURE__ */ jsx11(
773
+ return /* @__PURE__ */ jsx12(
755
774
  "div",
756
775
  {
757
776
  "data-slot": "skeleton",
@@ -763,16 +782,16 @@ function Skeleton({ className, ...props }) {
763
782
 
764
783
  // src/primitives/collapsible.tsx
765
784
  import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
766
- import { jsx as jsx12 } from "react/jsx-runtime";
785
+ import { jsx as jsx13 } from "react/jsx-runtime";
767
786
  function Collapsible({
768
787
  ...props
769
788
  }) {
770
- return /* @__PURE__ */ jsx12(CollapsiblePrimitive.Root, { "data-slot": "collapsible", ...props });
789
+ return /* @__PURE__ */ jsx13(CollapsiblePrimitive.Root, { "data-slot": "collapsible", ...props });
771
790
  }
772
791
  function CollapsibleTrigger({
773
792
  ...props
774
793
  }) {
775
- return /* @__PURE__ */ jsx12(
794
+ return /* @__PURE__ */ jsx13(
776
795
  CollapsiblePrimitive.Trigger,
777
796
  {
778
797
  "data-slot": "collapsible-trigger",
@@ -783,7 +802,7 @@ function CollapsibleTrigger({
783
802
  function CollapsibleContent({
784
803
  ...props
785
804
  }) {
786
- return /* @__PURE__ */ jsx12(
805
+ return /* @__PURE__ */ jsx13(
787
806
  CollapsiblePrimitive.Content,
788
807
  {
789
808
  "data-slot": "collapsible-content",
@@ -795,34 +814,34 @@ function CollapsibleContent({
795
814
  // src/primitives/dropdown-menu.tsx
796
815
  import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
797
816
  import { ChevronRight } from "lucide-react";
798
- import { jsx as jsx13, jsxs as jsxs5 } from "react/jsx-runtime";
817
+ import { jsx as jsx14, jsxs as jsxs5 } from "react/jsx-runtime";
799
818
  function DropdownMenu({ ...props }) {
800
- return /* @__PURE__ */ jsx13(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
819
+ return /* @__PURE__ */ jsx14(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
801
820
  }
802
821
  function DropdownMenuGroup({ ...props }) {
803
- return /* @__PURE__ */ jsx13(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props });
822
+ return /* @__PURE__ */ jsx14(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props });
804
823
  }
805
824
  function DropdownMenuSub({ ...props }) {
806
- return /* @__PURE__ */ jsx13(DropdownMenuPrimitive.Sub, { "data-slot": "dropdown-menu-sub", ...props });
825
+ return /* @__PURE__ */ jsx14(DropdownMenuPrimitive.Sub, { "data-slot": "dropdown-menu-sub", ...props });
807
826
  }
808
827
  function DropdownMenuSubTrigger({ className, children, ...props }) {
809
828
  return /* @__PURE__ */ jsxs5(DropdownMenuPrimitive.SubTrigger, { "data-slot": "dropdown-menu-sub-trigger", className: cn("focus:bg-surface-muted flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-[length:var(--ds-menu-item-size)] outline-hidden", className), ...props, children: [
810
829
  children,
811
- /* @__PURE__ */ jsx13(ChevronRight, { className: "ml-auto size-4 text-muted-foreground" })
830
+ /* @__PURE__ */ jsx14(ChevronRight, { className: "ml-auto size-4 text-muted-foreground" })
812
831
  ] });
813
832
  }
814
833
  function DropdownMenuSubContent({ className, ...props }) {
815
- return /* @__PURE__ */ jsx13(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx13(DropdownMenuPrimitive.SubContent, { "data-slot": "dropdown-menu-sub-content", className: cn("z-50 min-w-56 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-[var(--ds-shadow-floating)]", className), ...props }) });
834
+ return /* @__PURE__ */ jsx14(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx14(DropdownMenuPrimitive.SubContent, { "data-slot": "dropdown-menu-sub-content", className: cn("z-50 min-w-56 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-[var(--ds-shadow-floating)]", className), ...props }) });
816
835
  }
817
836
  function DropdownMenuTrigger({ ...props }) {
818
- return /* @__PURE__ */ jsx13(DropdownMenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
837
+ return /* @__PURE__ */ jsx14(DropdownMenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
819
838
  }
820
839
  function DropdownMenuContent({
821
840
  className,
822
841
  sideOffset = 4,
823
842
  ...props
824
843
  }) {
825
- return /* @__PURE__ */ jsx13(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx13(
844
+ return /* @__PURE__ */ jsx14(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx14(
826
845
  DropdownMenuPrimitive.Content,
827
846
  {
828
847
  "data-slot": "dropdown-menu-content",
@@ -838,7 +857,7 @@ function DropdownMenuItem({
838
857
  variant = "default",
839
858
  ...props
840
859
  }) {
841
- return /* @__PURE__ */ jsx13(
860
+ return /* @__PURE__ */ jsx14(
842
861
  DropdownMenuPrimitive.Item,
843
862
  {
844
863
  "data-slot": "dropdown-menu-item",
@@ -854,10 +873,10 @@ function DropdownMenuLabel({
854
873
  inset,
855
874
  ...props
856
875
  }) {
857
- return /* @__PURE__ */ jsx13(DropdownMenuPrimitive.Label, { "data-slot": "dropdown-menu-label", "data-inset": inset, className: cn("px-2 py-1.5 text-[length:var(--ds-menu-label-size)] font-medium data-[inset=true]:pl-8", className), ...props });
876
+ return /* @__PURE__ */ jsx14(DropdownMenuPrimitive.Label, { "data-slot": "dropdown-menu-label", "data-inset": inset, className: cn("px-2 py-1.5 text-[length:var(--ds-menu-label-size)] font-medium data-[inset=true]:pl-8", className), ...props });
858
877
  }
859
878
  function DropdownMenuSeparator({ className, ...props }) {
860
- return /* @__PURE__ */ jsx13(DropdownMenuPrimitive.Separator, { "data-slot": "dropdown-menu-separator", className: cn("-mx-1 my-1 h-px bg-border", className), ...props });
879
+ return /* @__PURE__ */ jsx14(DropdownMenuPrimitive.Separator, { "data-slot": "dropdown-menu-separator", className: cn("-mx-1 my-1 h-px bg-border", className), ...props });
861
880
  }
862
881
 
863
882
  export {
@@ -880,6 +899,7 @@ export {
880
899
  SelectSeparator,
881
900
  SelectScrollUpButton,
882
901
  SelectScrollDownButton,
902
+ Input,
883
903
  Separator2 as Separator,
884
904
  Sheet,
885
905
  SheetTrigger,
@@ -934,4 +954,4 @@ export {
934
954
  DropdownMenuLabel,
935
955
  DropdownMenuSeparator
936
956
  };
937
- //# sourceMappingURL=chunk-YHPZ5CQU.js.map
957
+ //# sourceMappingURL=chunk-HLND6FZS.js.map