@botiverse/raft-ui 0.35.1 → 0.36.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 +30 -0
- package/dist/foundation.css +4 -1
- package/dist/{inbox-item-CQJIhaym.d.mts → inbox-item-B8eXIikq.d.mts} +73 -1
- package/dist/{inbox-item-Cgu0ERol.mjs → inbox-item-DIUkRiT4.mjs} +630 -2
- package/dist/index.d.mts +50 -8
- package/dist/index.mjs +285 -80
- package/dist/styles.css +32 -0
- package/dist/tokens.json +14 -0
- package/dist/wip.d.mts +334 -3
- package/dist/wip.mjs +253 -2
- package/package.json +1 -1
package/dist/wip.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { cn } from "./cn.mjs";
|
|
2
|
+
import { $i as DialogContent, A as DRAG_AUTO_SCROLL_ZONE_PX, Ai as ListRow, B as useDragSiblingTransition, Bn as RadioGroupItem, Br as TOUCH_DRAG_TOLERANCE_PX, C as DropPlaceholder, D as listKeyboardCoordinates, Da as tv, Di as Checkbox, E as MOUSE_DRAG_DISTANCE_PX, F as DROP_GLIDE, G as SILENT_DRAG_ANNOUNCEMENTS, Gi as TooltipTrigger, Gn as measureContent, H as LIFT_CLASS, Hi as TooltipContent, Hn as InputGroupAddon, Hr as useMouseOnlyPointerSensor, I as DragLift, Ir as HoldThenMoveTouchSensor, It as MessageReferenceReadMark, J as dragMessages, Ji as DialogSheetContent, Jn as readNow, K as createDragAnnouncements, Kn as measureElement, L as ORIGIN_OPACITY, Li as ListRowMeta, Lr as MouseOnlyPointerSensor, M as DRAG_LIFT_Z_INDEX, Mi as ListRowBottom, Mt as MessageReferenceIcon, N as DRAG_SETTLE, O as useDragAcrossLists, P as DRAG_SIBLING_TRANSITION, Pi as ListRowDescription, Q as MessageListJumpPillGroup, Qi as DialogClose, Qn as PreviewCardBody, R as cancelDrag, Ri as ListRowTitle, Rn as RadioGroup, Rr as TOUCH_DRAG_DISTANCE_PX, S as DragRefusalHint, Sa as useParentOverlayKind, Sr as PopoverActions, T as DragRemeasure, Ta as useTheme, Tr as PopoverBody, Un as InputGroupInput, Vi as Tooltip, Vn as InputGroup, Vr as useHoldThenMoveTouchSensor, W as DEFAULT_DRAG_MESSAGES, Wn as useOverflowTitle, X as MessageListJumpPill, Xi as Dialog, Xn as PreviewCardActions, Y as MessageListJumpControls, Z as MessageListJumpPillDismiss, _ as InboxItemTrailing, _a as Button$1, _r as MobileNavServerPopoverRow, a as InboxItemContext, b as useLatestRef, ba as defaultNativeButton, br as MobileNavServerPopoverRowLabel, c as InboxItemLeading, cn as MessageItemDelegatedAvatar, ct as MessageQuotedPreviewAuthorDelegatedBy, dn as MessageItemDelegatedByName, dr as MobileNavServerPopover, fr as MobileNavServerPopoverContent, g as InboxItemTitle, gr as MobileNavServerPopoverList, h as InboxItemTimestamp, hr as MobileNavServerPopoverGroup, i as InboxItemContent, ir as PreviewCardMeta, j as DRAG_KEYBOARD_OFFSET_PX, ji as ListRowBody, k as useDragSensors, la as DialogTitle, ln as MessageItemDelegatedBy, mr as MobileNavServerPopoverDestinations, na as DialogFooterNote, nr as PreviewCardFooter, o as InboxItemHeading, pa as TextLink, pr as MobileNavServerPopoverDestination, q as dragInstructions, qi as DialogCommit, qn as observeTruncation, r as InboxItemBody, sa as DialogSheetBack, t as InboxItem, ti as DropdownMenuLinkItem, tr as PreviewCardEyebrow, ua as DialogTrigger, un as MessageItemDelegatedByButton, ur as MobileNavServerItem, vr as MobileNavServerPopoverRowBody, w as DRAG_KEYBOARD_CODES, wa as useThemeScopeProps, x as Skeleton, xa as OverlayLayerProvider, y as inboxItem, ya as Spinner, yr as MobileNavServerPopoverRowDescription, z as keepGrabInside, zi as ListRowTop, zr as TOUCH_DRAG_HOLD_MS } from "./inbox-item-DIUkRiT4.mjs";
|
|
2
3
|
import { Check, ChevronDown, LoaderCircle, Plus, Search, X } from "lucide-react";
|
|
3
4
|
import { createContext, use, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
4
5
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -6,6 +7,7 @@ import { Button } from "@base-ui/react/button";
|
|
|
6
7
|
import { mergeProps } from "@base-ui/react/merge-props";
|
|
7
8
|
import { useRender } from "@base-ui/react/use-render";
|
|
8
9
|
import { Combobox } from "@base-ui/react/combobox";
|
|
10
|
+
import { arrayMove, verticalListSortingStrategy } from "@dnd-kit/sortable";
|
|
9
11
|
import { Meter as Meter$1 } from "@base-ui/react/meter";
|
|
10
12
|
import { CheckboxGroup } from "@base-ui/react/checkbox-group";
|
|
11
13
|
//#region src/lib/phone-media.ts
|
|
@@ -1125,6 +1127,255 @@ function useCommentMarginFits(element, { minWidth = 784 } = {}) {
|
|
|
1125
1127
|
return desktop && element !== null && width >= minWidth;
|
|
1126
1128
|
}
|
|
1127
1129
|
//#endregion
|
|
1130
|
+
//#region src/components/drag/drag-lists.tsx
|
|
1131
|
+
/** dnd-kit's vertical strategy, except that nothing moves while the hand is outside the list. */
|
|
1132
|
+
const dragListStrategy = (args) => args.overIndex < 0 ? null : verticalListSortingStrategy(args);
|
|
1133
|
+
/**
|
|
1134
|
+
* Items in one or more lists that can be reordered and moved between lists
|
|
1135
|
+
* (a sidebar's sections, a board's columns): the lists half of the drag
|
|
1136
|
+
* model (design/patterns/drag-and-drop.md#where-it-will-land). While dragging,
|
|
1137
|
+
* the item stands at its landing spot (its own slot is the place; siblings
|
|
1138
|
+
* slide apart), a list can refuse it, and every step is announced by name.
|
|
1139
|
+
* The keyboard is measured from the item's real place, so the arrows never
|
|
1140
|
+
* skip one after a move into another list.
|
|
1141
|
+
*
|
|
1142
|
+
* Spread `handlers`, `collisionDetection` and `accessibility` on the
|
|
1143
|
+
* `DndContext`, pass `coordinateGetter` to `useDragSensors`, and render
|
|
1144
|
+
* `DragRemeasure version={items}` inside it.
|
|
1145
|
+
*/
|
|
1146
|
+
function useDragLists({ lists, items, onItemsChange, listName, itemName, refuse, collisionDetection, announce, messages }) {
|
|
1147
|
+
const say = useMemo(() => dragMessages(messages), [messages]);
|
|
1148
|
+
const across = useDragAcrossLists(collisionDetection);
|
|
1149
|
+
const itemsRef = useRef(items);
|
|
1150
|
+
useLayoutEffect(() => {
|
|
1151
|
+
itemsRef.current = items;
|
|
1152
|
+
}, [items]);
|
|
1153
|
+
const [activeId, setActiveId] = useState(null);
|
|
1154
|
+
const [originList, setOriginList] = useState(null);
|
|
1155
|
+
const [refusal, setRefusalState] = useState(null);
|
|
1156
|
+
const refusalRef = useRef(refusal);
|
|
1157
|
+
const setRefusal = (next) => {
|
|
1158
|
+
refusalRef.current = next;
|
|
1159
|
+
setRefusalState(next);
|
|
1160
|
+
};
|
|
1161
|
+
const origin = useRef(null);
|
|
1162
|
+
const inserted = useRef(null);
|
|
1163
|
+
const listOf = useCallback((state, id) => lists.includes(id) ? id : lists.find((list) => state[list].includes(String(id))) ?? null, [lists]);
|
|
1164
|
+
const isList = (id) => lists.includes(id);
|
|
1165
|
+
const where = (state, id) => {
|
|
1166
|
+
const list = listOf(state, id);
|
|
1167
|
+
return {
|
|
1168
|
+
place: listName(list),
|
|
1169
|
+
position: state[list].indexOf(id) + 1,
|
|
1170
|
+
count: state[list].length
|
|
1171
|
+
};
|
|
1172
|
+
};
|
|
1173
|
+
const update = (next) => {
|
|
1174
|
+
itemsRef.current = next;
|
|
1175
|
+
onItemsChange(next);
|
|
1176
|
+
};
|
|
1177
|
+
/** Still home: in its own list, at its own index (pass the sortable's projected index). */
|
|
1178
|
+
const isHome = useCallback((id, index) => {
|
|
1179
|
+
const start = origin.current;
|
|
1180
|
+
return start != null && listOf(itemsRef.current, id) === start.list && index === start.index;
|
|
1181
|
+
}, [listOf]);
|
|
1182
|
+
const onDragStart = ({ active, activatorEvent }) => {
|
|
1183
|
+
const id = String(active.id);
|
|
1184
|
+
const list = listOf(items, id);
|
|
1185
|
+
if (!list) return;
|
|
1186
|
+
origin.current = {
|
|
1187
|
+
list,
|
|
1188
|
+
index: items[list].indexOf(id),
|
|
1189
|
+
snapshot: items,
|
|
1190
|
+
keyboard: typeof KeyboardEvent !== "undefined" && activatorEvent instanceof KeyboardEvent
|
|
1191
|
+
};
|
|
1192
|
+
inserted.current = null;
|
|
1193
|
+
setActiveId(id);
|
|
1194
|
+
setOriginList(list);
|
|
1195
|
+
announce(say.pickedUp({
|
|
1196
|
+
name: itemName(id),
|
|
1197
|
+
...where(items, id)
|
|
1198
|
+
}));
|
|
1199
|
+
};
|
|
1200
|
+
const onDragOver = ({ active, over }) => {
|
|
1201
|
+
const start = origin.current;
|
|
1202
|
+
if (!start) return;
|
|
1203
|
+
const id = String(active.id);
|
|
1204
|
+
if (!over) {
|
|
1205
|
+
if (refusalRef.current) setRefusal(null);
|
|
1206
|
+
announce(say.notOver({ name: itemName(id) }));
|
|
1207
|
+
return;
|
|
1208
|
+
}
|
|
1209
|
+
const current = itemsRef.current;
|
|
1210
|
+
const from = listOf(current, id);
|
|
1211
|
+
const to = listOf(current, over.id);
|
|
1212
|
+
if (!from || !to) return;
|
|
1213
|
+
const reason = refuse?.(start.list, to, id) ?? null;
|
|
1214
|
+
if (reason) {
|
|
1215
|
+
setRefusal({
|
|
1216
|
+
list: to,
|
|
1217
|
+
reason
|
|
1218
|
+
});
|
|
1219
|
+
update(start.snapshot);
|
|
1220
|
+
inserted.current = null;
|
|
1221
|
+
announce(say.refused({
|
|
1222
|
+
name: itemName(id),
|
|
1223
|
+
place: listName(to),
|
|
1224
|
+
reason
|
|
1225
|
+
}));
|
|
1226
|
+
return;
|
|
1227
|
+
}
|
|
1228
|
+
if (refusalRef.current) setRefusal(null);
|
|
1229
|
+
if (from !== to) {
|
|
1230
|
+
const fromList = current[from].filter((item) => item !== id);
|
|
1231
|
+
const toList = [...current[to]];
|
|
1232
|
+
let at = toList.indexOf(String(over.id));
|
|
1233
|
+
if (at < 0) at = toList.length;
|
|
1234
|
+
else if (start.keyboard) {
|
|
1235
|
+
if (lists.indexOf(from) > lists.indexOf(to)) at += 1;
|
|
1236
|
+
} else {
|
|
1237
|
+
const rect = active.rect.current.translated;
|
|
1238
|
+
if (rect && rect.top + rect.height / 2 > over.rect.top + over.rect.height / 2) at += 1;
|
|
1239
|
+
}
|
|
1240
|
+
toList.splice(at, 0, id);
|
|
1241
|
+
const next = {
|
|
1242
|
+
...current,
|
|
1243
|
+
[from]: fromList,
|
|
1244
|
+
[to]: toList
|
|
1245
|
+
};
|
|
1246
|
+
across.moved(start.keyboard);
|
|
1247
|
+
update(next);
|
|
1248
|
+
inserted.current = isList(over.id) ? null : over.id;
|
|
1249
|
+
announce(say.over({
|
|
1250
|
+
name: itemName(id),
|
|
1251
|
+
...where(next, id)
|
|
1252
|
+
}));
|
|
1253
|
+
return;
|
|
1254
|
+
}
|
|
1255
|
+
if (over.id === id) {
|
|
1256
|
+
inserted.current = null;
|
|
1257
|
+
return;
|
|
1258
|
+
}
|
|
1259
|
+
const list = current[to];
|
|
1260
|
+
if (inserted.current === over.id) {
|
|
1261
|
+
announce(say.over({
|
|
1262
|
+
name: itemName(id),
|
|
1263
|
+
...where(current, id)
|
|
1264
|
+
}));
|
|
1265
|
+
return;
|
|
1266
|
+
}
|
|
1267
|
+
inserted.current = null;
|
|
1268
|
+
const overIndex = isList(over.id) ? list.length - 1 : list.indexOf(String(over.id));
|
|
1269
|
+
announce(say.over({
|
|
1270
|
+
name: itemName(id),
|
|
1271
|
+
place: listName(to),
|
|
1272
|
+
position: overIndex + 1,
|
|
1273
|
+
count: list.length
|
|
1274
|
+
}));
|
|
1275
|
+
};
|
|
1276
|
+
const finish = (dropped, overId) => {
|
|
1277
|
+
const start = origin.current;
|
|
1278
|
+
const id = activeId;
|
|
1279
|
+
const refused = refusalRef.current;
|
|
1280
|
+
origin.current = null;
|
|
1281
|
+
across.reset();
|
|
1282
|
+
setActiveId(null);
|
|
1283
|
+
setOriginList(null);
|
|
1284
|
+
setRefusal(null);
|
|
1285
|
+
if (!start || !id) return;
|
|
1286
|
+
if (!dropped || overId == null || refused) {
|
|
1287
|
+
update(start.snapshot);
|
|
1288
|
+
const home = {
|
|
1289
|
+
name: itemName(id),
|
|
1290
|
+
...where(start.snapshot, id)
|
|
1291
|
+
};
|
|
1292
|
+
announce(refused && dropped ? say.refusedDrop({
|
|
1293
|
+
...home,
|
|
1294
|
+
reason: refused.reason
|
|
1295
|
+
}) : say.cancelled(home));
|
|
1296
|
+
return;
|
|
1297
|
+
}
|
|
1298
|
+
const current = itemsRef.current;
|
|
1299
|
+
const list = listOf(current, id);
|
|
1300
|
+
const ids = current[list];
|
|
1301
|
+
const fromIndex = ids.indexOf(id);
|
|
1302
|
+
const toIndex = inserted.current === overId ? fromIndex : isList(overId) ? ids.length - 1 : ids.indexOf(String(overId));
|
|
1303
|
+
const next = toIndex >= 0 && toIndex !== fromIndex ? {
|
|
1304
|
+
...current,
|
|
1305
|
+
[list]: arrayMove([...ids], fromIndex, toIndex)
|
|
1306
|
+
} : current;
|
|
1307
|
+
update(next);
|
|
1308
|
+
announce(say.dropped({
|
|
1309
|
+
name: itemName(id),
|
|
1310
|
+
...where(next, id)
|
|
1311
|
+
}));
|
|
1312
|
+
};
|
|
1313
|
+
const accessibility = useMemo(() => ({
|
|
1314
|
+
announcements: SILENT_DRAG_ANNOUNCEMENTS,
|
|
1315
|
+
screenReaderInstructions: dragInstructions(messages)
|
|
1316
|
+
}), [messages]);
|
|
1317
|
+
return {
|
|
1318
|
+
/** The dragged item's id, or null. */
|
|
1319
|
+
activeId,
|
|
1320
|
+
/** The list that refuses the item under the hand, and why. */
|
|
1321
|
+
refusal,
|
|
1322
|
+
/** The list the drag started in, while dragging. */
|
|
1323
|
+
originList,
|
|
1324
|
+
isHome,
|
|
1325
|
+
listOf,
|
|
1326
|
+
collisionDetection: across.collisionDetection,
|
|
1327
|
+
coordinateGetter: across.coordinateGetter,
|
|
1328
|
+
accessibility,
|
|
1329
|
+
handlers: {
|
|
1330
|
+
onDragStart,
|
|
1331
|
+
onDragOver,
|
|
1332
|
+
onDragEnd: ({ over }) => finish(true, over?.id ?? null),
|
|
1333
|
+
onDragCancel: () => finish(false, null)
|
|
1334
|
+
}
|
|
1335
|
+
};
|
|
1336
|
+
}
|
|
1337
|
+
/**
|
|
1338
|
+
* Wraps each item's content in a list. The dragged item's own node is at 40%
|
|
1339
|
+
* while it is still home, and the dashed place (its size, its radius) once it
|
|
1340
|
+
* stands anywhere else. Every other item renders as it is: the wrapper stays
|
|
1341
|
+
* the same, so the item keeps focus when its drag starts.
|
|
1342
|
+
*/
|
|
1343
|
+
function DraggedSlot({ dragging = false, home, radius, className, children }) {
|
|
1344
|
+
const place = dragging && !home;
|
|
1345
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
1346
|
+
"data-slot": "drag-slot",
|
|
1347
|
+
className: "relative",
|
|
1348
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
1349
|
+
"data-drag-origin": dragging && home ? "" : void 0,
|
|
1350
|
+
className: place ? "invisible" : void 0,
|
|
1351
|
+
children
|
|
1352
|
+
}), place ? /* @__PURE__ */ jsx(DropPlaceholder, { className: cn("absolute inset-0", radius, className) }) : null]
|
|
1353
|
+
});
|
|
1354
|
+
}
|
|
1355
|
+
/** The last announcement, for a polite live region (`DragLiveRegion`). Repeats are dropped. */
|
|
1356
|
+
function useDragAnnouncer() {
|
|
1357
|
+
const [message, setMessage] = useState("");
|
|
1358
|
+
const last = useRef("");
|
|
1359
|
+
return {
|
|
1360
|
+
message,
|
|
1361
|
+
announce: useCallback((text) => {
|
|
1362
|
+
if (text === last.current) return;
|
|
1363
|
+
last.current = text;
|
|
1364
|
+
setMessage(text);
|
|
1365
|
+
}, [])
|
|
1366
|
+
};
|
|
1367
|
+
}
|
|
1368
|
+
/** A polite, visually hidden live region for drag announcements. */
|
|
1369
|
+
function DragLiveRegion({ message }) {
|
|
1370
|
+
return /* @__PURE__ */ jsx("span", {
|
|
1371
|
+
className: "sr-only",
|
|
1372
|
+
role: "status",
|
|
1373
|
+
"aria-live": "polite",
|
|
1374
|
+
"aria-atomic": "true",
|
|
1375
|
+
children: message
|
|
1376
|
+
});
|
|
1377
|
+
}
|
|
1378
|
+
//#endregion
|
|
1128
1379
|
//#region src/components/ellipsis/ellipsis.tsx
|
|
1129
1380
|
const ellipsis = tv({
|
|
1130
1381
|
slots: {
|
|
@@ -2660,4 +2911,4 @@ function ChoiceList(props) {
|
|
|
2660
2911
|
});
|
|
2661
2912
|
}
|
|
2662
2913
|
//#endregion
|
|
2663
|
-
export { Dialog as AnnouncementDialog, AnnouncementDialogAction, AnnouncementDialogBody, DialogClose as AnnouncementDialogClose, AnnouncementDialogContent, AnnouncementDialogFooter, AnnouncementDialogHeader, AnnouncementDialogLabel, AnnouncementDialogPicture, AnnouncementDialogSecondaryAction, AnnouncementDialogText, AnnouncementDialogTitle, DialogTrigger as AnnouncementDialogTrigger, COMMENT_HIGHLIGHT, COMMENT_HIGHLIGHT_ACTIVE, ChoiceList, ComboboxSelect, CommentCard, CommentCardMeta, CommentCardQuote, CommentCardTrigger, CommentEntry, CommentEntryAuthor, CommentEntryBody, CommentEntryHeader, CommentEntryTime, CommentMargin, CommentMarginItem, CommentMarker, DialogCommit, DialogFooterNote, DialogSheetBack, DialogSheetContent, DropdownMenuLinkItem, Ellipsis, EllipsisToggle, InboxItemLeadingBadge, InboxItemSkeleton, InboxItemSkeletonList, ListRowSkeleton, MessageItemDelegatedAvatar, MessageItemDelegatedBy, MessageItemDelegatedByButton, MessageItemDelegatedByName, MessageListJumpControls, MessageListJumpPill, MessageListJumpPillDismiss, MessageListJumpPillGroup, MessageQuotedPreviewAuthorDelegatedBy, MessageReferenceIcon, MessageReferenceReadMark, Meter, MeterHeader, MeterIndicator, MeterLabel, MeterTrack, MeterValue, MobileNavServerItem, MobileNavServerPopover, MobileNavServerPopoverContent, MobileNavServerPopoverDestination, MobileNavServerPopoverDestinations, MobileNavServerPopoverGroup, MobileNavServerPopoverList, MobileNavServerPopoverRow, MobileNavServerPopoverRowBody, MobileNavServerPopoverRowDescription, MobileNavServerPopoverRowLabel, OverlayLayerProvider, PULL_TO_REFRESH_DAMPING, PULL_TO_REFRESH_HOLD_DISTANCE, PULL_TO_REFRESH_MAX_DISTANCE, PULL_TO_REFRESH_POINTER_QUERY, PULL_TO_REFRESH_SNAP_BACK_MS, PULL_TO_REFRESH_THRESHOLD, PopoverActions, PopoverBody, PreviewCardActions, PreviewCardBody, PreviewCardEyebrow, PreviewCardFooter, PreviewCardMeta, PullToRefreshIndicator, TOUCH_DRAG_HOLD_MS, resolveCommentMarginLayout, setCommentHighlights, useCommentMarginFits, useHoldThenMoveTouchSensor, useParentOverlayKind, usePullToRefresh, useTruncated };
|
|
2914
|
+
export { Dialog as AnnouncementDialog, AnnouncementDialogAction, AnnouncementDialogBody, DialogClose as AnnouncementDialogClose, AnnouncementDialogContent, AnnouncementDialogFooter, AnnouncementDialogHeader, AnnouncementDialogLabel, AnnouncementDialogPicture, AnnouncementDialogSecondaryAction, AnnouncementDialogText, AnnouncementDialogTitle, DialogTrigger as AnnouncementDialogTrigger, COMMENT_HIGHLIGHT, COMMENT_HIGHLIGHT_ACTIVE, ChoiceList, ComboboxSelect, CommentCard, CommentCardMeta, CommentCardQuote, CommentCardTrigger, CommentEntry, CommentEntryAuthor, CommentEntryBody, CommentEntryHeader, CommentEntryTime, CommentMargin, CommentMarginItem, CommentMarker, DEFAULT_DRAG_MESSAGES, DRAG_AUTO_SCROLL_ZONE_PX, DRAG_KEYBOARD_CODES, DRAG_KEYBOARD_OFFSET_PX, DRAG_LIFT_Z_INDEX, DRAG_SETTLE, DRAG_SIBLING_TRANSITION, DROP_GLIDE, DialogCommit, DialogFooterNote, DialogSheetBack, DialogSheetContent, DragLift, DragLiveRegion, DragRefusalHint, DragRemeasure, DraggedSlot, DropPlaceholder, DropdownMenuLinkItem, Ellipsis, EllipsisToggle, HoldThenMoveTouchSensor, InboxItemLeadingBadge, InboxItemSkeleton, InboxItemSkeletonList, LIFT_CLASS, ListRowSkeleton, MOUSE_DRAG_DISTANCE_PX, MessageItemDelegatedAvatar, MessageItemDelegatedBy, MessageItemDelegatedByButton, MessageItemDelegatedByName, MessageListJumpControls, MessageListJumpPill, MessageListJumpPillDismiss, MessageListJumpPillGroup, MessageQuotedPreviewAuthorDelegatedBy, MessageReferenceIcon, MessageReferenceReadMark, Meter, MeterHeader, MeterIndicator, MeterLabel, MeterTrack, MeterValue, MobileNavServerItem, MobileNavServerPopover, MobileNavServerPopoverContent, MobileNavServerPopoverDestination, MobileNavServerPopoverDestinations, MobileNavServerPopoverGroup, MobileNavServerPopoverList, MobileNavServerPopoverRow, MobileNavServerPopoverRowBody, MobileNavServerPopoverRowDescription, MobileNavServerPopoverRowLabel, MouseOnlyPointerSensor, ORIGIN_OPACITY, OverlayLayerProvider, PULL_TO_REFRESH_DAMPING, PULL_TO_REFRESH_HOLD_DISTANCE, PULL_TO_REFRESH_MAX_DISTANCE, PULL_TO_REFRESH_POINTER_QUERY, PULL_TO_REFRESH_SNAP_BACK_MS, PULL_TO_REFRESH_THRESHOLD, PopoverActions, PopoverBody, PreviewCardActions, PreviewCardBody, PreviewCardEyebrow, PreviewCardFooter, PreviewCardMeta, PullToRefreshIndicator, TOUCH_DRAG_DISTANCE_PX, TOUCH_DRAG_HOLD_MS, TOUCH_DRAG_TOLERANCE_PX, cancelDrag, createDragAnnouncements, dragInstructions, dragListStrategy, dragMessages, keepGrabInside, listKeyboardCoordinates, resolveCommentMarginLayout, setCommentHighlights, useCommentMarginFits, useDragAcrossLists, useDragAnnouncer, useDragLists, useDragSensors, useDragSiblingTransition, useHoldThenMoveTouchSensor, useMouseOnlyPointerSensor, useParentOverlayKind, usePullToRefresh, useTruncated };
|