@assure-one/design-system 1.47.1 → 1.49.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.
@@ -1,8 +1,8 @@
1
- import { stateAttributes, slot, chipAnatomy, Pressable, CONTROL_GAP_CLASSES, EN_MESSAGES, microInteractions, listItemClasses, groupHeadingClasses, useDsMessages, withPortalContainer, Backdrop, sheetAnatomy, deprecate, OverlaySurface, DismissButton, DEFAULT_OVERLAY_MESSAGES, DISMISS_GLYPH_CLASSES, OverlayBody, OverlayTitle, OverlayDescription, Input, Textarea, Select, FileUpload, FileChip, Button, Checkbox, Tooltip, TooltipTrigger, TooltipContent, useMergedRefs, TooltipProvider, sidebarAnatomy, Slot, Avatar, DropdownMenu, DropdownMenuTrigger, sidebarBrandSwitcherAnatomy, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuItem, buttonBase, CONTROL_SIZE_CLASSES, useFieldControl, useId as useId$1, useControllableState, Popover, PopoverAnchor, comboboxAnatomy, Spinner, IconButton, PopoverContent, LIST_SEPARATOR, listItemAttributes, optionElementId, FormBridge, useLinkComponent, useImageComponent, OverlayHeader, OverlayFooter, LIST_ITEM_INDICATOR_WELL } from './chunk-IIBDSTOG.js';
1
+ import { stateAttributes, slot, chipAnatomy, Pressable, CONTROL_GAP_CLASSES, EN_MESSAGES, microInteractions, listItemClasses, groupHeadingClasses, useDsMessages, withPortalContainer, Backdrop, sheetAnatomy, deprecate, OverlaySurface, DismissButton, DEFAULT_OVERLAY_MESSAGES, DISMISS_GLYPH_CLASSES, OverlayBody, OverlayTitle, OverlayDescription, Input, Textarea, Select, FileUpload, FileChip, Button, Checkbox, Tooltip, TooltipTrigger, TooltipContent, useMergedRefs, TooltipProvider, sidebarAnatomy, Slot, Avatar, DropdownMenu, DropdownMenuTrigger, sidebarBrandSwitcherAnatomy, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuItem, buttonBase, CONTROL_SIZE_CLASSES, useDsDirection, TooltipRoot, useFieldControl, useId as useId$1, useControllableState, Popover, PopoverAnchor, comboboxAnatomy, Spinner, IconButton, PopoverContent, LIST_SEPARATOR, listItemAttributes, optionElementId, FormBridge, useLinkComponent, useImageComponent, OverlayHeader, OverlayFooter, LIST_ITEM_INDICATOR_WELL } from './chunk-SFHFY72L.js';
2
2
  import { cn, XIcon, CheckIcon, EyeIcon, DownloadIcon, PhoneIcon, MailIcon, GlobeIcon, HomeIcon, ChevronLeftIcon, ChevronRightIcon, ReceiptIcon, RotateCcwIcon, CreditCardIcon, LockIcon, FileTextIcon, PlayIcon, InfoIcon, ClockIcon, PenSignIcon, TrashIcon, PlusIcon, CheckCircleSolidIcon, HelpCircleIcon, MinusIcon, PanelLeftCloseIcon, PanelLeftIcon, ChevronsLeftIcon, ChevronsRightIcon, ChevronDownIcon } from './chunk-ARCWF2S3.js';
3
3
  import { parseHexColor, contrastRatio, WHITE, formatHexColor, darkenUntilContrast } from './chunk-EUHGZA6Q.js';
4
4
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
5
- import * as React6 from 'react';
5
+ import * as React7 from 'react';
6
6
  import { forwardRef, useId, useState, Fragment as Fragment$1, createContext, useContext } from 'react';
7
7
  import { RemoveScroll } from 'react-remove-scroll';
8
8
  import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
