sangam-ui 0.1.11 → 1.0.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 (3) hide show
  1. package/dist/index.d.ts +274 -4
  2. package/dist/index.js +1192 -183
  3. package/package.json +11 -10
package/dist/index.d.ts CHANGED
@@ -9,6 +9,9 @@ import * as SelectPrimitive from '@radix-ui/react-select';
9
9
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
10
10
  import * as TabsPrimitive from '@radix-ui/react-tabs';
11
11
  import * as react_jsx_runtime from 'react/jsx-runtime';
12
+ import * as _radix_ui_react_context from '@radix-ui/react-context';
13
+ import * as MenubarPrimitive from '@radix-ui/react-menubar';
14
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
12
15
 
13
16
  /**
14
17
  * Sangam Button Component
@@ -473,6 +476,10 @@ interface DropdownProps extends Omit<React.ComponentPropsWithoutRef<typeof Selec
473
476
  * @default 100%
474
477
  */
475
478
  width?: number;
479
+ /**
480
+ * Minimum trigger width in pixels (e.g. compact toolbars). Defaults to the standard dropdown trigger width.
481
+ */
482
+ triggerMinWidth?: number;
476
483
  /**
477
484
  * Error state (red border, red-800)
478
485
  */
@@ -968,6 +975,176 @@ interface AvatarProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "child
968
975
  }
969
976
  declare const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLSpanElement>>;
970
977
 
