@botiverse/raft-ui 0.22.0 → 0.23.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,6 +1,6 @@
1
1
  import { cn } from "./cn.mjs";
2
2
  import { Dialog } from "@base-ui/react/dialog";
3
- import { ArrowLeft, Check, Minus, X } from "lucide-react";
3
+ import { ArrowLeft, Check, ChevronRight, Minus, X } from "lucide-react";
4
4
  import { Children, Fragment, createContext, createElement, isValidElement, use, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
5
5
  import { tv } from "tailwind-variants/lite";
6
6
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -56,15 +56,22 @@ const headEdges = ["px-5 max-md:px-4", ...headEdgePull];
56
56
  * as the arithmetic so it follows the control tokens wherever they switch.
57
57
  */
58
58
  const controlIconInset = "[--icon-inset:calc((var(--control-height)-var(--control-icon-size))/2)]";
59
+ //#endregion
60
+ //#region src/lib/stacked-actions.ts
59
61
  /**
60
62
  * The row of buttons while `data-stacked` is set: a full-width column. A
61
63
  * button alone in a wrapper (a tooltip's trigger) fills the width too.
64
+ *
65
+ * Until the row has been measured and painted once (`data-measured`), its
66
+ * buttons have no transition. The first measure lands after the buttons were
67
+ * styled as a row, so a stacked ghost Cancel would otherwise fade its frame in
68
+ * as the dialog opens; the first painted frame must already be the stack.
62
69
  */
63
70
  const stackedActions = [
64
71
  "data-stacked:flex-col-reverse",
65
72
  "data-stacked:items-stretch",
66
73
  "data-stacked:*:data-[slot=button]:w-full data-stacked:[&>*>[data-slot=button]:only-child]:w-full",
67
- ...[].map((value) => `data-stacked:${value}`)
74
+ "not-data-measured:**:data-[slot=button]:transition-none"
68
75
  ];
69
76
  function assignRef$2(ref, value) {
70
77
  if (typeof ref === "function") ref(value);
@@ -117,11 +124,16 @@ function useStackedActions(ref, inParent = false) {
117
124
  useLayoutEffect(() => {
118
125
  const frame = inParent ? row?.parentElement : row;
119
126
  if (!row || !frame || typeof ResizeObserver === "undefined") return;
127
+ let raf = 0;
128
+ let settle = 0;
120
129
  const measure = () => {
121
130
  const overflows = rowOverflows(row, frame);
122
- if (overflows !== void 0) setStacked(overflows);
131
+ if (overflows === void 0) return;
132
+ setStacked(overflows);
133
+ if (!settle && !row.hasAttribute("data-measured")) settle = requestAnimationFrame(() => {
134
+ settle = requestAnimationFrame(() => row.setAttribute("data-measured", ""));
135
+ });
123
136
  };
124
- let raf = 0;
125
137
  const schedule = () => {
126
138
  cancelAnimationFrame(raf);
127
139
  raf = requestAnimationFrame(measure);
@@ -146,6 +158,7 @@ function useStackedActions(ref, inParent = false) {
146
158
  return () => {
147
159
  live = false;
148
160
  cancelAnimationFrame(raf);
161
+ cancelAnimationFrame(settle);
149
162
  resize.disconnect();
150
163
  mutation.disconnect();
151
164
  fonts?.removeEventListener("loadingdone", schedule);
@@ -446,6 +459,21 @@ const buttonVariants = tv$1({
446
459
  size: "md"
447
460
  },
448
461
  compoundVariants: [
462
+ {
463
+ variant: "ghost",
464
+ size: [
465
+ "xs",
466
+ "sm",
467
+ "md",
468
+ "lg",
469
+ "xl"
470
+ ],
471
+ class: { root: [
472
+ "in-data-stacked:border-line-strong in-data-stacked:bg-layer-card",
473
+ "in-data-stacked:hover:bg-layer-card in-data-stacked:active:bg-layer-card",
474
+ "in-data-stacked:hover:overlay-medium in-data-stacked:active:overlay-medium"
475
+ ] }
476
+ },
449
477
  {
450
478
  variant: "ghost",
451
479
  size: [
@@ -1567,6 +1595,231 @@ function TooltipContent({ align = "center", alignOffset = 0, anchor, arrowPaddin
1567
1595
  });
1568
1596
  }
1569
1597
  //#endregion
1598
+ //#region src/components/list-row/list-row.recipe.ts
1599
+ const hairline = [
1600
+ "before:pointer-events-none before:absolute before:top-0 before:right-0 before:hidden",
1601
+ "before:left-(--list-row-rule-start) before:border-t before:border-line-hairline",
1602
+ "[[data-slot=list-row]+&]:before:block [li+li>&]:before:block"
1603
+ ];
1604
+ const listRow = tv$1({
1605
+ slots: {
1606
+ group: ["flex min-w-0 flex-col overflow-hidden", "rounded-container border border-line-hairline bg-layer-card text-foreground"],
1607
+ root: [
1608
+ "group/list-row relative flex w-full min-w-0 items-center gap-3 px-4 py-3 text-left",
1609
+ "font-sans no-underline",
1610
+ "transition-colors duration-100",
1611
+ "outline-none focus-visible:keyboard:inset-ring-2 focus-visible:keyboard:inset-ring-foreground",
1612
+ "data-selected:bg-info-soft",
1613
+ "[--list-row-ink:var(--foreground)] [--list-row-ink-2:var(--foreground-muted)] [--list-row-ink-3:var(--foreground-hint)]",
1614
+ "text-(--list-row-ink)",
1615
+ "not-disabled:not-aria-disabled:data-[tone=unread]:[--list-row-ink-2:var(--foreground)]",
1616
+ "not-disabled:not-aria-disabled:data-[tone=muted]:[--list-row-ink:var(--foreground-muted)]",
1617
+ "not-disabled:not-aria-disabled:data-[tone=away]:[--list-row-ink:var(--foreground-hint)]",
1618
+ "not-disabled:not-aria-disabled:data-[tone=away]:[--list-row-ink-2:var(--foreground-hint)]",
1619
+ "disabled:cursor-not-allowed disabled:[--list-row-ink:var(--foreground-disabled)]",
1620
+ "disabled:[--list-row-ink-2:var(--foreground-disabled)] disabled:[--list-row-ink-3:var(--foreground-disabled)]",
1621
+ "aria-disabled:cursor-not-allowed aria-disabled:[--list-row-ink:var(--foreground-disabled)]",
1622
+ "aria-disabled:[--list-row-ink-2:var(--foreground-disabled)] aria-disabled:[--list-row-ink-3:var(--foreground-disabled)]"
1623
+ ],
1624
+ icon: ["flex shrink-0 items-center justify-center", "text-(--list-row-ink-3) [&>svg]:size-5 [&>svg]:shrink-0"],
1625
+ body: ["flex min-w-0 flex-1 flex-col gap-0.5"],
1626
+ line: ["flex min-w-0 items-center gap-2"],
1627
+ title: [
1628
+ "min-w-0 flex-1 truncate",
1629
+ "text-body font-semibold",
1630
+ "group-data-[tone=unread]/list-row:font-bold"
1631
+ ],
1632
+ description: ["min-w-0 flex-1 truncate", "text-callout text-(--list-row-ink-2)"],
1633
+ meta: ["min-w-0 truncate", "font-mono text-mono-meta font-normal tabular-nums text-(--list-row-ink-3)"],
1634
+ value: ["max-w-[45%] shrink-0 truncate", "text-subhead text-(--list-row-ink-3)"],
1635
+ chevron: ["flex shrink-0 items-center justify-center", "text-(--list-row-ink-3) [&>svg]:size-5 [&>svg]:shrink-0"]
1636
+ },
1637
+ variants: {
1638
+ variant: {
1639
+ default: { root: ["min-h-16 [--list-row-rule-start:63px]", hairline] },
1640
+ plain: { root: ["[--list-row-rule-start:16px]", hairline] },
1641
+ entry: { root: "" }
1642
+ },
1643
+ interactive: {
1644
+ true: { root: [
1645
+ "not-disabled:not-aria-disabled:not-data-selected:hover:overlay-subtle",
1646
+ "not-disabled:not-aria-disabled:not-data-selected:active:overlay-medium",
1647
+ "not-data-selected:data-popup-open:overlay-subtle"
1648
+ ] },
1649
+ false: {}
1650
+ },
1651
+ wrap: {
1652
+ true: { description: "whitespace-normal text-pretty" },
1653
+ false: {}
1654
+ }
1655
+ },
1656
+ defaultVariants: {
1657
+ variant: "default",
1658
+ interactive: true,
1659
+ wrap: false
1660
+ }
1661
+ });
1662
+ //#endregion
1663
+ //#region src/components/list-row/list-row.tsx
1664
+ /** An inset group: rows wrapped in a card (surface, hairline, radius-lg). */
1665
+ function ListRowGroup({ className, render, ...props }) {
1666
+ const { group } = listRow();
1667
+ const defaultProps = {
1668
+ "data-slot": "list-row-group",
1669
+ className: group({ className })
1670
+ };
1671
+ return useRender({
1672
+ defaultTagName: "div",
1673
+ render,
1674
+ props: mergeProps(defaultProps, props)
1675
+ });
1676
+ }
1677
+ /**
1678
+ * One row of a list. It renders a `button` by default; pass `render={<a />}`
1679
+ * (or a router link) for a row that goes somewhere. Children are the leading
1680
+ * block (an avatar, a channel or icon tile, `ListRowIcon`), `ListRowBody`, and
1681
+ * anything trailing (a value, a badge, a switch, `ListRowChevron`).
1682
+ */
1683
+ function ListRow({ variant = "default", tone = "default", selected = false, interactive = true, className, render, ...props }) {
1684
+ const { root } = listRow({
1685
+ variant,
1686
+ interactive
1687
+ });
1688
+ const defaultProps = {
1689
+ "data-slot": "list-row",
1690
+ "data-variant": variant,
1691
+ "data-tone": tone === "default" ? void 0 : tone,
1692
+ "data-selected": selected ? "" : void 0,
1693
+ className: root({ className }),
1694
+ ...interactive && !render ? { type: "button" } : {}
1695
+ };
1696
+ return useRender({
1697
+ defaultTagName: interactive ? "button" : "div",
1698
+ render,
1699
+ props: mergeProps(defaultProps, props)
1700
+ });
1701
+ }
1702
+ /** A 20px leading icon in ink-3: entry rows and settings. */
1703
+ function ListRowIcon({ className, render, ...props }) {
1704
+ const { icon } = listRow();
1705
+ const defaultProps = {
1706
+ "data-slot": "list-row-icon",
1707
+ "aria-hidden": true,
1708
+ className: icon({ className })
1709
+ };
1710
+ return useRender({
1711
+ defaultTagName: "span",
1712
+ render,
1713
+ props: mergeProps(defaultProps, props)
1714
+ });
1715
+ }
1716
+ /** The text column: the title and the preview, or a `ListRowTop` and a `ListRowBottom`. */
1717
+ function ListRowBody({ className, render, ...props }) {
1718
+ const { body } = listRow();
1719
+ const defaultProps = {
1720
+ "data-slot": "list-row-body",
1721
+ className: body({ className })
1722
+ };
1723
+ return useRender({
1724
+ defaultTagName: "span",
1725
+ render,
1726
+ props: mergeProps(defaultProps, props)
1727
+ });
1728
+ }
1729
+ /** The first line: the title, then the time. */
1730
+ function ListRowTop({ className, render, ...props }) {
1731
+ const { line } = listRow();
1732
+ const defaultProps = {
1733
+ "data-slot": "list-row-top",
1734
+ className: line({ className })
1735
+ };
1736
+ return useRender({
1737
+ defaultTagName: "span",
1738
+ render,
1739
+ props: mergeProps(defaultProps, props)
1740
+ });
1741
+ }
1742
+ /** The second line: the preview, then at most one badge. */
1743
+ function ListRowBottom({ className, render, ...props }) {
1744
+ const { line } = listRow();
1745
+ const defaultProps = {
1746
+ "data-slot": "list-row-bottom",
1747
+ className: line({ className })
1748
+ };
1749
+ return useRender({
1750
+ defaultTagName: "span",
1751
+ render,
1752
+ props: mergeProps(defaultProps, props)
1753
+ });
1754
+ }
1755
+ /** 16/24 600 on one line; the row's tone sets its weight and ink. */
1756
+ function ListRowTitle({ className, render, ...props }) {
1757
+ const { title } = listRow();
1758
+ const defaultProps = {
1759
+ "data-slot": "list-row-title",
1760
+ className: title({ className })
1761
+ };
1762
+ return useRender({
1763
+ defaultTagName: "span",
1764
+ render,
1765
+ props: mergeProps(defaultProps, props)
1766
+ });
1767
+ }
1768
+ /** The preview (who spoke first: "Wug: …") or a setting's consequence, 14/20 ink-2. */
1769
+ function ListRowDescription({ className, render, wrap = false, ...props }) {
1770
+ const { description } = listRow({ wrap });
1771
+ const defaultProps = {
1772
+ "data-slot": "list-row-description",
1773
+ className: description({ className })
1774
+ };
1775
+ return useRender({
1776
+ defaultTagName: "span",
1777
+ render,
1778
+ props: mergeProps(defaultProps, props)
1779
+ });
1780
+ }
1781
+ /** Machine-written facts in Space Mono 12, ink-3: the time, a gray count. */
1782
+ function ListRowMeta({ className, render, ...props }) {
1783
+ const { meta } = listRow();
1784
+ const defaultProps = {
1785
+ "data-slot": "list-row-meta",
1786
+ className: meta({ className })
1787
+ };
1788
+ return useRender({
1789
+ defaultTagName: "span",
1790
+ render,
1791
+ props: mergeProps(defaultProps, props)
1792
+ });
1793
+ }
1794
+ /** A setting's current value on the right, 15/20 ink-3, at most 45% of the row. */
1795
+ function ListRowValue({ className, render, ...props }) {
1796
+ const { value } = listRow();
1797
+ const defaultProps = {
1798
+ "data-slot": "list-row-value",
1799
+ className: value({ className })
1800
+ };
1801
+ return useRender({
1802
+ defaultTagName: "span",
1803
+ render,
1804
+ props: mergeProps(defaultProps, props)
1805
+ });
1806
+ }
1807
+ /** The ink-3 arrow of a row that opens another page. */
1808
+ function ListRowChevron({ className, render, ...props }) {
1809
+ const { chevron } = listRow();
1810
+ const defaultProps = {
1811
+ "data-slot": "list-row-chevron",
1812
+ "aria-hidden": true,
1813
+ className: chevron({ className }),
1814
+ children: /* @__PURE__ */ jsx(ChevronRight, {})
1815
+ };
1816
+ return useRender({
1817
+ defaultTagName: "span",
1818
+ render,
1819
+ props: mergeProps(defaultProps, props)
1820
+ });
1821
+ }
1822
+ //#endregion
1570
1823
  //#region src/lib/presence.ts
1571
1824
  /**
1572
1825
  * The five status lights of the design system. Each colour is a fixed
@@ -3466,10 +3719,13 @@ const messageItem = tv$1({
3466
3719
  "group/message relative flex h-fit gap-3",
3467
3720
  "hover:[--mi-toolbar-opacity:1] hover:[--mi-toolbar-pe:auto] focus-within:[--mi-toolbar-opacity:1] focus-within:[--mi-toolbar-pe:auto]",
3468
3721
  "has-data-popup-open:[--mi-toolbar-opacity:1] has-data-popup-open:[--mi-toolbar-pe:auto]",
3722
+ "hover:[--mi-header-mask:linear-gradient(to_left,transparent_calc(var(--mi-toolbar-width)+8px),black_calc(var(--mi-toolbar-width)+20px))]",
3723
+ "focus-within:[--mi-header-mask:linear-gradient(to_left,transparent_calc(var(--mi-toolbar-width)+8px),black_calc(var(--mi-toolbar-width)+20px))]",
3724
+ "has-data-popup-open:[--mi-header-mask:linear-gradient(to_left,transparent_calc(var(--mi-toolbar-width)+8px),black_calc(var(--mi-toolbar-width)+20px))]",
3469
3725
  "min-h-0 px-2 py-timeline-row border-t-(length:--spacing-timeline-turn) border-transparent bg-clip-padding",
3470
3726
  "hover:[--mi-ct-color:var(--foreground-hint)] has-data-popup-open:[--mi-ct-color:var(--foreground-hint)]",
3471
- "bg-(--mi-row-fill) [--mi-row-fill:initial]",
3472
- "hover:[--mi-row-fill:var(--fill-subtle)]",
3727
+ "bg-(--mi-row-fill) [--mi-row-fill:var(--located-fill)]",
3728
+ "not-data-located:hover:[--mi-row-fill:var(--fill-subtle)]",
3473
3729
  "data-popup-open:[--mi-row-fill:var(--fill-subtle)] has-data-popup-open:[--mi-row-fill:var(--fill-subtle)]",
3474
3730
  "has-data-[slot=message-item-search-match]:[--mi-row-fill:var(--info-soft)] has-data-[slot=message-item-search-match]:hover:[--mi-row-fill:var(--info-soft)]",
3475
3731
  "has-[[data-slot=message-multi-select-checkbox][data-checked]]:[--mi-row-fill:var(--info-soft)]",
@@ -3490,7 +3746,7 @@ const messageItem = tv$1({
3490
3746
  content: ["min-w-0 flex-1", "text-body text-foreground"],
3491
3747
  header: [
3492
3748
  "mb-px flex min-w-0 items-baseline gap-1.5 overflow-hidden",
3493
- "pointer-fine:pe-(--mi-toolbar-reserve,7rem)",
3749
+ "mask-(--mi-header-mask,none)",
3494
3750
  "has-data-[slot=message-item-delegated-by]:[--mi-owner-basis:3rem] has-data-[slot=message-item-delegated-by]:[--mi-owner-flex:1_0]"
3495
3751
  ],
3496
3752
  senderGroup: [
@@ -3535,7 +3791,7 @@ const messageItem = tv$1({
3535
3791
  "wrap-break-word select-text",
3536
3792
  "**:select-text",
3537
3793
  "text-body text-foreground",
3538
- "selection:bg-brand-soft"
3794
+ "selection:bg-selection"
3539
3795
  ],
3540
3796
  searchMatch: searchHit,
3541
3797
  embedded: ["min-w-0", "mt-2"],
@@ -3562,11 +3818,12 @@ const messageItem = tv$1({
3562
3818
  });
3563
3819
  //#endregion
3564
3820
  //#region src/components/message-item/message-item-root.tsx
3565
- function MessageItem({ className, compact, render, ...props }) {
3821
+ function MessageItem({ className, compact, located = false, render, ...props }) {
3566
3822
  const { root } = messageItem({ compact });
3567
3823
  const defaultProps = {
3568
3824
  "data-message-item": "",
3569
3825
  "data-compact": compact ? "true" : void 0,
3826
+ "data-located": located ? "" : void 0,
3570
3827
  className: root({ className })
3571
3828
  };
3572
3829
  return useRender({
@@ -3849,12 +4106,38 @@ function MessageItemDelegatedAvatar({ className, deleted, ...props }) {
3849
4106
  }
3850
4107
  //#endregion
3851
4108
  //#region src/components/message-item/message-item-toolbar.tsx
3852
- function MessageItemToolbar({ className, render, ...props }) {
4109
+ /**
4110
+ * Tells the row how wide the toolbar is (`--mi-toolbar-width` on the row), so
4111
+ * the header can fade out its end under the toolbar while it shows: the
4112
+ * header keeps no room for the toolbar (message-item.md, "The hover
4113
+ * toolbar"), and the toolbar's card only reaches part of the sender line.
4114
+ * Measured with a ResizeObserver, so a toolbar with more or fewer actions
4115
+ * covers exactly its own width; nothing on the row moves.
4116
+ */
4117
+ function useToolbarWidthOnRow(element) {
4118
+ useLayoutEffect(() => {
4119
+ const row = element?.closest("[data-message-item]");
4120
+ if (!(element instanceof HTMLElement) || !row) return;
4121
+ const write = () => row.style.setProperty("--mi-toolbar-width", `${element.offsetWidth}px`);
4122
+ write();
4123
+ if (typeof ResizeObserver === "undefined") return () => row.style.removeProperty("--mi-toolbar-width");
4124
+ const resize = new ResizeObserver(write);
4125
+ resize.observe(element);
4126
+ return () => {
4127
+ resize.disconnect();
4128
+ row.style.removeProperty("--mi-toolbar-width");
4129
+ };
4130
+ }, [element]);
4131
+ }
4132
+ function MessageItemToolbar({ className, render, ref, ...props }) {
3853
4133
  const { toolbar } = messageItem();
4134
+ const [element, setElement] = useState(null);
4135
+ useToolbarWidthOnRow(element);
3854
4136
  const defaultProps = { className: toolbar({ className }) };
3855
4137
  return useRender({
3856
4138
  defaultTagName: "div",
3857
4139
  render,
4140
+ ref: ref ? [ref, setElement] : setElement,
3858
4141
  props: mergeProps(defaultProps, props),
3859
4142
  state: { slot: "message-item-toolbar" }
3860
4143
  });
@@ -4235,7 +4518,7 @@ function MessageReactionTooltipMeta({ className, render, ...props }) {
4235
4518
  * centred on the chip (alignment.md, Marks in running text).
4236
4519
  * - Sides: 6px at each end. A chip with a leading mark (a 14px icon, an app's
4237
4520
  * image or avatar in `MessageReferenceIcon`'s 14px box, the loading spinner,
4238
- * a task's 9px status pixel, each in its own box) takes
4521
+ * a task's 10px status pixel, each in its own box) takes
4239
4522
  * 4.5px at each end, so the ink at its two ends sits equally far in
4240
4523
  * (alignment.md, Chips), and the mark is 4px from the text. A note after the
4241
4524
  * label keeps the same 4px.
@@ -4281,7 +4564,14 @@ const messageReference = tv$1({
4281
4564
  "font-mono text-label leading-none font-normal text-foreground-hint"
4282
4565
  ],
4283
4566
  icon: ["inline-flex size-3.5 shrink-0 items-center justify-center self-center", "*:size-full *:shrink-0 [&>img]:rounded-[2px] [&>img]:object-cover"],
4284
- indicator: ["pointer-events-none absolute -right-1.5 top-0 inline-flex size-2 shrink-0 items-center justify-center", "*:data-[slot=status]:size-full"]
4567
+ indicator: ["pointer-events-none absolute -right-1.5 top-0 inline-flex size-2 shrink-0 items-center justify-center", "*:data-[slot=status]:size-full"],
4568
+ readMark: [
4569
+ "relative inline-block shrink-0 self-center",
4570
+ "-mr-[calc(0.857em*2/24)]",
4571
+ "align-[calc(0.7em/2-0.857em/2)] leading-none",
4572
+ "text-foreground-hint",
4573
+ "[&>svg]:block [&>svg]:size-[0.857em]"
4574
+ ]
4285
4575
  },
4286
4576
  variants: {
4287
4577
  variant: {
@@ -4329,6 +4619,31 @@ function MessageReferenceIndicator({ className, render, ...props }) {
4329
4619
  state: { slot: "message-reference-indicator" }
4330
4620
  });
4331
4621
  }
4622
+ /**
4623
+ * The read receipt on a mention: a muted check after the mention's text, once
4624
+ * the one mentioned has read the message. Put it last inside the mention, and
4625
+ * render nothing until then. The check is decorative; `children` is what a
4626
+ * screen reader says instead ("Read"), visually hidden.
4627
+ */
4628
+ function MessageReferenceReadMark({ children, className, render, ...props }) {
4629
+ const { readMark } = messageReference();
4630
+ const defaultProps = {
4631
+ className: readMark({ className }),
4632
+ children: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Check, {
4633
+ "aria-hidden": true,
4634
+ strokeWidth: 2
4635
+ }), children == null ? null : /* @__PURE__ */ jsx("span", {
4636
+ className: "sr-only",
4637
+ children
4638
+ })] })
4639
+ };
4640
+ return useRender({
4641
+ defaultTagName: "span",
4642
+ render,
4643
+ props: mergeProps(defaultProps, props),
4644
+ state: { slot: "message-reference-read-mark" }
4645
+ });
4646
+ }
4332
4647
  function MessageReferenceChip({ className, render, variant = "muted", capped, ...props }) {
4333
4648
  const { root } = messageReference({
4334
4649
  variant,
@@ -4944,6 +5259,32 @@ function MessageListJumpPillDismiss({ className, children, render, nativeButton,
4944
5259
  });
4945
5260
  }
4946
5261
  //#endregion
5262
+ //#region src/components/skeleton/skeleton.tsx
5263
+ const skeleton = tv$1({
5264
+ slots: { root: [
5265
+ "animate-pulse motion-reduce:animate-none",
5266
+ "pointer-events-none",
5267
+ "data-[variant=line]:rounded-sticker data-[variant=line]:bg-fill-muted",
5268
+ "data-[variant=block]:rounded-sticker data-[variant=block]:bg-fill-muted"
5269
+ ] },
5270
+ variants: { variant: {
5271
+ line: { root: "h-3" },
5272
+ block: { root: "" },
5273
+ circle: { root: ["rounded-sticker bg-fill-muted"] }
5274
+ } },
5275
+ defaultVariants: { variant: "block" }
5276
+ });
5277
+ function Skeleton({ variant = "block", className, ...props }) {
5278
+ const { root } = skeleton({ variant });
5279
+ return /* @__PURE__ */ jsx("div", {
5280
+ "aria-hidden": "true",
5281
+ "data-slot": "skeleton",
5282
+ "data-variant": variant,
5283
+ className: root({ className }),
5284
+ ...props
5285
+ });
5286
+ }
5287
+ //#endregion
4947
5288
  //#region src/components/inbox-item/inbox-item.recipe.ts
4948
5289
  const inboxItem = tv$1({
4949
5290
  slots: {
@@ -5008,7 +5349,7 @@ const inboxItem = tv$1({
5008
5349
  "flex shrink-0",
5009
5350
  "mt-0 flex-col items-end gap-2 pt-px",
5010
5351
  "max-md:flex-col max-md:items-end max-md:gap-2",
5011
- "after:hidden after:size-[9px] after:shrink-0 after:rounded-[2px] after:border-[1.5px] after:border-sticker-ink after:bg-attention-400",
5352
+ "after:hidden after:size-2.5 after:-mb-px after:shrink-0 after:rounded-[2px] after:border-[1.5px] after:border-sticker-ink after:bg-attention-400",
5012
5353
  "group-data-[unread=true]/inbox-item:after:block",
5013
5354
  "*:not-data-[reveal=hover]:opacity-[calc(1-var(--inbox-item-reveal-aside,0)*var(--inbox-item-revealed,0))] after:opacity-[calc(1-var(--inbox-item-reveal-aside,0)*var(--inbox-item-revealed,0))]",
5014
5355
  "*:not-data-[reveal=hover]:mr-(--inbox-item-aside-room,0px) after:mr-(--inbox-item-aside-room,0px)",
@@ -5083,4 +5424,274 @@ const inboxItem = tv$1({
5083
5424
  }]
5084
5425
  });
5085
5426
  //#endregion
5086
- export { MessageReactionPickerStatic as $, DropdownMenuRadioGroup as $n, DialogSheetReset as $r, PreviewCardContent as $t, messageEmbed as A, PopoverPopup as An, Badge as Ar, MessageItemEmbedded as At, MessageReferenceIndicator as B, MobileNavRoot as Bn, DialogFooterNote as Br, AvatarFallback as Bt, MessageQuotedPreviewThread as C, PopoverArrow as Cn, CheckboxIndicator as Cr, MessageItemSenderButton as Ct, MessageEmbedContent as D, PopoverContent as Dn, TooltipPortal as Dr, MessageItemBody as Dt, MessageEmbed as E, PopoverClose as En, TooltipContent as Er, MessageItemAttachments as Et, MessageMultiSelectCheckbox as F, PopoverViewport as Fn, DialogBody as Fr, MessageItemGutter as Ft, MessageReferenceUnavailable as G, DropdownMenuFooter as Gn, DialogSheetBack as Gr, measureContent as Gt, MessageReferencePending as H, DropdownMenuCheckboxItem as Hn, DialogNav as Hr, AvatarGroupCount as Ht, MessageMultiSelectToolbar as I, useHoldThenMoveTouchSensor as In, DialogClose as Ir, MessageItem as It, MessageReactionChip as J, DropdownMenuItemLabel as Jn, DialogTrigger as Jr, readNow as Jt, inlineChip as K, DropdownMenuItem as Kn, DialogSurface as Kr, measureElement as Kt, MessageMultiSelectToolbarActions as L, useMouseOnlyPointerSensor as Ln, DialogContent as Lr, searchHit as Lt, MessageTextSelectionToolbarButton as M, PopoverSeparator as Mn, DialogSheetContent as Mr, MessageItemSearchMatch as Mt, MessageTextSelectionToolbarSeparator as N, PopoverTitle as Nn, useMobileViewport as Nr, MessageItemAvatarSlot as Nt, MessageEmbedFooter as O, PopoverDescription as On, TooltipProvider as Or, MessageItemContent as Ot, MessageMultiSelect as P, PopoverTrigger as Pn, Dialog$1 as Pr, MessageItemContinuationTime as Pt, MessageReactionPickerContent as Q, DropdownMenuPortal as Qn, textLinkVariants as Qr, PreviewCardBody as Qt, MessageReferenceChip as R, MobileNavItem as Rn, DialogDescription as Rr, Avatar$1 as Rt, MessageQuotedPreviewText as S, PopoverActions as Sn, Checkbox$1 as Sr, MessageItemSenderBadges as St, MessageQuotedPreviewUnavailable as T, PopoverBody as Tn, Tooltip$1 as Tr, MessageItemTime as Tt, MessageReferenceSuffix as U, DropdownMenuCheckboxItemIndicator as Un, DialogOverlay as Ur, AvatarImage as Ut, MessageReferenceLabel as V, DropdownMenu as Vn, DialogHeader as Vr, AvatarGroup as Vt, MessageReferenceText as W, DropdownMenuContent as Wn, DialogPortal as Wr, useOverflowTitle as Wt, MessageReactionErrorIndicator as X, DropdownMenuLinkItem as Xn, panelToggleAction as Xr, PreviewCardActions as Xt, MessageReactionCount as Y, DropdownMenuLabel as Yn, PanelAction as Yr, PreviewCard$1 as Yt, MessageReactionGlyph as Z, DropdownMenuPopup as Zn, TextLink as Zr, PreviewCardArrow as Zt, MessageQuotedPreviewAuthorName as _, MobileNavServerPopoverRow as _n, ScrollAreaContent as _r, MessageItemDelegatedByName as _t, MessageListJumpPillGroup as a, useParentOverlayKind as ai, PreviewCardPopup as an, DropdownMenuSubmenuTrigger as ar, MessageReactionTooltipNameText as at, MessageQuotedPreviewHeader as b, MobileNavServerPopoverRowLabel as bn, ScrollAreaThumb as br, MessageItemMeta as bt, MessageListHistoryLimited as c, useTheme as ci, PreviewCardTitle as cn, KbdGroup as cr, MessageItemBadge as ct, MessageQuotedPreview as d, stackedActions as di, MobileNavServerPopover as dn, PanelFooter as dr, MessageItemSavedIndicator as dt, Button$1 as ei, PreviewCardDescription as en, DropdownMenuRadioItem as er, MessageReactionQuickButton as et, MessageQuotedPreviewAttachment as f, useStackedActions as fi, MobileNavServerPopoverContent as fn, PanelHeaderRoot as fr, MessageItemToolbar as ft, MessageQuotedPreviewAuthorMeta as g, decisionWidth as gi, MobileNavServerPopoverList as gn, ScrollArea$1 as gr, MessageItemDelegatedByButton as gt, MessageQuotedPreviewAuthorDelegatedBy as h, headEdges as hi, MobileNavServerPopoverGroup as hn, PanelSection as hr, MessageItemDelegatedBy as ht, MessageListJumpPillDismiss as i, OverlayLayerProvider as ii, PreviewCardMeta as in, DropdownMenuSubmenu as ir, MessageReactionTooltipName as it, MessageTextSelectionToolbar as j, PopoverPortal as jn, DialogCommit as jr, MessageItemFooter as jt, MessageEmbedHeader as k, PopoverHeader as kn, TooltipTrigger as kr, MessageItemEdited as kt, MessageListNotice as l, ThemeStateContext as li, PreviewCardTrigger as ln, Panel as lr, MessageItemBadgeSeparator as lt, MessageQuotedPreviewAuthor as m, headEdgePull as mi, MobileNavServerPopoverDestinations as mn, PanelScrollViewport as mr, MessageItemDelegatedAvatar as mt, MessageListJumpControls as n, Spinner as ni, PreviewCardFooter as nn, DropdownMenuSeparator as nr, MessageReactionTooltipContent as nt, MessageListDateDivider as o, withOverlayLayer as oi, PreviewCardPortal as on, DropdownMenuTrigger as or, MessageReactionTooltipNames as ot, MessageQuotedPreviewAttachments as p, controlIconInset as pi, MobileNavServerPopoverDestination as pn, PanelScrollContent as pr, MessageItemToolbarButton as pt, MessageReactionAddButton as q, DropdownMenuItemCount as qn, DialogTitle as qr, observeTruncation as qt, MessageListJumpPill as r, defaultNativeButton as ri, PreviewCardHeader as rn, DropdownMenuShortcut as rr, MessageReactionTooltipMeta as rt, MessageListEndFade as s, useThemeScopeProps as si, PreviewCardSeparator as sn, Kbd as sr, MessageReactionTooltipSeparator as st, inboxItem as t, buttonVariants as ti, PreviewCardEyebrow as tn, DropdownMenuRadioItemIndicator as tr, MessageReactionQuickRow as tt, MessageList as u, tv$1 as ui, MobileNavServerItem as un, PanelBody as ur, MessageItemReadReceipt as ut, MessageQuotedPreviewChannel as v, MobileNavServerPopoverRowBody as vn, ScrollAreaCorner as vr, MessageItemHeader as vt, MessageQuotedPreviewTimestamp as w, PopoverBackdrop as wn, PRESENCE_COLOR as wr, MessageItemSenderGroup as wt, MessageQuotedPreviewLoading as x, Popover$1 as xn, ScrollAreaViewport as xr, MessageItemSender as xt, MessageQuotedPreviewContent as y, MobileNavServerPopoverRowDescription as yn, ScrollAreaScrollbar as yr, MessageItemInlineStatus as yt, MessageReferenceIcon as z, MobileNavLabel as zn, DialogFooter as zr, AvatarBadge as zt };
5427
+ //#region src/components/inbox-item/inbox-item.tsx
5428
+ const InboxItemDisabledContext = createContext(false);
5429
+ const InboxItemDensityContext = createContext(void 0);
5430
+ function InboxItem({ active = false, className, density, disabled = false, render, ...props }) {
5431
+ const { item } = inboxItem({ density });
5432
+ const defaultProps = {
5433
+ "aria-disabled": disabled || void 0,
5434
+ "data-active": active ? "true" : void 0,
5435
+ "data-density": density,
5436
+ "data-disabled": disabled ? "true" : void 0,
5437
+ "data-slot": "inbox-item",
5438
+ className: item({ className: `group/inbox-item ${className ?? ""}`.trim() })
5439
+ };
5440
+ const element = useRender({
5441
+ defaultTagName: "div",
5442
+ render,
5443
+ props: mergeProps(defaultProps, props)
5444
+ });
5445
+ return /* @__PURE__ */ jsx(InboxItemDisabledContext.Provider, {
5446
+ value: disabled,
5447
+ children: /* @__PURE__ */ jsx(InboxItemDensityContext.Provider, {
5448
+ value: density,
5449
+ children: element
5450
+ })
5451
+ });
5452
+ }
5453
+ function InboxItemTrigger({ className, onClick, render, ...props }) {
5454
+ const disabled = useContext(InboxItemDisabledContext);
5455
+ const { itemTrigger } = inboxItem();
5456
+ const defaultProps = {
5457
+ type: render ? void 0 : "button",
5458
+ "aria-disabled": disabled || void 0,
5459
+ "data-disabled": disabled ? "true" : void 0,
5460
+ "data-slot": "inbox-item-open",
5461
+ disabled: render ? void 0 : disabled,
5462
+ tabIndex: disabled && render ? -1 : void 0,
5463
+ className: itemTrigger({ className }),
5464
+ onClick: (event) => {
5465
+ if (disabled) {
5466
+ event.preventDefault();
5467
+ event.stopPropagation();
5468
+ return;
5469
+ }
5470
+ onClick?.(event);
5471
+ }
5472
+ };
5473
+ return useRender({
5474
+ defaultTagName: "button",
5475
+ render,
5476
+ props: mergeProps(defaultProps, props)
5477
+ });
5478
+ }
5479
+ function InboxItemLeading({ className, render, ...props }) {
5480
+ const { itemLeading } = inboxItem();
5481
+ const defaultProps = {
5482
+ "data-slot": "inbox-item-leading",
5483
+ className: itemLeading({ className })
5484
+ };
5485
+ return useRender({
5486
+ defaultTagName: "div",
5487
+ render,
5488
+ props: mergeProps(defaultProps, props)
5489
+ });
5490
+ }
5491
+ function InboxItemSelection({ className, render, ...props }) {
5492
+ const { itemSelection } = inboxItem();
5493
+ const defaultProps = {
5494
+ "data-slot": "inbox-item-selection",
5495
+ className: itemSelection({ className })
5496
+ };
5497
+ return useRender({
5498
+ defaultTagName: "div",
5499
+ render,
5500
+ props: mergeProps(defaultProps, props)
5501
+ });
5502
+ }
5503
+ function InboxItemContent({ className, render, ...props }) {
5504
+ const { itemContent } = inboxItem();
5505
+ const defaultProps = {
5506
+ "data-slot": "inbox-item-content",
5507
+ className: itemContent({ className })
5508
+ };
5509
+ return useRender({
5510
+ defaultTagName: "div",
5511
+ render,
5512
+ props: mergeProps(defaultProps, props)
5513
+ });
5514
+ }
5515
+ function InboxItemContext({ className, render, ...props }) {
5516
+ const { itemContext } = inboxItem();
5517
+ const defaultProps = {
5518
+ "data-slot": "inbox-item-context",
5519
+ className: itemContext({ className })
5520
+ };
5521
+ return useRender({
5522
+ defaultTagName: "div",
5523
+ render,
5524
+ props: mergeProps(defaultProps, props)
5525
+ });
5526
+ }
5527
+ function InboxItemSubtitle({ className, render, ...props }) {
5528
+ const { itemSubtitle } = inboxItem();
5529
+ const defaultProps = {
5530
+ "data-slot": "inbox-item-subtitle",
5531
+ className: itemSubtitle({ className })
5532
+ };
5533
+ return useRender({
5534
+ defaultTagName: "div",
5535
+ render,
5536
+ props: mergeProps(defaultProps, props)
5537
+ });
5538
+ }
5539
+ function InboxItemHeading({ className, render, ...props }) {
5540
+ const { itemHeading } = inboxItem();
5541
+ const defaultProps = {
5542
+ "data-slot": "inbox-item-heading",
5543
+ className: itemHeading({ className })
5544
+ };
5545
+ return useRender({
5546
+ defaultTagName: "div",
5547
+ render,
5548
+ props: mergeProps(defaultProps, props)
5549
+ });
5550
+ }
5551
+ function InboxItemTitle({ className, render, ...props }) {
5552
+ const density = useContext(InboxItemDensityContext);
5553
+ const { itemTitle } = inboxItem({ density });
5554
+ const defaultProps = {
5555
+ "data-slot": "inbox-item-title",
5556
+ className: itemTitle({ className })
5557
+ };
5558
+ return useRender({
5559
+ defaultTagName: "div",
5560
+ render,
5561
+ props: mergeProps(defaultProps, props)
5562
+ });
5563
+ }
5564
+ function InboxItemTrailing({ className, render, ...props }) {
5565
+ const density = useContext(InboxItemDensityContext);
5566
+ const { itemTrailing } = inboxItem({ density });
5567
+ const defaultProps = {
5568
+ "data-slot": "inbox-item-trailing",
5569
+ className: itemTrailing({ className })
5570
+ };
5571
+ return useRender({
5572
+ defaultTagName: "div",
5573
+ render,
5574
+ props: mergeProps(defaultProps, props)
5575
+ });
5576
+ }
5577
+ function InboxItemTimestamp({ className, render, ...props }) {
5578
+ const density = useContext(InboxItemDensityContext);
5579
+ const { itemTimestamp } = inboxItem({ density });
5580
+ const defaultProps = {
5581
+ "data-slot": "inbox-item-timestamp",
5582
+ className: itemTimestamp({ className })
5583
+ };
5584
+ return useRender({
5585
+ defaultTagName: "span",
5586
+ render,
5587
+ props: mergeProps(defaultProps, props)
5588
+ });
5589
+ }
5590
+ function InboxItemMarks({ className, render, ...props }) {
5591
+ const { itemMarks } = inboxItem();
5592
+ const defaultProps = {
5593
+ "data-slot": "inbox-item-marks",
5594
+ className: itemMarks({ className })
5595
+ };
5596
+ return useRender({
5597
+ defaultTagName: "div",
5598
+ render,
5599
+ props: mergeProps(defaultProps, props)
5600
+ });
5601
+ }
5602
+ function InboxItemHoverTarget({ className, onClick, render, ...props }) {
5603
+ const { itemHoverTarget } = inboxItem();
5604
+ const defaultProps = {
5605
+ "data-slot": "inbox-item-hover-target",
5606
+ className: itemHoverTarget({ className }),
5607
+ onClick: (event) => {
5608
+ onClick?.(event);
5609
+ if (event.defaultPrevented) return;
5610
+ const trigger = event.currentTarget.closest("[data-slot=inbox-item]")?.querySelector("[data-slot=inbox-item-open]");
5611
+ if (!trigger) return;
5612
+ trigger.dispatchEvent(new MouseEvent("click", {
5613
+ bubbles: true,
5614
+ cancelable: true,
5615
+ detail: event.detail,
5616
+ altKey: event.altKey,
5617
+ ctrlKey: event.ctrlKey,
5618
+ metaKey: event.metaKey,
5619
+ shiftKey: event.shiftKey
5620
+ }));
5621
+ }
5622
+ };
5623
+ return useRender({
5624
+ defaultTagName: "span",
5625
+ render,
5626
+ props: mergeProps(defaultProps, props)
5627
+ });
5628
+ }
5629
+ function InboxItemBody({ className, render, ...props }) {
5630
+ const density = useContext(InboxItemDensityContext);
5631
+ const { itemBody } = inboxItem({ density });
5632
+ const defaultProps = {
5633
+ "data-slot": "inbox-item-body",
5634
+ className: itemBody({ className })
5635
+ };
5636
+ return useRender({
5637
+ defaultTagName: "p",
5638
+ render,
5639
+ props: mergeProps(defaultProps, props)
5640
+ });
5641
+ }
5642
+ function InboxItemMessage({ className, render, ...props }) {
5643
+ const density = useContext(InboxItemDensityContext);
5644
+ const { itemMessage } = inboxItem({ density });
5645
+ const defaultProps = {
5646
+ "data-slot": "inbox-item-message",
5647
+ className: itemMessage({ className })
5648
+ };
5649
+ return useRender({
5650
+ defaultTagName: "p",
5651
+ render,
5652
+ props: mergeProps(defaultProps, props)
5653
+ });
5654
+ }
5655
+ function InboxItemSender({ className, render, ...props }) {
5656
+ const { itemSender } = inboxItem();
5657
+ const defaultProps = {
5658
+ "data-slot": "inbox-item-sender",
5659
+ className: itemSender({ className })
5660
+ };
5661
+ return useRender({
5662
+ defaultTagName: "span",
5663
+ render,
5664
+ props: mergeProps(defaultProps, props)
5665
+ });
5666
+ }
5667
+ function InboxItemMetadata({ className, render, ...props }) {
5668
+ const { itemMetadata } = inboxItem();
5669
+ const defaultProps = {
5670
+ "data-slot": "inbox-item-metadata",
5671
+ className: itemMetadata({ className })
5672
+ };
5673
+ return useRender({
5674
+ defaultTagName: "div",
5675
+ render,
5676
+ props: mergeProps(defaultProps, props)
5677
+ });
5678
+ }
5679
+ function InboxItemActions({ className, render, reveal, ...props }) {
5680
+ const density = useContext(InboxItemDensityContext);
5681
+ const { itemActions } = inboxItem({
5682
+ density,
5683
+ reveal
5684
+ });
5685
+ const defaultProps = {
5686
+ "data-reveal": reveal,
5687
+ "data-slot": "inbox-item-actions",
5688
+ className: itemActions({ className })
5689
+ };
5690
+ return useRender({
5691
+ defaultTagName: "div",
5692
+ render,
5693
+ props: mergeProps(defaultProps, props)
5694
+ });
5695
+ }
5696
+ //#endregion
5697
+ export { MessageMultiSelect as $, PopoverTitle as $n, ListRowTitle as $r, MessageItemAvatarSlot as $t, MessageQuotedPreview as A, DialogSheetReset as Ai, MobileNavServerItem as An, PanelBody as Ar, MessageItemReadReceipt as At, MessageQuotedPreviewLoading as B, ThemeStateContext as Bi, MobileNavServerPopoverRowLabel as Bn, ScrollAreaThumb as Br, MessageItemMeta as Bt, MessageListJumpPillDismiss as C, DialogSurface as Ci, PreviewCardHeader as Cn, DropdownMenuShortcut as Cr, MessageReactionTooltipMeta as Ct, MessageListHistoryLimited as D, panelToggleAction as Di, PreviewCardSeparator as Dn, Kbd as Dr, MessageReactionTooltipSeparator as Dt, MessageListEndFade as E, PanelAction as Ei, PreviewCardPortal as En, DropdownMenuTrigger as Er, MessageReactionTooltipNames as Et, MessageQuotedPreviewAuthorMeta as F, OverlayLayerProvider as Fi, MobileNavServerPopoverGroup as Fn, PanelSection as Fr, MessageItemDelegatedBy as Ft, MessageEmbed as G, headEdgePull as Gi, PopoverBody as Gn, ListRow as Gr, MessageItemTime as Gt, MessageQuotedPreviewThread as H, stackedActions as Hi, PopoverActions as Hn, Checkbox$1 as Hr, MessageItemSenderBadges as Ht, MessageQuotedPreviewAuthorName as I, useParentOverlayKind as Ii, MobileNavServerPopoverList as In, ScrollArea$1 as Ir, MessageItemDelegatedByButton as It, MessageEmbedHeader as J, PopoverDescription as Jn, ListRowChevron as Jr, MessageItemContent as Jt, MessageEmbedContent as K, headEdges as Ki, PopoverClose as Kn, ListRowBody as Kr, MessageItemAttachments as Kt, MessageQuotedPreviewChannel as L, withOverlayLayer as Li, MobileNavServerPopoverRow as Ln, ScrollAreaContent as Lr, MessageItemDelegatedByName as Lt, MessageQuotedPreviewAttachments as M, buttonVariants as Mi, MobileNavServerPopoverContent as Mn, PanelHeaderRoot as Mr, MessageItemToolbar as Mt, MessageQuotedPreviewAuthor as N, Spinner as Ni, MobileNavServerPopoverDestination as Nn, PanelScrollContent as Nr, MessageItemToolbarButton as Nt, MessageListNotice as O, TextLink as Oi, PreviewCardTitle as On, KbdGroup as Or, MessageItemBadge as Ot, MessageQuotedPreviewAuthorDelegatedBy as P, defaultNativeButton as Pi, MobileNavServerPopoverDestinations as Pn, PanelScrollViewport as Pr, MessageItemDelegatedAvatar as Pt, MessageTextSelectionToolbarSeparator as Q, PopoverSeparator as Qn, ListRowMeta as Qr, MessageItemSearchMatch as Qt, MessageQuotedPreviewContent as R, useThemeScopeProps as Ri, MobileNavServerPopoverRowBody as Rn, ScrollAreaCorner as Rr, MessageItemHeader as Rt, MessageListJumpPill as S, DialogSheetBack as Si, PreviewCardFooter as Sn, DropdownMenuSeparator as Sr, MessageReactionTooltipContent as St, MessageListDateDivider as T, DialogTrigger as Ti, PreviewCardPopup as Tn, DropdownMenuSubmenuTrigger as Tr, MessageReactionTooltipNameText as Tt, MessageQuotedPreviewTimestamp as U, useStackedActions as Ui, PopoverArrow as Un, CheckboxIndicator as Ur, MessageItemSenderButton as Ut, MessageQuotedPreviewText as V, tv$1 as Vi, Popover$1 as Vn, ScrollAreaViewport as Vr, MessageItemSender as Vt, MessageQuotedPreviewUnavailable as W, controlIconInset as Wi, PopoverBackdrop as Wn, PRESENCE_COLOR as Wr, MessageItemSenderGroup as Wt, MessageTextSelectionToolbar as X, PopoverPopup as Xn, ListRowGroup as Xr, MessageItemEmbedded as Xt, messageEmbed as Y, PopoverHeader as Yn, ListRowDescription as Yr, MessageItemEdited as Yt, MessageTextSelectionToolbarButton as Z, PopoverPortal as Zn, ListRowIcon as Zr, MessageItemFooter as Zt, InboxItemTrailing as _, DialogFooterNote as _i, PreviewCardArrow as _n, DropdownMenuPopup as _r, MessageReactionGlyph as _t, InboxItemContext as a, TooltipProvider as ai, AvatarBadge as an, MobileNavLabel as ar, MessageReferenceIndicator as at, Skeleton as b, DialogOverlay as bi, PreviewCardDescription as bn, DropdownMenuRadioItem as br, MessageReactionQuickButton as bt, InboxItemLeading as c, DialogCommit as ci, AvatarGroupCount as cn, DropdownMenuCheckboxItem as cr, MessageReferenceReadMark as ct, InboxItemMetadata as d, Dialog$1 as di, measureContent as dn, DropdownMenuFooter as dr, MessageReferenceUnavailable as dt, ListRowTop as ei, MessageItemContinuationTime as en, PopoverTrigger as er, MessageMultiSelectCheckbox as et, InboxItemSelection as f, DialogBody as fi, measureElement as fn, DropdownMenuItem as fr, inlineChip as ft, InboxItemTitle as g, DialogFooter as gi, PreviewCardActions as gn, DropdownMenuLinkItem as gr, MessageReactionErrorIndicator as gt, InboxItemTimestamp as h, DialogDescription as hi, PreviewCard$1 as hn, DropdownMenuLabel as hr, MessageReactionCount as ht, InboxItemContent as i, TooltipPortal as ii, Avatar$1 as in, MobileNavItem as ir, MessageReferenceIcon as it, MessageQuotedPreviewAttachment as j, Button$1 as ji, MobileNavServerPopover as jn, PanelFooter as jr, MessageItemSavedIndicator as jt, MessageList as k, textLinkVariants as ki, PreviewCardTrigger as kn, Panel as kr, MessageItemBadgeSeparator as kt, InboxItemMarks as l, DialogSheetContent as li, AvatarImage as ln, DropdownMenuCheckboxItemIndicator as lr, MessageReferenceSuffix as lt, InboxItemSubtitle as m, DialogContent as mi, readNow as mn, DropdownMenuItemLabel as mr, MessageReactionChip as mt, InboxItemActions as n, Tooltip$1 as ni, MessageItem as nn, useHoldThenMoveTouchSensor as nr, MessageMultiSelectToolbarActions as nt, InboxItemHeading as o, TooltipTrigger as oi, AvatarFallback as on, MobileNavRoot as or, MessageReferenceLabel as ot, InboxItemSender as p, DialogClose as pi, observeTruncation as pn, DropdownMenuItemCount as pr, MessageReactionAddButton as pt, MessageEmbedFooter as q, decisionWidth as qi, PopoverContent as qn, ListRowBottom as qr, MessageItemBody as qt, InboxItemBody as r, TooltipContent as ri, searchHit as rn, useMouseOnlyPointerSensor as rr, MessageReferenceChip as rt, InboxItemHoverTarget as s, Badge as si, AvatarGroup as sn, DropdownMenu as sr, MessageReferencePending as st, InboxItem as t, ListRowValue as ti, MessageItemGutter as tn, PopoverViewport as tr, MessageMultiSelectToolbar as tt, InboxItemMessage as u, useMobileViewport as ui, useOverflowTitle as un, DropdownMenuContent as ur, MessageReferenceText as ut, InboxItemTrigger as v, DialogHeader as vi, PreviewCardBody as vn, DropdownMenuPortal as vr, MessageReactionPickerContent as vt, MessageListJumpPillGroup as w, DialogTitle as wi, PreviewCardMeta as wn, DropdownMenuSubmenu as wr, MessageReactionTooltipName as wt, MessageListJumpControls as x, DialogPortal as xi, PreviewCardEyebrow as xn, DropdownMenuRadioItemIndicator as xr, MessageReactionQuickRow as xt, inboxItem as y, DialogNav as yi, PreviewCardContent as yn, DropdownMenuRadioGroup as yr, MessageReactionPickerStatic as yt, MessageQuotedPreviewHeader as z, useTheme as zi, MobileNavServerPopoverRowDescription as zn, ScrollAreaScrollbar as zr, MessageItemInlineStatus as zt };