@@ -442,7 +442,7 @@ var CREATE_ITEM_CLASSES = cn(
442
442
  var GROUP_HEADING_CLASSES = groupHeadingClasses({ palette: "neutral", labelSize: SMALL_TEXT });
443
443
  var STATE_CLASSES = cn("ds:text-fg-3 ds:px-3 ds:py-2", SMALL_TEXT);
444
444
  var CREATE_ROW = "\0create";
445
- var CmdkCompatContext = React6.createContext(false);
445
+ var CmdkCompatContext = React7.createContext(false);
446
446
  function Combobox(props) {
447
447
  const {
448
448
  options: items,
@@ -490,7 +490,7 @@ function Combobox(props) {
490
490
  const closeOnSelect = props.closeOnSelect ?? !multiple;
491
491
  const hideSelected = props.multiple === true && props.hideSelected === true;
492
492
  const messages = useDsMessages("combobox", messagesProp);
493
- const accessors = React6.useMemo(() => {
493
+ const accessors = React7.useMemo(() => {
494
494
  if (!getOptionValue || !getOptionLabel) return void 0;
495
495
  return {
496
496
  getOptionValue,
@@ -500,7 +500,7 @@ function Combobox(props) {
500
500
  getOptionKeywords
501
501
  };
502
502
  }, [getOptionValue, getOptionLabel, getOptionDisabled, getOptionGroup, getOptionKeywords]);
503
- const options = React6.useMemo(() => toOptions(items, accessors), [items, accessors]);
503
+ const options = React7.useMemo(() => toOptions(items, accessors), [items, accessors]);
504
504
  const wiring = useFieldControl({
505
505
  id: idProp,
506
506
  name: nameProp,
@@ -522,7 +522,7 @@ function Combobox(props) {
522
522
  const single = normalizeSingleValue(raw);
523
523
  return single === null ? [] : [single];
524
524
  };
525
- const defaultSelection = React6.useMemo(
525
+ const defaultSelection = React7.useMemo(
526
526
  () => toSelection(props.defaultValue) ?? [],
527
527
  // eslint-disable-next-line react-hooks/exhaustive-deps -- read once, like a default should be
528
528
  []
@@ -543,15 +543,15 @@ function Combobox(props) {
543
543
  defaultProp: defaultSearch,
544
544
  onChange: onSearchChange
545
545
  });
546
- const selectedOption = React6.useMemo(() => findOption(options, value), [options, value]);
547
- const selectedOptions = React6.useMemo(
546
+ const selectedOption = React7.useMemo(() => findOption(options, value), [options, value]);
547
+ const selectedOptions = React7.useMemo(
548
548
  () => selection.map((entry) => findOption(options, entry)).filter((option) => option !== void 0),
549
549
  [options, selection]
550
550
  );
551
- const inputRef = React6.useRef(null);
552
- const controlRef = React6.useRef(null);
551
+ const inputRef = React7.useRef(null);
552
+ const controlRef = React7.useRef(null);
553
553
  const mergedInputRef = useMergedRefs(inputRef, ref, wiring.ref);
554
- const commitSelection = React6.useCallback(
554
+ const commitSelection = React7.useCallback(
555
555
  (next, option) => {
556
556
  setSelectionState(next);
557
557
  const changed = next.length !== selection.length || next.some((entry, index) => entry !== selection[index]);
@@ -562,18 +562,18 @@ function Combobox(props) {
562
562
  // eslint-disable-next-line react-hooks/exhaustive-deps -- `props` is read for the discriminant
563
563
  [setSelectionState, selection, props.multiple, props.onValueChange]
564
564
  );
565
- const setValue = React6.useCallback(
565
+ const setValue = React7.useCallback(
566
566
  (next) => commitSelection(next === null ? [] : [next], findOption(options, next) ?? null),
567
567
  [commitSelection, options]
568
568
  );
569
- const removeValue = React6.useCallback(
569
+ const removeValue = React7.useCallback(
570
570
  (entry) => commitSelection(
571
571
  selection.filter((current) => current !== entry),
572
572
  findOption(options, entry) ?? null
573
573
  ),
574
574
  [commitSelection, selection, options]
575
575
  );
576
- const setOpen = React6.useCallback(
576
+ const setOpen = React7.useCallback(
577
577
  (next) => {
578
578
  if (next && inert) return;
579
579
  setOpenState(next);
@@ -582,39 +582,39 @@ function Combobox(props) {
582
582
  [inert, setOpenState, setSearchState]
583
583
  );
584
584
  const trimmed = search.trim();
585
- const visibleOptions = React6.useMemo(() => {
585
+ const visibleOptions = React7.useMemo(() => {
586
586
  const filtered = shouldFilter ? filterOptions(options, search) : options;
587
587
  return hideSelected ? filtered.filter((option) => !selection.includes(option.value)) : filtered;
588
588
  }, [options, search, shouldFilter, hideSelected, selection]);
589
589
  const showCreate = onCreate !== void 0 && trimmed.length > 0 && !options.some((option) => foldForMatch(option.label) === foldForMatch(trimmed));
590
- const groups = React6.useMemo(() => groupOptions(visibleOptions), [visibleOptions]);
590
+ const groups = React7.useMemo(() => groupOptions(visibleOptions), [visibleOptions]);
591
591
  const hasGroups = groups.some((group) => group.group !== void 0);
592
- const rows = React6.useMemo(() => {
592
+ const rows = React7.useMemo(() => {
593
593
  const list = groups.flatMap((group) => group.options);
594
594
  if (showCreate) list.push({ value: CREATE_ROW, label: messages.create(trimmed) });
595
595
  return list;
596
596
  }, [groups, showCreate, messages, trimmed]);
597
- const [highlightedValue, setHighlightedValue] = React6.useState(null);
597
+ const [highlightedValue, setHighlightedValue] = React7.useState(null);
598
598
  const highlightedIndex = indexOfValue(rows, highlightedValue);
599
- React6.useEffect(() => {
599
+ React7.useEffect(() => {
600
600
  if (!open) return;
601
601
  setHighlightedValue((current) => reconcileHighlight(rows, current, "first"));
602
602
  }, [open, rows]);
603
- const openList = React6.useCallback(() => {
603
+ const openList = React7.useCallback(() => {
604
604
  if (open) return;
605
605
  setHighlightedValue(value !== null && findOption(rows, value) ? value : null);
606
606
  setOpen(true);
607
607
  }, [open, rows, setOpen, value]);
608
- const scrollHighlightedIntoView = React6.useCallback(() => {
608
+ const scrollHighlightedIntoView = React7.useCallback(() => {
609
609
  const id = activeDescendantId(listId, rows, highlightedIndex);
610
610
  if (!id) return;
611
611
  document.getElementById(id)?.scrollIntoView({ block: "nearest" });
612
612
  }, [listId, rows, highlightedIndex]);
613
- React6.useEffect(() => {
613
+ React7.useEffect(() => {
614
614
  if (open) scrollHighlightedIntoView();
615
615
  }, [open, scrollHighlightedIntoView]);
616
616
  const focusInput = () => inputRef.current?.focus();
617
- const activateRow = React6.useCallback(
617
+ const activateRow = React7.useCallback(
618
618
  (option) => {
619
619
  if (option.disabled) return;
620
620
  if (option.value === CREATE_ROW) {
@@ -701,7 +701,7 @@ function Combobox(props) {
701
701
  option.value
702
702
  )) : null;
703
703
  const hasChips = props.multiple === true && selectedOptions.length > 0;
704
- const cmdkCompat = React6.useContext(CmdkCompatContext);
704
+ const cmdkCompat = React7.useContext(CmdkCompatContext);
705
705
  const buttonSize = BUTTON_SIZE[size];
706
706
  const indexByValue = new Map(rows.map((row, index) => [row.value, index]));
707
707
  const renderRow = (option) => {
@@ -1043,7 +1043,7 @@ function ClientSelect({
1043
1043
  placeholder = "Select a client...",
1044
1044
  size
1045
1045
  }) {
1046
- const options = React6.useMemo(
1046
+ const options = React7.useMemo(
1047
1047
  () => clients.map((client) => ({
1048
1048
  value: client.id,
1049
1049
  label: client.label,
@@ -1079,11 +1079,11 @@ function ClientSelect({
1079
1079
  ] });
1080
1080
  }
1081
1081
  ClientSelect.displayName = "ClientSelect";
1082
- var Collapsible = React6.forwardRef(function Collapsible2({ className, ...props }, ref) {
1082
+ var Collapsible = React7.forwardRef(function Collapsible2({ className, ...props }, ref) {
1083
1083
  return /* @__PURE__ */ jsx(CollapsiblePrimitive.Root, { ref, className: cn(className), ...props });
1084
1084
  });
1085
1085
  Collapsible.displayName = CollapsiblePrimitive.Root.displayName;
1086
- var CollapsibleTrigger = React6.forwardRef(function CollapsibleTrigger2({ className, ...props }, ref) {
1086
+ var CollapsibleTrigger = React7.forwardRef(function CollapsibleTrigger2({ className, ...props }, ref) {
1087
1087
  return /* @__PURE__ */ jsx(
1088
1088
  CollapsiblePrimitive.Trigger,
1089
1089
  {
@@ -1099,7 +1099,7 @@ var CollapsibleTrigger = React6.forwardRef(function CollapsibleTrigger2({ classN
1099
1099
  );
1100
1100
  });
1101
1101
  CollapsibleTrigger.displayName = CollapsiblePrimitive.Trigger.displayName;
1102
- var CollapsibleContent = React6.forwardRef(function CollapsibleContent2({ className, ...props }, ref) {
1102
+ var CollapsibleContent = React7.forwardRef(function CollapsibleContent2({ className, ...props }, ref) {
1103
1103
  return /* @__PURE__ */ jsx(
1104
1104
  CollapsiblePrimitive.Content,
1105
1105
  {
@@ -1243,7 +1243,7 @@ function Logo({
1243
1243
  }) {
1244
1244
  const RouterLink = useLinkComponent() ?? PlainLink;
1245
1245
  const Img = useImageComponent() ?? PlainImage;
1246
- const [artworkFailed, setArtworkFailed] = React6.useState(false);
1246
+ const [artworkFailed, setArtworkFailed] = React7.useState(false);
1247
1247
  const s = sizeStyles[size];
1248
1248
  const standaloneLabel = productName ? standaloneBrands[productName] : void 0;
1249
1249
  const isStandalone = Boolean(standaloneLabel);
@@ -1333,13 +1333,13 @@ function Logo({
1333
1333
  }
1334
1334
  return /* @__PURE__ */ jsx(RouterLink, { href, className: wrapperClassName, "aria-label": ariaLabel, children: content });
1335
1335
  }
1336
- var SheetSideContext = React6.createContext({});
1336
+ var SheetSideContext = React7.createContext({});
1337
1337
  var Sheet = ({ side, children, ...props }) => /* @__PURE__ */ jsx(SheetPrimitive.Root, { ...props, children: /* @__PURE__ */ jsx(SheetSideContext, { value: { side }, children }) });
1338
1338
  Sheet.displayName = "Sheet";
1339
1339
  var SheetTrigger = SheetPrimitive.Trigger;
1340
1340
  var SheetClose = SheetPrimitive.Close;
1341
1341
  var SheetPortal = withPortalContainer(SheetPrimitive.Portal);
1342
- var SheetOverlay = React6.forwardRef((props, ref) => /* @__PURE__ */ jsx(
1342
+ var SheetOverlay = React7.forwardRef((props, ref) => /* @__PURE__ */ jsx(
1343
1343
  Backdrop,
1344
1344
  {
1345
1345
  as: SheetPrimitive.Overlay,
@@ -1357,7 +1357,7 @@ var SHEET_SIZES = {
1357
1357
  xl: "ds:w-[95vw] ds:max-w-[95vw] ds:sm:w-[var(--ds-sheet-width,760px)]",
1358
1358
  full: "ds:w-full ds:max-w-none"
1359
1359
  };
1360
- var SheetContent = React6.forwardRef(
1360
+ var SheetContent = React7.forwardRef(
1361
1361
  ({
1362
1362
  side,
1363
1363
  size,
@@ -1371,7 +1371,7 @@ var SheetContent = React6.forwardRef(
1371
1371
  style,
1372
1372
  ...props
1373
1373
  }, ref) => {
1374
- const ctx = React6.use(SheetSideContext);
1374
+ const ctx = React7.use(SheetSideContext);
1375
1375
  const resolvedSide = side ?? ctx.side ?? "right";
1376
1376
  const supportsWidth = resolvedSide === "left" || resolvedSide === "right";
1377
1377
  if (width !== void 0) {
@@ -1426,16 +1426,396 @@ var SheetContent = React6.forwardRef(
1426
1426
  SheetContent.displayName = SheetPrimitive.Content.displayName;
1427
1427
  var SheetHeader = (props) => /* @__PURE__ */ jsx(OverlayHeader, { anatomy: sheetAnatomy, layout: "padded", dismissGutter: true, ...props });
1428
1428
  SheetHeader.displayName = "SheetHeader";
1429
- var SheetBody = React6.forwardRef(
1429
+ var SheetBody = React7.forwardRef(
1430
1430
  ({ padding = "md", ...props }, ref) => /* @__PURE__ */ jsx(OverlayBody, { anatomy: sheetAnatomy, layout: "padded", padding, ref, ...props })
1431
1431
  );
1432
1432
  SheetBody.displayName = "SheetBody";
1433
1433
  var SheetFooter = (props) => /* @__PURE__ */ jsx(OverlayFooter, { anatomy: sheetAnatomy, layout: "padded", ...props });
1434
1434
  SheetFooter.displayName = "SheetFooter";
1435
- var SheetTitle = React6.forwardRef((props, ref) => /* @__PURE__ */ jsx(OverlayTitle, { as: SheetPrimitive.Title, anatomy: sheetAnatomy, ref, ...props }));
1435
+ var SheetTitle = React7.forwardRef((props, ref) => /* @__PURE__ */ jsx(OverlayTitle, { as: SheetPrimitive.Title, anatomy: sheetAnatomy, ref, ...props }));
1436
1436
  SheetTitle.displayName = SheetPrimitive.Title.displayName;
1437
- var SheetDescription = React6.forwardRef((props, ref) => /* @__PURE__ */ jsx(OverlayDescription, { as: SheetPrimitive.Description, anatomy: sheetAnatomy, ref, ...props }));
1437
+ var SheetDescription = React7.forwardRef((props, ref) => /* @__PURE__ */ jsx(OverlayDescription, { as: SheetPrimitive.Description, anatomy: sheetAnatomy, ref, ...props }));
1438
1438
  SheetDescription.displayName = SheetPrimitive.Description.displayName;
1439
+ var VENDOR_NAMES = {
1440
+ cch_axcess: "CCH Axcess",
1441
+ ultratax: "UltraTax CS",
1442
+ atx: "ATX",
1443
+ taxact: "TaxAct",
1444
+ proconnect: "ProConnect Tax",
1445
+ proseries: "ProSeries",
1446
+ lacerte: "Lacerte",
1447
+ drake: "Drake Tax"
1448
+ };
1449
+ function createMarks() {
1450
+ return {
1451
+ taxact: {
1452
+ viewBox: "0 0 94 20",
1453
+ aspect: 94 / 20,
1454
+ scale: 0.4,
1455
+ square: false,
1456
+ paths: () => /* @__PURE__ */ jsxs(Fragment, { children: [
1457
+ /* @__PURE__ */ jsx(
1458
+ "path",
1459
+ {
1460
+ fill: "#6651E1",
1461
+ fillRule: "evenodd",
1462
+ clipRule: "evenodd",
1463
+ d: "M4.64362 19.927V4.74818H0V0H15.4023V4.74818H10.9131V19.927H4.64362"
1464
+ }
1465
+ ),
1466
+ /* @__PURE__ */ jsx(
1467
+ "path",
1468
+ {
1469
+ fill: "#6651E1",
1470
+ fillRule: "evenodd",
1471
+ clipRule: "evenodd",
1472
+ d: "M18.5165 19.9994C17.2519 19.9994 13.2461 19.8441 13.2461 15.5966C13.2461 11.8396 17.5306 11.3725 18.8347 11.319L22.8343 11.1504V10.5649C22.8343 9.85443 22.4225 8.66252 19.8657 8.66252C18.3062 8.66252 16.5283 9.21718 15.2941 9.83249L13.9775 6.43572C15.1973 5.91631 17.6841 5.05078 20.738 5.05078C23.6092 5.05078 25.2969 5.55738 26.6254 6.74436C27.9297 7.91212 28.4072 9.47997 28.4072 11.8281V19.9264H23.0856L22.8775 17.9762L22.2127 18.6164C21.4781 19.355 20.2878 19.9994 18.5165 19.9994ZM22.8344 16.1121V13.0047L20.7391 13.1415C19.3752 13.1972 18.5516 13.8638 18.5516 14.9699C18.5516 16.1005 19.3563 16.8026 20.7001 16.8026C21.7463 16.8026 22.5902 16.2442 22.8699 16.0388L22.8344 16.1121Z"
1473
+ }
1474
+ ),
1475
+ /* @__PURE__ */ jsx(
1476
+ "path",
1477
+ {
1478
+ fill: "#6651E1",
1479
+ fillRule: "evenodd",
1480
+ clipRule: "evenodd",
1481
+ d: "M47.7637 19.7975L47.8264 19.9284H41.3522L38.613 15.443L35.9041 19.9284H29.4297C29.4297 19.9284 29.4522 19.8453 29.5 19.7874C30.067 19.0759 34.0101 14.4419 42.1901 12.5195"
1482
+ }
1483
+ ),
1484
+ /* @__PURE__ */ jsx(
1485
+ "path",
1486
+ {
1487
+ fill: "#6651E1",
1488
+ fillRule: "evenodd",
1489
+ clipRule: "evenodd",
1490
+ d: "M50.2535 1.63281L43.8457 9.7043L43.7492 9.83027C41.055 10.2062 38.1655 10.9899 35.1353 12.3295L30.0156 5.44694H36.4773L38.6119 9.76322L44.0426 1.63281H50.2535"
1491
+ }
1492
+ ),
1493
+ /* @__PURE__ */ jsx(
1494
+ "path",
1495
+ {
1496
+ fill: "#6651E1",
1497
+ fillRule: "evenodd",
1498
+ clipRule: "evenodd",
1499
+ d: "M62.4657 0H55.6177L52.2251 9.75915C53.9761 9.95612 55.589 10.2046 56.9987 10.6032L59.0418 3.14458L61.4288 11.844C63.213 13.029 63.8906 13.6847 63.9558 13.7303C59.2977 12.3402 55.1813 11.7281 51.5667 11.6423L48.7699 19.7969L48.7422 19.927H54.8002L55.5802 16.8133H62.1723L62.9824 19.927H69.3438L62.4657 0"
1500
+ }
1501
+ ),
1502
+ /* @__PURE__ */ jsx(
1503
+ "path",
1504
+ {
1505
+ fill: "#6651E1",
1506
+ fillRule: "evenodd",
1507
+ clipRule: "evenodd",
1508
+ d: "M76.5238 19.9262C72.7006 19.9262 68.5859 17.5981 68.5859 12.487C68.5859 7.37791 72.7006 5.05078 76.5238 5.05078C79.0681 5.05078 80.7735 5.72649 81.4071 6.02773L80.5575 10.1039C79.9293 9.76125 78.8924 9.34438 77.5731 9.34438C75.6663 9.34438 74.3348 10.6009 74.3348 12.4C74.3348 14.2937 75.6011 15.4243 77.7224 15.4243C78.949 15.4243 79.9741 14.9864 80.5739 14.6554L81.5549 18.7781C80.9747 19.1196 79.3103 19.9262 76.5238 19.9262"
1509
+ }
1510
+ ),
1511
+ /* @__PURE__ */ jsx(
1512
+ "path",
1513
+ {
1514
+ fill: "#6651E1",
1515
+ fillRule: "evenodd",
1516
+ clipRule: "evenodd",
1517
+ d: "M89.9925 19.9982C88.2955 19.9982 87.1047 19.5951 86.2181 18.8008C85.4015 18.0413 85.1378 16.7417 85.1378 14.717V9.80587H82.7383V5.44694H85.1378V1.63281H90.8683V5.44694H93.962V9.80587H90.8653V13.9703C90.8653 15.4642 91.9586 15.4642 92.4523 15.4642C92.8437 15.4642 93.7019 15.4132 93.999 15.3597L93.9372 19.4529C93.182 19.619 91.5794 19.9982 89.9925 19.9982"
1518
+ }
1519
+ )
1520
+ ] })
1521
+ },
1522
+ drake: {
1523
+ viewBox: "0 0 120 16",
1524
+ aspect: 120 / 16,
1525
+ scale: 0.34,
1526
+ square: false,
1527
+ paths: () => /* @__PURE__ */ jsxs(Fragment, { children: [
1528
+ /* @__PURE__ */ jsx(
1529
+ "path",
1530
+ {
1531
+ fill: "#474749",
1532
+ fillRule: "evenodd",
1533
+ clipRule: "evenodd",
1534
+ d: "M7.49821 11.9465C7.04988 12.3497 6.50664 12.6403 5.88373 12.8111C5.25066 12.9839 4.53841 13.072 3.76649 13.072C3.46357 13.072 3.17359 13.0622 2.90459 13.0427C2.68985 13.0272 2.5079 13.0106 2.3525 12.9916V2.37657C2.54281 2.35047 2.75886 2.33436 2.99687 2.3292C3.29686 2.32275 3.5734 2.3192 3.82666 2.3192C4.58382 2.3192 5.2846 2.41653 5.90931 2.60879C6.52533 2.79781 7.06218 3.10771 7.50494 3.53007C7.94769 3.95308 8.29652 4.5084 8.54175 5.18072C8.78879 5.85882 8.91419 6.69197 8.91419 7.65595C8.91419 8.71277 8.78879 9.60263 8.54125 10.3006C8.29652 10.9906 7.94556 11.5446 7.49821 11.9465ZM9.46412 2.16468C8.1888 0.877587 6.24451 0.225098 3.68468 0.225098C3.07242 0.225098 2.43393 0.248464 1.78676 0.294391C1.14238 0.341125 0.586354 0.39092 0.13409 0.44297L0 0.458763V14.9084L0.129172 14.9273C0.57242 14.9931 1.1096 15.05 1.72628 15.0965C2.34624 15.1425 2.97832 15.1658 3.60452 15.1658C6.16205 15.1658 8.1188 14.5478 9.41986 13.329C10.7234 12.108 11.384 10.219 11.384 7.71527C11.384 5.31803 10.7381 3.4508 9.46412 2.16468Z"
1535
+ }
1536
+ ),
1537
+ /* @__PURE__ */ jsx(
1538
+ "path",
1539
+ {
1540
+ fill: "#474749",
1541
+ fillRule: "evenodd",
1542
+ clipRule: "evenodd",
1543
+ d: "M18.5888 4.99647C18.5747 4.85949 18.5536 4.72767 18.5256 4.60407L18.5034 4.50594L18.4024 4.48934C18.3178 4.47564 18.2156 4.46516 18.0952 4.45791C17.1782 4.40602 16.4475 4.57297 15.8897 4.96973C15.5444 5.21579 15.245 5.49716 14.9961 5.80947C14.986 5.68731 14.9724 5.55663 14.9551 5.41771C14.9148 5.09284 14.8737 4.82694 14.8328 4.62713L14.8134 4.53156L14.7169 4.51061C14.5909 4.48322 14.4496 4.46227 14.296 4.44825C13.9942 4.42214 13.687 4.42117 13.4039 4.44857C13.2663 4.46227 13.1221 4.48273 12.9708 4.50949L12.8462 4.53156V14.9059L12.9731 14.9267C13.1351 14.9532 13.3118 14.9736 13.4988 14.9875C13.6834 15.0008 13.8509 15.0077 14.0015 15.0077C14.152 15.0077 14.3198 15.0008 14.5046 14.9875C14.6911 14.9736 14.8619 14.9532 15.0122 14.9265L15.1369 14.9041V9.74745C15.1369 9.08335 15.2116 8.53545 15.3592 8.11905C15.5044 7.7094 15.7012 7.38356 15.9441 7.1507C16.1868 6.91865 16.4632 6.7546 16.766 6.66372C17.0775 6.56961 17.4104 6.52222 17.7552 6.52222H18.0262C18.127 6.52222 18.2261 6.53382 18.3209 6.5572L18.4804 6.5962L18.5071 6.43682C18.5342 6.27664 18.5579 6.11001 18.5785 5.93613C18.5989 5.75999 18.6096 5.58836 18.6096 5.42578C18.6096 5.27848 18.6026 5.13393 18.5888 4.99647Z"
1544
+ }
1545
+ ),
1546
+ /* @__PURE__ */ jsx(
1547
+ "path",
1548
+ {
1549
+ fill: "#474749",
1550
+ fillRule: "evenodd",
1551
+ clipRule: "evenodd",
1552
+ d: "M24.5522 10.1548V13.1232C24.3336 13.1733 24.0865 13.2123 23.8151 13.2394C23.2473 13.2971 22.7247 13.3082 22.1292 13.2494C21.883 13.2252 21.6561 13.1578 21.4544 13.0496C21.257 12.9441 21.0897 12.7883 20.957 12.5867C20.8266 12.3887 20.7604 12.1038 20.7604 11.74C20.7604 11.1681 20.953 10.7561 21.3488 10.4805C21.7557 10.1977 22.3644 10.0541 23.1582 10.0541C23.3667 10.0541 23.6259 10.0672 23.9279 10.0928C24.1691 10.1134 24.3773 10.1342 24.5522 10.1548ZM25.7067 5.20395C24.9852 4.58385 23.925 4.26929 22.5556 4.26929C22.0414 4.26929 21.5005 4.30958 20.9479 4.38902C20.3933 4.46879 19.8784 4.58352 19.4179 4.73033L19.3128 4.76385V4.8723C19.3128 5.50143 19.4479 6.05111 19.7144 6.5057L19.7748 6.60884L19.8906 6.57354C20.2725 6.45704 20.6683 6.36244 21.0668 6.29203C21.4654 6.22144 21.8988 6.18566 22.3548 6.18566C23.0796 6.18566 23.6364 6.32812 24.0091 6.60852C24.3693 6.88037 24.5519 7.38509 24.5519 8.10865V8.31395C24.3973 8.29622 24.2202 8.27996 24.0222 8.26561C23.7453 8.24578 23.3869 8.23563 22.9571 8.23563C22.3706 8.23563 21.8036 8.30702 21.2719 8.44819C20.735 8.59016 20.2525 8.80997 19.8376 9.10213C19.4187 9.39751 19.0827 9.77299 18.839 10.2184C18.5939 10.6661 18.4697 11.1909 18.4697 11.779C18.4697 12.3781 18.5759 12.8982 18.7857 13.3239C18.9966 13.7523 19.2995 14.1098 19.6862 14.3859C20.069 14.66 20.5402 14.8609 21.0867 14.9831C21.6247 15.1032 22.2339 15.1645 22.897 15.1645C23.596 15.1645 24.2936 15.1074 24.9698 14.9947C25.6368 14.8835 26.2136 14.7732 26.6845 14.6673L26.8025 14.6409V8.18761C26.8025 6.8338 26.4338 5.82968 25.7067 5.20395Z"
1553
+ }
1554
+ ),
1555
+ /* @__PURE__ */ jsx(
1556
+ "path",
1557
+ {
1558
+ fill: "#474749",
1559
+ fillRule: "evenodd",
1560
+ clipRule: "evenodd",
1561
+ d: "M30.0513 0.105939C29.6672 0.0788663 29.404 0.0793497 29.0357 0.105939C28.8513 0.119315 28.6805 0.139941 28.5279 0.167176L28.4033 0.189254V14.9035L28.5279 14.9254C28.6775 14.9521 28.8483 14.9726 29.0359 14.9867C29.2205 14.9997 29.3878 15.0067 29.5385 15.0067C29.6886 15.0067 29.8594 14.9997 30.0514 14.9867C30.2447 14.9726 30.4189 14.9522 30.5692 14.9254L30.6939 14.9035V0.189254L30.5692 0.167176C30.4161 0.139941 30.2419 0.119315 30.0513 0.105939Z"
1562
+ }
1563
+ ),
1564
+ /* @__PURE__ */ jsx(
1565
+ "path",
1566
+ {
1567
+ fill: "#474749",
1568
+ fillRule: "evenodd",
1569
+ clipRule: "evenodd",
1570
+ d: "M33.4585 9.39093L36.8083 4.54231L36.5675 4.50862C36.3765 4.48171 36.1895 4.46173 36.0053 4.44803C35.6443 4.4229 35.2401 4.42064 34.8682 4.4482C34.6905 4.4619 34.5127 4.48203 34.3352 4.50878L34.2687 4.51878L30.9023 9.53371L34.8145 14.9182L34.8788 14.9272C35.0694 14.9541 35.26 14.974 35.4516 14.9875C35.6425 15.0007 35.8331 15.0075 36.0243 15.0075C36.2092 15.0075 36.3952 15.001 36.578 14.9873C36.7549 14.974 36.9387 14.9538 37.1296 14.9272L37.3742 14.8932L33.4585 9.39093Z"
1571
+ }
1572
+ ),
1573
+ /* @__PURE__ */ jsx(
1574
+ "path",
1575
+ {
1576
+ fill: "#474749",
1577
+ fillRule: "evenodd",
1578
+ clipRule: "evenodd",
1579
+ d: "M41.723 6.12814C42.1116 6.12814 42.4496 6.19889 42.7278 6.33876C43.0068 6.47913 43.2394 6.66735 43.4189 6.89795C43.601 7.13306 43.7414 7.41233 43.8357 7.72787C43.9179 8.0031 43.9654 8.29317 43.9771 8.59258H39.2243C39.3286 7.8376 39.5757 7.23797 39.96 6.80771C40.3629 6.35681 40.956 6.12814 41.723 6.12814ZM45.9639 7.18479C45.7711 6.59546 45.4841 6.08028 45.1117 5.65355C44.7378 5.22409 44.2675 4.88246 43.7141 4.63751C43.1617 4.39305 42.5127 4.26929 41.785 4.26929C40.9368 4.26929 40.189 4.41673 39.5622 4.70777C38.9355 4.99896 38.4082 5.39781 37.9943 5.8927C37.581 6.38694 37.2708 6.97594 37.0726 7.64228C36.8753 8.30412 36.7754 9.02526 36.7754 9.78588C36.7754 10.56 36.8789 11.2821 37.0834 11.9316C37.2899 12.5887 37.6219 13.1651 38.0699 13.6459C38.5181 14.1275 39.0943 14.5057 39.7829 14.7695C40.4665 15.0317 41.2957 15.1645 42.2466 15.1645C42.8936 15.1645 43.4935 15.1173 44.0296 15.0238C44.5677 14.93 45.0685 14.7877 45.5178 14.6L45.6151 14.5595L45.6098 14.4556C45.5959 14.1711 45.5542 13.8797 45.4857 13.5901C45.4158 13.296 45.3234 13.0418 45.2108 12.8337L45.1473 12.717L45.0217 12.765C44.1871 13.0854 43.2941 13.248 42.3671 13.248C41.3277 13.248 40.5352 13.0027 40.0121 12.519C39.5152 12.0602 39.2397 11.3308 39.1921 10.3494H46.1791L46.1914 10.2137C46.2047 10.0684 46.2184 9.89272 46.2322 9.68678C46.2454 9.4797 46.2525 9.28245 46.2525 9.0952C46.2525 8.41273 46.1552 7.76992 45.9639 7.18479Z"
1580
+ }
1581
+ ),
1582
+ /* @__PURE__ */ jsx(
1583
+ "path",
1584
+ {
1585
+ fill: "#1C75BB",
1586
+ fillRule: "evenodd",
1587
+ clipRule: "evenodd",
1588
+ d: "M56.0496 8.14713C55.6977 7.82822 55.2684 7.54444 54.7736 7.30417C54.2765 7.06341 53.7337 6.82556 53.1596 6.59705C52.7313 6.43413 52.3294 6.26718 51.9652 6.10104C51.5941 5.93199 51.2693 5.74312 51 5.53976C50.7287 5.33446 50.5135 5.0916 50.3603 4.81765C50.2064 4.54353 50.1284 4.21672 50.1284 3.84625C50.1284 3.13558 50.3824 2.53949 50.8833 2.07475C51.3837 1.61047 52.2178 1.37503 53.3627 1.37503C53.8685 1.37503 54.387 1.41935 54.9034 1.50685C55.346 1.58259 55.7266 1.66736 56.035 1.75825L56.1361 1.78789L56.1685 1.68928C56.2156 1.54505 56.2578 1.39276 56.2939 1.23661C56.3305 1.07643 56.3618 0.913828 56.3872 0.753003L56.402 0.660021L56.3097 0.63472C56.1937 0.603296 56.0549 0.568166 55.8939 0.529974C55.6666 0.475827 55.4187 0.42845 55.157 0.388969C54.8993 0.349648 54.6093 0.315807 54.2951 0.28809C53.9873 0.261501 53.6807 0.247803 53.3834 0.247803C51.8647 0.247803 50.6938 0.584603 49.9033 1.24869C49.1146 1.91166 48.7146 2.7925 48.7146 3.86672C48.7146 4.46506 48.81 4.96913 48.9984 5.36539C49.1872 5.76326 49.4469 6.10909 49.7698 6.39303C50.0933 6.67907 50.4745 6.92546 50.9018 7.12529C51.3348 7.32769 51.7938 7.51786 52.2652 7.68995C52.9368 7.94569 53.5031 8.18807 53.9487 8.41013C54.3959 8.63349 54.7528 8.87086 55.0091 9.1158C55.2666 9.36268 55.4504 9.63727 55.555 9.93185C55.6593 10.2258 55.712 10.5813 55.712 10.9883C55.712 11.4091 55.6347 11.8059 55.4824 12.1683C55.3289 12.5309 55.0927 12.8494 54.7805 13.1153C54.4695 13.3806 54.0698 13.5944 53.5929 13.7506C53.1171 13.9063 52.5411 13.9853 51.881 13.9853C51.4676 13.9853 51.0987 13.965 50.7844 13.9244C50.4665 13.8838 50.178 13.8358 49.9265 13.7822C49.6693 13.7277 49.4359 13.6658 49.2324 13.5985C49.074 13.547 48.919 13.4988 48.7693 13.4554L48.6743 13.4273L48.6379 13.5182C48.5755 13.6758 48.5174 13.8462 48.4658 14.0247C48.4116 14.2114 48.3702 14.388 48.3426 14.5495L48.3267 14.6407L48.4167 14.6681C48.8429 14.7992 49.3056 14.9185 49.7914 15.0228C50.3221 15.1362 50.9973 15.1939 51.7986 15.1939C52.6261 15.1939 53.3838 15.0957 54.0503 14.9019C54.713 14.7095 55.2826 14.4263 55.7432 14.0603C56.2018 13.6952 56.561 13.2376 56.8112 12.7001C57.0613 12.1615 57.188 11.5377 57.188 10.8467C57.188 10.2359 57.0854 9.70769 56.8833 9.27662C56.6808 8.84587 56.4004 8.46588 56.0496 8.14713Z"
1589
+ }
1590
+ ),
1591
+ /* @__PURE__ */ jsx(
1592
+ "path",
1593
+ {
1594
+ fill: "#1C75BB",
1595
+ fillRule: "evenodd",
1596
+ clipRule: "evenodd",
1597
+ d: "M66.4513 9.8329C66.4513 11.1448 66.1749 12.1947 65.6302 12.9536C65.0819 13.7177 64.2424 14.1051 63.135 14.1051C62.027 14.1051 61.1874 13.7177 60.6394 12.9536C60.0946 12.1948 59.8183 11.145 59.8183 9.8329C59.8183 8.52148 60.0946 7.47174 60.6394 6.7129C61.1877 5.94874 62.0275 5.56118 63.135 5.56118C64.2419 5.56118 65.0815 5.94874 65.6302 6.7129C66.1749 7.47191 66.4513 8.52163 66.4513 9.8329ZM66.6106 6.01534C66.2266 5.53785 65.7401 5.15722 65.1646 4.88392C64.589 4.61173 63.9064 4.47363 63.1363 4.47363C62.3647 4.47363 61.6786 4.61189 61.0969 4.88439C60.5164 5.15642 60.0267 5.53705 59.6408 6.01534C59.2553 6.49459 58.9637 7.06812 58.7743 7.72028C58.5842 8.37471 58.4878 9.08553 58.4878 9.8323C58.4878 10.5803 58.5842 11.291 58.7743 11.9446C58.9641 12.5978 59.2555 13.1712 59.6408 13.6497C60.0265 14.1282 60.5163 14.5089 61.0969 14.7809C61.6784 15.0533 62.3646 15.1913 63.1363 15.1913C63.9069 15.1913 64.5895 15.0533 65.1649 14.781C65.7386 14.509 66.2251 14.1283 66.6109 13.6497C66.9959 13.1715 67.2911 12.5978 67.4883 11.9446C67.6846 11.2904 67.7843 10.5797 67.7843 9.8323C67.7843 9.08553 67.6845 8.37471 67.4878 7.72012C67.2911 7.06731 66.9959 6.49346 66.6106 6.01534Z"
1598
+ }
1599
+ ),
1600
+ /* @__PURE__ */ jsx(
1601
+ "path",
1602
+ {
1603
+ fill: "#1C75BB",
1604
+ fillRule: "evenodd",
1605
+ clipRule: "evenodd",
1606
+ d: "M74.2729 4.80947L74.2632 4.71407H71.6746V3.82115C71.6746 3.26584 71.7272 2.80575 71.8309 2.45349C71.9351 2.098 72.0836 1.8163 72.2726 1.6168C72.4633 1.41569 72.7024 1.27533 72.9829 1.19943C73.2609 1.12465 73.5834 1.08662 73.9414 1.08662C74.1737 1.08662 74.3976 1.10403 74.6072 1.13803C74.7446 1.16043 74.8639 1.1817 74.9649 1.20104L75.0641 1.22054L75.0896 1.12465C75.1277 0.984938 75.1588 0.858115 75.1849 0.73661C75.2123 0.605274 75.238 0.440257 75.2615 0.246235L75.2731 0.15019L75.1774 0.130369C75.0454 0.10249 74.8871 0.0754175 74.7067 0.0497949C74.4664 0.0167594 74.2019 0 73.9209 0C72.7047 0 71.8054 0.315045 71.2476 0.936272C70.6879 1.55911 70.4044 2.50924 70.4044 3.76024V4.71407H68.6047L68.5942 4.80802C68.5895 4.84686 68.5862 4.8894 68.5832 4.93646C68.5763 5.04169 68.5728 5.14966 68.5728 5.2573C68.5728 5.36834 68.5759 5.46647 68.5832 5.5572C68.586 5.5962 68.5888 5.63277 68.5931 5.66662L68.604 5.76041H70.4044V14.9534L70.5019 14.9625C70.5616 14.968 70.6318 14.9722 70.713 14.9764C70.8626 14.9828 70.9714 14.9863 71.0394 14.9863C71.1214 14.9863 71.2338 14.9828 71.3776 14.9764C71.4525 14.9722 71.5194 14.9681 71.5772 14.963L71.6746 14.9538V5.76041H74.2625L74.273 5.66678C74.2772 5.63246 74.2805 5.59572 74.2831 5.55737C74.29 5.46341 74.2937 5.36253 74.2937 5.2573C74.2937 5.15256 74.29 5.04475 74.2831 4.93646C74.2802 4.89005 74.2766 4.84782 74.2729 4.80947Z"
1607
+ }
1608
+ ),
1609
+ /* @__PURE__ */ jsx(
1610
+ "path",
1611
+ {
1612
+ fill: "#1C75BB",
1613
+ fillRule: "evenodd",
1614
+ clipRule: "evenodd",
1615
+ d: "M80.4232 14.0234L80.3968 13.9163L80.2891 13.9464C79.9638 14.0378 79.5877 14.0841 79.171 14.0841C78.9754 14.0841 78.7823 14.0667 78.5966 14.0327C78.4053 13.9984 78.233 13.924 78.084 13.8118C77.935 13.7004 77.8128 13.5415 77.7206 13.3399C77.6281 13.1382 77.5832 12.8712 77.5832 12.5236V5.7629H80.4338L80.4435 5.6675C80.4474 5.62931 80.4509 5.58677 80.4544 5.5402C80.461 5.43142 80.4643 5.32345 80.4643 5.21935C80.4643 5.11493 80.4608 5.01389 80.4539 4.91929C80.4514 4.88094 80.448 4.84435 80.4439 4.81036L80.4329 4.71657H77.5832V1.52051L76.313 2.74942V4.71657H74.5126L74.5017 4.81019C74.4975 4.84435 74.4945 4.88078 74.4919 4.918C74.4848 5.00824 74.4814 5.10686 74.4814 5.21935C74.4814 5.33102 74.4849 5.43899 74.4917 5.5402C74.495 5.58709 74.498 5.62947 74.502 5.66831L74.5121 5.7629H76.313V12.584C76.313 13.4973 76.5536 14.1638 77.0284 14.5644C77.5049 14.9668 78.1357 15.1707 78.9032 15.1707C79.5 15.1707 80.0359 15.1084 80.496 14.9851L80.5855 14.9611L80.5745 14.8708C80.5398 14.5759 80.489 14.2909 80.4232 14.0234Z"
1616
+ }
1617
+ ),
1618
+ /* @__PURE__ */ jsx(
1619
+ "path",
1620
+ {
1621
+ fill: "#1C75BB",
1622
+ fillRule: "evenodd",
1623
+ clipRule: "evenodd",
1624
+ d: "M94.3946 4.68878C94.125 4.67621 93.9208 4.67638 93.6898 4.68895C93.6195 4.69329 93.5554 4.69845 93.4977 4.70506L93.4244 4.71295L91.0659 13.4966L88.4346 4.71022L88.3683 4.6991C88.2892 4.68572 88.209 4.67896 88.1306 4.67896H87.7909C87.6454 4.67896 87.504 4.68217 87.3707 4.68878C87.2811 4.69411 87.1965 4.70039 87.1161 4.70779L87.0434 4.71473L84.4132 13.6205L82.0547 4.71312L81.9802 4.7057C81.9123 4.6991 81.8282 4.69362 81.728 4.68878C81.3625 4.67412 81.1519 4.6783 80.929 4.68878C80.881 4.69185 80.8365 4.69475 80.7951 4.69781L80.6636 4.70779L83.6688 14.9578L83.7369 14.9682C84.1258 15.0275 84.5535 15.0269 84.9723 14.9661L85.0397 14.9567L87.7305 6.30494L90.2763 14.8934L90.2956 14.9578L90.3633 14.9682C90.5545 14.9971 90.7563 15.0121 90.9629 15.0121C91.1737 15.0121 91.3874 14.9966 91.598 14.9661L91.6664 14.9563L94.6714 4.70813L94.5399 4.6983C94.4957 4.69491 94.4474 4.69153 94.3946 4.68878Z"
1625
+ }
1626
+ ),
1627
+ /* @__PURE__ */ jsx(
1628
+ "path",
1629
+ {
1630
+ fill: "#1C75BB",
1631
+ fillRule: "evenodd",
1632
+ clipRule: "evenodd",
1633
+ d: "M102.015 9.93764V13.8764L101.98 13.8832C101.625 13.9501 101.257 14.0047 100.886 14.0453C100.515 14.0858 100.112 14.1062 99.6869 14.1062C99.3586 14.1062 99.0241 14.0823 98.6927 14.0355C98.3603 13.9875 98.0508 13.8906 97.773 13.747C97.4923 13.6026 97.2616 13.3898 97.0872 13.1147C96.9122 12.8406 96.8235 12.4719 96.8235 12.0195C96.8235 11.306 97.1137 10.7492 97.6861 10.3647C98.253 9.98454 99.0713 9.7918 100.118 9.7918C100.425 9.7918 100.755 9.80857 101.101 9.84176C101.451 9.87593 101.743 9.90557 101.977 9.93314L102.015 9.93764ZM99.4003 4.47363C98.8595 4.47363 98.3217 4.51101 97.8014 4.58482C97.3395 4.6504 96.9362 4.73082 96.6026 4.8238L96.5206 4.84653L96.5243 4.93C96.5318 5.09631 96.5549 5.2726 96.5928 5.45357C96.6268 5.61262 96.665 5.74525 96.7066 5.84807L96.7427 5.93702L96.8364 5.91043C97.1652 5.81776 97.5341 5.73751 97.9321 5.67274C98.3871 5.59829 98.8948 5.56058 99.4414 5.56058C100.287 5.56058 100.934 5.77233 101.366 6.19002C101.798 6.60852 102.017 7.27584 102.017 8.17344V8.84945L101.968 8.84397C101.734 8.81723 101.44 8.78645 101.083 8.7526C100.73 8.7194 100.303 8.70232 99.8121 8.70232C99.1878 8.70232 98.6068 8.77677 98.0853 8.92326C97.5646 9.06974 97.1126 9.28826 96.7417 9.57317C96.3708 9.85872 96.0773 10.2147 95.8692 10.6308C95.6605 11.0472 95.5547 11.5274 95.5547 12.0581C95.5547 13.1574 95.9189 13.9622 96.6367 14.4499C97.3597 14.942 98.3656 15.1913 99.627 15.1913C100.238 15.1913 100.894 15.1437 101.576 15.05C102.199 14.9642 102.745 14.877 103.2 14.7907L103.287 14.7743V7.9915C103.287 6.78224 102.966 5.88449 102.335 5.32272C101.701 4.75935 100.714 4.47363 99.4003 4.47363Z"
1634
+ }
1635
+ ),
1636
+ /* @__PURE__ */ jsx(
1637
+ "path",
1638
+ {
1639
+ fill: "#1C75BB",
1640
+ fillRule: "evenodd",
1641
+ clipRule: "evenodd",
1642
+ d: "M110.578 4.71223L110.493 4.70514C110.445 4.70112 110.4 4.69902 110.358 4.69902H110.142C109.346 4.69902 108.696 4.86983 108.213 5.2068C107.727 5.54505 107.344 5.96548 107.073 6.45635L106.991 6.60686V6.43587C106.991 6.17449 106.984 5.88055 106.97 5.53731C106.959 5.269 106.942 5.02115 106.921 4.80038L106.913 4.71448L106.826 4.70546C106.761 4.6982 106.699 4.69306 106.64 4.68886C106.453 4.67581 106.245 4.67549 106.04 4.68886C105.98 4.69258 105.92 4.69757 105.858 4.70385L105.762 4.71368V14.9586L105.859 14.9675C105.918 14.9729 105.989 14.9772 106.07 14.9814C106.22 14.9878 106.328 14.9913 106.397 14.9913C106.479 14.9913 106.591 14.9878 106.735 14.9814C106.81 14.9772 106.876 14.9731 106.934 14.968L107.032 14.9588V9.69317C107.032 8.33936 107.32 7.35603 107.887 6.77026C108.456 6.18416 109.222 5.887 110.163 5.887H110.358C110.392 5.887 110.433 5.88894 110.482 5.89296L110.582 5.90118L110.597 5.8032C110.621 5.64609 110.633 5.48445 110.633 5.32315C110.633 5.1578 110.619 4.98022 110.591 4.79489L110.578 4.71223Z"
1643
+ }
1644
+ ),
1645
+ /* @__PURE__ */ jsx(
1646
+ "path",
1647
+ {
1648
+ fill: "#1C75BB",
1649
+ fillRule: "evenodd",
1650
+ clipRule: "evenodd",
1651
+ d: "M112.44 8.96597L112.445 8.91826C112.555 7.86209 112.884 7.03025 113.424 6.44528C113.965 5.85854 114.731 5.56106 115.7 5.56106C116.225 5.56106 116.682 5.65791 117.057 5.84903C117.432 6.0408 117.742 6.29348 117.978 6.59982C118.213 6.90648 118.389 7.26906 118.5 7.67742C118.61 8.08335 118.666 8.50234 118.666 8.92278V8.96597H112.44ZM119.661 7.22544C119.479 6.6611 119.204 6.16944 118.846 5.76383C118.489 5.35951 118.041 5.03995 117.514 4.8137C116.987 4.58793 116.377 4.47351 115.7 4.47351C114.887 4.47351 114.181 4.615 113.6 4.89411C113.018 5.17321 112.536 5.56352 112.164 6.05422C111.792 6.54781 111.511 7.12843 111.328 7.77996C111.145 8.43406 111.052 9.14488 111.052 9.89293C111.052 10.6679 111.152 11.3887 111.348 12.0349C111.544 12.681 111.853 13.2441 112.265 13.7081C112.677 14.173 113.211 14.5403 113.854 14.7996C114.497 15.0594 115.278 15.1911 116.173 15.1911C116.799 15.1911 117.384 15.1436 117.915 15.0499C118.397 14.965 118.83 14.8447 119.203 14.6916L119.276 14.6615L119.268 14.5832C119.253 14.4368 119.229 14.2775 119.197 14.1088C119.168 13.9595 119.132 13.8244 119.09 13.7071L119.055 13.6085L118.954 13.6421C118.572 13.7691 118.176 13.8734 117.777 13.9518C117.332 14.0396 116.841 14.0839 116.317 14.0839C115.021 14.0839 114.034 13.7528 113.384 13.0998C112.734 12.4471 112.404 11.4158 112.404 10.0346V9.99123H119.9L119.908 9.89326C119.916 9.79028 119.922 9.67522 119.926 9.54711C119.933 9.35921 119.937 9.20451 119.937 9.08364C119.937 8.41794 119.844 7.79285 119.661 7.22544Z"
1652
+ }
1653
+ ),
1654
+ /* @__PURE__ */ jsx(
1655
+ "path",
1656
+ {
1657
+ fill: "#474749",
1658
+ fillRule: "evenodd",
1659
+ clipRule: "evenodd",
1660
+ d: "M119.402 3.29493C119.368 3.27607 119.313 3.26656 119.237 3.26656H119.12V3.54228H119.244C119.301 3.54228 119.345 3.53665 119.374 3.52536C119.427 3.50458 119.454 3.46493 119.454 3.40627C119.454 3.35101 119.436 3.31378 119.402 3.29493ZM119.256 3.17401C119.352 3.17401 119.423 3.18319 119.468 3.2014C119.548 3.23411 119.587 3.29841 119.587 3.39413C119.587 3.4623 119.562 3.51225 119.512 3.54449C119.485 3.5614 119.448 3.57381 119.4 3.58138C119.461 3.59089 119.505 3.61556 119.533 3.65583C119.561 3.69612 119.575 3.73529 119.575 3.7738V3.8294C119.575 3.84712 119.576 3.86581 119.577 3.88595C119.578 3.9061 119.58 3.91931 119.584 3.9256L119.589 3.93511H119.461L119.459 3.92753C119.458 3.92495 119.458 3.92205 119.457 3.91899L119.454 3.89466V3.83439C119.454 3.74656 119.43 3.68839 119.381 3.66019C119.352 3.64391 119.302 3.63569 119.229 3.63569H119.122V3.93511H118.985V3.17401H119.256ZM118.838 3.13369C118.72 3.25004 118.661 3.39072 118.661 3.55573C118.661 3.72188 118.72 3.86353 118.837 3.98052C118.955 4.09767 119.098 4.15617 119.267 4.15617C119.435 4.15617 119.578 4.09767 119.696 3.98052C119.814 3.86353 119.873 3.72188 119.873 3.55573C119.873 3.39072 119.814 3.25004 119.696 3.13369C119.577 3.01654 119.434 2.95803 119.267 2.95803C119.099 2.95803 118.957 3.01654 118.838 3.13369ZM119.767 4.04863C119.63 4.18448 119.463 4.25249 119.268 4.25249C119.073 4.25249 118.907 4.18448 118.769 4.04863C118.633 3.91327 118.565 3.74922 118.565 3.55664C118.565 3.36584 118.634 3.20292 118.771 3.06756C118.908 2.93284 119.074 2.86548 119.268 2.86548C119.463 2.86548 119.63 2.93284 119.767 3.06756C119.905 3.20228 119.974 3.3652 119.974 3.55664C119.974 3.74858 119.905 3.91262 119.767 4.04863Z"
1661
+ }
1662
+ )
1663
+ ] })
1664
+ },
1665
+ lacerte: {
1666
+ viewBox: "0 0 64 64",
1667
+ aspect: 1,
1668
+ scale: 0.72,
1669
+ square: true,
1670
+ paths: () => /* @__PURE__ */ jsxs(Fragment, { children: [
1671
+ /* @__PURE__ */ jsx(
1672
+ "path",
1673
+ {
1674
+ fill: "#A98343",
1675
+ d: "M32 64C49.6731 64 64 49.6731 64 32C64 14.3269 49.6731 0 32 0C14.3269 0 0 14.3269 0 32C0 49.6731 14.3269 64 32 64Z"
1676
+ }
1677
+ ),
1678
+ /* @__PURE__ */ jsx(
1679
+ "path",
1680
+ {
1681
+ fill: "white",
1682
+ d: "M25 15H23C21.9 15 21 15.9 21 17V45C21 46.1 21.9 47 23 47H43C44.1 47 45 46.1 45 45V43H25V15Z"
1683
+ }
1684
+ ),
1685
+ /* @__PURE__ */ jsx(
1686
+ "path",
1687
+ {
1688
+ fill: "white",
1689
+ d: "M43 36H32V17C32 15.9 31.1 15 30 15H28V36V40H32H45V38C45 36.9 44.1 36 43 36Z"
1690
+ }
1691
+ )
1692
+ ] })
1693
+ },
1694
+ proseries: {
1695
+ viewBox: "0 0 64 64",
1696
+ aspect: 1,
1697
+ scale: 0.72,
1698
+ square: true,
1699
+ paths: () => /* @__PURE__ */ jsxs(Fragment, { children: [
1700
+ /* @__PURE__ */ jsx(
1701
+ "path",
1702
+ {
1703
+ fill: "#205EA3",
1704
+ d: "M32 64C49.6731 64 64 49.6731 64 32C64 14.3269 49.6731 0 32 0C14.3269 0 0 14.3269 0 32C0 49.6731 14.3269 64 32 64Z"
1705
+ }
1706
+ ),
1707
+ /* @__PURE__ */ jsx(
1708
+ "path",
1709
+ {
1710
+ fill: "white",
1711
+ d: "M46 20.35L44.6 18.95C43.8 18.15 42.55 18.15 41.75 18.95L24.85 35.85L18.1 29.15C17.3 28.35 16.05 28.35 15.25 29.15L13.85 30.55L24.85 41.5L46 20.35Z"
1712
+ }
1713
+ ),
1714
+ /* @__PURE__ */ jsx(
1715
+ "path",
1716
+ {
1717
+ fill: "white",
1718
+ d: "M48.15 22.5L26.95 43.65L28.35 45.05C29.15 45.85 30.4 45.85 31.2 45.05L49.5499 26.7C50.3499 25.9 50.3499 24.65 49.5499 23.85L48.15 22.5Z"
1719
+ }
1720
+ )
1721
+ ] })
1722
+ },
1723
+ proconnect: {
1724
+ viewBox: "0 0 64 64",
1725
+ aspect: 1,
1726
+ scale: 0.72,
1727
+ square: true,
1728
+ paths: () => /* @__PURE__ */ jsxs(Fragment, { children: [
1729
+ /* @__PURE__ */ jsx(
1730
+ "path",
1731
+ {
1732
+ fill: "#3492EF",
1733
+ d: "M32 64C49.6731 64 64 49.6731 64 32C64 14.3269 49.6731 0 32 0C14.3269 0 0 14.3269 0 32C0 49.6731 14.3269 64 32 64Z"
1734
+ }
1735
+ ),
1736
+ /* @__PURE__ */ jsx(
1737
+ "path",
1738
+ {
1739
+ fill: "white",
1740
+ d: "M22.55 46.4C23.35 47.2 24.6 47.2 25.4 46.4L43 28.8V42.9C43 44 43.9 44.9 45 44.9H47V23.95C47 22.15 44.85 21.3 43.6 22.55L21.15 45L22.55 46.4Z"
1741
+ }
1742
+ ),
1743
+ /* @__PURE__ */ jsx(
1744
+ "path",
1745
+ {
1746
+ fill: "white",
1747
+ d: "M19.15 17V19C19.15 20.1 20.05 21 21.15 21H35.2L17.6 38.6C16.8 39.4 16.8 40.65 17.6 41.45L19 42.85L41.4 20.45C42.65 19.2 41.75 17.05 40 17.05H19.15V17Z"
1748
+ }
1749
+ )
1750
+ ] })
1751
+ }
1752
+ };
1753
+ }
1754
+ var plateSizes = {
1755
+ sm: { height: "ds:h-(--avatar-size-sm)", padding: "ds:px-1.5" },
1756
+ md: { height: "ds:h-(--avatar-size-md)", padding: "ds:px-2" },
1757
+ lg: { height: "ds:h-(--avatar-size-lg)", padding: "ds:px-3" }
1758
+ };
1759
+ function isVendor(vendor) {
1760
+ return typeof vendor === "string" && Object.prototype.hasOwnProperty.call(VENDOR_NAMES, vendor);
1761
+ }
1762
+ function createTaxSoftwareLogo() {
1763
+ const MARKS = createMarks();
1764
+ const Logo2 = React7.forwardRef(function TaxSoftwareLogo2({ vendor, size = "md", label, className, ...props }, ref) {
1765
+ const known = isVendor(vendor) ? vendor : void 0;
1766
+ const mark = known ? MARKS[known] : void 0;
1767
+ const a11y = label !== void 0 ? { role: "img", "aria-label": label } : { "aria-hidden": true };
1768
+ if (!mark) {
1769
+ return /* @__PURE__ */ jsx(
1770
+ "span",
1771
+ {
1772
+ ref,
1773
+ "data-vendor": vendor,
1774
+ "data-size": size,
1775
+ "data-fallback": "",
1776
+ className: cn("ds:inline-flex ds:shrink-0", className),
1777
+ ...a11y,
1778
+ ...props,
1779
+ children: /* @__PURE__ */ jsx(Avatar, { name: label ?? (known ? VENDOR_NAMES[known] : void 0), size })
1780
+ }
1781
+ );
1782
+ }
1783
+ const plate = plateSizes[size];
1784
+ return /* @__PURE__ */ jsx(
1785
+ "span",
1786
+ {
1787
+ ref,
1788
+ "data-vendor": known,
1789
+ "data-size": size,
1790
+ className: cn(
1791
+ "ds:inline-flex ds:shrink-0 ds:items-center ds:justify-center ds:overflow-hidden",
1792
+ "ds:rounded-(--radius-input) ds:border ds:border-rule-soft ds:bg-white",
1793
+ plate.height,
1794
+ mark.square ? "ds:aspect-square" : plate.padding,
1795
+ className
1796
+ ),
1797
+ ...a11y,
1798
+ ...props,
1799
+ children: /* @__PURE__ */ jsx(
1800
+ "svg",
1801
+ {
1802
+ viewBox: mark.viewBox,
1803
+ fill: "none",
1804
+ xmlns: "http://www.w3.org/2000/svg",
1805
+ "aria-hidden": "true",
1806
+ focusable: "false",
1807
+ className: "ds:block ds:w-auto ds:shrink-0",
1808
+ style: { height: `${mark.scale * 100}%`, aspectRatio: mark.aspect },
1809
+ children: mark.paths()
1810
+ }
1811
+ )
1812
+ }
1813
+ );
1814
+ });
1815
+ Logo2.displayName = "TaxSoftwareLogo";
1816
+ return Logo2;
1817
+ }
1818
+ var TaxSoftwareLogo = /* @__PURE__ */ createTaxSoftwareLogo();
1439
1819
  var ICON_BTN = cn(
1440
1820
  "ds:inline-flex ds:size-9 ds:shrink-0 ds:items-center ds:justify-center ds:rounded-[9px]",
1441
1821
  "ds:border-rule-strong ds:bg-surface ds:text-fg-3 ds:border",
@@ -3180,7 +3560,7 @@ function NumberStepper({
3180
3560
  }
3181
3561
  );
3182
3562
  }
3183
- var SidebarContext = React6.createContext(null);
3563
+ var SidebarContext = React7.createContext(null);
3184
3564
  var NOOP_CONTEXT = {
3185
3565
  state: "expanded",
3186
3566
  setState: () => {
@@ -3188,12 +3568,18 @@ var NOOP_CONTEXT = {
3188
3568
  toggle: () => {
3189
3569
  },
3190
3570
  collapsible: false,
3571
+ sidebarId: void 0,
3572
+ registerSidebarId: () => {
3573
+ },
3191
3574
  peekLockCount: 0,
3192
3575
  acquirePeekLock: () => () => {
3193
3576
  }
3194
3577
  };
3578
+ var NOOP_RELEASE = () => {
3579
+ };
3580
+ var acquireNoopPeekLock = () => NOOP_RELEASE;
3195
3581
  function useSidebarState() {
3196
- return React6.useContext(SidebarContext) ?? NOOP_CONTEXT;
3582
+ return React7.useContext(SidebarContext) ?? NOOP_CONTEXT;
3197
3583
  }
3198
3584
  var DEFAULT_SHORTCUT = "Mod+\\";
3199
3585
  var asState = (value) => value === "rail" || value === "expanded" ? value : null;
@@ -3222,6 +3608,16 @@ function writeStorage(key, storage, next) {
3222
3608
  } catch {
3223
3609
  }
3224
3610
  }
3611
+ function isEditableTarget(target) {
3612
+ if (!(target instanceof HTMLElement)) return false;
3613
+ if (target.isContentEditable) return true;
3614
+ return target.closest("input, textarea, select, [contenteditable]:not([contenteditable='false']), [role='textbox']") !== null;
3615
+ }
3616
+ function hasOpenModal() {
3617
+ return document.querySelector(
3618
+ "[role='dialog'][aria-modal='true'], [role='dialog'][data-state='open'], [role='alertdialog'], dialog[open]"
3619
+ ) !== null;
3620
+ }
3225
3621
  function SidebarProvider({
3226
3622
  children,
3227
3623
  state: controlled,
@@ -3231,37 +3627,54 @@ function SidebarProvider({
3231
3627
  storage = "localStorage",
3232
3628
  shortcut = DEFAULT_SHORTCUT
3233
3629
  }) {
3234
- const [uncontrolled, setUncontrolled] = React6.useState(
3630
+ const [uncontrolled, setUncontrolled] = React7.useState(
3235
3631
  controlled ?? defaultState
3236
3632
  );
3237
- React6.useEffect(() => {
3633
+ React7.useEffect(() => {
3238
3634
  if (controlled !== void 0) return;
3239
3635
  const stored = readStorage(storageKey, storage);
3240
3636
  if (stored && stored !== uncontrolled) setUncontrolled(stored);
3241
3637
  }, []);
3242
3638
  const state = controlled ?? uncontrolled;
3243
- const setState = React6.useCallback(
3639
+ const stateRef = React7.useRef(state);
3640
+ stateRef.current = state;
3641
+ const setState = React7.useCallback(
3244
3642
  (next) => {
3245
- if (controlled === void 0) setUncontrolled(next);
3643
+ if (controlled === void 0) {
3644
+ stateRef.current = next;
3645
+ setUncontrolled(next);
3646
+ }
3246
3647
  onStateChange?.(next);
3247
3648
  if (storageKey) writeStorage(storageKey, storage, next);
3248
3649
  },
3249
3650
  [controlled, onStateChange, storageKey, storage]
3250
3651
  );
3251
- const toggle = React6.useCallback(() => {
3252
- setState(state === "expanded" ? "rail" : "expanded");
3253
- }, [state, setState]);
3254
- const [peekLockCount, setPeekLockCount] = React6.useState(0);
3255
- const acquirePeekLock = React6.useCallback(() => {
3256
- setPeekLockCount((n) => n + 1);
3257
- let released = false;
3652
+ const toggle = React7.useCallback(() => {
3653
+ setState(stateRef.current === "expanded" ? "rail" : "expanded");
3654
+ }, [setState]);
3655
+ React7.useEffect(() => {
3656
+ if (controlled !== void 0 || !storageKey) return;
3657
+ const sync = () => {
3658
+ const stored = readStorage(storageKey, storage);
3659
+ if (stored && stored !== stateRef.current) {
3660
+ stateRef.current = stored;
3661
+ setUncontrolled(stored);
3662
+ }
3663
+ };
3664
+ const onStorage = (e) => {
3665
+ if (e.key === storageKey) sync();
3666
+ };
3667
+ if (storage === "cookie") window.addEventListener("focus", sync);
3668
+ else window.addEventListener("storage", onStorage);
3258
3669
  return () => {
3259
- if (released) return;
3260
- released = true;
3261
- setPeekLockCount((n) => Math.max(0, n - 1));
3670
+ window.removeEventListener("focus", sync);
3671
+ window.removeEventListener("storage", onStorage);
3262
3672
  };
3263
- }, []);
3264
- React6.useEffect(() => {
3673
+ }, [controlled, storageKey, storage]);
3674
+ const generatedId = React7.useId();
3675
+ const [customId, setCustomId] = React7.useState(void 0);
3676
+ const sidebarId = customId ?? `sidebar-${generatedId.replace(/:/g, "")}`;
3677
+ React7.useEffect(() => {
3265
3678
  if (!shortcut) return;
3266
3679
  const parts = shortcut.split("+");
3267
3680
  const key = parts.pop() ?? "";
@@ -3269,65 +3682,98 @@ function SidebarProvider({
3269
3682
  const wantShift = parts.includes("Shift");
3270
3683
  const wantAlt = parts.includes("Alt");
3271
3684
  function onKey(e) {
3685
+ if (e.defaultPrevented || e.isComposing) return;
3272
3686
  const isMac = typeof navigator !== "undefined" && /Mac|iPhone|iPad/.test(navigator.platform);
3273
3687
  const mod = isMac ? e.metaKey : e.ctrlKey;
3274
3688
  if (e.key.toLowerCase() !== key.toLowerCase()) return;
3275
3689
  if (wantMod !== mod) return;
3276
3690
  if (wantShift !== e.shiftKey) return;
3277
3691
  if (wantAlt !== e.altKey) return;
3692
+ if (isEditableTarget(e.target) || hasOpenModal()) return;
3278
3693
  e.preventDefault();
3694
+ if (e.repeat) return;
3279
3695
  toggle();
3280
3696
  }
3281
3697
  window.addEventListener("keydown", onKey);
3282
3698
  return () => window.removeEventListener("keydown", onKey);
3283
3699
  }, [shortcut, toggle]);
3284
- const value = React6.useMemo(
3285
- () => ({ state, setState, toggle, collapsible: true, peekLockCount, acquirePeekLock }),
3286
- [state, setState, toggle, peekLockCount, acquirePeekLock]
3700
+ const value = React7.useMemo(
3701
+ () => ({
3702
+ state,
3703
+ setState,
3704
+ toggle,
3705
+ collapsible: true,
3706
+ sidebarId,
3707
+ registerSidebarId: setCustomId,
3708
+ peekLockCount: 0,
3709
+ acquirePeekLock: acquireNoopPeekLock
3710
+ }),
3711
+ [state, setState, toggle, sidebarId]
3287
3712
  );
3288
3713
  return /* @__PURE__ */ jsx(SidebarContext.Provider, { value, children });
3289
3714
  }
3290
3715
  SidebarProvider.displayName = "SidebarProvider";
3291
- var PEEK_ENTER_DELAY_MS = 100;
3292
- var PEEK_LEAVE_DELAY_MS = 200;
3293
- var SidebarLabelsHiddenContext = React6.createContext(false);
3294
- var SidebarPeekEnabledContext = React6.createContext(true);
3716
+ var SidebarLabelsHiddenContext = React7.createContext(false);
3295
3717
  function useCollapsedAttribute() {
3296
- return React6.useContext(SidebarLabelsHiddenContext) ? { "data-collapsed": "true" } : {};
3718
+ return React7.useContext(SidebarLabelsHiddenContext) ? { "data-collapsed": "true" } : {};
3297
3719
  }
3298
- var Sidebar = React6.forwardRef(function Sidebar2({
3720
+ var SidebarTooltipScopeContext = React7.createContext(false);
3721
+ function SidebarRailTooltip({
3722
+ label,
3723
+ suppressed = false,
3724
+ children
3725
+ }) {
3726
+ const railed = React7.useContext(SidebarLabelsHiddenContext);
3727
+ const inScope = React7.useContext(SidebarTooltipScopeContext);
3728
+ const side = useDsDirection() === "rtl" ? "left" : "right";
3729
+ const [requestedOpen, setRequestedOpen] = React7.useState(false);
3730
+ const enabled = inScope && railed && !suppressed && label != null && label !== "";
3731
+ if (!enabled && requestedOpen) setRequestedOpen(false);
3732
+ if (!inScope) return children;
3733
+ const open = enabled && requestedOpen;
3734
+ return /* @__PURE__ */ jsxs(
3735
+ TooltipRoot,
3736
+ {
3737
+ open,
3738
+ onOpenChange: (next) => setRequestedOpen(enabled && next),
3739
+ children: [
3740
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children }),
3741
+ open ? (
3742
+ // 16px clears the column's 12px inline padding, so the tooltip opens
3743
+ // outside the rail instead of over its edge.
3744
+ /* @__PURE__ */ jsx(TooltipContent, { side, sideOffset: 16, className: "ds:px-3 ds:py-2 ds:text-body", children: label })
3745
+ ) : null
3746
+ ]
3747
+ }
3748
+ );
3749
+ }
3750
+ var Sidebar = React7.forwardRef(function Sidebar2({
3299
3751
  className,
3300
3752
  collapsible = false,
3301
3753
  variant = "classic",
3302
- peek: peekEnabled = true,
3303
- onMouseEnter,
3304
- onMouseLeave,
3754
+ // Deprecated and inert; pulled out so it never reaches the DOM.
3755
+ peek: _peek,
3756
+ id: idProp,
3305
3757
  style,
3306
3758
  children,
3307
3759
  ...props
3308
3760
  }, ref) {
3309
3761
  const isFloating = variant === "floating";
3310
3762
  const isFlush = variant === "flush";
3311
- const ctx = React6.useContext(SidebarContext);
3312
- const state = collapsible && ctx ? ctx.state : "expanded";
3313
- const peekLockCount = collapsible && ctx && peekEnabled ? ctx.peekLockCount : 0;
3314
- const [peek, setPeek] = React6.useState(false);
3315
- const enterTimer = React6.useRef(null);
3316
- const leaveTimer = React6.useRef(null);
3317
- const clearTimers = React6.useCallback(() => {
3318
- if (enterTimer.current != null) {
3319
- window.clearTimeout(enterTimer.current);
3320
- enterTimer.current = null;
3321
- }
3322
- if (leaveTimer.current != null) {
3323
- window.clearTimeout(leaveTimer.current);
3324
- leaveTimer.current = null;
3325
- }
3326
- }, []);
3327
- React6.useEffect(() => () => clearTimers(), [clearTimers]);
3328
- const internalRef = React6.useRef(null);
3763
+ const ctx = React7.useContext(SidebarContext);
3764
+ const managed = collapsible && ctx !== null;
3765
+ const state = managed ? ctx.state : "expanded";
3766
+ const labelsHidden = state === "rail";
3767
+ const registerSidebarId = ctx?.registerSidebarId;
3768
+ React7.useEffect(() => {
3769
+ if (!managed || !registerSidebarId || idProp === void 0) return;
3770
+ registerSidebarId(idProp);
3771
+ return () => registerSidebarId(void 0);
3772
+ }, [managed, registerSidebarId, idProp]);
3773
+ const id = idProp ?? (managed ? ctx.sidebarId : void 0);
3774
+ const internalRef = React7.useRef(null);
3329
3775
  const mergedRef = useMergedRefs(ref, internalRef);
3330
- React6.useEffect(() => {
3776
+ React7.useEffect(() => {
3331
3777
  if (!isFlush) return;
3332
3778
  const el = internalRef.current;
3333
3779
  if (!el) return;
@@ -3348,123 +3794,82 @@ var Sidebar = React6.forwardRef(function Sidebar2({
3348
3794
  window.clearTimeout(timer);
3349
3795
  };
3350
3796
  }, [isFlush]);
3351
- React6.useEffect(() => {
3352
- if (state === "expanded") {
3353
- clearTimers();
3354
- setPeek(false);
3355
- }
3356
- }, [state, clearTimers]);
3357
- const handleEnter = (e) => {
3358
- onMouseEnter?.(e);
3359
- if (!peekEnabled) return;
3360
- if (!collapsible || state !== "rail") return;
3361
- if (leaveTimer.current != null) {
3362
- window.clearTimeout(leaveTimer.current);
3363
- leaveTimer.current = null;
3364
- }
3365
- if (peek) return;
3366
- enterTimer.current = window.setTimeout(() => setPeek(true), PEEK_ENTER_DELAY_MS);
3367
- };
3368
- const handleLeave = (e) => {
3369
- onMouseLeave?.(e);
3370
- if (!peekEnabled) return;
3371
- if (!collapsible) return;
3372
- if (enterTimer.current != null) {
3373
- window.clearTimeout(enterTimer.current);
3374
- enterTimer.current = null;
3375
- }
3376
- if (!peek) return;
3377
- leaveTimer.current = window.setTimeout(() => setPeek(false), PEEK_LEAVE_DELAY_MS);
3378
- };
3379
- const overlay = state === "rail" && (peek || peekLockCount > 0);
3380
- const labelsHidden = state === "rail" && !peek && peekLockCount === 0;
3797
+ React7.useEffect(() => {
3798
+ const el = internalRef.current;
3799
+ if (!el) return;
3800
+ let second = 0;
3801
+ const first = window.requestAnimationFrame(() => {
3802
+ second = window.requestAnimationFrame(() => {
3803
+ el.dataset.ready = "true";
3804
+ });
3805
+ });
3806
+ return () => {
3807
+ window.cancelAnimationFrame(first);
3808
+ window.cancelAnimationFrame(second);
3809
+ };
3810
+ }, []);
3381
3811
  const railWidth = "var(--shell-sidebar-w-rail, var(--ds-layout-shell-sidebar-rail-width))";
3382
3812
  const fullWidth = "var(--shell-sidebar-w, var(--ds-layout-shell-sidebar-width))";
3383
- const effectiveWidth = labelsHidden ? railWidth : fullWidth;
3384
- const overlayMarginRight = isFloating ? `calc(0.625rem + ${railWidth} - ${fullWidth})` : `calc(${railWidth} - ${fullWidth})`;
3385
- return (
3386
- // Hover-peek is *enhancement only*: the canonical way to toggle the
3387
- // sidebar is <SidebarTrigger> (button) or the Mod+\ shortcut, both
3388
- // fully keyboard- and screen-reader-accessible. The mouse handlers
3389
- // here exist to widen the column on pointer hover, which has no
3390
- // keyboard analogue and intentionally so.
3391
- // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
3392
- /* @__PURE__ */ jsx(
3393
- "aside",
3394
- {
3395
- ref: mergedRef,
3396
- "data-state": state,
3397
- "data-peek": peek ? "true" : void 0,
3398
- "data-overlay": overlay ? "true" : void 0,
3399
- "data-labels": labelsHidden ? "hide" : "show",
3400
- "data-collapsible": collapsible ? "true" : void 0,
3401
- "data-variant": variant,
3402
- ...slot(sidebarAnatomy, "root"),
3403
- onMouseEnter: handleEnter,
3404
- onMouseLeave: handleLeave,
3405
- style: {
3406
- width: effectiveWidth,
3407
- ...overlay ? { marginRight: overlayMarginRight } : null,
3408
- ...style
3409
- },
3410
- className: cn(
3411
- "ds:group/sidebar group/sidebar ds:scrollbar-thin ds:flex ds:shrink-0 ds:flex-col ds:overflow-y-auto ds:px-3 ds:pt-4 ds:pb-4",
3412
- // Classic: full-height column flush to the left edge with a right
3413
- // rule. The legacy look.
3414
- !isFloating && "ds:h-dvh ds:border-rule ds:border-r",
3415
- !isFloating && (isFlush ? "ds:bg-surface" : "ds:bg-bg-2"),
3416
- // Flush against a `bg-bg` canvas (Shell's own background) `bg-bg-2`
3417
- // (--color-bg-2, #f1f3f8 light / #141416 dark) sits only ~1.06:1 off
3418
- // the page (#f7f8fa / #0a0a0b) — the two regions read as one grey
3419
- // field with a hairline in the middle, not two surfaces. `surface`
3420
- // (white / #16161a) against the same canvas is the ~2–3x bigger
3421
- // luminance step the classic Notion/Linear sidebar convention reads
3422
- // on, and it is the token every card in the product already sits
3423
- // on, so the column now looks like the same kind of "raised" surface
3424
- // as the content it fronts, not a third, unrelated grey. `classic`
3425
- // and `floating` are unchanged (visual change note: the sidebar
3426
- // background change below is for `variant="flush"` only).
3427
- // Floating: a detached, rounded card inset from the viewport with a
3428
- // soft shadow — the modern SaaS pattern. The clear figure/ground gap
3429
- // (Aesthetic-Usability) reads as its own surface above the canvas.
3430
- isFloating && "ds:border-rule ds:bg-surface ds:shadow-card ds:m-2.5 ds:h-[calc(100dvh-1.25rem)] ds:rounded-2xl ds:border",
3431
- // 220ms feels right for a ~192px width sweep — slower than the
3432
- // 150ms `--duration-fast` (which reads as a snap on this size of
3433
- // movement) but well short of `--duration-slow` (which feels
3434
- // sluggish). `will-change` hints the compositor so the column
3435
- // doesn't repaint every frame mid-transition.
3436
- "ds:transition-[width,margin-right,box-shadow] ds:duration-[var(--motion-duration-spatial)] ds:ease-[var(--motion-ease-move)] ds:motion-reduce:transition-none",
3437
- "ds:[will-change:width]",
3438
- // Overlay (hover-peek OR programmatic peek-lock): float above the
3439
- // canvas without reflowing layout (the negative margin above keeps
3440
- // the rail's footprint). Driven by `data-overlay` so a single rule
3441
- // handles both transient sources.
3442
- "ds:data-[overlay=true]:relative",
3443
- "ds:data-[overlay=true]:z-[var(--z-overlay)] ds:data-[overlay=true]:shadow-pop",
3444
- // Padding is held constant across states so icons keep their
3445
- // horizontal anchor when the column widens — peek expands the
3446
- // labels rightward rather than shifting the icons leftward.
3447
- isFlush && // Overlay scrollbar: hidden at rest, revealed while `data-scrolling`
3448
- // is set by the effect above and faded back out ~800ms after the
3449
- // last scroll event. `scrollbar-color` is the standard property
3450
- // modern engines read; the `::-webkit-scrollbar-thumb` rule is the
3451
- // older-Safari fallback, kept in lockstep with it rather than
3452
- // relying on either alone.
3453
- cn(
3454
- "ds:[scrollbar-color:transparent_transparent] ds:data-[scrolling=true]:[scrollbar-color:var(--color-rule-strong)_transparent]",
3455
- "ds:[&::-webkit-scrollbar-thumb]:bg-transparent ds:data-[scrolling=true]:[&::-webkit-scrollbar-thumb]:bg-[var(--color-rule-strong)]",
3456
- "ds:[&::-webkit-scrollbar-thumb]:transition-colors ds:[&::-webkit-scrollbar-thumb]:duration-[var(--duration-normal)] ds:motion-reduce:[&::-webkit-scrollbar-thumb]:transition-none"
3457
- ),
3458
- className
3813
+ return /* @__PURE__ */ jsx(
3814
+ "aside",
3815
+ {
3816
+ ref: mergedRef,
3817
+ id,
3818
+ "data-state": state,
3819
+ "data-labels": labelsHidden ? "hide" : "show",
3820
+ "data-collapsible": collapsible ? "true" : void 0,
3821
+ "data-variant": variant,
3822
+ ...slot(sidebarAnatomy, "root"),
3823
+ style: {
3824
+ width: labelsHidden ? railWidth : fullWidth,
3825
+ ...style
3826
+ },
3827
+ className: cn(
3828
+ "ds:group/sidebar group/sidebar ds:scrollbar-thin ds:flex ds:shrink-0 ds:flex-col ds:overflow-x-hidden ds:overflow-y-auto ds:px-3 ds:pt-4 ds:pb-4",
3829
+ // Classic: full-height column flush to the left edge with a right
3830
+ // rule. The legacy look.
3831
+ // `border-e`: the rule sits on the canvas side in either direction.
3832
+ !isFloating && "ds:h-dvh ds:border-rule ds:border-e",
3833
+ !isFloating && (isFlush ? "ds:bg-surface" : "ds:bg-bg-2"),
3834
+ // Flush against a `bg-bg` canvas (Shell's own background) `bg-bg-2`
3835
+ // sits only ~1.06:1 off the page — the two regions read as one grey
3836
+ // field. `surface` against the same canvas is the ~2–3x luminance
3837
+ // step the classic sidebar convention reads on, and it is the token
3838
+ // every card in the product already sits on. `classic` and
3839
+ // `floating` are unchanged.
3840
+ // Floating: a detached, rounded card inset from the viewport with a
3841
+ // soft shadow.
3842
+ isFloating && "ds:border-rule ds:bg-surface ds:shadow-card ds:m-2.5 ds:h-[calc(100dvh-1.25rem)] ds:rounded-2xl ds:border",
3843
+ // The spatial motion token (~220ms) suits a ~150px width sweep:
3844
+ // `--duration-fast` reads as a snap at this size, `--duration-slow`
3845
+ // as sluggish. Width is the only animated property, armed by
3846
+ // `data-ready` (see above) and never under reduced motion.
3847
+ "ds:motion-safe:data-[ready=true]:transition-[width] ds:duration-[var(--motion-duration-spatial)] ds:ease-[var(--motion-ease-move)]",
3848
+ // Railed, the scrollbar is hidden (the nav still scrolls by wheel,
3849
+ // touch and keyboard): a classic scrollbar would take its width out
3850
+ // of a 56px column and push every icon off centre the moment the
3851
+ // list overflows.
3852
+ "ds:data-[labels=hide]:[scrollbar-width:none] ds:data-[labels=hide]:[&::-webkit-scrollbar]:hidden",
3853
+ isFlush && // Overlay scrollbar: hidden at rest, revealed while `data-scrolling`
3854
+ // is set by the effect above and faded back out ~800ms after the
3855
+ // last scroll event. `scrollbar-color` is the standard property
3856
+ // modern engines read; the `::-webkit-scrollbar-thumb` rule is the
3857
+ // older-Safari fallback, kept in lockstep with it rather than
3858
+ // relying on either alone.
3859
+ cn(
3860
+ "ds:[scrollbar-color:transparent_transparent] ds:data-[scrolling=true]:[scrollbar-color:var(--color-rule-strong)_transparent]",
3861
+ "ds:[&::-webkit-scrollbar-thumb]:bg-transparent ds:data-[scrolling=true]:[&::-webkit-scrollbar-thumb]:bg-[var(--color-rule-strong)]",
3862
+ "ds:[&::-webkit-scrollbar-thumb]:transition-colors ds:[&::-webkit-scrollbar-thumb]:duration-[var(--duration-normal)] ds:motion-reduce:[&::-webkit-scrollbar-thumb]:transition-none"
3459
3863
  ),
3460
- ...props,
3461
- children: /* @__PURE__ */ jsx(SidebarPeekEnabledContext.Provider, { value: peekEnabled, children: /* @__PURE__ */ jsx(SidebarLabelsHiddenContext.Provider, { value: labelsHidden, children: collapsible && !peekEnabled ? /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 200, children }) : children }) })
3462
- }
3463
- )
3864
+ className
3865
+ ),
3866
+ ...props,
3867
+ children: /* @__PURE__ */ jsx(SidebarLabelsHiddenContext.Provider, { value: labelsHidden, children: collapsible ? /* @__PURE__ */ jsx(SidebarTooltipScopeContext.Provider, { value: true, children: /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 200, skipDelayDuration: 400, children }) }) : children })
3868
+ }
3464
3869
  );
3465
3870
  });
3466
3871
  Sidebar.displayName = "Sidebar";
3467
- var SidebarTrigger = React6.forwardRef(
3872
+ var SidebarTrigger = React7.forwardRef(
3468
3873
  function SidebarTrigger2({
3469
3874
  className,
3470
3875
  expandLabel,
@@ -3473,46 +3878,42 @@ var SidebarTrigger = React6.forwardRef(
3473
3878
  ...props
3474
3879
  }, ref) {
3475
3880
  const messages = useDsMessages("sidebar");
3476
- const ctx = React6.useContext(SidebarContext);
3881
+ const ctx = React7.useContext(SidebarContext);
3477
3882
  if (!ctx) return null;
3478
- const { state, toggle } = ctx;
3883
+ const { state, toggle, sidebarId } = ctx;
3479
3884
  const label = state === "expanded" ? collapseLabel ?? messages.collapse : expandLabel ?? messages.expand;
3480
- return /* @__PURE__ */ jsx(
3885
+ return /* @__PURE__ */ jsx(SidebarRailTooltip, { label, children: /* @__PURE__ */ jsx(
3481
3886
  "button",
3482
3887
  {
3483
3888
  ref,
3484
3889
  type: "button",
3485
3890
  "aria-label": label,
3486
3891
  "aria-expanded": state === "expanded",
3892
+ "aria-controls": sidebarId,
3487
3893
  onClick: (e) => {
3488
3894
  onClick?.(e);
3489
3895
  if (!e.defaultPrevented) toggle();
3490
3896
  },
3491
3897
  ...slot(sidebarAnatomy, "trigger"),
3492
3898
  className: cn(
3493
- "ds:inline-flex ds:size-7 ds:shrink-0 ds:cursor-pointer ds:items-center ds:justify-center ds:rounded-md",
3899
+ "ds:inline-flex ds:size-7 ds:shrink-0 ds:cursor-pointer ds:items-center ds:justify-center ds:rounded-control",
3494
3900
  "ds:text-fg-3 ds:hover:bg-bg-3 ds:hover:text-fg",
3495
3901
  "ds:transition-colors ds:duration-[var(--duration-fast)] ds:ease-[var(--ease-out-quart)] ds:motion-reduce:transition-none",
3496
3902
  "ds:focus-visible:[box-shadow:var(--shadow-focus-ring)] ds:focus-visible:outline-none",
3903
+ FORCED_COLORS_FOCUS,
3497
3904
  "ds:[&_svg]:size-4",
3498
3905
  className
3499
3906
  ),
3500
3907
  ...props,
3501
3908
  children: state === "expanded" ? /* @__PURE__ */ jsx(PanelLeftCloseIcon, {}) : /* @__PURE__ */ jsx(PanelLeftIcon, {})
3502
3909
  }
3503
- );
3910
+ ) });
3504
3911
  }
3505
3912
  );
3506
3913
  SidebarTrigger.displayName = "SidebarTrigger";
3507
3914
  function useSidebarPeekLock(active) {
3508
- const ctx = React6.useContext(SidebarContext);
3509
- React6.useEffect(() => {
3510
- if (!active || !ctx) return;
3511
- const release = ctx.acquirePeekLock();
3512
- return release;
3513
- }, [active, ctx]);
3514
3915
  }
3515
- var SidebarPinButton = React6.forwardRef(
3916
+ var SidebarPinButton = React7.forwardRef(
3516
3917
  function SidebarPinButton2({
3517
3918
  pinLabel,
3518
3919
  unpinLabel,
@@ -3521,17 +3922,20 @@ var SidebarPinButton = React6.forwardRef(
3521
3922
  ...props
3522
3923
  }, ref) {
3523
3924
  const messages = useDsMessages("sidebar");
3524
- const ctx = React6.useContext(SidebarContext);
3925
+ const ctx = React7.useContext(SidebarContext);
3525
3926
  if (!ctx || !ctx.collapsible) return null;
3526
- const { state, setState } = ctx;
3927
+ const { state, setState, sidebarId } = ctx;
3527
3928
  const isPinned = state === "expanded";
3528
- return /* @__PURE__ */ jsx(
3929
+ const label = isPinned ? unpinLabel ?? messages.collapse : pinLabel ?? messages.expand;
3930
+ return /* @__PURE__ */ jsx(SidebarRailTooltip, { label, children: /* @__PURE__ */ jsx(
3529
3931
  "button",
3530
3932
  {
3531
3933
  ref,
3532
3934
  type: "button",
3533
- "aria-label": isPinned ? unpinLabel ?? messages.collapse : pinLabel ?? messages.expand,
3935
+ "aria-label": label,
3534
3936
  "aria-pressed": isPinned,
3937
+ "aria-expanded": isPinned,
3938
+ "aria-controls": sidebarId,
3535
3939
  onClick: (e) => {
3536
3940
  onClick?.(e);
3537
3941
  if (!e.defaultPrevented) setState(isPinned ? "rail" : "expanded");
@@ -3539,24 +3943,21 @@ var SidebarPinButton = React6.forwardRef(
3539
3943
  ...slot(sidebarAnatomy, "pin"),
3540
3944
  ...stateAttributes({ selected: isPinned }),
3541
3945
  className: cn(
3542
- "ds:inline-flex ds:size-7 ds:shrink-0 ds:cursor-pointer ds:items-center ds:justify-center ds:rounded-md",
3946
+ "ds:inline-flex ds:size-7 ds:shrink-0 ds:cursor-pointer ds:items-center ds:justify-center ds:rounded-control",
3543
3947
  "ds:text-fg-4 ds:hover:bg-bg-3 ds:hover:text-fg ds:aria-pressed:text-fg",
3544
3948
  "ds:transition-colors ds:duration-[var(--duration-fast)] ds:ease-[var(--ease-out-quart)] ds:motion-reduce:transition-none",
3545
3949
  "ds:focus-visible:outline-none ds:focus-visible:[box-shadow:var(--shadow-focus-ring)]",
3546
- // Hidden when labels are hidden (rail-no-peek-no-lock). Visible
3547
- // in every overlay state so users can pin during hover or while
3548
- // a dropdown holds the column open.
3549
- "ds:group-data-[labels=hide]/sidebar:hidden",
3950
+ FORCED_COLORS_FOCUS,
3550
3951
  className
3551
3952
  ),
3552
3953
  ...props,
3553
3954
  children: isPinned ? /* @__PURE__ */ jsx(ChevronsLeftIcon, { size: 16 }) : /* @__PURE__ */ jsx(ChevronsRightIcon, { size: 16 })
3554
3955
  }
3555
- );
3956
+ ) });
3556
3957
  }
3557
3958
  );
3558
3959
  SidebarPinButton.displayName = "SidebarPinButton";
3559
- var SidebarBrand = React6.forwardRef(
3960
+ var SidebarBrand = React7.forwardRef(
3560
3961
  function SidebarBrand2({ className, ...props }, ref) {
3561
3962
  return /* @__PURE__ */ jsx(
3562
3963
  "div",
@@ -3565,6 +3966,9 @@ var SidebarBrand = React6.forwardRef(
3565
3966
  ...slot(sidebarAnatomy, "brand"),
3566
3967
  className: cn(
3567
3968
  "ds:flex ds:min-w-0 ds:items-center ds:gap-2 ds:px-2.5 ds:pt-1 ds:pb-4",
3969
+ // Railed, the row stacks: the mark on top, a trigger/pin below it,
3970
+ // both centred in the icon column — side by side they would not fit.
3971
+ "ds:group-data-[labels=hide]/sidebar:flex-col ds:group-data-[labels=hide]/sidebar:justify-center ds:group-data-[labels=hide]/sidebar:gap-1 ds:group-data-[labels=hide]/sidebar:px-0",
3568
3972
  // Flush: pinned to the top of the scrolling column so the nav rows
3569
3973
  // pass behind it instead of over it. `data-scrolled` is only ever
3570
3974
  // set while flush (see <Sidebar>), so the hairline needs no variant
@@ -3583,7 +3987,7 @@ var SidebarBrand = React6.forwardRef(
3583
3987
  }
3584
3988
  );
3585
3989
  SidebarBrand.displayName = "SidebarBrand";
3586
- var SidebarBrandText = React6.forwardRef(
3990
+ var SidebarBrandText = React7.forwardRef(
3587
3991
  function SidebarBrandText2({ className, ...props }, ref) {
3588
3992
  const collapsed = useCollapsedAttribute();
3589
3993
  return /* @__PURE__ */ jsx(
@@ -3597,12 +4001,11 @@ var SidebarBrandText = React6.forwardRef(
3597
4001
  // line-clamp-1 (not `truncate`) so multi-word wordmarks clip at a
3598
4002
  // word boundary instead of mid-word when the rail is narrow.
3599
4003
  "ds:min-w-0 ds:line-clamp-1",
3600
- // Smooth fade + width collapse on rail. Keeps the wordmark
3601
- // legible up to the moment the column reaches rail width, then
3602
- // fully drops out (visibility:hidden cuts hit-testing).
3603
- "ds:transition-[opacity,max-width] ds:duration-[var(--motion-duration-spatial)] ds:ease-[var(--motion-ease-move)] ds:motion-reduce:transition-none",
3604
- "ds:max-w-[160px] ds:opacity-100",
3605
- "ds:group-data-[labels=hide]/sidebar:max-w-0 ds:group-data-[labels=hide]/sidebar:opacity-0 ds:group-data-[labels=hide]/sidebar:invisible",
4004
+ "ds:max-w-[160px]",
4005
+ // Railed: removed from layout, not faded in place — a zero-width
4006
+ // ghost would still claim the row's gap and break centring. The
4007
+ // column clips during the sweep, so the wordmark never wraps.
4008
+ "ds:group-data-[labels=hide]/sidebar:hidden",
3606
4009
  className
3607
4010
  ),
3608
4011
  ...props
@@ -3611,17 +4014,17 @@ var SidebarBrandText = React6.forwardRef(
3611
4014
  }
3612
4015
  );
3613
4016
  SidebarBrandText.displayName = "SidebarBrandText";
3614
- var SidebarGroupScopeContext = React6.createContext(null);
3615
- var SidebarSection = React6.forwardRef(
4017
+ var SidebarGroupScopeContext = React7.createContext(null);
4018
+ var SidebarSection = React7.forwardRef(
3616
4019
  function SidebarSection2({ label, tone = "pro", headerActions, className, children, ...props }, ref) {
3617
4020
  const collapsed = useCollapsedAttribute();
3618
4021
  const ariaLabel = typeof label === "string" ? label : typeof label === "number" ? String(label) : void 0;
3619
- const [exclusiveId, setExclusiveIdState] = React6.useState(null);
3620
- const setExclusive = React6.useCallback(
4022
+ const [exclusiveId, setExclusiveIdState] = React7.useState(null);
4023
+ const setExclusive = React7.useCallback(
3621
4024
  (id) => setExclusiveIdState(id),
3622
4025
  []
3623
4026
  );
3624
- const scope = React6.useMemo(
4027
+ const scope = React7.useMemo(
3625
4028
  () => ({ exclusiveId, setExclusive }),
3626
4029
  [exclusiveId, setExclusive]
3627
4030
  );
@@ -3635,11 +4038,13 @@ var SidebarSection = React6.forwardRef(
3635
4038
  ...collapsed,
3636
4039
  className: cn(
3637
4040
  "ds:mb-4",
3638
- // In rail, the visible section labels disappear and the only
3639
- // grouping cue is a thin rule. No extra mb/pb — the border
3640
- // itself separates groups, so inter-section spacing matches
3641
- // intra-section spacing and the rail stays dense.
3642
- "ds:group-data-[labels=hide]/sidebar:mb-0 ds:group-data-[labels=hide]/sidebar:border-b ds:group-data-[labels=hide]/sidebar:border-rule ds:group-data-[labels=hide]/sidebar:pb-0 ds:group-data-[labels=hide]/sidebar:last:border-b-0",
4041
+ // Railed, the heading collapses away and a hairline between
4042
+ // consecutive sections takes over as the grouping cue. Keyed on
4043
+ // the preceding sibling, so no trailing rule lands above a
4044
+ // footer. `mb-2` + `pt-2` spend the same 16px the expanded `mb-4`
4045
+ // does, so rows don't jump vertically.
4046
+ "ds:group-data-[labels=hide]/sidebar:mb-2",
4047
+ "ds:group-data-[labels=hide]/sidebar:[[data-slot=sidebar-section]+&]:border-t ds:group-data-[labels=hide]/sidebar:[[data-slot=sidebar-section]+&]:border-rule ds:group-data-[labels=hide]/sidebar:[[data-slot=sidebar-section]+&]:pt-2",
3643
4048
  className
3644
4049
  ),
3645
4050
  ...props,
@@ -3650,10 +4055,14 @@ var SidebarSection = React6.forwardRef(
3650
4055
  ...slot(sidebarAnatomy, "section-header"),
3651
4056
  ...collapsed,
3652
4057
  className: cn(
3653
- "ds:mb-1 ds:flex ds:items-center ds:justify-between ds:px-2.5 ds:py-1",
3654
- "ds:transition-opacity ds:duration-[var(--motion-duration-spatial)] ds:ease-[var(--motion-ease-move)] ds:motion-reduce:transition-none",
4058
+ "ds:mb-1 ds:flex ds:max-h-10 ds:items-center ds:justify-between ds:overflow-hidden ds:px-2.5 ds:py-1 ds:whitespace-nowrap",
4059
+ // Railed, the heading folds to zero height instead of leaving
4060
+ // an invisible gap; `invisible` drops it from the a11y tree
4061
+ // (the group keeps its `aria-label`). Height, spacing and
4062
+ // opacity move together with the column's width.
4063
+ "ds:motion-safe:group-data-[ready=true]/sidebar:transition-[max-height,margin,padding,opacity] ds:duration-[var(--motion-duration-spatial)] ds:ease-[var(--motion-ease-move)]",
3655
4064
  "ds:opacity-100",
3656
- "ds:group-data-[labels=hide]/sidebar:invisible ds:group-data-[labels=hide]/sidebar:opacity-0"
4065
+ "ds:group-data-[labels=hide]/sidebar:invisible ds:group-data-[labels=hide]/sidebar:mb-0 ds:group-data-[labels=hide]/sidebar:max-h-0 ds:group-data-[labels=hide]/sidebar:py-0 ds:group-data-[labels=hide]/sidebar:opacity-0"
3657
4066
  ),
3658
4067
  children: [
3659
4068
  label != null && /* @__PURE__ */ jsx(
@@ -3682,23 +4091,45 @@ var SidebarSection = React6.forwardRef(
3682
4091
  }
3683
4092
  );
3684
4093
  SidebarSection.displayName = "SidebarSection";
4094
+ var FORCED_COLORS_FOCUS = "ds:forced-colors:focus-visible:outline-solid ds:forced-colors:focus-visible:outline-2 ds:forced-colors:focus-visible:-outline-offset-2";
4095
+ var FORCED_COLORS_ACTIVE = "ds:forced-colors:data-[active=true]:outline-solid ds:forced-colors:data-[active=true]:outline-1 ds:forced-colors:data-[active=true]:-outline-offset-1";
4096
+ var SIDEBAR_ROW_MOTION = cn(
4097
+ "ds:[&_svg]:transition-opacity ds:[&_svg]:duration-[var(--duration-fast)] ds:[&_svg]:ease-[var(--ease-out-quart)]",
4098
+ "ds:hover:[&_svg]:opacity-100 ds:data-[active=true]:[&_svg]:opacity-100 ds:motion-reduce:[&_svg]:transition-none",
4099
+ "ds:before:pointer-events-none ds:before:absolute ds:before:content-[''] ds:before:top-1/2 ds:before:start-0",
4100
+ "ds:before:h-4 ds:before:w-[2px] ds:before:-translate-y-1/2 ds:before:bg-brand ds:before:rounded-e-full",
4101
+ "ds:before:origin-center ds:before:scale-y-0 ds:before:opacity-0",
4102
+ "ds:before:transition-[opacity,scale] ds:before:duration-[var(--duration-normal)] ds:before:ease-[var(--ease-out-quart)]",
4103
+ "ds:hover:before:scale-y-100 ds:hover:before:opacity-40 ds:data-[active=true]:before:scale-y-100 ds:data-[active=true]:before:opacity-100",
4104
+ "ds:motion-reduce:before:transition-none",
4105
+ // White surface variants show state through tint and text, without an edge marker.
4106
+ "ds:group-data-[variant=floating]/sidebar:before:hidden ds:group-data-[variant=flush]/sidebar:before:hidden"
4107
+ );
4108
+ var RAIL_BADGE_DOT = cn(
4109
+ "ds:group-data-[labels=hide]/sidebar:has-[[data-slot=sidebar-link-badge]]:after:absolute ds:group-data-[labels=hide]/sidebar:has-[[data-slot=sidebar-link-badge]]:after:content-['']",
4110
+ "ds:group-data-[labels=hide]/sidebar:has-[[data-slot=sidebar-link-badge]]:after:top-1 ds:group-data-[labels=hide]/sidebar:has-[[data-slot=sidebar-link-badge]]:after:end-1",
4111
+ "ds:group-data-[labels=hide]/sidebar:has-[[data-slot=sidebar-link-badge]]:after:size-1.5 ds:group-data-[labels=hide]/sidebar:has-[[data-slot=sidebar-link-badge]]:after:rounded-full",
4112
+ "ds:group-data-[labels=hide]/sidebar:has-[[data-slot=sidebar-link-badge]]:after:bg-brand",
4113
+ "ds:group-data-[labels=hide]/sidebar:has-[[data-slot=sidebar-link-badge][data-tone=danger]]:after:bg-danger-fg",
4114
+ "ds:group-data-[labels=hide]/sidebar:has-[[data-slot=sidebar-link-badge][data-tone=warning]]:after:bg-warning-fg",
4115
+ "ds:group-data-[labels=hide]/sidebar:has-[[data-slot=sidebar-link-badge][data-tone=neutral]]:after:bg-fg-3"
4116
+ );
3685
4117
  function getTextContent(node) {
3686
4118
  if (node == null || typeof node === "boolean") return "";
3687
4119
  if (typeof node === "string" || typeof node === "number") return String(node);
3688
4120
  if (Array.isArray(node)) return node.map(getTextContent).filter(Boolean).join(" ");
3689
- if (React6.isValidElement(node)) {
4121
+ if (React7.isValidElement(node)) {
3690
4122
  return getTextContent(node.props.children);
3691
4123
  }
3692
4124
  return "";
3693
4125
  }
3694
- var SidebarLink = React6.forwardRef(
4126
+ var SidebarLink = React7.forwardRef(
3695
4127
  function SidebarLink2({ href, icon, active = false, asChild, className, children, "aria-label": ariaLabel, ...props }, ref) {
3696
4128
  const Comp = asChild ? Slot : "a";
3697
4129
  const accessibleLabel = ariaLabel ?? (asChild ? void 0 : getTextContent(children) || void 0);
3698
- const labelsHidden = React6.useContext(SidebarLabelsHiddenContext);
3699
- const peekEnabled = React6.useContext(SidebarPeekEnabledContext);
3700
- const tooltipLabel = ariaLabel ?? (getTextContent(children) || void 0);
3701
- const showTooltip = labelsHidden && !peekEnabled && Boolean(tooltipLabel);
4130
+ const labelsHidden = React7.useContext(SidebarLabelsHiddenContext);
4131
+ const childAriaLabel = asChild && React7.isValidElement(children) ? children.props["aria-label"] : void 0;
4132
+ const tooltipLabel = ariaLabel ?? childAriaLabel ?? (getTextContent(children) || void 0);
3702
4133
  const link = /* @__PURE__ */ jsx(
3703
4134
  Comp,
3704
4135
  {
@@ -3709,16 +4140,20 @@ var SidebarLink = React6.forwardRef(
3709
4140
  "aria-label": accessibleLabel,
3710
4141
  ...slot(sidebarAnatomy, "link"),
3711
4142
  className: cn(
3712
- "ds:group/link ds:relative ds:mb-px ds:flex ds:cursor-pointer ds:items-center ds:gap-2.5 ds:rounded-md ds:px-2.5 ds:py-1.5",
4143
+ "ds:group/link ds:relative ds:mb-px ds:flex ds:cursor-pointer ds:items-center ds:gap-2.5 ds:rounded-control ds:px-2.5 ds:py-1.5",
4144
+ // Railed: the row becomes the icon column's own square-ish target,
4145
+ // the icon centred in it (labels and badges are display:none, so
4146
+ // the gap collapses with them).
4147
+ "ds:group-data-[labels=hide]/sidebar:justify-center ds:group-data-[labels=hide]/sidebar:px-0",
3713
4148
  "ds:text-fg-2 ds:text-[13px] ds:font-normal ds:no-underline",
3714
- "ds:transition-colors ds:duration-[var(--duration-fast)] ds:ease-[var(--ease-out-quart)]",
4149
+ "ds:transition-colors ds:duration-[var(--duration-normal)] ds:ease-[var(--ease-out-quart)]",
3715
4150
  "ds:motion-reduce:transition-none",
3716
4151
  "ds:hover:bg-bg-3 ds:hover:text-fg",
3717
4152
  "ds:focus-visible:[box-shadow:var(--shadow-focus-ring)] ds:focus-visible:outline-none",
3718
4153
  "ds:data-[active=true]:bg-brand-bg ds:data-[active=true]:text-brand ds:data-[active=true]:font-medium",
3719
4154
  // Flush: icons read fg-3 at rest and lift to fg on hover/active —
3720
- // the row's own bg-brand-bg tint (above) and the 2px edge
3721
- // indicator (below) already carry "active", so the icon doesn't
4155
+ // the row's own bg-brand-bg tint (above) already carries
4156
+ // "active", so the icon doesn't
3722
4157
  // also need brand-colored ink. Placed before the rail rule below
3723
4158
  // so a collapsed rail keeps winning on the combined flush+rail
3724
4159
  // case (equal specificity, source order decides).
@@ -3730,22 +4165,17 @@ var SidebarLink = React6.forwardRef(
3730
4165
  // counters the default `[&_svg]:opacity-85` so the active
3731
4166
  // icon doesn't read as "still inactive but darker".
3732
4167
  "ds:group-data-[labels=hide]/sidebar:data-[active=true]:[&_svg]:text-brand ds:group-data-[labels=hide]/sidebar:data-[active=true]:[&_svg]:opacity-100",
3733
- // Active rail: 2px wide, 16px tall, anchored to the link's
4168
+ // Classic rail: 2px wide, 16px tall, anchored to the link's
3734
4169
  // own left edge — no parent-padding dependency. Continues
3735
4170
  // working unchanged when the aside narrows to a rail.
3736
- "ds:data-[active=true]:before:absolute ds:data-[active=true]:before:content-['']",
3737
- "ds:data-[active=true]:before:top-1/2 ds:data-[active=true]:before:left-0",
3738
- "ds:data-[active=true]:before:h-4 ds:data-[active=true]:before:w-[2px] ds:data-[active=true]:before:-translate-y-1/2",
3739
- "ds:data-[active=true]:before:bg-brand ds:data-[active=true]:before:rounded-r-full",
3740
- // Padding/gap stay constant so the icon stays under the cursor
3741
- // when the column widens during peek. The label simply collapses
3742
- // to width 0 via <SidebarLinkLabel>.
4171
+ SIDEBAR_ROW_MOTION,
4172
+ RAIL_BADGE_DOT,
4173
+ FORCED_COLORS_FOCUS,
4174
+ FORCED_COLORS_ACTIVE,
3743
4175
  "ds:[&_svg]:size-3.5 ds:[&_svg]:shrink-0 ds:[&_svg]:opacity-85",
3744
- // Floating variant: softer corners + a taller hit area (Fitts's
3745
- // law — a larger target is faster and lower-error to acquire), and
3746
- // a full pill highlight for active instead of the left rail bar.
3747
- "ds:group-data-[variant=floating]/sidebar:gap-3 ds:group-data-[variant=floating]/sidebar:rounded-lg ds:group-data-[variant=floating]/sidebar:py-2",
3748
- "ds:group-data-[variant=floating]/sidebar:data-[active=true]:before:hidden",
4176
+ // Floating variant: taller hit areas, with the same control corners
4177
+ // and quiet tint/icon feedback.
4178
+ "ds:group-data-[variant=floating]/sidebar:gap-3 ds:group-data-[variant=floating]/sidebar:py-2",
3749
4179
  // Flush row anatomy: 32px rows on the control radius (this already
3750
4180
  // matches the base py-1.5 at the body-sm role's leading — only the
3751
4181
  // radius and icon geometry actually move), 16px icons at full
@@ -3770,9 +4200,7 @@ var SidebarLink = React6.forwardRef(
3770
4200
  // auto margin, which is why "Billing$48k" rendered glued.
3771
4201
  // Single-line label clips via overflow; badge stays put.
3772
4202
  "ds:flex ds:min-w-0 ds:flex-1 ds:items-center ds:gap-1.5 ds:overflow-hidden ds:whitespace-nowrap",
3773
- "ds:transition-[opacity,max-width] ds:duration-[var(--motion-duration-spatial)] ds:ease-[var(--motion-ease-move)] ds:motion-reduce:transition-none",
3774
- "ds:max-w-full ds:opacity-100",
3775
- "ds:group-data-[labels=hide]/sidebar:max-w-0 ds:group-data-[labels=hide]/sidebar:opacity-0 ds:group-data-[labels=hide]/sidebar:invisible"
4203
+ "ds:group-data-[labels=hide]/sidebar:hidden"
3776
4204
  ),
3777
4205
  children
3778
4206
  }
@@ -3780,15 +4208,11 @@ var SidebarLink = React6.forwardRef(
3780
4208
  ] })
3781
4209
  }
3782
4210
  );
3783
- if (!showTooltip) return link;
3784
- return /* @__PURE__ */ jsxs(Tooltip, { children: [
3785
- /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: link }),
3786
- /* @__PURE__ */ jsx(TooltipContent, { side: "right", children: tooltipLabel })
3787
- ] });
4211
+ return /* @__PURE__ */ jsx(SidebarRailTooltip, { label: tooltipLabel, children: link });
3788
4212
  }
3789
4213
  );
3790
4214
  SidebarLink.displayName = "SidebarLink";
3791
- var SidebarLinkLabel = React6.forwardRef(
4215
+ var SidebarLinkLabel = React7.forwardRef(
3792
4216
  function SidebarLinkLabel2({ className, ...props }, ref) {
3793
4217
  const collapsed = useCollapsedAttribute();
3794
4218
  return /* @__PURE__ */ jsx(
@@ -3802,12 +4226,10 @@ var SidebarLinkLabel = React6.forwardRef(
3802
4226
  // word boundary; collapses cleanly with the rail-mode max-width
3803
4227
  // animation since both rules only constrain visible content.
3804
4228
  "ds:min-w-0 ds:flex-1 ds:line-clamp-1",
3805
- // Fade + collapse instead of hard display:none so a single
3806
- // 180ms opacity tween covers all labels in lockstep with the
3807
- // 220ms aside-width transition — no snap on the last frame.
3808
- "ds:transition-[opacity,max-width] ds:duration-[var(--motion-duration-spatial)] ds:ease-[var(--motion-ease-move)] ds:motion-reduce:transition-none",
3809
- "ds:max-w-full ds:opacity-100",
3810
- "ds:group-data-[labels=hide]/sidebar:max-w-0 ds:group-data-[labels=hide]/sidebar:opacity-0 ds:group-data-[labels=hide]/sidebar:invisible",
4229
+ // Railed: removed outright (not a zero-width ghost that would keep
4230
+ // the row's gap and push the icon off centre). The aside clips
4231
+ // while it sweeps, so the label never wraps on the way.
4232
+ "ds:group-data-[labels=hide]/sidebar:hidden",
3811
4233
  className
3812
4234
  ),
3813
4235
  ...props
@@ -3816,7 +4238,7 @@ var SidebarLinkLabel = React6.forwardRef(
3816
4238
  }
3817
4239
  );
3818
4240
  SidebarLinkLabel.displayName = "SidebarLinkLabel";
3819
- var SidebarLinkAction = React6.forwardRef(
4241
+ var SidebarLinkAction = React7.forwardRef(
3820
4242
  function SidebarLinkAction2({ className, ...props }, ref) {
3821
4243
  const collapsed = useCollapsedAttribute();
3822
4244
  return /* @__PURE__ */ jsx(
@@ -3826,9 +4248,7 @@ var SidebarLinkAction = React6.forwardRef(
3826
4248
  ...slot(sidebarAnatomy, "link-action"),
3827
4249
  ...collapsed,
3828
4250
  className: cn(
3829
- "ds:transition-opacity ds:duration-[var(--motion-duration-spatial)] ds:ease-[var(--motion-ease-move)] ds:motion-reduce:transition-none",
3830
- "ds:opacity-100",
3831
- "ds:group-data-[labels=hide]/sidebar:invisible ds:group-data-[labels=hide]/sidebar:opacity-0",
4251
+ "ds:group-data-[labels=hide]/sidebar:hidden",
3832
4252
  className
3833
4253
  ),
3834
4254
  ...props
@@ -3838,7 +4258,7 @@ var SidebarLinkAction = React6.forwardRef(
3838
4258
  );
3839
4259
  SidebarLinkAction.displayName = "SidebarLinkAction";
3840
4260
  var sidebarLinkBadgeVariants = cva(
3841
- "ds:ml-auto ds:inline-flex ds:shrink-0 ds:items-center ds:justify-center ds:font-mono ds:tabular-nums ds:group-data-[labels=hide]/sidebar:hidden",
4261
+ "ds:ms-auto ds:inline-flex ds:shrink-0 ds:items-center ds:justify-center ds:font-mono ds:tabular-nums ds:group-data-[labels=hide]/sidebar:hidden",
3842
4262
  {
3843
4263
  variants: {
3844
4264
  tone: {
@@ -3851,13 +4271,14 @@ var sidebarLinkBadgeVariants = cva(
3851
4271
  defaultVariants: { tone: "default" }
3852
4272
  }
3853
4273
  );
3854
- var SidebarLinkBadge = React6.forwardRef(
4274
+ var SidebarLinkBadge = React7.forwardRef(
3855
4275
  function SidebarLinkBadge2({ tone, className, ...props }, ref) {
3856
4276
  return /* @__PURE__ */ jsx(
3857
4277
  "span",
3858
4278
  {
3859
4279
  ref,
3860
4280
  ...slot(sidebarAnatomy, "link-badge"),
4281
+ "data-tone": tone ?? "default",
3861
4282
  className: cn(sidebarLinkBadgeVariants({ tone }), className),
3862
4283
  ...props
3863
4284
  }
@@ -3865,13 +4286,14 @@ var SidebarLinkBadge = React6.forwardRef(
3865
4286
  }
3866
4287
  );
3867
4288
  SidebarLinkBadge.displayName = "SidebarLinkBadge";
3868
- var SidebarLinkGroup = React6.forwardRef(
4289
+ var SidebarLinkGroup = React7.forwardRef(
3869
4290
  function SidebarLinkGroup2({
3870
4291
  id: idProp,
3871
4292
  icon,
3872
4293
  label,
3873
4294
  href,
3874
4295
  active = false,
4296
+ activeDescendant = false,
3875
4297
  defaultOpen = false,
3876
4298
  open: controlled,
3877
4299
  onOpenChange,
@@ -3883,19 +4305,20 @@ var SidebarLinkGroup = React6.forwardRef(
3883
4305
  }, ref) {
3884
4306
  const messages = useDsMessages("sidebar");
3885
4307
  const collapsed = useCollapsedAttribute();
3886
- const reactId = React6.useId();
4308
+ const labelsHidden = React7.useContext(SidebarLabelsHiddenContext);
4309
+ const reactId = React7.useId();
3887
4310
  const id = idProp ?? reactId;
3888
- const scope = React6.useContext(SidebarGroupScopeContext);
3889
- const [uncontrolledOpen, setUncontrolledOpen] = React6.useState(defaultOpen);
4311
+ const scope = React7.useContext(SidebarGroupScopeContext);
4312
+ const [uncontrolledOpen, setUncontrolledOpen] = React7.useState(defaultOpen);
3890
4313
  const open = controlled ?? uncontrolledOpen;
3891
- const setOpen = React6.useCallback(
4314
+ const setOpen = React7.useCallback(
3892
4315
  (next) => {
3893
4316
  if (controlled === void 0) setUncontrolledOpen(next);
3894
4317
  onOpenChange?.(next);
3895
4318
  },
3896
4319
  [controlled, onOpenChange]
3897
4320
  );
3898
- React6.useEffect(() => {
4321
+ React7.useEffect(() => {
3899
4322
  if (scope?.exclusiveId && scope.exclusiveId !== id && open) {
3900
4323
  setOpen(false);
3901
4324
  }
@@ -3913,9 +4336,10 @@ var SidebarLinkGroup = React6.forwardRef(
3913
4336
  };
3914
4337
  const contentId = `${id}-content`;
3915
4338
  const bodyClassName = cn(
3916
- "ds:group/link ds:relative ds:flex ds:flex-1 ds:cursor-pointer ds:items-center ds:gap-2.5 ds:rounded-md ds:px-2.5 ds:py-1.5",
4339
+ "ds:group/link ds:relative ds:flex ds:flex-1 ds:cursor-pointer ds:items-center ds:gap-2.5 ds:rounded-control ds:px-2.5 ds:py-1.5",
4340
+ "ds:group-data-[labels=hide]/sidebar:justify-center ds:group-data-[labels=hide]/sidebar:px-0",
3917
4341
  "ds:text-fg-2 ds:text-[13px] ds:font-normal ds:no-underline",
3918
- "ds:transition-colors ds:duration-[var(--duration-fast)] ds:ease-[var(--ease-out-quart)]",
4342
+ "ds:transition-colors ds:duration-[var(--duration-normal)] ds:ease-[var(--ease-out-quart)]",
3919
4343
  "ds:motion-reduce:transition-none",
3920
4344
  "ds:hover:bg-bg-3 ds:hover:text-fg",
3921
4345
  "ds:focus-visible:[box-shadow:var(--shadow-focus-ring)] ds:focus-visible:outline-none",
@@ -3925,14 +4349,13 @@ var SidebarLinkGroup = React6.forwardRef(
3925
4349
  // In rail, color carries active state since the chevron is hidden.
3926
4350
  "ds:group-data-[labels=hide]/sidebar:data-[active=true]:[&_svg]:text-brand ds:group-data-[labels=hide]/sidebar:data-[active=true]:[&_svg]:opacity-100",
3927
4351
  // Active rail mark — anchored to body row's left edge.
3928
- "ds:data-[active=true]:before:absolute ds:data-[active=true]:before:content-['']",
3929
- "ds:data-[active=true]:before:top-1/2 ds:data-[active=true]:before:left-0",
3930
- "ds:data-[active=true]:before:h-4 ds:data-[active=true]:before:w-[2px] ds:data-[active=true]:before:-translate-y-1/2",
3931
- "ds:data-[active=true]:before:bg-brand ds:data-[active=true]:before:rounded-r-full",
4352
+ SIDEBAR_ROW_MOTION,
4353
+ RAIL_BADGE_DOT,
4354
+ FORCED_COLORS_FOCUS,
4355
+ FORCED_COLORS_ACTIVE,
3932
4356
  "ds:[&_svg]:size-3.5 ds:[&_svg]:shrink-0 ds:[&_svg]:opacity-85",
3933
- // Floating variant — match SidebarLink: taller hit area, pill active.
3934
- "ds:group-data-[variant=floating]/sidebar:gap-3 ds:group-data-[variant=floating]/sidebar:rounded-lg ds:group-data-[variant=floating]/sidebar:py-2",
3935
- "ds:group-data-[variant=floating]/sidebar:data-[active=true]:before:hidden",
4357
+ // Floating variant — match SidebarLink: taller hit area, same feedback.
4358
+ "ds:group-data-[variant=floating]/sidebar:gap-3 ds:group-data-[variant=floating]/sidebar:py-2",
3936
4359
  // Flush — match SidebarLink: 32px row on the control radius, 16px
3937
4360
  // full-opacity icons, body-sm label instead of a hardcoded pixel size.
3938
4361
  "ds:group-data-[variant=flush]/sidebar:rounded-control ds:group-data-[variant=flush]/sidebar:[&_svg]:size-4 ds:group-data-[variant=flush]/sidebar:[&_svg]:opacity-100 ds:group-data-[variant=flush]/sidebar:text-body-sm",
@@ -3948,13 +4371,28 @@ var SidebarLinkGroup = React6.forwardRef(
3948
4371
  // word boundary; collapses cleanly with the rail-mode max-width
3949
4372
  // animation since both rules only constrain visible content.
3950
4373
  "ds:min-w-0 ds:flex-1 ds:line-clamp-1",
3951
- "ds:transition-[opacity,max-width] ds:duration-[var(--motion-duration-spatial)] ds:ease-[var(--motion-ease-move)] ds:motion-reduce:transition-none",
3952
- "ds:max-w-full ds:opacity-100",
3953
- "ds:group-data-[labels=hide]/sidebar:max-w-0 ds:group-data-[labels=hide]/sidebar:opacity-0 ds:group-data-[labels=hide]/sidebar:invisible"
4374
+ "ds:group-data-[labels=hide]/sidebar:hidden"
3954
4375
  ),
3955
4376
  children: label
3956
4377
  }
3957
4378
  );
4379
+ const groupText = getTextContent(label) || void 0;
4380
+ const bodyLink = /* @__PURE__ */ jsxs(
4381
+ "a",
4382
+ {
4383
+ href,
4384
+ "data-active": active || labelsHidden && activeDescendant ? "true" : void 0,
4385
+ "aria-current": active ? "page" : void 0,
4386
+ "aria-label": groupText,
4387
+ onClick: handleBodyClick,
4388
+ ...slot(sidebarAnatomy, "group-link"),
4389
+ className: bodyClassName,
4390
+ children: [
4391
+ icon,
4392
+ labelSpan
4393
+ ]
4394
+ }
4395
+ );
3958
4396
  return /* @__PURE__ */ jsx(
3959
4397
  "div",
3960
4398
  {
@@ -3965,22 +4403,7 @@ var SidebarLinkGroup = React6.forwardRef(
3965
4403
  ...props,
3966
4404
  children: /* @__PURE__ */ jsxs(Collapsible, { open, onOpenChange: setOpen, children: [
3967
4405
  /* @__PURE__ */ jsxs("div", { className: cn("ds:flex ds:items-stretch", classNames?.row), children: [
3968
- /* @__PURE__ */ jsxs(
3969
- "a",
3970
- {
3971
- href,
3972
- "data-active": active ? "true" : void 0,
3973
- "aria-current": active ? "page" : void 0,
3974
- "aria-label": getTextContent(label) || void 0,
3975
- onClick: handleBodyClick,
3976
- ...slot(sidebarAnatomy, "group-link"),
3977
- className: bodyClassName,
3978
- children: [
3979
- icon,
3980
- labelSpan
3981
- ]
3982
- }
3983
- ),
4406
+ /* @__PURE__ */ jsx(SidebarRailTooltip, { label: groupText, children: bodyLink }),
3984
4407
  /* @__PURE__ */ jsx(
3985
4408
  "button",
3986
4409
  {
@@ -3991,10 +4414,11 @@ var SidebarLinkGroup = React6.forwardRef(
3991
4414
  onClick: handleChevronClick,
3992
4415
  ...slot(sidebarAnatomy, "group-trigger"),
3993
4416
  className: cn(
3994
- "ds:ml-px ds:inline-flex ds:size-7 ds:shrink-0 ds:cursor-pointer ds:items-center ds:justify-center ds:rounded-md",
4417
+ "ds:ml-px ds:inline-flex ds:size-7 ds:shrink-0 ds:cursor-pointer ds:items-center ds:justify-center ds:rounded-control",
3995
4418
  "ds:text-fg-4 ds:hover:bg-bg-3 ds:hover:text-fg-2",
3996
4419
  "ds:transition-colors ds:duration-[var(--duration-fast)] ds:ease-[var(--ease-out-quart)] ds:motion-reduce:transition-none",
3997
4420
  "ds:focus-visible:[box-shadow:var(--shadow-focus-ring)] ds:focus-visible:outline-none",
4421
+ FORCED_COLORS_FOCUS,
3998
4422
  "ds:[&_svg]:size-3.5 ds:[&_svg]:shrink-0 ds:[&_svg]:transition-transform ds:[&_svg]:duration-[var(--duration-fast)] ds:[&_svg]:ease-[var(--ease-out-quart)] ds:motion-reduce:[&_svg]:transition-none",
3999
4423
  // Hide in rail — content tree is hidden too, so the
4000
4424
  // affordance has nothing to control.
@@ -4025,7 +4449,7 @@ var SidebarLinkGroup = React6.forwardRef(
4025
4449
  }
4026
4450
  );
4027
4451
  SidebarLinkGroup.displayName = "SidebarLinkGroup";
4028
- var SidebarFooter = React6.forwardRef(
4452
+ var SidebarFooter = React7.forwardRef(
4029
4453
  function SidebarFooter2({ className, ...props }, ref) {
4030
4454
  return /* @__PURE__ */ jsx(
4031
4455
  "div",
@@ -4034,6 +4458,7 @@ var SidebarFooter = React6.forwardRef(
4034
4458
  ...slot(sidebarAnatomy, "footer"),
4035
4459
  className: cn(
4036
4460
  "ds:border-rule ds:mt-auto ds:flex ds:items-center ds:gap-2.5 ds:border-t ds:px-2 ds:pt-2.5 ds:pb-1",
4461
+ "ds:group-data-[labels=hide]/sidebar:justify-center ds:group-data-[labels=hide]/sidebar:px-0",
4037
4462
  "ds:text-fg-3 ds:text-xs",
4038
4463
  className
4039
4464
  ),
@@ -4043,7 +4468,7 @@ var SidebarFooter = React6.forwardRef(
4043
4468
  }
4044
4469
  );
4045
4470
  SidebarFooter.displayName = "SidebarFooter";
4046
- var SidebarUser = React6.forwardRef(function SidebarUser2({ name, subtitle, avatarSrc, className, ...props }, ref) {
4471
+ var SidebarUser = React7.forwardRef(function SidebarUser2({ name, subtitle, avatarSrc, className, ...props }, ref) {
4047
4472
  const collapsed = useCollapsedAttribute();
4048
4473
  return /* @__PURE__ */ jsxs(
4049
4474
  "div",
@@ -4051,18 +4476,28 @@ var SidebarUser = React6.forwardRef(function SidebarUser2({ name, subtitle, avat
4051
4476
  ref,
4052
4477
  ...slot(sidebarAnatomy, "user"),
4053
4478
  ...collapsed,
4054
- className: cn("ds:flex ds:min-w-0 ds:items-center ds:gap-2.5", className),
4479
+ className: cn(
4480
+ "ds:flex ds:min-w-0 ds:items-center ds:gap-2.5",
4481
+ "ds:group-data-[labels=hide]/sidebar:justify-center ds:group-data-[labels=hide]/sidebar:gap-0",
4482
+ className
4483
+ ),
4055
4484
  ...props,
4056
4485
  children: [
4057
- /* @__PURE__ */ jsx(Avatar, { size: "sm", variant: "branded", name, src: avatarSrc ?? void 0 }),
4486
+ /* @__PURE__ */ jsx(
4487
+ SidebarRailTooltip,
4488
+ {
4489
+ label: typeof subtitle === "string" && subtitle ? `${name} \xB7 ${subtitle}` : name,
4490
+ children: /* @__PURE__ */ jsx(Avatar, { size: "sm", variant: "branded", name, src: avatarSrc ?? void 0 })
4491
+ }
4492
+ ),
4058
4493
  /* @__PURE__ */ jsxs(
4059
4494
  "div",
4060
4495
  {
4061
4496
  className: cn(
4062
4497
  "ds:min-w-0 ds:leading-tight",
4063
- "ds:transition-[opacity,max-width] ds:duration-[var(--motion-duration-spatial)] ds:ease-[var(--motion-ease-move)] ds:motion-reduce:transition-none",
4064
- "ds:max-w-full ds:opacity-100",
4065
- "ds:group-data-[labels=hide]/sidebar:max-w-0 ds:group-data-[labels=hide]/sidebar:opacity-0 ds:group-data-[labels=hide]/sidebar:invisible"
4498
+ // Railed, the avatar stands alone; the name stays readable to
4499
+ // screen readers (`sr-only`) since the avatar carries no text.
4500
+ "ds:group-data-[labels=hide]/sidebar:sr-only"
4066
4501
  ),
4067
4502
  children: [
4068
4503
  /* @__PURE__ */ jsx(
@@ -4125,9 +4560,10 @@ function SidebarDrawer({
4125
4560
  );
4126
4561
  }
4127
4562
  SidebarDrawer.displayName = "SidebarDrawer";
4128
- var SidebarBrandSwitcher = React6.forwardRef(
4563
+ var SidebarBrandSwitcher = React7.forwardRef(
4129
4564
  function SidebarBrandSwitcher2({
4130
4565
  brand,
4566
+ mark,
4131
4567
  label,
4132
4568
  current,
4133
4569
  items,
@@ -4147,8 +4583,8 @@ var SidebarBrandSwitcher = React6.forwardRef(
4147
4583
  rowClassName,
4148
4584
  trailing
4149
4585
  }, ref) {
4150
- const [open, setOpen] = React6.useState(false);
4151
- useSidebarPeekLock(open);
4586
+ const [open, setOpen] = React7.useState(false);
4587
+ const [tooltipHeld, setTooltipHeld] = React7.useState(false);
4152
4588
  const others = items.filter((p) => p.id !== current.id);
4153
4589
  return (
4154
4590
  // Geometry mirrors <SidebarBrand>: `px-2.5 pt-1 pb-4 gap-2`. This is
@@ -4163,6 +4599,10 @@ var SidebarBrandSwitcher = React6.forwardRef(
4163
4599
  ...slot(sidebarBrandSwitcherAnatomy, "root"),
4164
4600
  className: cn(
4165
4601
  "ds:flex ds:min-w-0 ds:items-center ds:gap-2 ds:px-2.5 ds:pt-1 ds:pb-4",
4602
+ // Railed, mirrors <SidebarBrand>: the mark and the `trailing` control
4603
+ // stack, centred in the icon column, so the way back out of the
4604
+ // rail (a <SidebarPinButton>) stays visible and reachable.
4605
+ "ds:group-data-[labels=hide]/sidebar:flex-col ds:group-data-[labels=hide]/sidebar:justify-center ds:group-data-[labels=hide]/sidebar:gap-0 ds:group-data-[labels=hide]/sidebar:px-0",
4166
4606
  // Flush — mirrors <SidebarBrand>: pinned to the top of the
4167
4607
  // scrolling column, with a hairline that appears once the list
4168
4608
  // has scrolled. `data-scrolled` is only ever set while flush, so
@@ -4175,17 +4615,25 @@ var SidebarBrandSwitcher = React6.forwardRef(
4175
4615
  ),
4176
4616
  children: [
4177
4617
  /* @__PURE__ */ jsxs(DropdownMenu, { open, onOpenChange: setOpen, children: [
4178
- /* @__PURE__ */ jsxs(
4618
+ /* @__PURE__ */ jsx(SidebarRailTooltip, { label: current.name, suppressed: open || tooltipHeld, children: /* @__PURE__ */ jsxs(
4179
4619
  DropdownMenuTrigger,
4180
4620
  {
4181
4621
  "aria-label": triggerLabel,
4622
+ onPointerLeave: () => setTooltipHeld(false),
4623
+ onBlur: () => setTooltipHeld(false),
4182
4624
  ...slot(sidebarBrandSwitcherAnatomy, "trigger"),
4183
4625
  className: cn(
4184
4626
  // Negative left margin pulls the trigger's hover-bg toward
4185
4627
  // the column edge while the inner padding holds the brand
4186
4628
  // glyph at the same x-position as direct <SidebarBrand>
4187
4629
  // children — same hover affordance, no glyph drift.
4188
- "ds:group/brand-trigger ds:-ml-2 ds:flex ds:min-w-0 ds:flex-1 ds:cursor-pointer ds:items-center ds:gap-2 ds:rounded-md ds:py-1.5 ds:pr-1.5 ds:pl-2",
4630
+ "ds:group/brand-trigger ds:-ml-2 ds:flex ds:min-w-0 ds:flex-1 ds:cursor-pointer ds:items-center ds:gap-2 ds:rounded-control ds:py-1.5 ds:pr-1.5 ds:pl-2",
4631
+ // Railed: the trigger is the centred mark alone. The space to
4632
+ // the `trailing` control below is the trigger's own margin, not
4633
+ // the row's gap, so a consumer `gap-0` on `className` (which
4634
+ // outranks ours by cascade layer) cannot butt » against the mark.
4635
+ "ds:group-data-[labels=hide]/sidebar:ml-0 ds:group-data-[labels=hide]/sidebar:w-full ds:group-data-[labels=hide]/sidebar:flex-none ds:group-data-[labels=hide]/sidebar:justify-center ds:group-data-[labels=hide]/sidebar:gap-0 ds:group-data-[labels=hide]/sidebar:px-0",
4636
+ "ds:group-data-[labels=hide]/sidebar:not-last:mb-1",
4189
4637
  "ds:text-fg ds:transition-colors ds:duration-[var(--duration-fast)] ds:ease-[var(--ease-out-quart)] ds:motion-reduce:transition-none",
4190
4638
  // `aria-expanded` twin: a TooltipTrigger asChild ancestor can
4191
4639
  // clobber this trigger's own `data-state` with the tooltip's
@@ -4193,10 +4641,21 @@ var SidebarBrandSwitcher = React6.forwardRef(
4193
4641
  // sets `aria-expanded`.
4194
4642
  "ds:hover:bg-bg-3 ds:data-[state=open]:bg-bg-3 ds:aria-expanded:bg-bg-3",
4195
4643
  "ds:focus-visible:outline-none ds:focus-visible:[box-shadow:var(--shadow-focus-ring)]",
4644
+ "ds:forced-colors:focus-visible:outline-solid ds:forced-colors:focus-visible:outline-2 ds:forced-colors:focus-visible:-outline-offset-2",
4196
4645
  triggerClassName
4197
4646
  ),
4198
4647
  children: [
4199
- brand,
4648
+ mark != null ? /* @__PURE__ */ jsxs(Fragment, { children: [
4649
+ /* @__PURE__ */ jsx("span", { className: "ds:inline-flex ds:shrink-0 ds:items-center ds:group-data-[labels=hide]/sidebar:hidden", children: brand }),
4650
+ /* @__PURE__ */ jsx(
4651
+ "span",
4652
+ {
4653
+ ...slot(sidebarBrandSwitcherAnatomy, "mark"),
4654
+ className: "ds:hidden ds:shrink-0 ds:items-center ds:justify-center ds:group-data-[labels=hide]/sidebar:inline-flex",
4655
+ children: mark
4656
+ }
4657
+ )
4658
+ ] }) : brand,
4200
4659
  /* @__PURE__ */ jsx(SidebarBrandText, { className: "ds:font-display ds:text-fg ds:text-[17px] ds:font-semibold ds:tracking-tight", children: label }),
4201
4660
  /* @__PURE__ */ jsx(
4202
4661
  ChevronDownIcon,
@@ -4214,10 +4673,11 @@ var SidebarBrandSwitcher = React6.forwardRef(
4214
4673
  )
4215
4674
  ]
4216
4675
  }
4217
- ),
4676
+ ) }),
4218
4677
  /* @__PURE__ */ jsxs(
4219
4678
  DropdownMenuContent,
4220
4679
  {
4680
+ onCloseAutoFocus: () => setTooltipHeld(true),
4221
4681
  side: "right",
4222
4682
  align: "start",
4223
4683
  sideOffset: 12,
@@ -4327,7 +4787,7 @@ function SidebarBrandSwitcherOtherRow({
4327
4787
  isLaunching
4328
4788
  }) {
4329
4789
  const reachable = item.available !== false;
4330
- const [launching, setLaunching] = React6.useState(false);
4790
+ const [launching, setLaunching] = React7.useState(false);
4331
4791
  const externalLaunching = isLaunching?.(item) ?? false;
4332
4792
  const busy = launching || externalLaunching;
4333
4793
  const handleSelect = async () => {
@@ -4408,6 +4868,6 @@ var BrandScope = forwardRef(function BrandScope2({ product, children, ...props }
4408
4868
  });
4409
4869
  BrandScope.displayName = "BrandScope";
4410
4870
 
4411
- export { AgreementPaneHeading, AgreementViewer, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, BRAND_PRODUCTS, BrandScope, BrandScopeProvider, Chip, ClientSelect, CmdkCompatContext, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComingSoon, DEFAULT_COMBOBOX_MESSAGES, Grid, Logo, PlainLink, ProposalAddOn, ProposalBillingTerms, ProposalConsentGate, ProposalCustomPage, ProposalNote, ProposalPackageCard, ProposalPaymentCapture, ProposalPricingSummary, ProposalServiceRow, ProposalSignatureBlock, ProposalSignerList, QUESTION_TYPES, QUESTION_TYPE_CONTRACT_VERSION, Questions, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarBrand, SidebarBrandSwitcher, SidebarBrandSwitcherTile, SidebarBrandText, SidebarDrawer, SidebarFooter, SidebarLink, SidebarLinkAction, SidebarLinkBadge, SidebarLinkGroup, SidebarLinkLabel, SidebarPinButton, SidebarProvider, SidebarSection, SidebarTrigger, SidebarUser, assetPath, brandLabel, brandScope, chipVariants, getAssetBasePath, resolveChipStyle, setAssetBasePath, sidebarLinkBadgeVariants, useBrandScope, useSidebarPeekLock, useSidebarState };
4412
- //# sourceMappingURL=chunk-6CXI3KRG.js.map
4413
- //# sourceMappingURL=chunk-6CXI3KRG.js.map
4871
+ export { AgreementPaneHeading, AgreementViewer, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, BRAND_PRODUCTS, BrandScope, BrandScopeProvider, Chip, ClientSelect, CmdkCompatContext, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComingSoon, DEFAULT_COMBOBOX_MESSAGES, Grid, Logo, PlainLink, ProposalAddOn, ProposalBillingTerms, ProposalConsentGate, ProposalCustomPage, ProposalNote, ProposalPackageCard, ProposalPaymentCapture, ProposalPricingSummary, ProposalServiceRow, ProposalSignatureBlock, ProposalSignerList, QUESTION_TYPES, QUESTION_TYPE_CONTRACT_VERSION, Questions, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarBrand, SidebarBrandSwitcher, SidebarBrandSwitcherTile, SidebarBrandText, SidebarDrawer, SidebarFooter, SidebarLink, SidebarLinkAction, SidebarLinkBadge, SidebarLinkGroup, SidebarLinkLabel, SidebarPinButton, SidebarProvider, SidebarSection, SidebarTrigger, SidebarUser, TaxSoftwareLogo, assetPath, brandLabel, brandScope, chipVariants, getAssetBasePath, resolveChipStyle, setAssetBasePath, sidebarLinkBadgeVariants, useBrandScope, useSidebarPeekLock, useSidebarState };
4872
+ //# sourceMappingURL=chunk-7VPEFOTS.js.map
4873
+ //# sourceMappingURL=chunk-7VPEFOTS.js.map