@lessly/ui 0.3.2 → 0.4.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.
package/dist/index.d.ts CHANGED
@@ -848,4 +848,68 @@ declare function AppShell({ sidebar, topBar, children, className }: AppShellProp
848
848
  /** Alias of AppShell — reads better in app router files. */
849
849
  declare const AuthenticatedLayout: typeof AppShell;
850
850
 
851
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppShell, type AppShellProps, AppSidebar, type AppSidebarProps, AspectRatio, AuthenticatedLayout, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, Calendar, type CalendarProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, type CarouselContextProps, CarouselItem, CarouselNext, type CarouselOptions, type CarouselPlugin, CarouselPrevious, type CarouselProps, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ConfirmDialog, type ConfirmDialogProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, type CopyButtonProps, DatePicker, type DatePickerProps, type DeltaDirection, type DeltaTone, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DocsLink, type DocsLinkProps, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, ExtensionIcon, type ExtensionIconProps, ExtensionLink, type ExtensionLinkProps, type ExtensionLinkUiMode, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, InlineError, type InlineErrorProps, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputProps, Label, MenuDivider, MenuPopup, type MenuPopupProps, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, type NavItem, type NavLinkComponent, NavRow, type NavRowProps, type NavRowVariant, NavSectionLabel, type NavSectionLabelProps, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, type PaginationLinkProps, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, type ResolvedTheme, ScrollArea, ScrollBar, SectionIntro, type SectionIntroProps, Select, type SelectOption, type SelectProps, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, SidebarNav, SidebarNavLink, type SidebarNavLinkProps, type SidebarNavProps, Skeleton, Slider, StatCard, type StatCardProps, StatusDot, type StatusDotProps, Switch, type SwitchProps, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, type Theme, ThemeToggle, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type UseSidebarOptions, type UseSidebarResult, UserMenu, type UserMenuItem, type UserMenuProps, type UserMenuUser, alertVariants, badgeVariants, buttonVariants, cn, isKnownExtensionIcon, navigationMenuTriggerStyle, statusDotVariants, toggleVariants, useCarousel, useFormField, useIsMobile, useSidebar, useTheme };
851
+ declare const segmentChipVariants: (props?: ({
852
+ kind?: "granted" | "own" | "pending" | "available" | null | undefined;
853
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
854
+ interface SegmentChipProps extends Omit<React$1.HTMLAttributes<HTMLSpanElement>, 'children' | 'resource'>, VariantProps<typeof segmentChipVariants> {
855
+ /** The resource this segment points at, e.g. "a GitHub repo", "Ads account 123-456". */
856
+ resource: React$1.ReactNode;
857
+ /** Override the leading icon; defaults to a glyph derived from `kind`. */
858
+ icon?: LucideIcon;
859
+ /** Hide the leading icon entirely. */
860
+ hideIcon?: boolean;
861
+ }
862
+ declare const SegmentChip: React$1.ForwardRefExoticComponent<SegmentChipProps & React$1.RefAttributes<HTMLSpanElement>>;
863
+
864
+ type ConnectionScope = 'org' | 'org/product' | 'product';
865
+ type ConnectionAuth = 'app' | 'oauth' | 'token';
866
+ type ConnectionStatus = 'connected' | 'error' | 'disconnected';
867
+ interface ConnectionCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'children'> {
868
+ /** Display name, e.g. "GitHub — apliteni". */
869
+ name: string;
870
+ scope: ConnectionScope;
871
+ auth: ConnectionAuth;
872
+ status: ConnectionStatus;
873
+ /** Provider mark; falls back to a monogram box derived from `name`. */
874
+ glyph?: React$1.ReactNode;
875
+ /** Override the default status label (e.g. "Token expired" for `error`). */
876
+ statusLabel?: string;
877
+ /** How many products hold a segment of this connection. */
878
+ grantedCount?: number;
879
+ /** Footer action — typically a <Button> ("Manage", "Reconnect", "Connect"). */
880
+ action?: React$1.ReactNode;
881
+ /**
882
+ * Blast-radius disclosure. Some providers (GitHub, ClickUp) grant all-or-nothing
883
+ * access to the whole external org — there is no per-repo/per-space permission, so
884
+ * a product's segment is enforced by Lessly's gateway, not the provider. When set,
885
+ * a warning notice is shown, e.g. "Full org access — all repositories."
886
+ */
887
+ access?: React$1.ReactNode;
888
+ }
889
+ declare const ConnectionCard: React$1.ForwardRefExoticComponent<ConnectionCardProps & React$1.RefAttributes<HTMLDivElement>>;
890
+
891
+ type RequestSurface = 'org' | 'product';
892
+ type RequestState = 'available' | 'pending' | 'granted';
893
+ interface RequestRowProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'children'> {
894
+ surface: RequestSurface;
895
+ /** Provider display name, e.g. "Google Ads". */
896
+ name: string;
897
+ state: RequestState;
898
+ /** Provider mark; falls back to a monogram box derived from `name`. */
899
+ glyph?: React$1.ReactNode;
900
+ /** Secondary line — requester + resource (org), or availability (product). */
901
+ subtitle?: React$1.ReactNode;
902
+ /** The granted resource label; renders a <SegmentChip> when `state` is `granted`. */
903
+ grantedResource?: React$1.ReactNode;
904
+ /** Approve an org-side request. */
905
+ onApprove?: () => void;
906
+ /** Deny an org-side request. */
907
+ onDeny?: () => void;
908
+ /** Request an available connection from the product side. */
909
+ onRequest?: () => void;
910
+ /** Override the trailing controls entirely. */
911
+ action?: React$1.ReactNode;
912
+ }
913
+ declare const RequestRow: React$1.ForwardRefExoticComponent<RequestRowProps & React$1.RefAttributes<HTMLDivElement>>;
914
+
915
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppShell, type AppShellProps, AppSidebar, type AppSidebarProps, AspectRatio, AuthenticatedLayout, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, Calendar, type CalendarProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, type CarouselContextProps, CarouselItem, CarouselNext, type CarouselOptions, type CarouselPlugin, CarouselPrevious, type CarouselProps, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ConfirmDialog, type ConfirmDialogProps, type ConnectionAuth, ConnectionCard, type ConnectionCardProps, type ConnectionScope, type ConnectionStatus, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, type CopyButtonProps, DatePicker, type DatePickerProps, type DeltaDirection, type DeltaTone, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DocsLink, type DocsLinkProps, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, ExtensionIcon, type ExtensionIconProps, ExtensionLink, type ExtensionLinkProps, type ExtensionLinkUiMode, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, InlineError, type InlineErrorProps, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputProps, Label, MenuDivider, MenuPopup, type MenuPopupProps, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, type NavItem, type NavLinkComponent, NavRow, type NavRowProps, type NavRowVariant, NavSectionLabel, type NavSectionLabelProps, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, type PaginationLinkProps, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, RequestRow, type RequestRowProps, type RequestState, type RequestSurface, type ResolvedTheme, ScrollArea, ScrollBar, SectionIntro, type SectionIntroProps, SegmentChip, type SegmentChipProps, Select, type SelectOption, type SelectProps, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, SidebarNav, SidebarNavLink, type SidebarNavLinkProps, type SidebarNavProps, Skeleton, Slider, StatCard, type StatCardProps, StatusDot, type StatusDotProps, Switch, type SwitchProps, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, type Theme, ThemeToggle, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type UseSidebarOptions, type UseSidebarResult, UserMenu, type UserMenuItem, type UserMenuProps, type UserMenuUser, alertVariants, badgeVariants, buttonVariants, cn, isKnownExtensionIcon, navigationMenuTriggerStyle, segmentChipVariants, statusDotVariants, toggleVariants, useCarousel, useFormField, useIsMobile, useSidebar, useTheme };
package/dist/index.js CHANGED
@@ -3068,6 +3068,162 @@ function AppShell({ sidebar, topBar, children, className }) {
3068
3068
  ] }) });