978
+ /**
979
+ * Sangam Menu (Menubar) Primitive
980
+ *
981
+ * Token-based styling (no hardcoded hex colors).
982
+ * Compose this primitive to build menus with optional nested submenus.
983
+ */
984
+ declare const Menu: React.ForwardRefExoticComponent<MenubarPrimitive.MenubarProps & React.RefAttributes<HTMLDivElement>>;
985
+ declare const MenuMenu: {
986
+ (props: MenubarPrimitive.MenubarMenuProps & {
987
+ __scopeMenubar?: _radix_ui_react_context.Scope;
988
+ }): react_jsx_runtime.JSX.Element;
989
+ displayName: string;
990
+ };
991
+ declare const MenuTrigger: React.ForwardRefExoticComponent<Omit<MenubarPrimitive.MenubarTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
992
+ declare const MenuContent: React.ForwardRefExoticComponent<Omit<MenubarPrimitive.MenubarContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
993
+ declare const MenuItem: React.ForwardRefExoticComponent<Omit<MenubarPrimitive.MenubarItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
994
+ declare const MenuSeparator: React.ForwardRefExoticComponent<Omit<MenubarPrimitive.MenubarSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
995
+ declare const MenuSub: React.FC<MenubarPrimitive.MenubarSubProps>;
996
+ declare const MenuSubTrigger: React.ForwardRefExoticComponent<Omit<MenubarPrimitive.MenubarSubTriggerProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
997
+ declare const MenuSubContent: React.ForwardRefExoticComponent<Omit<MenubarPrimitive.MenubarSubContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
998
+
999
+ type DrawerDirection = "right";
1000
+ interface DrawerProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root> {
1001
+ /**
1002
+ * Drawer direction. Current Sangam spec: right-aligned drawers.
1003
+ * @default "right"
1004
+ */
1005
+ direction?: DrawerDirection;
1006
+ }
1007
+ declare function Drawer({ direction, children, ...props }: DrawerProps): react_jsx_runtime.JSX.Element;
1008
+ declare const DrawerTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
1009
+ interface DrawerCloseProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Close> {
1010
+ /**
1011
+ * When true, focuses the close icon when opened.
1012
+ * @default true (matches keyboard interaction guidance)
1013
+ */
1014
+ autoFocusClose?: boolean;
1015
+ }
1016
+ declare const DrawerClose: React.ForwardRefExoticComponent<DrawerCloseProps & React.RefAttributes<HTMLButtonElement>>;
1017
+ declare function DrawerSurface({ children, className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
1018
+ /** Header region: column with `gap-2xs` between the title row and optional description. */
1019
+ declare const DrawerHeader: ({ children, className, ...props }: React.HTMLAttributes<HTMLDivElement>) => react_jsx_runtime.JSX.Element;
1020
+ /** One row for title + close (`items-center` so the icon lines up with the title). */
1021
+ declare const DrawerHeaderTop: ({ children, className, ...props }: React.HTMLAttributes<HTMLDivElement>) => react_jsx_runtime.JSX.Element;
1022
+ declare const DrawerTitle: ({ children, className, ...props }: React.HTMLAttributes<HTMLHeadingElement>) => react_jsx_runtime.JSX.Element;
1023
+ declare const DrawerDescription: ({ children, className, ...props }: React.HTMLAttributes<HTMLParagraphElement>) => react_jsx_runtime.JSX.Element;
1024
+ declare const DrawerFooter: ({ children, className, ...props }: React.HTMLAttributes<HTMLDivElement>) => react_jsx_runtime.JSX.Element;
1025
+ interface DrawerContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {
1026
+ /**
1027
+ * Controls whether the dimmed backdrop is rendered.
1028
+ * @default true
1029
+ */
1030
+ showOverlay?: boolean;
1031
+ }
1032
+ declare const DrawerContent: React.ForwardRefExoticComponent<DrawerContentProps & React.RefAttributes<HTMLDivElement>>;
1033
+
1034
+ /**
1035
+ * Sangam Table Primitive
1036
+ *
1037
+ * Built on top of shadcn table markup and tokenized Sangam classes.
1038
+ * Use this primitive for tabular layouts; compose rich cell content
1039
+ * (links, badges, avatars, actions) in consuming components/stories.
1040
+ */
1041
+ declare const Table: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableElement> & React.RefAttributes<HTMLTableElement>>;
1042
+ declare const TableHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableSectionElement> & React.RefAttributes<HTMLTableSectionElement>>;
1043
+ declare const TableBody: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableSectionElement> & React.RefAttributes<HTMLTableSectionElement>>;
1044
+ declare const TableFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableSectionElement> & React.RefAttributes<HTMLTableSectionElement>>;
1045
+ declare const TableRow: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableRowElement> & React.RefAttributes<HTMLTableRowElement>>;
1046
+ declare const TableHead: React.ForwardRefExoticComponent<React.ThHTMLAttributes<HTMLTableCellElement> & React.RefAttributes<HTMLTableCellElement>>;
1047
+ declare const TableCell: React.ForwardRefExoticComponent<React.TdHTMLAttributes<HTMLTableCellElement> & React.RefAttributes<HTMLTableCellElement>>;
1048
+ declare const TableCaption: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableCaptionElement> & React.RefAttributes<HTMLTableCaptionElement>>;
1049
+
1050
+ interface PopupContentProps {
1051
+ title: string;
1052
+ subtext?: string;
1053
+ children: React.ReactNode;
1054
+ /**
1055
+ * When true, renders the body inside the subtle blue "content box".
1056
+ * Use this for Design guidelines screenshots.
1057
+ * @default false
1058
+ */
1059
+ showBodyBox?: boolean;
1060
+ cancelText?: string;
1061
+ ctaText?: string;
1062
+ onCancelClick?: () => void;
1063
+ onCtaClick?: () => void;
1064
+ showClose?: boolean;
1065
+ onClose?: () => void;
1066
+ autoFocusClose?: boolean;
1067
+ /**
1068
+ * Used to wire up `aria-labelledby` from the Dialog wrapper.
1069
+ * When used outside of Radix, you can omit these.
1070
+ */
1071
+ titleId?: string;
1072
+ descriptionId?: string;
1073
+ className?: string;
1074
+ }
1075
+ /**
1076
+ * Inline "surface" for the popup.
1077
+ * - Does NOT include overlay/backdrop or fixed centering.
1078
+ * - Useful for Storybook design guideline cards where we don't want a full-screen overlay.
1079
+ */
1080
+ declare function PopupContent({ title, subtext, children, showBodyBox, cancelText, ctaText, onCancelClick, onCtaClick, showClose, onClose, autoFocusClose, titleId, descriptionId, className, }: PopupContentProps): react_jsx_runtime.JSX.Element;
1081
+ interface PopupProps {
1082
+ open: boolean;
1083
+ onOpenChange: (open: boolean) => void;
1084
+ title: string;
1085
+ subtext?: string;
1086
+ children: React.ReactNode;
1087
+ /**
1088
+ * When true, renders the body inside the subtle blue "content box".
1089
+ * @default false
1090
+ */
1091
+ showBodyBox?: boolean;
1092
+ cancelText?: string;
1093
+ ctaText?: string;
1094
+ onCancelClick?: () => void;
1095
+ onCtaClick?: () => void;
1096
+ showClose?: boolean;
1097
+ showOverlay?: boolean;
1098
+ /**
1099
+ * If true, focuses the close icon when opened (helps with keyboard guidance).
1100
+ * @default true
1101
+ */
1102
+ autoFocusClose?: boolean;
1103
+ /**
1104
+ * Styling overrides for the fixed dialog content wrapper.
1105
+ * Note: the popup surface styling is applied inside `PopupContent`.
1106
+ */
1107
+ contentClassName?: string;
1108
+ surfaceClassName?: string;
1109
+ }
1110
+ /**
1111
+ * Popup dialog:
1112
+ * - Centers in the viewport
1113
+ * - Uses Radix Dialog for focus trap + ESC/overlay dismiss
1114
+ * - Matches Sangam modal geometry (min-width 520px, 16px padding, 16px gaps, 12px between actions)
1115
+ */
1116
+ declare function Popup({ open, onOpenChange, title, subtext, children, showBodyBox, cancelText, ctaText, onCancelClick, onCtaClick, showClose, showOverlay, autoFocusClose, contentClassName, surfaceClassName, }: PopupProps): react_jsx_runtime.JSX.Element;
1117
+ interface PopupTriggerProps {
1118
+ title: string;
1119
+ subtext?: string;
1120
+ cancelText?: string;
1121
+ ctaText?: string;
1122
+ showClose?: boolean;
1123
+ showOverlay?: boolean;
1124
+ autoFocusClose?: boolean;
1125
+ showBodyBox?: boolean;
1126
+ /**
1127
+ * Label for the trigger button. Default matches your spec: "Click me".
1128
+ */
1129
+ triggerLabel?: string;
1130
+ /**
1131
+ * Trigger action callbacks. Both close the popup by default.
1132
+ */
1133
+ onCancelClick?: () => void;
1134
+ onCtaClick?: () => void;
1135
+ /**
1136
+ * Popup body content.
1137
+ */
1138
+ children: React.ReactNode;
1139
+ }
1140
+ /**
1141
+ * Convenience wrapper that provides:
1142
+ * - A trigger button (defaults to "Click me")
1143
+ * - A centered Popup that opens on click
1144
+ * - Developer-friendly API for Storybook docs
1145
+ */
1146
+ declare function PopupTrigger({ title, subtext, cancelText, ctaText, showClose, showOverlay, autoFocusClose, triggerLabel, showBodyBox, onCancelClick, onCtaClick, children, }: PopupTriggerProps): react_jsx_runtime.JSX.Element;
1147
+
971
1148
  /**
972
1149
  * Sangam Badge Component
973
1150
  *
@@ -1034,6 +1211,45 @@ interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement>, VariantProps
1034
1211
  */
1035
1212
  declare const Badge: React.ForwardRefExoticComponent<BadgeProps & React.RefAttributes<HTMLSpanElement>>;
1036
1213
 
1214
+ /**
1215
+ * Sangam Card Component
1216
+ *
1217
+ * A clickable information card used in lists and selection flows.
1218
+ * - Width/height are dynamic (content-driven)
1219
+ * - Default: 1px border (neutral-200), no shadow
1220
+ * - Hover/Selected: border removed, subtle elevation shadow
1221
+ *
1222
+ * Figma typography:
1223
+ * - Title: 14px / 500 / 24px, black via palette `neutral.1100`
1224
+ * - Subtext: 14px / 400 / 24px, Text–Neutral–Tertiary (#7C7C7C)
1225
+ * - Spacing: `mb-md` (12px) badge → title block; `mt-lg` (16px) title block → body
1226
+ * - Right icon slot: `iconSize.xs` (16px)
1227
+ */
1228
+ declare const cardVariants: (props?: ({
1229
+ selected?: boolean | null | undefined;
1230
+ interactive?: boolean | null | undefined;
1231
+ } & class_variance_authority_dist_types.ClassProp) | undefined) => string;
1232
+ interface CardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title">, VariantProps<typeof cardVariants> {
1233
+ /**
1234
+ * Renders the card as a child component (Radix Slot pattern).
1235
+ * Use when you want the Card to render as a link, button, etc.
1236
+ */
1237
+ asChild?: boolean;
1238
+ /** Title text (ORD - 1234). */
1239
+ title: React.ReactNode;
1240
+ /** Optional secondary text (Subtext). */
1241
+ subtext?: React.ReactNode;
1242
+ /** Optional status element (typically `Badge`). */
1243
+ status?: React.ReactNode;
1244
+ /** Optional right-side icon slot (16×16; use `iconSize.xs` in layout). */
1245
+ icon?: React.ReactNode;
1246
+ /** Optional body content under title/subtext area. */
1247
+ children?: React.ReactNode;
1248
+ /** Class for the content/body region. */
1249
+ contentClassName?: string;
1250
+ }
1251
+ declare const Card: React.ForwardRefExoticComponent<CardProps & React.RefAttributes<HTMLDivElement>>;
1252
+
1037
1253
  /**
1038
1254
  * Sangam Chip Component
1039
1255
  *
@@ -1097,6 +1313,49 @@ interface ChipProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children
1097
1313
  */
1098
1314
  declare const Chip: React.ForwardRefExoticComponent<ChipProps & React.RefAttributes<HTMLDivElement>>;
1099
1315
 
1316
+ interface PaginationProps extends React.HTMLAttributes<HTMLElement> {
1317
+ /** Current active page (1-indexed) */
1318
+ page: number;
1319
+ /** Total pages count */
1320
+ totalPages: number;
1321
+ /** Called when page changes */
1322
+ onPageChange?: (page: number) => void;
1323
+ /** Total records (optional; not shown in the bar — use in parent for range copy if needed) */
1324
+ totalRecords?: number;
1325
+ /** Current page-size value for the entries selector */
1326
+ pageSize?: number;
1327
+ /** Selectable page-size options */
1328
+ pageSizeOptions?: number[];
1329
+ /** Called when page-size changes */
1330
+ onPageSizeChange?: (pageSize: number) => void;
1331
+ /**
1332
+ * Pages shown on each side of the current page (excluding first/last), like MUI `siblingCount`.
1333
+ * @default 1
1334
+ */
1335
+ siblingCount?: number;
1336
+ }
1337
+ declare const Pagination: React.ForwardRefExoticComponent<PaginationProps & React.RefAttributes<HTMLElement>>;
1338
+
1339
+ /**
1340
+ * Vertical step list for multi-step flows.
1341
+ * - Completed steps use `Tickmark` (non-filled) at `iconSize` default (16px).
1342
+ * - Per step (when a connector runs to the next step): circle + connector column totals `h-7xl` (64px).
1343
+ * - Connector stroke width: 2px (matches prior spec).
1344
+ */
1345
+ type StepperStepVariant = "default" | "inProgress" | "complete";
1346
+ interface StepperStep {
1347
+ /** Step title */
1348
+ title: React.ReactNode;
1349
+ /** Optional step subtext */
1350
+ subtext?: React.ReactNode;
1351
+ /** Visual state for this step */
1352
+ variant: StepperStepVariant;
1353
+ }
1354
+ interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {
1355
+ steps: StepperStep[];
1356
+ }
1357
+ declare const Stepper: React.ForwardRefExoticComponent<StepperProps & React.RefAttributes<HTMLDivElement>>;
1358
+
1100
1359
  /** Toast entry for the provider (id, content, optional duration in ms; default 4000) */
1101
1360
  interface ToastEntryOptions {
1102
1361
  title: string;
@@ -1321,7 +1580,7 @@ declare const PageFooter: React.ForwardRefExoticComponent<PageFooterProps & Reac
1321
1580
  * to show labels (hover state). Selected items show a box highlight.
1322
1581
  *
1323
1582
  * - Default: collapsed 48×1024px, sticky left; hover expands to the right only.
1324
- * - Hover/Selected: expanded 132×1024px, white bg, shadow-elevation-right-sm. Logo and items left-aligned.
1583
+ * - Hover/Selected: expanded 196×1024px, white bg, shadow-elevation-right-sm. Logo and items left-aligned.
1325
1584
  * - Selected item: 36×36 (collapsed) or 120×36 (expanded) box, radius 8px (rounded-sm), shadow-elevation-bottom-sm.
1326
1585
  *
1327
1586
  * Logo 36×28. Text: 12px, weight 500, line-height 16px.
@@ -1349,9 +1608,20 @@ interface SideMenuProps extends Omit<React.HTMLAttributes<HTMLElement>, "childre
1349
1608
  expanded?: boolean;
1350
1609
  /** Callback when an item is clicked */
1351
1610
  onItemClick?: (id: string) => void;
1611
+ /**
1612
+ * Project switcher shown below the logo.
1613
+ * Collapsed: shows a `P` badge. Expanded: shows a dropdown with project options.
1614
+ */
1615
+ projects?: DropdownOption[];
1616
+ /** Controlled selected project value. */
1617
+ project?: string;
1618
+ /** Initial selected project when uncontrolled. */
1619
+ defaultProject?: string;
1620
+ /** Callback when project changes. */
1621
+ onProjectChange?: (value: string) => void;
1352
1622
  }
1353
1623
  declare const sideMenuVariants: (props?: ({
1354
- variant?: "default" | "selected" | "hover" | null | undefined;
1624
+ variant?: "default" | "sticky" | "selected" | "hover" | null | undefined;
1355
1625
  } & class_variance_authority_dist_types.ClassProp) | undefined) => string;
1356
1626
  declare const SideMenu: React.ForwardRefExoticComponent<SideMenuProps & React.RefAttributes<HTMLElement>>;
1357
1627
 
@@ -1382,7 +1652,7 @@ interface UploadProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "childr
1382
1652
  }
