@maxsteinwender/sort-ui 1.0.3 → 1.0.5

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.mts CHANGED
@@ -104,10 +104,14 @@ interface AvatarProps extends Omit<React$1.ComponentPropsWithoutRef<typeof Avata
104
104
  topBadge?: boolean;
105
105
  /** Top badge variant (semantic names from StatusBadge) */
106
106
  topBadgeVariant?: StatusBadgeVariant;
107
+ /** Accessible label for top badge status, announced by screen readers (e.g. "Verified") */
108
+ topBadgeLabel?: string;
107
109
  /** Show bottom-right badge */
108
110
  bottomBadge?: boolean;
109
111
  /** Bottom badge variant (semantic names from StatusBadge) */
110
112
  bottomBadgeVariant?: StatusBadgeVariant;
113
+ /** Accessible label for bottom badge status, announced by screen readers (e.g. "Online") */
114
+ bottomBadgeLabel?: string;
111
115
  /** Fallback background color (applies when no image is shown) */
112
116
  color?: "gray" | "red" | "orange" | "amber" | "yellow" | "lime" | "green" | "emerald" | "teal" | "cyan" | "sky" | "blue" | "indigo" | "violet" | "purple" | "fuchsia" | "pink" | "rose";
113
117
  children?: React$1.ReactNode;
@@ -197,6 +201,8 @@ interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
197
201
  variant?: BadgeVariant;
198
202
  /** Image src — required for variant="image" */
199
203
  src?: string;
204
+ /** Leading icon node — used when variant="icon". Pass any Remix icon, e.g. <i className="ri-bank-fill" /> */
205
+ icon?: React$1.ReactNode;
200
206
  /** Show 1px border using border-default token. Default: false */
201
207
  border?: boolean;
202
208
  /** When provided, renders a close button on the right. */
@@ -207,7 +213,7 @@ interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
207
213
  */
208
214
  closeAsSpan?: boolean;
209
215
  }