3069
3069
  }
3070
3070
  var AuthenticatedLayout = AppShell;
3071
+
3072
+ // src/components/segment-chip.tsx
3073
+ import * as React51 from "react";
3074
+ import { cva as cva9 } from "class-variance-authority";
3075
+ import { Link2 as Link22, KeyRound, Clock, Plus } from "lucide-react";
3076
+ import { jsx as jsx61, jsxs as jsxs31 } from "react/jsx-runtime";
3077
+ var segmentChipVariants = cva9(
3078
+ "inline-flex items-center gap-1.5 rounded-lg border px-2.5 py-1 text-sm font-medium leading-tight",
3079
+ {
3080
+ variants: {
3081
+ kind: {
3082
+ granted: "border-dashed border-teal-800 bg-bg-teal-subtle text-teal-300",
3083
+ own: "border-border-warning bg-bg-warning-subtle text-text-warning",
3084
+ pending: "border-dashed border-border-default bg-bg-secondary text-text-tertiary",
3085
+ available: "border-border-subtle bg-transparent text-text-secondary"
3086
+ }
3087
+ },
3088
+ defaultVariants: { kind: "granted" }
3089
+ }
3090
+ );
3091
+ var kindIcons = {
3092
+ granted: Link22,
3093
+ own: KeyRound,
3094
+ pending: Clock,
3095
+ available: Plus
3096
+ };
3097
+ var SegmentChip = React51.forwardRef(
3098
+ ({ kind, resource, icon, hideIcon = false, className, ...props }, ref) => {
3099
+ const Icon = icon ?? kindIcons[kind ?? "granted"];
3100
+ return /* @__PURE__ */ jsxs31("span", { ref, className: cn(segmentChipVariants({ kind }), className), ...props, children: [
3101
+ !hideIcon && /* @__PURE__ */ jsx61(Icon, { className: "size-3.5 shrink-0 opacity-90", "aria-hidden": "true" }),
3102
+ resource
3103
+ ] });
3104
+ }
3105
+ );
3106
+ SegmentChip.displayName = "SegmentChip";
3107
+
3108
+ // src/components/connection-card.tsx
3109
+ import * as React52 from "react";
3110
+ import { AlertTriangle } from "lucide-react";
3111
+ import { Fragment as Fragment3, jsx as jsx62, jsxs as jsxs32 } from "react/jsx-runtime";
3112
+ var authLabels = { app: "App", oauth: "OAuth", token: "token" };
3113
+ var statusMeta = {
3114
+ connected: { label: "Connected", badge: "success", dot: "success" },
3115
+ error: { label: "Needs attention", badge: "destructive", dot: "danger" },
3116
+ disconnected: { label: "Not connected", badge: "secondary", dot: "neutral" }
3117
+ };
3118
+ function monogram(name) {
3119
+ return name.replace(/[^a-zA-Z0-9 ]/g, " ").split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0].toUpperCase()).join("");
3120
+ }
3121
+ var ConnectionCard = React52.forwardRef(
3122
+ ({ name, scope, auth, status, glyph, statusLabel, grantedCount, action, access, className, ...props }, ref) => {
3123
+ const meta = statusMeta[status];
3124
+ const connected = status !== "disconnected";
3125
+ return /* @__PURE__ */ jsxs32(Card, { ref, className: cn(status === "disconnected" && "border-dashed border-border-default", className), ...props, children: [
3126
+ /* @__PURE__ */ jsxs32("div", { className: "flex items-center gap-3 p-4", children: [
3127
+ /* @__PURE__ */ jsx62(
3128
+ "div",
3129
+ {
3130
+ "aria-hidden": "true",
3131
+ className: "flex size-8 shrink-0 items-center justify-center rounded-lg border border-border-subtle bg-bg-elevated text-sm font-bold text-text-secondary",
3132
+ children: glyph ?? monogram(name)
3133
+ }
3134
+ ),
3135
+ /* @__PURE__ */ jsxs32("div", { className: "min-w-0", children: [
3136
+ /* @__PURE__ */ jsx62("p", { className: "truncate text-sm font-semibold text-text-primary", children: name }),
3137
+ /* @__PURE__ */ jsxs32("div", { className: "mt-0.5 flex flex-wrap gap-1", children: [
3138
+ /* @__PURE__ */ jsx62(Badge, { variant: "secondary", children: scope }),
3139
+ /* @__PURE__ */ jsx62(Badge, { variant: "secondary", children: authLabels[auth] })
3140
+ ] })
3141
+ ] }),
3142
+ /* @__PURE__ */ jsx62("div", { className: "ml-auto shrink-0", children: connected ? /* @__PURE__ */ jsxs32(Badge, { variant: meta.badge, className: "gap-1.5", children: [
3143
+ /* @__PURE__ */ jsx62(StatusDot, { status: meta.dot, size: "sm" }),
3144
+ statusLabel ?? meta.label
3145
+ ] }) : action })
3146
+ ] }),
3147
+ access && /* @__PURE__ */ jsxs32(
3148
+ "div",
3149
+ {
3150
+ role: "note",
3151
+ className: "flex items-start gap-2 border-t border-border-subtle bg-bg-warning-subtle px-4 py-2.5 text-xs font-medium text-text-warning",
3152
+ children: [
3153
+ /* @__PURE__ */ jsx62(AlertTriangle, { className: "mt-0.5 size-3.5 shrink-0", "aria-hidden": "true" }),
3154
+ /* @__PURE__ */ jsx62("span", { children: access })
3155
+ ]
3156
+ }
3157
+ ),
3158
+ (grantedCount !== void 0 || connected && action) && /* @__PURE__ */ jsxs32("div", { className: "flex items-center justify-between border-t border-border-subtle px-4 py-3", children: [
3159
+ /* @__PURE__ */ jsx62("span", { className: "text-sm text-text-secondary", children: grantedCount !== void 0 ? /* @__PURE__ */ jsxs32(Fragment3, { children: [
3160
+ "Granted to ",
3161
+ /* @__PURE__ */ jsx62("span", { className: "font-semibold text-text-primary", children: grantedCount }),
3162
+ " ",
3163
+ grantedCount === 1 ? "product" : "products"
3164
+ ] }) : /* @__PURE__ */ jsx62("span", { className: "text-text-tertiary", children: "Not granted to any product yet" }) }),
3165
+ connected && action
3166
+ ] })
3167
+ ] });
3168
+ }
3169
+ );
3170
+ ConnectionCard.displayName = "ConnectionCard";
3171
+
3172
+ // src/components/request-row.tsx
3173
+ import * as React53 from "react";
3174
+ import { Fragment as Fragment4, jsx as jsx63, jsxs as jsxs33 } from "react/jsx-runtime";
3175
+ function monogram2(name) {
3176
+ return name.replace(/[^a-zA-Z0-9 ]/g, " ").split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0].toUpperCase()).join("");
3177
+ }
3178
+ var RequestRow = React53.forwardRef(
3179
+ ({ surface, name, state: state2, glyph, subtitle, grantedResource, onApprove, onDeny, onRequest, action, className, ...props }, ref) => {
3180
+ let controls = action;
3181
+ if (controls === void 0) {
3182
+ if (surface === "org" && state2 === "pending") {
3183
+ controls = /* @__PURE__ */ jsxs33(Fragment4, { children: [
3184
+ /* @__PURE__ */ jsx63(Button, { variant: "outline", size: "sm", onClick: onDeny, children: "Deny" }),
3185
+ /* @__PURE__ */ jsx63(Button, { size: "sm", onClick: onApprove, children: "Approve" })
3186
+ ] });
3187
+ } else if (state2 === "available") {
3188
+ controls = /* @__PURE__ */ jsx63(Button, { size: "sm", onClick: onRequest, children: "Request" });
3189
+ } else if (state2 === "pending") {
3190
+ controls = /* @__PURE__ */ jsxs33(Badge, { variant: "secondary", className: "gap-1.5", children: [
3191
+ /* @__PURE__ */ jsx63(StatusDot, { status: "neutral", size: "sm" }),
3192
+ "Pending"
3193
+ ] });
3194
+ } else if (state2 === "granted") {
3195
+ controls = /* @__PURE__ */ jsx63(SegmentChip, { kind: "granted", resource: grantedResource ?? "a segment" });
3196
+ }
3197
+ }
3198
+ return /* @__PURE__ */ jsxs33(
3199
+ "div",
3200
+ {
3201
+ ref,
3202
+ className: cn(
3203
+ "flex items-center gap-3 border-b border-border-subtle px-4 py-3 last:border-b-0",
3204
+ className
3205
+ ),
3206
+ ...props,
3207
+ children: [
3208
+ /* @__PURE__ */ jsx63(
3209
+ "div",
3210
+ {
3211
+ "aria-hidden": "true",
3212
+ className: "flex size-8 shrink-0 items-center justify-center rounded-lg border border-border-subtle bg-bg-elevated text-sm font-bold text-text-secondary",
3213
+ children: glyph ?? monogram2(name)
3214
+ }
3215
+ ),
3216
+ /* @__PURE__ */ jsxs33("div", { className: "min-w-0", children: [
3217
+ /* @__PURE__ */ jsx63("p", { className: "truncate text-sm font-semibold text-text-primary", children: name }),
3218
+ subtitle && /* @__PURE__ */ jsx63("p", { className: "truncate text-xs text-text-tertiary", children: subtitle })
3219
+ ] }),
3220
+ /* @__PURE__ */ jsx63("div", { className: "ml-auto flex shrink-0 items-center gap-2", children: controls })
3221
+ ]
3222
+ }
3223
+ );
3224
+ }
3225
+ );
3226
+ RequestRow.displayName = "RequestRow";
3071
3227
  export {
3072
3228
  Accordion,
3073
3229
  AccordionContent,
@@ -3129,6 +3285,7 @@ export {
3129
3285
  CommandSeparator,
3130
3286
  CommandShortcut,
3131
3287
  ConfirmDialog,
3288
+ ConnectionCard,
3132
3289
  ContextMenu,
3133
3290
  ContextMenuCheckboxItem,
3134
3291
  ContextMenuContent,
@@ -3244,9 +3401,11 @@ export {
3244
3401
  Progress,
3245
3402
  RadioGroup2 as RadioGroup,
3246
3403
  RadioGroupItem,
3404
+ RequestRow,
3247
3405
  ScrollArea,
3248
3406
  ScrollBar,
3249
3407
  SectionIntro,
3408
+ SegmentChip,
3250
3409
  Select,
3251
3410
  Separator4 as Separator,
3252
3411
  Sheet,
@@ -3295,6 +3454,7 @@ export {
3295
3454
  cn,
3296
3455
  isKnownExtensionIcon,
3297
3456
  navigationMenuTriggerStyle,
3457
+ segmentChipVariants,
3298
3458
  statusDotVariants,
3299
3459
  toast,
3300
3460
  toggleVariants,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lessly/ui",
3
- "version": "0.3.2",
3
+ "version": "0.4.0",
4
4
  "description": "Lessly design system — shared UI primitives, tokens, and theme",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@10.30.3",