orbital-ds 0.1.0 → 0.2.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.
Files changed (101) hide show
  1. package/contract.json +38 -0
  2. package/dist/styles.css +98 -18
  3. package/dist/themes/qratia.css +13 -13
  4. package/dist/themes/zyro.css +189 -0
  5. package/dist/ui/accordion.d.ts +9 -0
  6. package/dist/ui/accordion.js +79 -0
  7. package/dist/ui/alert-dialog.d.ts +23 -0
  8. package/dist/ui/alert-dialog.js +173 -0
  9. package/dist/ui/alert.d.ts +13 -0
  10. package/dist/ui/alert.js +77 -0
  11. package/dist/ui/aspect-ratio.d.ts +7 -0
  12. package/dist/ui/aspect-ratio.js +22 -0
  13. package/dist/ui/attachment.d.ts +26 -0
  14. package/dist/ui/attachment.js +197 -0
  15. package/dist/ui/avatar.js +1 -1
  16. package/dist/ui/badge.d.ts +1 -1
  17. package/dist/ui/badge.js +1 -1
  18. package/dist/ui/bubble.d.ts +19 -0
  19. package/dist/ui/bubble.js +115 -0
  20. package/dist/ui/button-group.d.ts +15 -0
  21. package/dist/ui/button-group.js +82 -0
  22. package/dist/ui/button.d.ts +5 -3
  23. package/dist/ui/button.js +9 -6
  24. package/dist/ui/calendar.d.ts +15 -0
  25. package/dist/ui/calendar.js +190 -0
  26. package/dist/ui/card.js +4 -4
  27. package/dist/ui/carousel.d.ts +33 -0
  28. package/dist/ui/carousel.js +199 -0
  29. package/dist/ui/checkbox.js +1 -1
  30. package/dist/ui/combobox.d.ts +26 -0
  31. package/dist/ui/combobox.js +281 -0
  32. package/dist/ui/command.d.ts +22 -0
  33. package/dist/ui/command.js +183 -0
  34. package/dist/ui/context-menu.d.ts +31 -0
  35. package/dist/ui/context-menu.js +242 -0
  36. package/dist/ui/dialog.js +2 -2
  37. package/dist/ui/direction.d.ts +1 -0
  38. package/dist/ui/direction.js +8 -0
  39. package/dist/ui/drawer.d.ts +18 -0
  40. package/dist/ui/drawer.js +208 -0
  41. package/dist/ui/dropdown-menu.d.ts +1 -1
  42. package/dist/ui/dropdown-menu.js +13 -9
  43. package/dist/ui/empty.d.ts +15 -0
  44. package/dist/ui/empty.js +102 -0
  45. package/dist/ui/field.d.ts +28 -0
  46. package/dist/ui/field.js +217 -0
  47. package/dist/ui/hover-card.d.ts +8 -0
  48. package/dist/ui/hover-card.js +45 -0
  49. package/dist/ui/input-group.d.ts +22 -0
  50. package/dist/ui/input-group.js +145 -0
  51. package/dist/ui/input-otp.d.ts +13 -0
  52. package/dist/ui/input-otp.js +82 -0
  53. package/dist/ui/input.js +1 -1
  54. package/dist/ui/item.d.ts +26 -0
  55. package/dist/ui/item.js +195 -0
  56. package/dist/ui/kbd.d.ts +6 -0
  57. package/dist/ui/kbd.js +29 -0
  58. package/dist/ui/marker.d.ts +13 -0
  59. package/dist/ui/marker.js +71 -0
  60. package/dist/ui/menubar.d.ts +31 -0
  61. package/dist/ui/menubar.js +259 -0
  62. package/dist/ui/message-scroller.d.ts +16 -0
  63. package/dist/ui/message-scroller.js +120 -0
  64. package/dist/ui/message.d.ts +12 -0
  65. package/dist/ui/message.js +90 -0
  66. package/dist/ui/native-select.d.ts +10 -0
  67. package/dist/ui/native-select.js +63 -0
  68. package/dist/ui/navigation-menu.d.ts +15 -0
  69. package/dist/ui/navigation-menu.js +162 -0
  70. package/dist/ui/pagination.d.ts +22 -0
  71. package/dist/ui/pagination.js +128 -0
  72. package/dist/ui/popover.js +2 -2
  73. package/dist/ui/questionnaire.d.ts +24 -0
  74. package/dist/ui/questionnaire.js +331 -0
  75. package/dist/ui/radio-group.d.ts +8 -0
  76. package/dist/ui/radio-group.js +39 -0
  77. package/dist/ui/resizable.d.ts +10 -0
  78. package/dist/ui/resizable.js +46 -0
  79. package/dist/ui/scroll-area.js +1 -1
  80. package/dist/ui/select.js +5 -5
  81. package/dist/ui/sheet.js +4 -4
  82. package/dist/ui/sidebar.js +4 -4
  83. package/dist/ui/slider.d.ts +6 -0
  84. package/dist/ui/slider.js +53 -0
  85. package/dist/ui/spinner.d.ts +5 -0
  86. package/dist/ui/spinner.js +9 -0
  87. package/dist/ui/switch.d.ts +8 -0
  88. package/dist/ui/switch.js +32 -0
  89. package/dist/ui/table.js +2 -2
  90. package/dist/ui/tabs.js +1 -1
  91. package/dist/ui/textarea.js +1 -1
  92. package/dist/ui/toast.d.ts +19 -0
  93. package/dist/ui/toast.js +193 -0
  94. package/dist/ui/toggle-group.d.ts +14 -0
  95. package/dist/ui/toggle-group.js +77 -0
  96. package/dist/ui/toggle.d.ts +12 -0
  97. package/dist/ui/toggle.js +43 -0
  98. package/dist/ui/tooltip.js +3 -3
  99. package/docs/CONTRACT.md +113 -0
  100. package/package.json +50 -12
  101. package/scripts/doctor.mjs +142 -0
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import { PreviewCard } from '@base-ui/react/preview-card';
3
+
4
+ declare function HoverCard({ ...props }: PreviewCard.Root.Props): React.JSX.Element;
5
+ declare function HoverCardTrigger({ ...props }: PreviewCard.Trigger.Props): React.JSX.Element;
6
+ declare function HoverCardContent({ className, side, sideOffset, align, alignOffset, ...props }: PreviewCard.Popup.Props & Pick<PreviewCard.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">): React.JSX.Element;
7
+
8
+ export { HoverCard, HoverCardContent, HoverCardTrigger };
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { PreviewCard as PreviewCardPrimitive } from "@base-ui/react/preview-card";
4
+ import { cn } from "../lib/utils";
5
+ function HoverCard({ ...props }) {
6
+ return /* @__PURE__ */ jsx(PreviewCardPrimitive.Root, { "data-slot": "hover-card", ...props });
7
+ }
8
+ function HoverCardTrigger({ ...props }) {
9
+ return /* @__PURE__ */ jsx(PreviewCardPrimitive.Trigger, { "data-slot": "hover-card-trigger", ...props });
10
+ }
11
+ function HoverCardContent({
12
+ className,
13
+ side = "bottom",
14
+ sideOffset = 4,
15
+ align = "center",
16
+ alignOffset = 4,
17
+ ...props
18
+ }) {
19
+ return /* @__PURE__ */ jsx(PreviewCardPrimitive.Portal, { "data-slot": "hover-card-portal", children: /* @__PURE__ */ jsx(
20
+ PreviewCardPrimitive.Positioner,
21
+ {
22
+ align,
23
+ alignOffset,
24
+ side,
25
+ sideOffset,
26
+ className: "isolate z-(--ds-z-overlay)",
27
+ children: /* @__PURE__ */ jsx(
28
+ PreviewCardPrimitive.Popup,
29
+ {
30
+ "data-slot": "hover-card-content",
31
+ className: cn(
32
+ "z-(--ds-z-overlay) w-72 origin-(--transform-origin) rounded-2xl bg-popover p-4 text-sm text-popover-foreground shadow-popover ring-1 ring-foreground/5 outline-hidden duration-(--ds-motion-fast) data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
33
+ className
34
+ ),
35
+ ...props
36
+ }
37
+ )
38
+ }
39
+ ) });
40
+ }
41
+ export {
42
+ HoverCard,
43
+ HoverCardContent,
44
+ HoverCardTrigger
45
+ };
@@ -0,0 +1,22 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+ import { Button } from './button.js';
5
+ import '@base-ui/react/use-render';
6
+
7
+ declare function InputGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
8
+ declare const inputGroupAddonVariants: (props?: ({
9
+ align?: "inline-end" | "inline-start" | "block-start" | "block-end" | null | undefined;
10
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
11
+ declare function InputGroupAddon({ className, align, ...props }: React.ComponentProps<"div"> & VariantProps<typeof inputGroupAddonVariants>): React.JSX.Element;
12
+ declare const inputGroupButtonVariants: (props?: ({
13
+ size?: "xs" | "sm" | "icon-xs" | "icon-sm" | null | undefined;
14
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
15
+ declare function InputGroupButton({ className, type, variant, size, ...props }: Omit<React.ComponentProps<typeof Button>, "size" | "type"> & VariantProps<typeof inputGroupButtonVariants> & {
16
+ type?: "button" | "submit" | "reset";
17
+ }): React.JSX.Element;
18
+ declare function InputGroupText({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
19
+ declare function InputGroupInput({ className, ...props }: React.ComponentProps<"input">): React.JSX.Element;
20
+ declare function InputGroupTextarea({ className, ...props }: React.ComponentProps<"textarea">): React.JSX.Element;
21
+
22
+ export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea };
@@ -0,0 +1,145 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { cva } from "class-variance-authority";
4
+ import { cn } from "../lib/utils";
5
+ import { Button } from "./button";
6
+ import { Input } from "./input";
7
+ import { Textarea } from "./textarea";
8
+ function InputGroup({ className, ...props }) {
9
+ return /* @__PURE__ */ jsx(
10
+ "div",
11
+ {
12
+ "data-slot": "input-group",
13
+ role: "group",
14
+ className: cn(
15
+ "group/input-group relative flex h-9 w-full min-w-0 items-center rounded-control border border-input bg-input/30 transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-2xl has-data-[align=block-start]:rounded-2xl has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-(length:--ds-ring-width) has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-(length:--ds-ring-width) has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[textarea]:rounded-xl has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5",
16
+ className
17
+ ),
18
+ ...props
19
+ }
20
+ );
21
+ }
22
+ const inputGroupAddonVariants = cva(
23
+ "flex h-auto cursor-text items-center justify-center gap-2 py-2 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 **:data-[slot=kbd]:rounded-control **:data-[slot=kbd]:bg-muted-foreground/10 **:data-[slot=kbd]:px-1.5 [&>svg:not([class*='size-'])]:size-4",
24
+ {
25
+ variants: {
26
+ align: {
27
+ "inline-start": "order-first pl-3 has-[>button]:-ml-1 has-[>kbd]:ml-[-0.15rem]",
28
+ "inline-end": "order-last pr-3 has-[>button]:-mr-1 has-[>kbd]:mr-[-0.15rem]",
29
+ "block-start": "order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-3 [.border-b]:pb-3",
30
+ "block-end": "order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-3 [.border-t]:pt-3"
31
+ }
32
+ },
33
+ defaultVariants: {
34
+ align: "inline-start"
35
+ }
36
+ }
37
+ );
38
+ function InputGroupAddon({
39
+ className,
40
+ align = "inline-start",
41
+ ...props
42
+ }) {
43
+ return /* @__PURE__ */ jsx(
44
+ "div",
45
+ {
46
+ role: "group",
47
+ "data-slot": "input-group-addon",
48
+ "data-align": align,
49
+ className: cn(inputGroupAddonVariants({ align }), className),
50
+ onClick: (e) => {
51
+ if (e.target.closest("button")) {
52
+ return;
53
+ }
54
+ e.currentTarget.parentElement?.querySelector("input")?.focus();
55
+ },
56
+ ...props
57
+ }
58
+ );
59
+ }
60
+ const inputGroupButtonVariants = cva(
61
+ "flex items-center gap-2 rounded-control text-sm shadow-none",
62
+ {
63
+ variants: {
64
+ size: {
65
+ xs: "h-6 gap-1 px-1.5 [&>svg:not([class*='size-'])]:size-3.5",
66
+ sm: "",
67
+ "icon-xs": "size-6 p-0 has-[>svg]:p-0",
68
+ "icon-sm": "size-8 p-0 has-[>svg]:p-0"
69
+ }
70
+ },
71
+ defaultVariants: {
72
+ size: "xs"
73
+ }
74
+ }
75
+ );
76
+ function InputGroupButton({
77
+ className,
78
+ type = "button",
79
+ variant = "ghost",
80
+ size = "xs",
81
+ ...props
82
+ }) {
83
+ return /* @__PURE__ */ jsx(
84
+ Button,
85
+ {
86
+ type,
87
+ "data-size": size,
88
+ variant,
89
+ className: cn(inputGroupButtonVariants({ size }), className),
90
+ ...props
91
+ }
92
+ );
93
+ }
94
+ function InputGroupText({ className, ...props }) {
95
+ return /* @__PURE__ */ jsx(
96
+ "span",
97
+ {
98
+ className: cn(
99
+ "flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
100
+ className
101
+ ),
102
+ ...props
103
+ }
104
+ );
105
+ }
106
+ function InputGroupInput({
107
+ className,
108
+ ...props
109
+ }) {
110
+ return /* @__PURE__ */ jsx(
111
+ Input,
112
+ {
113
+ "data-slot": "input-group-control",
114
+ className: cn(
115
+ "flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent",
116
+ className
117
+ ),
118
+ ...props
119
+ }
120
+ );
121
+ }
122
+ function InputGroupTextarea({
123
+ className,
124
+ ...props
125
+ }) {
126
+ return /* @__PURE__ */ jsx(
127
+ Textarea,
128
+ {
129
+ "data-slot": "input-group-control",
130
+ className: cn(
131
+ "flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent",
132
+ className
133
+ ),
134
+ ...props
135
+ }
136
+ );
137
+ }
138
+ export {
139
+ InputGroup,
140
+ InputGroupAddon,
141
+ InputGroupButton,
142
+ InputGroupInput,
143
+ InputGroupText,
144
+ InputGroupTextarea
145
+ };
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+ import { OTPInput } from 'input-otp';
3
+
4
+ declare function InputOTP({ className, containerClassName, ...props }: React.ComponentProps<typeof OTPInput> & {
5
+ containerClassName?: string;
6
+ }): React.JSX.Element;
7
+ declare function InputOTPGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
8
+ declare function InputOTPSlot({ index, className, ...props }: React.ComponentProps<"div"> & {
9
+ index: number;
10
+ }): React.JSX.Element;
11
+ declare function InputOTPSeparator({ ...props }: React.ComponentProps<"div">): React.JSX.Element;
12
+
13
+ export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };
@@ -0,0 +1,82 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../lib/utils";
4
+ import { OTPInput, OTPInputContext } from "input-otp";
5
+ import { MinusIcon } from "lucide-react";
6
+ function InputOTP({
7
+ className,
8
+ containerClassName,
9
+ ...props
10
+ }) {
11
+ return /* @__PURE__ */ jsx(
12
+ OTPInput,
13
+ {
14
+ "data-slot": "input-otp",
15
+ containerClassName: cn(
16
+ "cn-input-otp flex items-center has-disabled:opacity-50",
17
+ containerClassName
18
+ ),
19
+ spellCheck: false,
20
+ className: cn("disabled:cursor-not-allowed", className),
21
+ ...props
22
+ }
23
+ );
24
+ }
25
+ function InputOTPGroup({ className, ...props }) {
26
+ return /* @__PURE__ */ jsx(
27
+ "div",
28
+ {
29
+ "data-slot": "input-otp-group",
30
+ className: cn(
31
+ "flex items-center rounded-control has-aria-invalid:border-destructive has-aria-invalid:ring-(length:--ds-ring-width) has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40",
32
+ className
33
+ ),
34
+ ...props
35
+ }
36
+ );
37
+ }
38
+ function InputOTPSlot({
39
+ index,
40
+ className,
41
+ ...props
42
+ }) {
43
+ const inputOTPContext = React.useContext(OTPInputContext);
44
+ const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
45
+ return /* @__PURE__ */ jsxs(
46
+ "div",
47
+ {
48
+ "data-slot": "input-otp-slot",
49
+ "data-active": isActive,
50
+ className: cn(
51
+ "relative flex size-9 items-center justify-center border-y border-r border-input bg-input/30 text-sm transition-all outline-none first:rounded-l-4xl first:border-l last:rounded-r-4xl aria-invalid:border-destructive data-[active=true]:z-(--ds-z-raised) data-[active=true]:border-ring data-[active=true]:ring-(length:--ds-ring-width) data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40",
52
+ className
53
+ ),
54
+ ...props,
55
+ children: [
56
+ char,
57
+ hasFakeCaret && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-(--ds-motion-blink)" }) })
58
+ ]
59
+ }
60
+ );
61
+ }
62
+ function InputOTPSeparator({ ...props }) {
63
+ return /* @__PURE__ */ jsx(
64
+ "div",
65
+ {
66
+ "data-slot": "input-otp-separator",
67
+ className: "flex items-center [&_svg:not([class*='size-'])]:size-4",
68
+ role: "separator",
69
+ ...props,
70
+ children: /* @__PURE__ */ jsx(
71
+ MinusIcon,
72
+ {}
73
+ )
74
+ }
75
+ );
76
+ }
77
+ export {
78
+ InputOTP,
79
+ InputOTPGroup,
80
+ InputOTPSeparator,
81
+ InputOTPSlot
82
+ };
package/dist/ui/input.js CHANGED
@@ -7,7 +7,7 @@ function Input({ className, type, ...props }) {
7
7
  type,
8
8
  "data-slot": "input",
9
9
  className: cn(
10
- "h-(--control-h-md) w-full min-w-0 rounded-control shadow-control border border-input bg-input/30 px-3 py-1 text-base transition-colors outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-(length:--ring-width) focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-(length:--ring-width) aria-invalid:ring-destructive/20 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
10
+ "h-(--ds-control-h-md) w-full min-w-0 rounded-control shadow-control border border-input bg-input/30 px-(--ds-field-px) py-1 text-base transition-colors outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-(length:--ds-ring-width) focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-(length:--ds-ring-width) aria-invalid:ring-destructive/20 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
11
11
  className
12
12
  ),
13
13
  ...props
@@ -0,0 +1,26 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { useRender } from '@base-ui/react/use-render';
4
+ import { VariantProps } from 'class-variance-authority';
5
+ import { Separator } from './separator.js';
6
+ import '@base-ui/react/separator';
7
+
8
+ declare function ItemGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
9
+ declare function ItemSeparator({ className, ...props }: React.ComponentProps<typeof Separator>): React.JSX.Element;
10
+ declare const itemVariants: (props?: ({
11
+ variant?: "default" | "outline" | "muted" | null | undefined;
12
+ size?: "default" | "xs" | "sm" | null | undefined;
13
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
14
+ declare function Item({ className, variant, size, render, ...props }: useRender.ComponentProps<"div"> & VariantProps<typeof itemVariants>): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
15
+ declare const itemMediaVariants: (props?: ({
16
+ variant?: "default" | "image" | "icon" | null | undefined;
17
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
18
+ declare function ItemMedia({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof itemMediaVariants>): React.JSX.Element;
19
+ declare function ItemContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
20
+ declare function ItemTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
21
+ declare function ItemDescription({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element;
22
+ declare function ItemActions({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
23
+ declare function ItemHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
24
+ declare function ItemFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
25
+
26
+ export { Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle };
@@ -0,0 +1,195 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { mergeProps } from "@base-ui/react/merge-props";
3
+ import { useRender } from "@base-ui/react/use-render";
4
+ import { cva } from "class-variance-authority";
5
+ import { cn } from "../lib/utils";
6
+ import { Separator } from "./separator";
7
+ function ItemGroup({ className, ...props }) {
8
+ return /* @__PURE__ */ jsx(
9
+ "div",
10
+ {
11
+ role: "list",
12
+ "data-slot": "item-group",
13
+ className: cn(
14
+ "group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2",
15
+ className
16
+ ),
17
+ ...props
18
+ }
19
+ );
20
+ }
21
+ function ItemSeparator({
22
+ className,
23
+ ...props
24
+ }) {
25
+ return /* @__PURE__ */ jsx(
26
+ Separator,
27
+ {
28
+ "data-slot": "item-separator",
29
+ orientation: "horizontal",
30
+ className: cn("my-2", className),
31
+ ...props
32
+ }
33
+ );
34
+ }
35
+ const itemVariants = cva(
36
+ "group/item flex w-full flex-wrap items-center rounded-2xl border text-sm transition-colors duration-(--ds-motion-fast) outline-none focus-visible:border-ring focus-visible:ring-(length:--ds-ring-width) focus-visible:ring-ring/50 [a]:transition-colors [a]:hover:bg-muted",
37
+ {
38
+ variants: {
39
+ variant: {
40
+ default: "border-transparent",
41
+ outline: "border-border",
42
+ muted: "border-transparent bg-muted/50"
43
+ },
44
+ size: {
45
+ default: "gap-3.5 px-4 py-3.5",
46
+ sm: "gap-3.5 px-3.5 py-3",
47
+ xs: "gap-2.5 px-3 py-2.5 in-data-[slot=dropdown-menu-content]:p-0"
48
+ }
49
+ },
50
+ defaultVariants: {
51
+ variant: "default",
52
+ size: "default"
53
+ }
54
+ }
55
+ );
56
+ function Item({
57
+ className,
58
+ variant = "default",
59
+ size = "default",
60
+ render,
61
+ ...props
62
+ }) {
63
+ return useRender({
64
+ defaultTagName: "div",
65
+ props: mergeProps(
66
+ {
67
+ className: cn(itemVariants({ variant, size, className }))
68
+ },
69
+ props
70
+ ),
71
+ render,
72
+ state: {
73
+ slot: "item",
74
+ variant,
75
+ size
76
+ }
77
+ });
78
+ }
79
+ const itemMediaVariants = cva(
80
+ "flex shrink-0 items-center justify-center gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start [&_svg]:pointer-events-none",
81
+ {
82
+ variants: {
83
+ variant: {
84
+ default: "bg-transparent",
85
+ icon: "[&_svg:not([class*='size-'])]:size-4",
86
+ image: "size-10 overflow-hidden rounded-lg group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 group-data-[size=xs]/item:rounded-md [&_img]:size-full [&_img]:object-cover"
87
+ }
88
+ },
89
+ defaultVariants: {
90
+ variant: "default"
91
+ }
92
+ }
93
+ );
94
+ function ItemMedia({
95
+ className,
96
+ variant = "default",
97
+ ...props
98
+ }) {
99
+ return /* @__PURE__ */ jsx(
100
+ "div",
101
+ {
102
+ "data-slot": "item-media",
103
+ "data-variant": variant,
104
+ className: cn(itemMediaVariants({ variant, className })),
105
+ ...props
106
+ }
107
+ );
108
+ }
109
+ function ItemContent({ className, ...props }) {
110
+ return /* @__PURE__ */ jsx(
111
+ "div",
112
+ {
113
+ "data-slot": "item-content",
114
+ className: cn(
115
+ "flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0.5 [&+[data-slot=item-content]]:flex-none",
116
+ className
117
+ ),
118
+ ...props
119
+ }
120
+ );
121
+ }
122
+ function ItemTitle({ className, ...props }) {
123
+ return /* @__PURE__ */ jsx(
124
+ "div",
125
+ {
126
+ "data-slot": "item-title",
127
+ className: cn(
128
+ "line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4",
129
+ className
130
+ ),
131
+ ...props
132
+ }
133
+ );
134
+ }
135
+ function ItemDescription({ className, ...props }) {
136
+ return /* @__PURE__ */ jsx(
137
+ "p",
138
+ {
139
+ "data-slot": "item-description",
140
+ className: cn(
141
+ "line-clamp-2 text-left text-sm font-normal text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
142
+ className
143
+ ),
144
+ ...props
145
+ }
146
+ );
147
+ }
148
+ function ItemActions({ className, ...props }) {
149
+ return /* @__PURE__ */ jsx(
150
+ "div",
151
+ {
152
+ "data-slot": "item-actions",
153
+ className: cn("flex items-center gap-2", className),
154
+ ...props
155
+ }
156
+ );
157
+ }
158
+ function ItemHeader({ className, ...props }) {
159
+ return /* @__PURE__ */ jsx(
160
+ "div",
161
+ {
162
+ "data-slot": "item-header",
163
+ className: cn(
164
+ "flex basis-full items-center justify-between gap-2",
165
+ className
166
+ ),
167
+ ...props
168
+ }
169
+ );
170
+ }
171
+ function ItemFooter({ className, ...props }) {
172
+ return /* @__PURE__ */ jsx(
173
+ "div",
174
+ {
175
+ "data-slot": "item-footer",
176
+ className: cn(
177
+ "flex basis-full items-center justify-between gap-2",
178
+ className
179
+ ),
180
+ ...props
181
+ }
182
+ );
183
+ }
184
+ export {
185
+ Item,
186
+ ItemActions,
187
+ ItemContent,
188
+ ItemDescription,
189
+ ItemFooter,
190
+ ItemGroup,
191
+ ItemHeader,
192
+ ItemMedia,
193
+ ItemSeparator,
194
+ ItemTitle
195
+ };
@@ -0,0 +1,6 @@
1
+ import * as React$1 from 'react';
2
+
3
+ declare function Kbd({ className, ...props }: React.ComponentProps<"kbd">): React$1.JSX.Element;
4
+ declare function KbdGroup({ className, ...props }: React.ComponentProps<"div">): React$1.JSX.Element;
5
+
6
+ export { Kbd, KbdGroup };
package/dist/ui/kbd.js ADDED
@@ -0,0 +1,29 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils";
3
+ function Kbd({ className, ...props }) {
4
+ return /* @__PURE__ */ jsx(
5
+ "kbd",
6
+ {
7
+ "data-slot": "kbd",
8
+ className: cn(
9
+ "pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 [&_svg:not([class*='size-'])]:size-3",
10
+ className
11
+ ),
12
+ ...props
13
+ }
14
+ );
15
+ }
16
+ function KbdGroup({ className, ...props }) {
17
+ return /* @__PURE__ */ jsx(
18
+ "kbd",
19
+ {
20
+ "data-slot": "kbd-group",
21
+ className: cn("inline-flex items-center gap-1", className),
22
+ ...props
23
+ }
24
+ );
25
+ }
26
+ export {
27
+ Kbd,
28
+ KbdGroup
29
+ };
@@ -0,0 +1,13 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { useRender } from '@base-ui/react/use-render';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ declare const markerVariants: (props?: ({
7
+ variant?: "default" | "separator" | "border" | null | undefined;
8
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ declare function Marker({ className, variant, render, ...props }: useRender.ComponentProps<"div"> & VariantProps<typeof markerVariants>): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
10
+ declare function MarkerIcon({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
11
+ declare function MarkerContent({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
12
+
13
+ export { Marker, MarkerContent, MarkerIcon, markerVariants };
@@ -0,0 +1,71 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { mergeProps } from "@base-ui/react/merge-props";
3
+ import { useRender } from "@base-ui/react/use-render";
4
+ import { cva } from "class-variance-authority";
5
+ import { cn } from "../lib/utils";
6
+ const markerVariants = cva(
7
+ "group/marker relative flex min-h-4 w-full items-center gap-2 text-left text-sm text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [a]:underline [a]:underline-offset-3 [a]:hover:text-foreground",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ default: "",
12
+ separator: "before:mr-1 before:h-px before:min-w-0 before:flex-1 before:bg-border after:ml-1 after:h-px after:min-w-0 after:flex-1 after:bg-border",
13
+ border: "border-b border-border pb-2"
14
+ }
15
+ }
16
+ }
17
+ );
18
+ function Marker({
19
+ className,
20
+ variant = "default",
21
+ render,
22
+ ...props
23
+ }) {
24
+ return useRender({
25
+ defaultTagName: "div",
26
+ props: mergeProps(
27
+ {
28
+ className: cn(markerVariants({ variant, className }))
29
+ },
30
+ props
31
+ ),
32
+ render,
33
+ state: {
34
+ slot: "marker",
35
+ variant
36
+ }
37
+ });
38
+ }
39
+ function MarkerIcon({ className, ...props }) {
40
+ return /* @__PURE__ */ jsx(
41
+ "span",
42
+ {
43
+ "data-slot": "marker-icon",
44
+ "aria-hidden": "true",
45
+ className: cn(
46
+ "size-4 shrink-0 [&_svg:not([class*='size-'])]:size-4",
47
+ className
48
+ ),
49
+ ...props
50
+ }
51
+ );
52
+ }
53
+ function MarkerContent({ className, ...props }) {
54
+ return /* @__PURE__ */ jsx(
55
+ "span",
56
+ {
57
+ "data-slot": "marker-content",
58
+ className: cn(
59
+ "min-w-0 wrap-break-word group-data-[variant=separator]/marker:flex-none group-data-[variant=separator]/marker:text-center *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
60
+ className
61
+ ),
62
+ ...props
63
+ }
64
+ );
65
+ }
66
+ export {
67
+ Marker,
68
+ MarkerContent,
69
+ MarkerIcon,
70
+ markerVariants
71
+ };