210
- declare function Badge({ color, size, shape, variant, src, border, onClose, closeAsSpan, className, children, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
216
+ declare function Badge({ color, size, shape, variant, src, icon, border, onClose, closeAsSpan, className, children, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
211
217
 
212
218
  declare const Breadcrumb: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & {
213
219
  separator?: React$1.ReactNode;
@@ -246,7 +252,7 @@ interface SortBreadcrumbProps {
246
252
  /** Additional CSS classes */
247
253
  className?: string;
248
254
  }
249
- declare function SortBreadcrumb({ items, variant, className, }: SortBreadcrumbProps): react_jsx_runtime.JSX.Element;
255
+ declare const SortBreadcrumb: React$1.ForwardRefExoticComponent<SortBreadcrumbProps & React$1.RefAttributes<HTMLElement>>;
250
256
  type BreadcrumbItemType = "default" | "avatar";
251
257
  type BreadcrumbItemState = "default" | "hover" | "current";
252
258
  interface SortBreadcrumbItemProps {
@@ -314,6 +320,8 @@ declare const buttonGroupItemVariants: (props?: ({
314
320
  size?: "lg" | "md" | "sm" | "xs" | "2xs" | null | undefined;
315
321
  } & class_variance_authority_types.ClassProp) | undefined) => string;
316
322
  interface ButtonGroupItemProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, "children">, VariantProps<typeof buttonGroupItemVariants> {
323
+ /** Render as a child element (e.g. Next.js Link) via Radix Slot */
324
+ asChild?: boolean;
317
325
  /** Text label displayed in the item */
318
326
  label?: string;
319
327
  /** Remixicon class for leading icon (e.g. "ri-check-line") */
@@ -1287,6 +1295,8 @@ declare const pageItemVariants: (props?: ({
1287
1295
  variant?: "default" | "dot" | null | undefined;
1288
1296
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1289
1297
  interface PageItemProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, "children">, VariantProps<typeof pageItemVariants> {
1298
+ /** Render as a child element (e.g. Next.js Link) via Radix Slot */
1299
+ asChild?: boolean;
1290
1300
  /** Active/selected state */
1291
1301
  active?: boolean;
1292
1302
  /** Page number label (only for variant="default") */
@@ -1404,6 +1414,8 @@ interface RadioButtonCardProps extends VariantProps<typeof radioButtonCardVarian
1404
1414
  supporterDescription?: string;
1405
1415
  radioPosition?: "off" | "right" | "left";
1406
1416
  layout?: "horizontal" | "vertical";
1417
+ /** Leading icon node rendered above the title. Pass any Remix icon, e.g. <i className="ri-bank-fill" /> */
1418
+ icon?: React$1.ReactNode;
1407
1419
  value: string;
1408
1420
  disabled?: boolean;
1409
1421
  className?: string;
package/dist/index.d.ts CHANGED
@@ -104,10 +104,14 @@ interface AvatarProps extends Omit<React$1.ComponentPropsWithoutRef<typeof Avata
104
104
  topBadge?: boolean;
105
105
  /** Top badge variant (semantic names from StatusBadge) */
106
106
  topBadgeVariant?: StatusBadgeVariant;
107
+ /** Accessible label for top badge status, announced by screen readers (e.g. "Verified") */
108
+ topBadgeLabel?: string;
107
109
  /** Show bottom-right badge */
108
110
  bottomBadge?: boolean;
109
111
  /** Bottom badge variant (semantic names from StatusBadge) */
110
112
  bottomBadgeVariant?: StatusBadgeVariant;
113
+ /** Accessible label for bottom badge status, announced by screen readers (e.g. "Online") */
114
+ bottomBadgeLabel?: string;
111
115
  /** Fallback background color (applies when no image is shown) */
112
116
  color?: "gray" | "red" | "orange" | "amber" | "yellow" | "lime" | "green" | "emerald" | "teal" | "cyan" | "sky" | "blue" | "indigo" | "violet" | "purple" | "fuchsia" | "pink" | "rose";
113
117
  children?: React$1.ReactNode;
@@ -197,6 +201,8 @@ interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
197
201
  variant?: BadgeVariant;
198
202
  /** Image src — required for variant="image" */
199
203
  src?: string;
204
+ /** Leading icon node — used when variant="icon". Pass any Remix icon, e.g. <i className="ri-bank-fill" /> */
205
+ icon?: React$1.ReactNode;
200
206
  /** Show 1px border using border-default token. Default: false */
201
207
  border?: boolean;
202
208
  /** When provided, renders a close button on the right. */
@@ -207,7 +213,7 @@ interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
207
213
  */
208
214
  closeAsSpan?: boolean;
209
215
  }
210
- declare function Badge({ color, size, shape, variant, src, border, onClose, closeAsSpan, className, children, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
216
+ declare function Badge({ color, size, shape, variant, src, icon, border, onClose, closeAsSpan, className, children, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
211
217
 
212
218
  declare const Breadcrumb: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & {
213
219
  separator?: React$1.ReactNode;
@@ -246,7 +252,7 @@ interface SortBreadcrumbProps {
246
252
  /** Additional CSS classes */
247
253
  className?: string;
248
254
  }
249
- declare function SortBreadcrumb({ items, variant, className, }: SortBreadcrumbProps): react_jsx_runtime.JSX.Element;
255
+ declare const SortBreadcrumb: React$1.ForwardRefExoticComponent<SortBreadcrumbProps & React$1.RefAttributes<HTMLElement>>;
250
256
  type BreadcrumbItemType = "default" | "avatar";
251
257
  type BreadcrumbItemState = "default" | "hover" | "current";
252
258
  interface SortBreadcrumbItemProps {
@@ -314,6 +320,8 @@ declare const buttonGroupItemVariants: (props?: ({
314
320
  size?: "lg" | "md" | "sm" | "xs" | "2xs" | null | undefined;
315
321
  } & class_variance_authority_types.ClassProp) | undefined) => string;
316
322
  interface ButtonGroupItemProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, "children">, VariantProps<typeof buttonGroupItemVariants> {
323
+ /** Render as a child element (e.g. Next.js Link) via Radix Slot */
324
+ asChild?: boolean;
317
325
  /** Text label displayed in the item */
318
326
  label?: string;
319
327
  /** Remixicon class for leading icon (e.g. "ri-check-line") */
@@ -1287,6 +1295,8 @@ declare const pageItemVariants: (props?: ({
1287
1295
  variant?: "default" | "dot" | null | undefined;
1288
1296
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1289
1297
  interface PageItemProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, "children">, VariantProps<typeof pageItemVariants> {
1298
+ /** Render as a child element (e.g. Next.js Link) via Radix Slot */
1299
+ asChild?: boolean;
1290
1300
  /** Active/selected state */
1291
1301
  active?: boolean;
1292
1302
  /** Page number label (only for variant="default") */
@@ -1404,6 +1414,8 @@ interface RadioButtonCardProps extends VariantProps<typeof radioButtonCardVarian
1404
1414
  supporterDescription?: string;
1405
1415
  radioPosition?: "off" | "right" | "left";
1406
1416
  layout?: "horizontal" | "vertical";
1417
+ /** Leading icon node rendered above the title. Pass any Remix icon, e.g. <i className="ri-bank-fill" /> */
1418
+ icon?: React$1.ReactNode;
1407
1419
  value: string;
1408
1420
  disabled?: boolean;
1409
1421
  className?: string;
package/dist/index.js CHANGED
@@ -281,17 +281,17 @@ var buttonVariants = classVarianceAuthority.cva(
281
281
  variants: {
282
282
  variant: {
283
283
  // Primary — Sort UI: bg/state/primary, text/white-default, icon/white-default
284
- default: "bg-sui-bg-state-primary text-sui-text-white-default [text-shadow:var(--shadow-text)] [&_i]:text-icon-white-default [&_i]:[text-shadow:none] [&_svg]:text-icon-white-default [&_svg]:[text-shadow:none] shadow-button-default active:shadow-button-press hover:bg-sui-bg-state-primary-hover active:bg-sui-bg-state-primary-press disabled:bg-sui-bg-state-disabled disabled:[text-shadow:none]",
284
+ default: "bg-sui-bg-state-primary text-sui-text-white-default [text-shadow:var(--shadow-text)] [&_i]:text-icon-white-default [&_i]:[text-shadow:none] [&_svg]:text-icon-white-default [&_svg]:[text-shadow:none] shadow-button-default active:shadow-button-press [@media(hover:hover)]:hover:bg-sui-bg-state-primary-hover active:bg-sui-bg-state-primary-press disabled:bg-sui-bg-state-disabled disabled:[text-shadow:none]",
285
285
  // Soft — Sort UI: bg/state/soft, text/subtle, icon/default-muted
286
- secondary: "bg-sui-bg-state-soft text-sui-text-subtle [&_i]:text-icon-default-muted [&_svg]:text-icon-default-muted hover:bg-sui-bg-state-soft-hover active:bg-sui-bg-state-soft-press disabled:bg-sui-bg-state-disabled",
286
+ secondary: "bg-sui-bg-state-soft text-sui-text-subtle [&_i]:text-icon-default-muted [&_svg]:text-icon-default-muted [@media(hover:hover)]:hover:bg-sui-bg-state-soft-hover active:bg-sui-bg-state-soft-press disabled:bg-sui-bg-state-disabled",
287
287
  // Secondary — Sort UI: bg/state/secondary, border/darker, text/default, icon/default-muted
288
- outline: "bg-sui-bg-state-secondary border border-sui-border-darker text-sui-text-default [&_i]:text-icon-default-muted [&_svg]:text-icon-default-muted shadow-button-secondary active:shadow-button-secondary-press hover:bg-sui-bg-state-secondary-hover active:bg-sui-bg-state-secondary-press disabled:bg-sui-bg-state-disabled disabled:border-sui-border-default",
288
+ outline: "bg-sui-bg-state-secondary border border-sui-border-darker text-sui-text-default [&_i]:text-icon-default-muted [&_svg]:text-icon-default-muted shadow-button-secondary active:shadow-button-secondary-press [@media(hover:hover)]:hover:bg-sui-bg-state-secondary-hover active:bg-sui-bg-state-secondary-press disabled:bg-sui-bg-state-disabled disabled:border-sui-border-default",
289
289
  // Ghost — Sort UI: bg/state/ghost, text/default, icon/default-muted
290
- ghost: "bg-sui-bg-state-ghost text-sui-text-default [&_i]:text-icon-default-muted [&_svg]:text-icon-default-muted hover:bg-sui-bg-state-ghost-hover active:bg-sui-bg-state-ghost-press",
290
+ ghost: "bg-sui-bg-state-ghost text-sui-text-default [&_i]:text-icon-default-muted [&_svg]:text-icon-default-muted [@media(hover:hover)]:hover:bg-sui-bg-state-ghost-hover active:bg-sui-bg-state-ghost-press",
291
291
  // Destructive — Sort UI: bg/state/destructive, text/white-default, icon/white-default
292
- destructive: "bg-sui-bg-state-destructive text-sui-text-white-default [text-shadow:var(--shadow-text)] [&_i]:text-icon-white-default [&_i]:[text-shadow:none] [&_svg]:text-icon-white-default [&_svg]:[text-shadow:none] shadow-button-default active:shadow-button-press hover:bg-sui-bg-state-destructive-hover active:bg-sui-bg-state-destructive-press disabled:bg-sui-bg-state-disabled disabled:[text-shadow:none]",
292
+ destructive: "bg-sui-bg-state-destructive text-sui-text-white-default [text-shadow:var(--shadow-text)] [&_i]:text-icon-white-default [&_i]:[text-shadow:none] [&_svg]:text-icon-white-default [&_svg]:[text-shadow:none] shadow-button-default active:shadow-button-press [@media(hover:hover)]:hover:bg-sui-bg-state-destructive-hover active:bg-sui-bg-state-destructive-press disabled:bg-sui-bg-state-disabled disabled:[text-shadow:none]",
293
293
  // Ghost Muted — Sort UI: bg/state/ghost, text/muted, icon/default-muted
294
- "ghost-muted": "bg-sui-bg-state-ghost text-sui-text-muted [&_i]:text-icon-default-muted [&_svg]:text-icon-default-muted hover:bg-sui-bg-state-ghost-hover active:bg-sui-bg-state-ghost-press"
294
+ "ghost-muted": "bg-sui-bg-state-ghost text-sui-text-muted [&_i]:text-icon-default-muted [&_svg]:text-icon-default-muted [@media(hover:hover)]:hover:bg-sui-bg-state-ghost-hover active:bg-sui-bg-state-ghost-press"
295
295
  },
296
296
  shape: {
297
297
  rounded: "rounded-md",
@@ -834,8 +834,10 @@ var Avatar = React77__namespace.forwardRef((_a, ref) => {
834
834
  ring = false,
835
835
  topBadge = false,
836
836
  topBadgeVariant = "verified",
837
+ topBadgeLabel,
837
838
  bottomBadge = false,
838
839
  bottomBadgeVariant = "online",
840
+ bottomBadgeLabel,
839
841
  color = "gray",
840
842
  children
841
843
  } = _b, props = __objRest(_b, [
@@ -848,8 +850,10 @@ var Avatar = React77__namespace.forwardRef((_a, ref) => {
848
850
  "ring",
849
851
  "topBadge",
850
852
  "topBadgeVariant",
853
+ "topBadgeLabel",
851
854
  "bottomBadge",
852
855
  "bottomBadgeVariant",
856
+ "bottomBadgeLabel",
853
857
  "color",
854
858
  "children"
855
859
  ]);
@@ -885,6 +889,11 @@ var Avatar = React77__namespace.forwardRef((_a, ref) => {
885
889
  })
886
890
  ) });
887
891
  }
892
+ const badgeLabelParts = [
893
+ topBadge && topBadgeLabel ? topBadgeLabel : null,
894
+ bottomBadge && bottomBadgeLabel ? bottomBadgeLabel : null
895
+ ].filter(Boolean);
896
+ const wrapperAriaLabel = badgeLabelParts.length > 0 ? [alt, badgeLabelParts.join(", ")].filter(Boolean).join(" \u2014 ") : alt || void 0;
888
897
  const offset = (_a2 = badgeOffset[resolvedSize]) != null ? _a2 : badgeOffset["md"];
889
898
  const topPositionClasses = `${offset.top} ${offset.right}`;
890
899
  const bottomPositionClasses = `${offset.bottom} ${offset.right}`;
@@ -897,7 +906,9 @@ var Avatar = React77__namespace.forwardRef((_a, ref) => {
897
906
  // Wrapper = avatar size (NOT ring size) — badges positioned relative to this
898
907
  avatarWrapperSize[resolvedSize],
899
908
  className
900
- )
909
+ ),
910
+ "aria-label": wrapperAriaLabel,
911
+ role: wrapperAriaLabel ? "img" : void 0
901
912
  }, props), {
902
913
  children: [
903
914
  ring && /* @__PURE__ */ jsxRuntime.jsx(
@@ -965,7 +976,7 @@ var Avatar = React77__namespace.forwardRef((_a, ref) => {
965
976
  })
966
977
  ) });
967
978
  });
968
- Avatar.displayName = AvatarPrimitive__namespace.Root.displayName;
979
+ Avatar.displayName = "Avatar";
969
980
  var AvatarImage = React77__namespace.forwardRef((_a, ref) => {
970
981
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
971
982
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -976,7 +987,7 @@ var AvatarImage = React77__namespace.forwardRef((_a, ref) => {
976
987
  }, props)
977
988
  );
978
989
  });
979
- AvatarImage.displayName = AvatarPrimitive__namespace.Image.displayName;
990
+ AvatarImage.displayName = "AvatarImage";
980
991
  var AvatarFallback = React77__namespace.forwardRef((_a, ref) => {
981
992
  var _b = _a, { className, fallback, children } = _b, props = __objRest(_b, ["className", "fallback", "children"]);
982
993
  var _a2, _b2, _c;
@@ -1008,7 +1019,7 @@ var AvatarFallback = React77__namespace.forwardRef((_a, ref) => {
1008
1019
  })
1009
1020
  );
1010
1021
  });
1011
- AvatarFallback.displayName = AvatarPrimitive__namespace.Fallback.displayName;
1022
+ AvatarFallback.displayName = "AvatarFallback";
1012
1023
  var avatarButtonVariants = classVarianceAuthority.cva(
1013
1024
  "relative inline-flex items-center rounded-full whitespace-nowrap text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-sui-border-highlight focus-visible:ring-offset-[1px] focus-visible:ring-offset-sui-bg-default disabled:pointer-events-none after:absolute after:content-[''] after:inset-x-0",
1014
1025
  {
@@ -1334,6 +1345,7 @@ function Badge(_a) {
1334
1345
  shape = "rounded",
1335
1346
  variant = "label",
1336
1347
  src,
1348
+ icon,
1337
1349
  border = false,
1338
1350
  onClose,
1339
1351
  closeAsSpan = false,
@@ -1345,6 +1357,7 @@ function Badge(_a) {
1345
1357
  "shape",
1346
1358
  "variant",
1347
1359
  "src",
1360
+ "icon",
1348
1361
  "border",
1349
1362
  "onClose",
1350
1363
  "closeAsSpan",
@@ -1374,13 +1387,17 @@ function Badge(_a) {
1374
1387
  variant === "label" && // Inner frame: px-1 (4px) each side — same for lg and sm
1375
1388
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "px-1", children }),
1376
1389
  variant === "icon" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1377
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-4 shrink-0 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
1378
- "i",
1390
+ /* @__PURE__ */ jsxRuntime.jsx(
1391
+ "span",
1379
1392
  {
1380
- className: cn("ri-user-3-fill leading-none", iconFontSize[size]),
1381
- "aria-hidden": "true"
1393
+ className: cn(
1394
+ "flex size-4 shrink-0 items-center justify-center leading-none",
1395
+ iconFontSize[size]
1396
+ ),
1397
+ "aria-hidden": "true",
1398
+ children: icon != null ? icon : /* @__PURE__ */ jsxRuntime.jsx("i", { className: "ri-user-3-fill" })
1382
1399
  }
1383
- ) }),
1400
+ ),
1384
1401
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "pl-0.5 pr-1", children })
1385
1402
  ] }),
1386
1403
  variant === "image" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -1516,41 +1533,55 @@ var BreadcrumbEllipsis = (_a) => {
1516
1533
  );
1517
1534
  };
1518
1535
  BreadcrumbEllipsis.displayName = "BreadcrumbElipssis";
1536
+ var dividerVariants = classVarianceAuthority.cva(
1537
+ "flex size-5 shrink-0 items-center justify-center",
1538
+ {
1539
+ variants: {
1540
+ variant: {
1541
+ slash: "",
1542
+ arrow: "",
1543
+ dot: ""
1544
+ }
1545
+ },
1546
+ defaultVariants: {
1547
+ variant: "slash"
1548
+ }
1549
+ }
1550
+ );
1519
1551
  function BreadcrumbDivider({ variant }) {
1520
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex size-5 shrink-0 items-center justify-center", "aria-hidden": "true", children: [
1552
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: dividerVariants({ variant }), "aria-hidden": "true", children: [
1521
1553
  variant === "slash" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium leading-5 text-sui-text-hint", children: "/" }),
1522
1554
  variant === "arrow" && /* @__PURE__ */ jsxRuntime.jsx("i", { className: "ri-arrow-right-s-line text-xl leading-none text-sui-text-muted" }),
1523
1555
  variant === "dot" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-1 rounded-full bg-sui-text-muted" })
1524
1556
  ] });
1525
1557
  }
1526
- function SortBreadcrumb({
1527
- items,
1528
- variant = "slash",
1529
- className
1530
- }) {
1531
- return /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": "Breadcrumb", children: /* @__PURE__ */ jsxRuntime.jsx(
1532
- "ol",
1533
- {
1534
- className: cn(
1535
- "flex items-center gap-sui-2",
1536
- className
1537
- ),
1538
- children: items.map((item, index) => {
1539
- const isLast = index === items.length - 1;
1540
- return /* @__PURE__ */ jsxRuntime.jsxs(React77__namespace.Fragment, { children: [
1541
- /* @__PURE__ */ jsxRuntime.jsx("li", { className: "inline-flex", children: /* @__PURE__ */ jsxRuntime.jsx(
1542
- SortBreadcrumbItem,
1543
- __spreadProps(__spreadValues({}, item), {
1544
- state: isLast ? "current" : "default",
1545
- leadIcon: item.leadIcon
1546
- })
1547
- ) }),
1548
- !isLast && /* @__PURE__ */ jsxRuntime.jsx("li", { className: "inline-flex", role: "presentation", children: /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbDivider, { variant }) })
1549
- ] }, index);
1550
- })
1551
- }
1552
- ) });
1553
- }
1558
+ var SortBreadcrumb = React77__namespace.forwardRef(
1559
+ ({ items, variant = "slash", className }, ref) => {
1560
+ return /* @__PURE__ */ jsxRuntime.jsx("nav", { ref, "aria-label": "Breadcrumb", children: /* @__PURE__ */ jsxRuntime.jsx(
1561
+ "ol",
1562
+ {
1563
+ className: cn(
1564
+ "flex items-center gap-sui-2",
1565
+ className
1566
+ ),
1567
+ children: items.map((item, index) => {
1568
+ const isLast = index === items.length - 1;
1569
+ return /* @__PURE__ */ jsxRuntime.jsxs(React77__namespace.Fragment, { children: [
1570
+ /* @__PURE__ */ jsxRuntime.jsx("li", { className: "inline-flex", children: /* @__PURE__ */ jsxRuntime.jsx(
1571
+ SortBreadcrumbItem,
1572
+ __spreadProps(__spreadValues({}, item), {
1573
+ state: isLast ? "current" : "default",
1574
+ leadIcon: item.leadIcon
1575
+ })
1576
+ ) }),
1577
+ !isLast && /* @__PURE__ */ jsxRuntime.jsx("li", { className: "inline-flex", role: "presentation", children: /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbDivider, { variant }) })
1578
+ ] }, index);
1579
+ })
1580
+ }
1581
+ ) });
1582
+ }
1583
+ );
1584
+ SortBreadcrumb.displayName = "SortBreadcrumb";
1554
1585
  function SortBreadcrumbItem({
1555
1586
  label,
1556
1587
  href,
@@ -1727,6 +1758,7 @@ var ButtonGroupItem = React77__namespace.forwardRef(
1727
1758
  showSeparator = false,
1728
1759
  size = "lg",
1729
1760
  disabled = false,
1761
+ asChild = false,
1730
1762
  className
1731
1763
  } = _b, props = __objRest(_b, [
1732
1764
  "label",
@@ -1737,14 +1769,16 @@ var ButtonGroupItem = React77__namespace.forwardRef(
1737
1769
  "showSeparator",
1738
1770
  "size",
1739
1771
  "disabled",
1772
+ "asChild",
1740
1773
  "className"
1741
1774
  ]);
1742
1775
  const s = size != null ? size : "lg";
1776
+ const Comp = asChild ? reactSlot.Slot : "button";
1743
1777
  return /* @__PURE__ */ jsxRuntime.jsxs(
1744
- "button",
1778
+ Comp,
1745
1779
  __spreadProps(__spreadValues({
1746
1780
  ref,
1747
- type: "button",
1781
+ type: asChild ? void 0 : "button",
1748
1782
  disabled,
1749
1783
  className: cn(
1750
1784
  buttonGroupItemVariants({ size }),
@@ -2041,8 +2075,8 @@ var socialButtonVariants = classVarianceAuthority.cva(
2041
2075
  variants: {
2042
2076
  variant: {
2043
2077
  // --sb-bg is a runtime brand slot set via inline style — intentional, not a token violation
2044
- brand: "bg-[var(--sb-bg,var(--social-brand-default))] text-sui-text-white-default shadow-button-default active:shadow-button-press hover:bg-[color-mix(in_srgb,#fff_15%,var(--sb-bg,var(--social-brand-default)))] active:bg-[color-mix(in_srgb,#fff_25%,var(--sb-bg,var(--social-brand-default)))]",
2045
- secondary: "bg-sui-bg-default border border-sui-border-darker text-sui-text-default shadow-button-secondary active:shadow-button-secondary-press hover:bg-sui-bg-state-secondary-hover active:bg-sui-bg-state-secondary-press"
2078
+ brand: "bg-[var(--sb-bg,var(--social-brand-default))] text-sui-text-white-default shadow-button-default active:shadow-button-press [@media(hover:hover)]:hover:bg-[color-mix(in_srgb,#fff_15%,var(--sb-bg,var(--social-brand-default)))] active:bg-[color-mix(in_srgb,#fff_25%,var(--sb-bg,var(--social-brand-default)))]",
2079
+ secondary: "bg-sui-bg-state-secondary border border-sui-border-darker text-sui-text-default shadow-button-secondary active:shadow-button-secondary-press [@media(hover:hover)]:hover:bg-sui-bg-state-secondary-hover active:bg-sui-bg-state-secondary-press"
2046
2080
  },
2047
2081
  shape: {
2048
2082
  rounded: "rounded-md",
@@ -3069,25 +3103,25 @@ var unselectedStyles = {
3069
3103
  default: [
3070
3104
  "bg-sui-bg-state-secondary border-sui-border-darker text-sui-text-muted",
3071
3105
  "[&_i]:text-icon-default-muted",
3072
- "hover:bg-sui-bg-state-secondary-hover hover:text-sui-text-subtle hover:[&_i]:text-icon-default-subtle",
3106
+ "[@media(hover:hover)]:hover:bg-sui-bg-state-secondary-hover [@media(hover:hover)]:hover:text-sui-text-subtle [@media(hover:hover)]:hover:[&_i]:text-icon-default-subtle",
3073
3107
  "active:bg-sui-bg-state-secondary-press active:text-sui-text-subtle active:[&_i]:text-icon-default-subtle"
3074
3108
  ].join(" "),
3075
3109
  soft: [
3076
3110
  "bg-sui-bg-state-soft text-sui-text-muted",
3077
3111
  "[&_i]:text-icon-default-muted",
3078
- "hover:bg-sui-bg-state-soft-hover hover:text-sui-text-subtle hover:[&_i]:text-icon-default-subtle",
3112
+ "[@media(hover:hover)]:hover:bg-sui-bg-state-soft-hover [@media(hover:hover)]:hover:text-sui-text-subtle [@media(hover:hover)]:hover:[&_i]:text-icon-default-subtle",
3079
3113
  "active:bg-sui-bg-state-soft-press active:text-sui-text-subtle active:[&_i]:text-icon-default-subtle"
3080
3114
  ].join(" "),
3081
3115
  ghost: [
3082
3116
  "bg-sui-bg-state-ghost text-sui-text-muted",
3083
3117
  "[&_i]:text-icon-default-muted",
3084
- "hover:bg-sui-bg-state-ghost-hover hover:text-sui-text-subtle hover:[&_i]:text-icon-default-subtle",
3118
+ "[@media(hover:hover)]:hover:bg-sui-bg-state-ghost-hover [@media(hover:hover)]:hover:text-sui-text-subtle [@media(hover:hover)]:hover:[&_i]:text-icon-default-subtle",
3085
3119
  "active:bg-sui-bg-state-ghost-press active:text-sui-text-subtle active:[&_i]:text-icon-default-subtle"
3086
3120
  ].join(" "),
3087
3121
  "ghost-muted": [
3088
3122
  "bg-sui-bg-state-ghost text-sui-text-muted",
3089
3123
  "[&_i]:text-icon-default-muted",
3090
- "hover:bg-sui-bg-state-ghost-hover hover:text-sui-text-subtle hover:[&_i]:text-icon-default-subtle",
3124
+ "[@media(hover:hover)]:hover:bg-sui-bg-state-ghost-hover [@media(hover:hover)]:hover:text-sui-text-subtle [@media(hover:hover)]:hover:[&_i]:text-icon-default-subtle",
3091
3125
  "active:bg-sui-bg-state-ghost-press active:text-sui-text-subtle active:[&_i]:text-icon-default-subtle"
3092
3126
  ].join(" ")
3093
3127
  };
@@ -3220,7 +3254,16 @@ var Chip = React77__namespace.forwardRef(
3220
3254
  )
3221
3255
  }), props), {
3222
3256
  children: [
3223
- (leadIcon || iconOnly) && /* @__PURE__ */ jsxRuntime.jsx("i", { className: iconName, "aria-hidden": "true" }),
3257
+ (leadIcon || iconOnly) && /* @__PURE__ */ jsxRuntime.jsx(
3258
+ "i",
3259
+ {
3260
+ className: cn(
3261
+ iconName,
3262
+ selected && iconOnly && v === "ghost-muted" && "text-icon-default"
3263
+ ),
3264
+ "aria-hidden": "true"
3265
+ }
3266
+ ),
3224
3267
  !iconOnly && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("px-sui-2", labelClasses2[s]), children: label })
3225
3268
  ]
3226
3269
  })
@@ -5495,7 +5538,7 @@ function DatePickerInput({
5495
5538
  ] });
5496
5539
  }
5497
5540
  DatePickerInput.displayName = "DatePickerInput";
5498
- var dividerVariants = classVarianceAuthority.cva("flex w-full items-center", {
5541
+ var dividerVariants2 = classVarianceAuthority.cva("flex w-full items-center", {
5499
5542
  variants: {
5500
5543
  type: {
5501
5544
  default: "gap-0",
@@ -5556,7 +5599,7 @@ var Divider = React77__namespace.forwardRef(
5556
5599
  ref,
5557
5600
  role: "separator",
5558
5601
  "aria-orientation": "horizontal",
5559
- className: cn(dividerVariants({ type }), className)
5602
+ className: cn(dividerVariants2({ type }), className)
5560
5603
  }, props), {
5561
5604
  children: [
5562
5605
  showLeftLine && /* @__PURE__ */ jsxRuntime.jsx("div", { className: lineClasses }),
@@ -7932,7 +7975,7 @@ var pageItemVariants = classVarianceAuthority.cva(
7932
7975
  // Default state
7933
7976
  "bg-sui-bg-state-ghost text-sui-text-hint",
7934
7977
  // Hover state
7935
- "hover:bg-sui-bg-state-ghost-hover hover:text-sui-text-muted",
7978
+ "[@media(hover:hover)]:hover:bg-sui-bg-state-ghost-hover [@media(hover:hover)]:hover:text-sui-text-muted",
7936
7979
  // Disabled state
7937
7980
  "disabled:bg-sui-bg-state-ghost disabled:text-sui-text-hint"
7938
7981
  ].join(" "),
@@ -7943,7 +7986,7 @@ var pageItemVariants = classVarianceAuthority.cva(
7943
7986
  // Default state
7944
7987
  "bg-sui-bg-state-soft",
7945
7988
  // Hover state (soft-hover too subtle for small dots, use stronger token)
7946
- "hover:bg-sui-bg-state-soft-hover",
7989
+ "[@media(hover:hover)]:hover:bg-sui-bg-state-soft-hover",
7947
7990
  // Disabled state
7948
7991
  "disabled:bg-sui-bg-state-disabled"
7949
7992
  ].join(" ")
@@ -7959,17 +8002,18 @@ var activeDefaultClasses = [
7959
8002
  // Blue text/border: uses bg-basic-blue tokens because text-informative shifts to orange in Theme 2
7960
8003
  "text-sui-bg-basic-blue-strong",
7961
8004
  "border border-sui-bg-basic-blue-accent",
7962
- "hover:bg-sui-bg-state-ghost hover:text-sui-bg-basic-blue-strong"
8005
+ "[@media(hover:hover)]:hover:bg-sui-bg-state-ghost [@media(hover:hover)]:hover:text-sui-bg-basic-blue-strong"
7963
8006
  ].join(" ");
7964
8007
  var activeDotClasses = [
7965
8008
  "bg-sui-bg-basic-blue-accent",
7966
- "hover:bg-sui-bg-basic-blue-accent"
8009
+ "[@media(hover:hover)]:hover:bg-sui-bg-basic-blue-accent"
7967
8010
  ].join(" ");
7968
8011
  var PageItem = React77__namespace.forwardRef(
7969
8012
  (_a, ref) => {
7970
- var _b = _a, { className, variant = "default", active = false, label = "0", disabled } = _b, props = __objRest(_b, ["className", "variant", "active", "label", "disabled"]);
8013
+ var _b = _a, { className, variant = "default", active = false, label = "0", disabled, asChild = false } = _b, props = __objRest(_b, ["className", "variant", "active", "label", "disabled", "asChild"]);
8014
+ const Comp = asChild ? reactSlot.Slot : "button";
7971
8015
  return /* @__PURE__ */ jsxRuntime.jsx(
7972
- "button",
8016
+ Comp,
7973
8017
  __spreadProps(__spreadValues({
7974
8018
  ref,
7975
8019
  disabled,
@@ -8638,6 +8682,7 @@ var RadioButtonCard = React77__namespace.forwardRef(
8638
8682
  variant = "default",
8639
8683
  radioPosition = "off",
8640
8684
  layout = "horizontal",
8685
+ icon,
8641
8686
  value,
8642
8687
  disabled = false,
8643
8688
  className
@@ -8690,6 +8735,17 @@ var RadioButtonCard = React77__namespace.forwardRef(
8690
8735
  "flex flex-col gap-1 text-left",
8691
8736
  isHorizontal ? "flex-1 min-w-0" : "w-full"
8692
8737
  ), children: [
8738
+ icon && /* @__PURE__ */ jsxRuntime.jsx(
8739
+ "span",
8740
+ {
8741
+ className: cn(
8742
+ "flex size-4 shrink-0 items-center leading-none text-base",
8743
+ disabled ? "text-sui-text-hint" : "text-icon-default-subtle"
8744
+ ),
8745
+ "aria-hidden": "true",
8746
+ children: icon
8747
+ }
8748
+ ),
8693
8749
  /* @__PURE__ */ jsxRuntime.jsx("span", { id: titleId, className: titleClass, children: title }),
8694
8750
  description && /* @__PURE__ */ jsxRuntime.jsx("span", { id: descriptionId, className: descriptionClass, children: description })
8695
8751
  ] }),
@@ -10580,7 +10636,7 @@ var interactiveBase = [
10580
10636
  "flex items-center rounded-sm",
10581
10637
  "transition-colors cursor-pointer",
10582
10638
  "bg-sui-bg-state-ghost",
10583
- "hover:bg-sui-bg-state-ghost-hover active:bg-sui-bg-state-ghost-press",
10639
+ "[@media(hover:hover)]:hover:bg-sui-bg-state-ghost-hover active:bg-sui-bg-state-ghost-press",
10584
10640
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sui-border-highlight focus-visible:ring-offset-2 focus-visible:ring-offset-sui-bg-default"
10585
10641
  ];
10586
10642
  var sidebarMenuItemVariants = classVarianceAuthority.cva("", {
@@ -10666,7 +10722,7 @@ var SidebarMenuItem2 = React77__namespace.forwardRef(
10666
10722
  }
10667
10723
  );
10668
10724
  }
10669
- const activeClasses = active ? "bg-sui-bg-state-soft hover:bg-sui-bg-state-soft-hover active:bg-sui-bg-state-soft-press" : "";
10725
+ const activeClasses = active ? "bg-sui-bg-state-soft [@media(hover:hover)]:hover:bg-sui-bg-state-soft-hover active:bg-sui-bg-state-soft-press" : "";
10670
10726
  const labelColorClass = active ? "text-sui-text-default" : "text-sui-text-subtle";
10671
10727
  if (variant === "collapsed") {
10672
10728
  const button = /* @__PURE__ */ jsxRuntime.jsx(
@@ -13785,7 +13841,7 @@ exports.checkboxWithTextVariants = checkboxWithTextVariants;
13785
13841
  exports.chipVariants = chipVariants;
13786
13842
  exports.controlButtonVariants = controlButtonVariants;
13787
13843
  exports.datePickerInputContainerVariants = datePickerInputContainerVariants;
13788
- exports.dividerVariants = dividerVariants;
13844
+ exports.dividerVariants = dividerVariants2;
13789
13845
  exports.emptyStateVariants = emptyStateVariants;
13790
13846
  exports.extractInitials = extractInitials;
13791
13847
  exports.fileUploadCardVariants = fileUploadCardVariants;