1383
1653
  declare const Upload: React.ForwardRefExoticComponent<UploadProps & React.RefAttributes<HTMLDivElement>>;
1384
1654
  declare const uploadFileItemBoxVariants: (props?: ({
1385
- status?: "uploading" | "complete" | "failed" | null | undefined;
1655
+ status?: "complete" | "uploading" | "failed" | null | undefined;
1386
1656
  } & class_variance_authority_dist_types.ClassProp) | undefined) => string;
1387
1657
  type UploadFileItemStatus = "uploading" | "complete" | "failed";
1388
1658
  interface UploadFileItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children">, VariantProps<typeof uploadFileItemBoxVariants> {
@@ -1427,4 +1697,4 @@ type Size = "sm" | "md" | "lg";
1427
1697
  type Variant = "primary" | "secondary" | "outline" | "ghost";
1428
1698
  type ColorScheme = "primary" | "secondary" | "success" | "error" | "warning" | "info";
1429
1699
 
1430
- export { Avatar, Badge, type BaseComponentProps, Button, Checkbox, Chip, type ColorScheme, Dropdown, DropdownMulti, type DropdownMultiProps, type DropdownOption, type DropdownProps, Input, Label, Loader, PageFooter, type PageFooterAction, type PageFooterProps, PageHeader, type PageHeaderAction, type PageHeaderProps, type PageHeaderTab, ProgressBar, Radio, RadioGroup, SearchField, SideMenu, type SideMenuItem, type SideMenuProps, type Size, Skeleton, Tabs, TabsContent, TabsList, TabsRoot, TabsTrigger, type TabsTriggerOption, type TabsTriggerProps, Textarea, Toast, type ToastEntryOptions, ToastProvider, Toggle, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Upload, UploadFileItem, type UploadFileItemProps, type UploadFileItemStatus, type UploadProps, type Variant, avatarVariants, badgeVariants, buttonVariants, checkboxRootVariants as checkboxVariants, chipVariants, dropdownContentVariants, dropdownItemVariants, dropdownTriggerVariants, inputVariants, loaderVariants, pageHeaderVariants, radioVariants, searchFieldVariants, sideMenuVariants, skeletonVariants, tabsListVariants, tabsTriggerVariants, textareaVariants, toastVariants, toggleVariants, tooltipContentVariants, uploadBoxVariants, uploadFileItemBoxVariants, useToast };
1700
+ export { Avatar, Badge, type BaseComponentProps, Button, Card, Checkbox, Chip, type ColorScheme, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerHeaderTop, DrawerSurface, DrawerTitle, DrawerTrigger, Dropdown, DropdownMulti, type DropdownMultiProps, type DropdownOption, type DropdownProps, Input, Label, Loader, Menu, MenuContent, MenuItem, MenuMenu, MenuSeparator, MenuSub, MenuSubContent, MenuSubTrigger, MenuTrigger, PageFooter, type PageFooterAction, type PageFooterProps, PageHeader, type PageHeaderAction, type PageHeaderProps, type PageHeaderTab, Pagination, Popup, PopupContent, PopupTrigger, ProgressBar, Radio, RadioGroup, SearchField, SideMenu, type SideMenuItem, type SideMenuProps, type Size, Skeleton, Stepper, type StepperProps, type StepperStep, type StepperStepVariant, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsRoot, TabsTrigger, type TabsTriggerOption, type TabsTriggerProps, Textarea, Toast, type ToastEntryOptions, ToastProvider, Toggle, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Upload, UploadFileItem, type UploadFileItemProps, type UploadFileItemStatus, type UploadProps, type Variant, avatarVariants, badgeVariants, buttonVariants, cardVariants, checkboxRootVariants as checkboxVariants, chipVariants, dropdownContentVariants, dropdownItemVariants, dropdownTriggerVariants, inputVariants, loaderVariants, pageHeaderVariants, radioVariants, searchFieldVariants, sideMenuVariants, skeletonVariants, tabsListVariants, tabsTriggerVariants, textareaVariants, toastVariants, toggleVariants, tooltipContentVariants, uploadBoxVariants, uploadFileItemBoxVariants, useToast };