@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.
- package/CHANGELOG.md +121 -0
- package/dist/components/steps/steps.css +15 -10
- package/dist/components/timeline/timeline.css +2 -2
- package/dist/foundation.css +9 -3
- package/dist/{inbox-item.recipe-3j4DHKZ2.mjs → inbox-item-B-y7PxZ_.mjs} +625 -14
- package/dist/{index-DT1Hg5N-.d.mts → inbox-item-ChGeZBFb.d.mts} +263 -4
- package/dist/index.d.mts +40 -252
- package/dist/index.mjs +356 -640
- package/dist/style.css +7 -7
- package/dist/styles.css +80 -5
- package/dist/tokens.json +15 -2
- package/dist/wip.d.mts +65 -2
- package/dist/wip.mjs +140 -4
- package/package.json +1 -1
|
@@ -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
|
-
|
|
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
|
|
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:
|
|
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
|
-
"
|
|
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-
|
|
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
|
-
|
|
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
|
|
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-
|
|
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
|
-
|
|
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 };
|