@botiverse/raft-ui 0.72.0 → 0.73.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 +17 -0
- package/dist/components/activity-inbox/activity-inbox-shell.d.mts +6 -3
- package/dist/components/activity-inbox/activity-inbox-shell.mjs +33 -14
- package/dist/components/activity-inbox/activity-inbox-shell.recipe.mjs +6 -1
- package/dist/components/announcement-dialog/announcement-dialog.d.mts +2 -1
- package/dist/components/announcement-dialog/announcement-dialog.mjs +5 -4
- package/dist/components/choice-list/choice-list.mjs +4 -1
- package/dist/components/choice-list/choice-list.recipe.mjs +2 -2
- package/dist/components/combobox-select/combobox-select.css +2 -0
- package/dist/components/composer/composer-suggestion-list.d.mts +5 -2
- package/dist/components/composer/composer-suggestion-list.mjs +10 -8
- package/dist/components/dialog/dialog.d.mts +5 -3
- package/dist/components/dialog/dialog.mjs +16 -10
- package/dist/components/files/files.d.mts +5 -2
- package/dist/components/files/files.mjs +11 -2
- package/dist/components/files/files.recipe.mjs +1 -1
- package/dist/components/filter-chip/filter-chip.mjs +2 -1
- package/dist/components/markdown/markdown-parts.d.mts +1 -1
- package/dist/components/markdown/markdown-parts.mjs +1 -1
- package/dist/components/message-action-card/message-action-card-content.recipe.mjs +2 -1
- package/dist/components/message-action-card/message-action-card.d.mts +6 -4
- package/dist/components/message-action-card/message-action-card.mjs +14 -27
- package/dist/components/message-list/message-list.mjs +3 -3
- package/dist/components/mobile-nav/mobile-nav-server.d.mts +4 -2
- package/dist/components/mobile-nav/mobile-nav-server.mjs +9 -5
- package/dist/components/notification-center/notification-center.d.mts +5 -2
- package/dist/components/notification-center/notification-center.mjs +10 -8
- package/dist/components/panel/panel-action.mjs +1 -1
- package/dist/components/panel/panel.d.mts +10 -2
- package/dist/components/panel/panel.mjs +26 -3
- package/dist/components/panel/panel.recipe.mjs +2 -1
- package/dist/components/search/search.d.mts +5 -3
- package/dist/components/search/search.mjs +9 -10
- package/dist/components/search/search.recipe.mjs +1 -1
- package/dist/components/segmented-control/segmented-control.mjs +1 -1
- package/dist/components/sidebar/sidebar.mjs +1 -1
- package/dist/components/tabs/tabs.mjs +1 -1
- package/dist/components/tasks/tasks-panel.d.mts +6 -2
- package/dist/components/tasks/tasks-panel.mjs +10 -7
- package/dist/components/tasks/tasks-panel.recipe.mjs +1 -1
- package/dist/components/toggle-group/toggle-group.mjs +1 -1
- package/dist/components/virtual-list/styles/virtual-list.css +3 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +4 -4
- package/dist/lib/use-scrollbar-size.d.mts +3 -0
- package/dist/lib/use-scrollbar-size.mjs +3 -0
- package/dist/styles.css +3 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
## [0.73.0](https://github.com/botiverse/raft-design/compare/v0.72.0...v0.73.0) (2026-11-08)
|
|
2
|
+
|
|
3
|
+
### Changed
|
|
4
|
+
|
|
5
|
+
- **Every region that scrolls is a ScrollArea**: `PanelScrollViewport`, `ActivityInboxViewport`, `SearchShellViewport`, `NotificationCenterScroller`, `FilesViewport`, `TasksPanelViewport`, ChoiceList's scroller, `MobileNavServerPopoverList`, `ComposerSuggestionList`, `AnnouncementDialogBody`, `MessageActionCardScopeListViewport` and `DialogNav` show ScrollArea's overlay scrollbar instead of the platform's. Native scrolling stays only in the places scroll-area.md lists, each with its reason, and a test fails on any other. ([#1055](https://github.com/botiverse/raft-design/pull/1055))
|
|
6
|
+
- Why: one look for scrollbars on every platform and theme, and a scrollbar that takes no room from a list's 8px inset (Artea, #proj-raft-ui:#209).
|
|
7
|
+
- Affects: **keyboard order**: a `PanelScrollViewport` whose content overflows is now a Tab stop of its own, before the controls inside it (a scrolling region must be reachable by keyboard). Check tests that depend on Tab order when upgrading. `PanelScrollViewport`'s `data-slot` (`panel-scroll-viewport`) replaces ScrollArea's own `scroll-area` on that element, so a selector for `[data-slot=scroll-area]` doesn't match it. On a phone MessageList keeps its native scroller. ChoiceList, DialogNav, the mobile server list and the composer suggestions keep their scroller out of the Tab order (`tabIndex={-1}`), since their rows take focus. `scrollbar-list` and `useScrollbarSize` are now only for a native scroller that can't be a ScrollArea.
|
|
8
|
+
- Docs: https://raft-design.botiverse.build/components/scroll-area/
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **FilterChipRemove**: on a touch screen its 44px tap area no longer reaches over the chip's label. It grows 10px up and down, 6px toward the label (exactly to its edge) and 14px outward, so a tap on the label's end no longer clears the filter. ([#1054](https://github.com/botiverse/raft-design/pull/1054))
|
|
13
|
+
- Why: the tap area grew 10px on every side, across the 6px gap and 4px into the label (Remy, #proj-workspace:#221).
|
|
14
|
+
- Affects: touch screens. Keep the next control 16px from the chip (was 12), since the tap area now reaches 10px past the chip's end.
|
|
15
|
+
- Docs: https://raft-design.botiverse.build/components/filter-chip/
|
|
16
|
+
- **ArtifactIcon** is pinned to Lucide's `file-code` by a test, so a Lucide upgrade that changes that icon fails instead of letting the rail drift from the Artifact chip. ([#1054](https://github.com/botiverse/raft-design/pull/1054))
|
|
17
|
+
|
|
1
18
|
## [0.72.0](https://github.com/botiverse/raft-design/compare/v0.71.0...v0.72.0) (2026-11-07)
|
|
2
19
|
|
|
3
20
|
### Changed
|
|
@@ -4,9 +4,12 @@ import { ComponentPropsWithRef } from "react";
|
|
|
4
4
|
export type ActivityInboxPanelProps = ComponentPropsWithRef<typeof Panel>;
|
|
5
5
|
export declare function ActivityInboxPanel({ className, ...props }: ActivityInboxPanelProps): import("react").JSX.Element;
|
|
6
6
|
export type ActivityInboxViewportProps = ComponentPropsWithRef<"div">;
|
|
7
|
-
/** The list's scroller
|
|
8
|
-
*
|
|
9
|
-
|
|
7
|
+
/** The list's scroller, a ScrollArea container with absolute gutters: the
|
|
8
|
+
* overlay scrollbar takes no room, so the item cells' fills sit 8px from both
|
|
9
|
+
* edges with or without it (design/patterns/lists.md), and the scroller lays
|
|
10
|
+
* out its own column of items. `ref`, `className` and the native props are
|
|
11
|
+
* the scrolling element's; a frame around it holds the scrollbar. */
|
|
12
|
+
export declare function ActivityInboxViewport({ children, className, ref, style, ...props }: ActivityInboxViewportProps): import("react").JSX.Element;
|
|
10
13
|
export type ActivityInboxLoadingMoreProps = ComponentPropsWithRef<"div">;
|
|
11
14
|
export declare function ActivityInboxLoadingMore({ className, ...props }: ActivityInboxLoadingMoreProps): import("react").JSX.Element;
|
|
12
15
|
//#endregion
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { cn } from "../../cn.mjs";
|
|
2
|
+
import { ScrollAreaGutters } from "../scroll-area/scroll-area-gutters.mjs";
|
|
3
|
+
import { useScrollAreaContainer } from "../scroll-area/use-scroll-area-container.mjs";
|
|
2
4
|
import { Panel } from "../panel/panel.mjs";
|
|
3
|
-
import { useScrollbarSize } from "../../lib/use-scrollbar-size.mjs";
|
|
4
5
|
import { activityInboxShell } from "./activity-inbox-shell.recipe.mjs";
|
|
5
|
-
import {
|
|
6
|
+
import { useMemo } from "react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
8
|
//#region src/components/activity-inbox/activity-inbox-shell.tsx
|
|
7
9
|
function ActivityInboxPanel({ className, ...props }) {
|
|
8
10
|
const { panel } = activityInboxShell();
|
|
@@ -14,17 +16,34 @@ function ActivityInboxPanel({ className, ...props }) {
|
|
|
14
16
|
...props
|
|
15
17
|
});
|
|
16
18
|
}
|
|
17
|
-
/** The list's scroller
|
|
18
|
-
*
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
/** The list's scroller, a ScrollArea container with absolute gutters: the
|
|
20
|
+
* overlay scrollbar takes no room, so the item cells' fills sit 8px from both
|
|
21
|
+
* edges with or without it (design/patterns/lists.md), and the scroller lays
|
|
22
|
+
* out its own column of items. `ref`, `className` and the native props are
|
|
23
|
+
* the scrolling element's; a frame around it holds the scrollbar. */
|
|
24
|
+
function ActivityInboxViewport({ children, className, ref, style, ...props }) {
|
|
25
|
+
const { frame, viewport } = activityInboxShell();
|
|
26
|
+
const { containerProps, frameProps, guttersProps } = useScrollAreaContainer({
|
|
27
|
+
containerRef: ref,
|
|
28
|
+
guttersPosition: "absolute",
|
|
29
|
+
overscroll: "contain"
|
|
30
|
+
});
|
|
31
|
+
const ownStyle = useMemo(() => ({
|
|
32
|
+
...containerProps.style,
|
|
33
|
+
...style
|
|
34
|
+
}), [containerProps.style, style]);
|
|
35
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
36
|
+
...frameProps,
|
|
37
|
+
"data-slot": "activity-inbox-viewport-frame",
|
|
38
|
+
className: frame({ className: frameProps.className }),
|
|
39
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
40
|
+
"data-slot": "activity-inbox-viewport",
|
|
41
|
+
...containerProps,
|
|
42
|
+
...props,
|
|
43
|
+
style: ownStyle,
|
|
44
|
+
className: viewport({ className: cn(containerProps.className, className) }),
|
|
45
|
+
children
|
|
46
|
+
}), /* @__PURE__ */ jsx(ScrollAreaGutters, { ...guttersProps })]
|
|
28
47
|
});
|
|
29
48
|
}
|
|
30
49
|
function ActivityInboxLoadingMore({ className, ...props }) {
|
|
@@ -7,7 +7,12 @@ const activityInboxShell = tv({ slots: {
|
|
|
7
7
|
"bg-layer-canvas font-sans text-foreground",
|
|
8
8
|
listColumnMargin
|
|
9
9
|
],
|
|
10
|
-
|
|
10
|
+
frame: ["min-h-0 flex-1"],
|
|
11
|
+
viewport: [
|
|
12
|
+
"relative flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto *:shrink-0",
|
|
13
|
+
"outline-none focus-visible:shadow-focus",
|
|
14
|
+
"bg-layer-canvas px-0 pt-2 pb-[calc(8px+env(safe-area-inset-bottom,0px))]"
|
|
15
|
+
],
|
|
11
16
|
loadingMore: ["py-3 text-center", "text-caption text-foreground-hint"]
|
|
12
17
|
} });
|
|
13
18
|
//#endregion
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { ButtonProps } from "../button/button.mjs";
|
|
2
2
|
import "../button/index.mjs";
|
|
3
|
+
import { ScrollAreaProps } from "../scroll-area/types.mjs";
|
|
3
4
|
import { Dialog, DialogClose, DialogContentProps, DialogTitleProps, DialogTrigger } from "../dialog/dialog.mjs";
|
|
4
5
|
import "../dialog/index.mjs";
|
|
5
6
|
import { ComponentPropsWithRef } from "react";
|
|
6
7
|
//#region src/components/announcement-dialog/announcement-dialog.d.ts
|
|
7
8
|
export declare function AnnouncementDialogContent({ className, initialFocus, ref, ...props }: DialogContentProps): import("react").JSX.Element;
|
|
8
|
-
export declare function AnnouncementDialogBody({ className, ...props }:
|
|
9
|
+
export declare function AnnouncementDialogBody({ className, ...props }: ScrollAreaProps): import("react").JSX.Element;
|
|
9
10
|
export declare function AnnouncementDialogHeader({ className, ...props }: ComponentPropsWithRef<"div">): import("react").JSX.Element;
|
|
10
11
|
export declare function AnnouncementDialogLabel({ className, children, ...props }: ComponentPropsWithRef<"div">): import("react").JSX.Element;
|
|
11
12
|
export declare function AnnouncementDialogTitle({ className, ...props }: DialogTitleProps): import("react").JSX.Element;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { tv } from "../../lib/tv.mjs";
|
|
2
2
|
import { Button } from "../button/button.mjs";
|
|
3
|
+
import { ScrollArea } from "../scroll-area/scroll-area.mjs";
|
|
3
4
|
import { Dialog, DialogClose, DialogContent, DialogTitle, DialogTrigger } from "../dialog/dialog.mjs";
|
|
4
5
|
import { useCallback, useRef } from "react";
|
|
5
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -7,7 +8,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
7
8
|
const announcement = tv({ slots: {
|
|
8
9
|
content: ["@container/announcement max-w-xl gap-0 overflow-clip p-0"],
|
|
9
10
|
body: [
|
|
10
|
-
"min-h-0 max-h-[70dvh]
|
|
11
|
+
"min-h-0 max-h-[70dvh] pb-5",
|
|
11
12
|
"[&_[data-slot=announcement-picture]+[data-slot=announcement-text]]:mt-5",
|
|
12
13
|
"px-(--surface-inset) pt-(--surface-inset)"
|
|
13
14
|
],
|
|
@@ -43,10 +44,10 @@ function AnnouncementDialogContent({ className, initialFocus, ref, ...props }) {
|
|
|
43
44
|
}
|
|
44
45
|
function AnnouncementDialogBody({ className, ...props }) {
|
|
45
46
|
const { body } = announcement();
|
|
46
|
-
return /* @__PURE__ */ jsx(
|
|
47
|
+
return /* @__PURE__ */ jsx(ScrollArea, {
|
|
47
48
|
"data-slot": "announcement-body",
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
...props,
|
|
50
|
+
className: body({ className })
|
|
50
51
|
});
|
|
51
52
|
}
|
|
52
53
|
function AnnouncementDialogHeader({ className, ...props }) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Button } from "../button/button.mjs";
|
|
2
|
+
import { ScrollArea } from "../scroll-area/scroll-area.mjs";
|
|
2
3
|
import { Checkbox } from "../checkbox/checkbox.mjs";
|
|
3
4
|
import { useOverflowTitle } from "../../lib/use-overflow-title.mjs";
|
|
4
5
|
import { InputGroup, InputGroupAddon, InputGroupInput } from "../input-group/input-group.mjs";
|
|
@@ -255,8 +256,10 @@ function ChoiceList(props) {
|
|
|
255
256
|
}) : null, /* @__PURE__ */ jsxs("div", {
|
|
256
257
|
"data-slot": "choice-list-frame",
|
|
257
258
|
className: slots.frame(),
|
|
258
|
-
children: [/* @__PURE__ */ jsx(
|
|
259
|
+
children: [/* @__PURE__ */ jsx(ScrollArea, {
|
|
259
260
|
"data-slot": "choice-list-scroller",
|
|
261
|
+
overscroll: "contain",
|
|
262
|
+
tabIndex: -1,
|
|
260
263
|
className: slots.scroller(),
|
|
261
264
|
children: items.length === 0 ? /* @__PURE__ */ jsx("p", {
|
|
262
265
|
"data-slot": "choice-list-note",
|
|
@@ -31,11 +31,11 @@ const choiceList = tv({
|
|
|
31
31
|
footer: ["shrink-0 border-t border-line-seam p-1"]
|
|
32
32
|
},
|
|
33
33
|
variants: {
|
|
34
|
-
scroll: { true: { scroller: ["max-h-72
|
|
34
|
+
scroll: { true: { scroller: ["max-h-72"] } },
|
|
35
35
|
fill: { true: {
|
|
36
36
|
root: ["flex min-h-0 flex-1 flex-col"],
|
|
37
37
|
frame: ["min-h-0 flex-1"],
|
|
38
|
-
scroller: ["flex-1
|
|
38
|
+
scroller: ["flex-1"]
|
|
39
39
|
} },
|
|
40
40
|
hasAction: { true: { item: ["pr-11"] } }
|
|
41
41
|
}
|
|
@@ -181,6 +181,8 @@
|
|
|
181
181
|
var(--elevation-float);
|
|
182
182
|
outline: 0;
|
|
183
183
|
}
|
|
184
|
+
/* Native scroll, an allowed exception (scroll-area.md#native-scrolling): Base UI
|
|
185
|
+
owns the list element and its children (items can be a function of each item). */
|
|
184
186
|
.r-combobox-select__list {
|
|
185
187
|
box-sizing: border-box;
|
|
186
188
|
max-height: var(--combobox-select-list-max-height, 16rem);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { VariantProps } from "../../lib/tv.mjs";
|
|
2
|
+
import { ScrollAreaProps } from "../scroll-area/types.mjs";
|
|
2
3
|
import { useRender } from "@base-ui/react/use-render";
|
|
3
4
|
//#region src/components/composer/composer-suggestion-list.d.ts
|
|
4
5
|
declare const composerSuggestionList: import("tailwind-variants/lite").TVReturnType<{
|
|
@@ -113,8 +114,10 @@ declare const composerSuggestionList: import("tailwind-variants/lite").TVReturnT
|
|
|
113
114
|
aside: string[];
|
|
114
115
|
meta: string[];
|
|
115
116
|
}>>;
|
|
116
|
-
export type ComposerSuggestionListProps =
|
|
117
|
-
|
|
117
|
+
export type ComposerSuggestionListProps = ScrollAreaProps;
|
|
118
|
+
/** The suggestions' popup, a ScrollArea: `ref`, `className`, `render` and
|
|
119
|
+
* the native props (the listbox's role and id) are the scrolling element's. */
|
|
120
|
+
export declare function ComposerSuggestionList({ className, ...props }: ComposerSuggestionListProps): import("react").JSX.Element;
|
|
118
121
|
type ComposerSuggestionListVariantProps = VariantProps<typeof composerSuggestionList>;
|
|
119
122
|
export type ComposerSuggestionGroupProps = useRender.ComponentProps<"div"> & Pick<ComposerSuggestionListVariantProps, "separated">;
|
|
120
123
|
export declare function ComposerSuggestionGroup({ separated, className, render, ...props }: ComposerSuggestionGroupProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { tv } from "../../lib/tv.mjs";
|
|
2
|
+
import { ScrollArea } from "../scroll-area/scroll-area.mjs";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
4
|
import { mergeProps } from "@base-ui/react/merge-props";
|
|
3
5
|
import { useRender } from "@base-ui/react/use-render";
|
|
4
6
|
//#region src/components/composer/composer-suggestion-list.tsx
|
|
5
7
|
const composerSuggestionList = tv({
|
|
6
8
|
slots: {
|
|
7
9
|
root: [
|
|
8
|
-
"absolute inset-x-0 bottom-full w-auto
|
|
10
|
+
"absolute inset-x-0 bottom-full w-auto",
|
|
9
11
|
"mb-2 max-h-60 overflow-x-hidden rounded-container p-1",
|
|
10
12
|
"bg-layer-popover text-foreground ring-1 ring-line-seam shadow-float"
|
|
11
13
|
],
|
|
@@ -47,16 +49,16 @@ const composerSuggestionList = tv({
|
|
|
47
49
|
metaVariant: "text"
|
|
48
50
|
}
|
|
49
51
|
});
|
|
50
|
-
|
|
52
|
+
/** The suggestions' popup, a ScrollArea: `ref`, `className`, `render` and
|
|
53
|
+
* the native props (the listbox's role and id) are the scrolling element's. */
|
|
54
|
+
function ComposerSuggestionList({ className, ...props }) {
|
|
51
55
|
const { root } = composerSuggestionList();
|
|
52
|
-
|
|
56
|
+
return /* @__PURE__ */ jsx(ScrollArea, {
|
|
53
57
|
"data-slot": "composer-suggestion-list",
|
|
58
|
+
overscroll: "contain",
|
|
59
|
+
tabIndex: -1,
|
|
60
|
+
...props,
|
|
54
61
|
className: root({ className })
|
|
55
|
-
};
|
|
56
|
-
return useRender({
|
|
57
|
-
defaultTagName: "div",
|
|
58
|
-
render,
|
|
59
|
-
props: mergeProps(defaultProps, props)
|
|
60
62
|
});
|
|
61
63
|
}
|
|
62
64
|
function ComposerSuggestionGroup({ separated, className, render, ...props }) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { StyledProps } from "../../lib/styled-props.mjs";
|
|
2
2
|
import { ButtonProps } from "../button/button.mjs";
|
|
3
3
|
import "../button/index.mjs";
|
|
4
|
+
import { ScrollAreaProps } from "../scroll-area/types.mjs";
|
|
4
5
|
import { PanelActionProps } from "../panel/panel-action.mjs";
|
|
5
6
|
import { Dialog } from "@base-ui/react/dialog";
|
|
6
7
|
import { ComponentPropsWithRef, ReactNode } from "react";
|
|
@@ -78,8 +79,9 @@ export type DialogSurfaceProps = useRender.ComponentProps<"div">;
|
|
|
78
79
|
* DialogContent draws the same frame for a Base UI dialog.
|
|
79
80
|
*/
|
|
80
81
|
export declare function DialogSurface({ className, render, children, ...props }: DialogSurfaceProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
81
|
-
export type DialogNavProps =
|
|
82
|
-
/** The section list of a wide (`size="wide"`) dialog, inside a `bar` body
|
|
83
|
-
|
|
82
|
+
export type DialogNavProps = Omit<ScrollAreaProps, "contentClassName">;
|
|
83
|
+
/** The section list of a wide (`size="wide"`) dialog, inside a `bar` body: a
|
|
84
|
+
* `<nav>` that is a ScrollArea, its rows in the area's content element. */
|
|
85
|
+
export declare function DialogNav({ className, render, ...props }: DialogNavProps): import("react").JSX.Element;
|
|
84
86
|
//#endregion
|
|
85
87
|
export { Dialog$1 as Dialog };
|
|
@@ -7,6 +7,7 @@ import { useThemeScopeProps } from "../../lib/theme/theme-scope.mjs";
|
|
|
7
7
|
import { useParentOverlayKind, withOverlayLayer } from "../../lib/overlay-depth.mjs";
|
|
8
8
|
import { Button } from "../button/button.mjs";
|
|
9
9
|
import { DialogSheetHeadContext, DialogSheetReset, dialogSheet, useDialogSheet, useInDialogSheetHead } from "./dialog-sheet-context.mjs";
|
|
10
|
+
import { ScrollArea } from "../scroll-area/scroll-area.mjs";
|
|
10
11
|
import { TextLink } from "../text-link/text-link.mjs";
|
|
11
12
|
import { PanelAction } from "../panel/panel-action.mjs";
|
|
12
13
|
import { Dialog } from "@base-ui/react/dialog";
|
|
@@ -354,17 +355,22 @@ function DialogSurface({ className, render, children, ...props }) {
|
|
|
354
355
|
}, props, { children: /* @__PURE__ */ jsx(DialogSheetReset, { children }) })
|
|
355
356
|
});
|
|
356
357
|
}
|
|
357
|
-
const dialogNav = tv({ slots: {
|
|
358
|
-
|
|
358
|
+
const dialogNav = tv({ slots: {
|
|
359
|
+
root: ["shrink-0", "w-52 border-r border-line-seam py-2 max-md:hidden"],
|
|
360
|
+
content: ["flex flex-col gap-0.5"]
|
|
361
|
+
} });
|
|
362
|
+
/** The section list of a wide (`size="wide"`) dialog, inside a `bar` body: a
|
|
363
|
+
* `<nav>` that is a ScrollArea, its rows in the area's content element. */
|
|
359
364
|
function DialogNav({ className, render, ...props }) {
|
|
360
|
-
const { root } = dialogNav();
|
|
361
|
-
return
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
},
|
|
365
|
+
const { root, content } = dialogNav();
|
|
366
|
+
return /* @__PURE__ */ jsx(ScrollArea, {
|
|
367
|
+
"data-slot": "dialog-nav",
|
|
368
|
+
overscroll: "contain",
|
|
369
|
+
tabIndex: -1,
|
|
370
|
+
...props,
|
|
371
|
+
render: render ?? /* @__PURE__ */ jsx("nav", {}),
|
|
372
|
+
className: root({ className }),
|
|
373
|
+
contentClassName: content()
|
|
368
374
|
});
|
|
369
375
|
}
|
|
370
376
|
//#endregion
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ButtonProps } from "../button/button.mjs";
|
|
2
|
+
import { ScrollAreaProps } from "../scroll-area/types.mjs";
|
|
2
3
|
import { useRender } from "@base-ui/react/use-render";
|
|
3
4
|
//#region src/components/files/files.d.ts
|
|
4
5
|
type FileTag = "button" | "div" | "img" | "section" | "span";
|
|
@@ -6,8 +7,10 @@ type DataAttributes = Record<`data-${string}`, string | undefined>;
|
|
|
6
7
|
type FileSlotProps<Tag extends FileTag> = useRender.ComponentProps<Tag> & DataAttributes;
|
|
7
8
|
export type FilesPanelProps = FileSlotProps<"section">;
|
|
8
9
|
export declare function FilesPanel(props: FilesPanelProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
9
|
-
export type FilesViewportProps =
|
|
10
|
-
|
|
10
|
+
export type FilesViewportProps = ScrollAreaProps & DataAttributes;
|
|
11
|
+
/** The files' scroller, a ScrollArea: `ref`, `className`, `render`, `onScroll`
|
|
12
|
+
* and the native props are the scrolling element's. */
|
|
13
|
+
export declare function FilesViewport({ className, ...props }: FilesViewportProps): import("react").JSX.Element;
|
|
11
14
|
export type FilesListProps = FileSlotProps<"div">;
|
|
12
15
|
export declare function FilesList(props: FilesListProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
13
16
|
export type FileRowProps = FileSlotProps<"div">;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Button } from "../button/button.mjs";
|
|
2
|
+
import { ScrollArea } from "../scroll-area/scroll-area.mjs";
|
|
2
3
|
import { files } from "./files.recipe.mjs";
|
|
3
4
|
import { jsx } from "react/jsx-runtime";
|
|
4
5
|
import { useRender } from "@base-ui/react/use-render";
|
|
@@ -19,8 +20,16 @@ function useFileSlot(slotName, dataSlot, defaultTagName, props) {
|
|
|
19
20
|
function FilesPanel(props) {
|
|
20
21
|
return useFileSlot("panel", "files-panel", "section", props);
|
|
21
22
|
}
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
/** The files' scroller, a ScrollArea: `ref`, `className`, `render`, `onScroll`
|
|
24
|
+
* and the native props are the scrolling element's. */
|
|
25
|
+
function FilesViewport({ className, ...props }) {
|
|
26
|
+
const { viewport } = files();
|
|
27
|
+
return /* @__PURE__ */ jsx(ScrollArea, {
|
|
28
|
+
"data-slot": "files-viewport",
|
|
29
|
+
overscroll: "contain",
|
|
30
|
+
...props,
|
|
31
|
+
className: viewport({ className })
|
|
32
|
+
});
|
|
24
33
|
}
|
|
25
34
|
function FilesList(props) {
|
|
26
35
|
return useFileSlot("list", "files-list", "div", props);
|
|
@@ -2,7 +2,7 @@ import { tv } from "../../lib/tv.mjs";
|
|
|
2
2
|
//#region src/components/files/files.recipe.ts
|
|
3
3
|
const files = tv({ slots: {
|
|
4
4
|
panel: ["flex min-h-0 flex-1 flex-col", "bg-layer-canvas text-foreground"],
|
|
5
|
-
viewport: ["min-h-0 flex-1
|
|
5
|
+
viewport: ["min-h-0 flex-1"],
|
|
6
6
|
list: ["flex flex-col gap-2 px-(--surface-inset) py-3", "max-md:px-4"],
|
|
7
7
|
row: [
|
|
8
8
|
"group/file-row flex w-full min-w-0 gap-3 px-3",
|
|
@@ -17,7 +17,8 @@ const filterChip = tv({ slots: {
|
|
|
17
17
|
remove: [
|
|
18
18
|
...chipRemoveBase,
|
|
19
19
|
"relative size-6",
|
|
20
|
-
"after:absolute after:content-['']
|
|
20
|
+
"after:absolute after:content-['']",
|
|
21
|
+
"pointer-coarse:after:-inset-y-2.5 pointer-coarse:after:-left-1.5 pointer-coarse:after:-right-3.5"
|
|
21
22
|
]
|
|
22
23
|
} });
|
|
23
24
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { ScrollAreaProps } from "../scroll-area/types.mjs";
|
|
1
2
|
import { CheckboxProps } from "../checkbox/checkbox.mjs";
|
|
2
3
|
import "../checkbox/index.mjs";
|
|
3
4
|
import { InlineCodeProps } from "../inline-code/inline-code.mjs";
|
|
4
5
|
import "../inline-code/index.mjs";
|
|
5
|
-
import { ScrollAreaProps } from "../scroll-area/types.mjs";
|
|
6
6
|
import { ComponentPropsWithRef } from "react";
|
|
7
7
|
//#region src/components/markdown/markdown-parts.d.ts
|
|
8
8
|
declare const HEADING_TAGS: {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Checkbox } from "../checkbox/checkbox.mjs";
|
|
2
1
|
import { ScrollArea } from "../scroll-area/scroll-area.mjs";
|
|
2
|
+
import { Checkbox } from "../checkbox/checkbox.mjs";
|
|
3
3
|
import { InlineCode } from "../inline-code/inline-code.mjs";
|
|
4
4
|
import { markdown } from "./markdown.recipe.mjs";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -24,7 +24,8 @@ const messageActionCardContent = tv({ slots: {
|
|
|
24
24
|
"@max-sm/action-card:min-h-0 @max-sm/action-card:py-0"
|
|
25
25
|
],
|
|
26
26
|
scopeList: ["mt-0 stack-y-1.5"],
|
|
27
|
-
scopeListViewport: ["
|
|
27
|
+
scopeListViewport: ["max-h-[136px]"],
|
|
28
|
+
scopeListViewportContent: ["stack-y-1.5 pr-1"],
|
|
28
29
|
scopeListLabel: ["text-footnote font-medium text-foreground-hint"],
|
|
29
30
|
scope: ["min-w-0 border p-1.5", "rounded-control border-line-hairline bg-layer-card px-2.5 py-2"],
|
|
30
31
|
scopeName: ["break-all font-mono", "text-mono-meta font-normal text-foreground"],
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ScrollAreaProps } from "../scroll-area/types.mjs";
|
|
1
2
|
import { BadgeProps } from "../badge/badge.mjs";
|
|
2
3
|
import "../badge/index.mjs";
|
|
3
4
|
import { ComponentProps, ReactNode } from "react";
|
|
@@ -38,10 +39,11 @@ export declare function MessageActionCardPropertyValue({ className, render, ...p
|
|
|
38
39
|
export declare function MessageActionCardScopeList({ className, render, ...props }: useRender.ComponentProps<"div">): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
39
40
|
export declare function MessageActionCardScopeListLabel({ className, render, ...props }: useRender.ComponentProps<"div">): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
40
41
|
/**
|
|
41
|
-
* Scrolls a long permission list
|
|
42
|
-
* keyboard users can scroll it; a short list adds no empty stop
|
|
42
|
+
* Scrolls a long permission list: a ScrollArea, so it is a Tab stop only while
|
|
43
|
+
* it overflows (keyboard users can scroll it; a short list adds no empty stop),
|
|
44
|
+
* and its overlay scrollbar takes no room from the rows.
|
|
43
45
|
*/
|
|
44
|
-
export declare function MessageActionCardScopeListViewport({ className,
|
|
46
|
+
export declare function MessageActionCardScopeListViewport({ className, ...props }: MessageActionCardScopeListViewportProps): import("react").JSX.Element;
|
|
45
47
|
export declare function MessageActionCardScope({ className, render, ...props }: useRender.ComponentProps<"div">): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
46
48
|
export declare function MessageActionCardScopeName({ className, render, ...props }: useRender.ComponentProps<"div">): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
47
49
|
export declare function MessageActionCardScopeDescription({ className, render, ...props }: useRender.ComponentProps<"div">): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
@@ -67,7 +69,7 @@ export type MessageActionCardCollapseTriggerProps = Omit<ComponentProps<typeof C
|
|
|
67
69
|
className?: string;
|
|
68
70
|
"aria-label": string;
|
|
69
71
|
};
|
|
70
|
-
export type MessageActionCardScopeListViewportProps =
|
|
72
|
+
export type MessageActionCardScopeListViewportProps = Omit<ScrollAreaProps, "contentClassName" | "aria-label"> & {
|
|
71
73
|
/** Names the scroll area for screen readers, e.g. "Permissions". */
|
|
72
74
|
"aria-label": string;
|
|
73
75
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { ScrollArea } from "../scroll-area/scroll-area.mjs";
|
|
1
2
|
import { Badge } from "../badge/badge.mjs";
|
|
2
3
|
import { MessageEmbed, MessageEmbedContent, MessageEmbedHeader } from "../message-embed/message-embed.mjs";
|
|
3
4
|
import { messageActionCard } from "./message-action-card.recipe.mjs";
|
|
4
5
|
import { messageActionCardContent } from "./message-action-card-content.recipe.mjs";
|
|
5
6
|
import { ChevronDown, Info, Zap } from "lucide-react";
|
|
6
|
-
import {
|
|
7
|
-
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
import { mergeProps } from "@base-ui/react/merge-props";
|
|
9
9
|
import { useRender } from "@base-ui/react/use-render";
|
|
10
10
|
import { Collapsible } from "@base-ui/react/collapsible";
|
|
@@ -182,31 +182,18 @@ function MessageActionCardScopeListLabel({ className, render, ...props }) {
|
|
|
182
182
|
});
|
|
183
183
|
}
|
|
184
184
|
/**
|
|
185
|
-
* Scrolls a long permission list
|
|
186
|
-
* keyboard users can scroll it; a short list adds no empty stop
|
|
185
|
+
* Scrolls a long permission list: a ScrollArea, so it is a Tab stop only while
|
|
186
|
+
* it overflows (keyboard users can scroll it; a short list adds no empty stop),
|
|
187
|
+
* and its overlay scrollbar takes no room from the rows.
|
|
187
188
|
*/
|
|
188
|
-
function MessageActionCardScopeListViewport({ className,
|
|
189
|
-
const { scopeListViewport } = messageActionCardContent();
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
const observer = new ResizeObserver(measure);
|
|
197
|
-
observer.observe(element);
|
|
198
|
-
for (const child of element.children) observer.observe(child);
|
|
199
|
-
return () => observer.disconnect();
|
|
200
|
-
}, [element]);
|
|
201
|
-
return useRender({
|
|
202
|
-
defaultTagName: "div",
|
|
203
|
-
render,
|
|
204
|
-
ref: setElement,
|
|
205
|
-
props: mergeProps({
|
|
206
|
-
className: scopeListViewport({ className }),
|
|
207
|
-
tabIndex: overflows ? 0 : void 0
|
|
208
|
-
}, props),
|
|
209
|
-
state: { slot: "message-action-card-scope-list-viewport" }
|
|
189
|
+
function MessageActionCardScopeListViewport({ className, ...props }) {
|
|
190
|
+
const { scopeListViewport, scopeListViewportContent } = messageActionCardContent();
|
|
191
|
+
return /* @__PURE__ */ jsx(ScrollArea, {
|
|
192
|
+
"data-slot": "message-action-card-scope-list-viewport",
|
|
193
|
+
overscroll: "contain",
|
|
194
|
+
...props,
|
|
195
|
+
className: scopeListViewport({ className }),
|
|
196
|
+
contentClassName: scopeListViewportContent()
|
|
210
197
|
});
|
|
211
198
|
}
|
|
212
199
|
function MessageActionCardScope({ className, render, ...props }) {
|
|
@@ -262,7 +249,7 @@ function MessageActionCardNotice({ className, render, icon, children, ...props }
|
|
|
262
249
|
render,
|
|
263
250
|
props: mergeProps({
|
|
264
251
|
className: notice({ className }),
|
|
265
|
-
children: /* @__PURE__ */ jsxs(Fragment
|
|
252
|
+
children: /* @__PURE__ */ jsxs(Fragment, { children: [icon ?? /* @__PURE__ */ jsx(Info, { "aria-hidden": true }), /* @__PURE__ */ jsx("span", { children })] })
|
|
266
253
|
}, props),
|
|
267
254
|
state: { slot: "message-action-card-notice" }
|
|
268
255
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { useMobileViewport } from "../../lib/use-mobile-viewport.mjs";
|
|
2
1
|
import { ScrollArea } from "../scroll-area/scroll-area.mjs";
|
|
3
|
-
import {
|
|
2
|
+
import { useMobileViewport } from "../../lib/use-mobile-viewport.mjs";
|
|
3
|
+
import { PanelNativeScrollViewport } from "../panel/panel.mjs";
|
|
4
4
|
import { messageList } from "./message-list.recipe.mjs";
|
|
5
5
|
import { useMemo } from "react";
|
|
6
6
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -15,7 +15,7 @@ function MessageList({ children, className, render, rootClassName, style, ...pro
|
|
|
15
15
|
if (isMobile) return /* @__PURE__ */ jsx("div", {
|
|
16
16
|
"data-slot": "message-list",
|
|
17
17
|
className: root({ className: rootClassName }),
|
|
18
|
-
children: /* @__PURE__ */ jsx(
|
|
18
|
+
children: /* @__PURE__ */ jsx(PanelNativeScrollViewport, {
|
|
19
19
|
...props,
|
|
20
20
|
render,
|
|
21
21
|
"data-slot": "message-list-viewport",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ScrollAreaProps } from "../scroll-area/types.mjs";
|
|
1
2
|
import { MobileNavItemProps } from "./mobile-nav.mjs";
|
|
2
3
|
import { PopoverContentProps, PopoverProps } from "../popover/popover.mjs";
|
|
3
4
|
import { ComponentPropsWithRef } from "react";
|
|
@@ -27,8 +28,9 @@ export type MobileNavServerPopoverContentProps = PopoverContentProps;
|
|
|
27
28
|
* destinations and the footer after it stay in view.
|
|
28
29
|
*/
|
|
29
30
|
export declare function MobileNavServerPopoverContent({ anchor, side, align, sideOffset, collisionPadding, className, ...props }: MobileNavServerPopoverContentProps): import("react").JSX.Element;
|
|
30
|
-
export type MobileNavServerPopoverListProps =
|
|
31
|
-
/** The server list: takes the room left in the popover and scrolls inside it
|
|
31
|
+
export type MobileNavServerPopoverListProps = ScrollAreaProps;
|
|
32
|
+
/** The server list: takes the room left in the popover and scrolls inside it,
|
|
33
|
+
* a ScrollArea (a column with no gap, so its gutters move nothing). */
|
|
32
34
|
export declare function MobileNavServerPopoverList({ className, ...props }: MobileNavServerPopoverListProps): import("react").JSX.Element;
|
|
33
35
|
export type MobileNavServerPopoverGroupProps = ComponentPropsWithRef<"div">;
|
|
34
36
|
/** Rows that always stay in view, such as the footer actions. */
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { tv } from "../../lib/tv.mjs";
|
|
2
|
+
import { ScrollArea } from "../scroll-area/scroll-area.mjs";
|
|
2
3
|
import { MobileNavItem } from "./mobile-nav.mjs";
|
|
3
4
|
import "../../lib/touch-drag.mjs";
|
|
4
5
|
import { PopoverContent } from "../popover/popover.mjs";
|
|
@@ -17,7 +18,7 @@ const mobileNavServer = tv({ slots: {
|
|
|
17
18
|
"w-[calc(var(--anchor-width)-16px)] min-w-0",
|
|
18
19
|
"max-h-[min(60dvh,calc(var(--available-height)-env(safe-area-inset-top,0px)))]"
|
|
19
20
|
],
|
|
20
|
-
list: ["flex min-h-0 flex-1 flex-col
|
|
21
|
+
list: ["flex min-h-0 flex-1 flex-col p-1"],
|
|
21
22
|
group: ["flex shrink-0 flex-col p-1"],
|
|
22
23
|
row: [
|
|
23
24
|
"flex w-full shrink-0 cursor-default select-none items-center",
|
|
@@ -187,13 +188,16 @@ function MobileNavServerPopoverContent({ anchor, side = "top", align = "center",
|
|
|
187
188
|
...props
|
|
188
189
|
});
|
|
189
190
|
}
|
|
190
|
-
/** The server list: takes the room left in the popover and scrolls inside it
|
|
191
|
+
/** The server list: takes the room left in the popover and scrolls inside it,
|
|
192
|
+
* a ScrollArea (a column with no gap, so its gutters move nothing). */
|
|
191
193
|
function MobileNavServerPopoverList({ className, ...props }) {
|
|
192
194
|
const { list } = mobileNavServer();
|
|
193
|
-
return /* @__PURE__ */ jsx(
|
|
195
|
+
return /* @__PURE__ */ jsx(ScrollArea, {
|
|
194
196
|
"data-slot": "mobile-nav-server-popover-list",
|
|
195
|
-
|
|
196
|
-
|
|
197
|
+
overscroll: "contain",
|
|
198
|
+
tabIndex: -1,
|
|
199
|
+
...props,
|
|
200
|
+
className: list({ className })
|
|
197
201
|
});
|
|
198
202
|
}
|
|
199
203
|
/** Rows that always stay in view, such as the footer actions. */
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { StyledProps } from "../../lib/styled-props.mjs";
|
|
2
2
|
import { VariantProps } from "../../lib/tv.mjs";
|
|
3
3
|
import { ButtonProps } from "../button/button.mjs";
|
|
4
|
+
import { ScrollAreaProps } from "../scroll-area/types.mjs";
|
|
4
5
|
import { EmptyStateProps } from "../empty-state/empty-state.mjs";
|
|
5
6
|
import { useRender } from "@base-ui/react/use-render";
|
|
6
7
|
import { Popover } from "@base-ui/react/popover";
|
|
@@ -198,8 +199,10 @@ export type NotificationCenterTitleProps = useRender.ComponentProps<"span">;
|
|
|
198
199
|
export declare function NotificationCenterTitle({ render, className, ...props }: NotificationCenterTitleProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
199
200
|
export type NotificationCenterCountProps = useRender.ComponentProps<"span">;
|
|
200
201
|
export declare function NotificationCenterCount({ render, className, ...props }: NotificationCenterCountProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
201
|
-
export type NotificationCenterScrollerProps =
|
|
202
|
-
|
|
202
|
+
export type NotificationCenterScrollerProps = ScrollAreaProps;
|
|
203
|
+
/** The notices' scroller, a ScrollArea: `ref`, `className`, `render` and the
|
|
204
|
+
* native props are the scrolling element's. */
|
|
205
|
+
export declare function NotificationCenterScroller({ className, ...props }: NotificationCenterScrollerProps): import("react").JSX.Element;
|
|
203
206
|
export type NotificationCenterListProps = useRender.ComponentProps<"ul">;
|
|
204
207
|
export declare function NotificationCenterList({ render, className, ...props }: NotificationCenterListProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
205
208
|
export type NotificationCenterItemProps = useRender.ComponentProps<"li"> & Pick<VariantProps<typeof notificationCenter>, "read">;
|
|
@@ -2,6 +2,7 @@ import { headEdgePull } from "../../lib/head-edges.mjs";
|
|
|
2
2
|
import { tv } from "../../lib/tv.mjs";
|
|
3
3
|
import { useThemeScopeProps } from "../../lib/theme/theme-scope.mjs";
|
|
4
4
|
import { Button } from "../button/button.mjs";
|
|
5
|
+
import { ScrollArea } from "../scroll-area/scroll-area.mjs";
|
|
5
6
|
import { Status } from "../status/status.mjs";
|
|
6
7
|
import { usePopupCollision } from "../../lib/frame-insets.mjs";
|
|
7
8
|
import { EmptyState } from "../empty-state/empty-state.mjs";
|
|
@@ -36,7 +37,7 @@ const notificationCenter = tv({
|
|
|
36
37
|
],
|
|
37
38
|
title: ["font-sans text-headline text-foreground"],
|
|
38
39
|
count: ["ml-auto", "font-mono text-mono-meta text-foreground-hint"],
|
|
39
|
-
scroller: ["min-h-0 flex-1
|
|
40
|
+
scroller: ["min-h-0 flex-1"],
|
|
40
41
|
list: [],
|
|
41
42
|
item: [
|
|
42
43
|
"group/notification-center-item relative px-4 py-3",
|
|
@@ -204,14 +205,15 @@ function NotificationCenterCount({ render, className, ...props }) {
|
|
|
204
205
|
state: { slot: "notification-center-count" }
|
|
205
206
|
});
|
|
206
207
|
}
|
|
207
|
-
|
|
208
|
+
/** The notices' scroller, a ScrollArea: `ref`, `className`, `render` and the
|
|
209
|
+
* native props are the scrolling element's. */
|
|
210
|
+
function NotificationCenterScroller({ className, ...props }) {
|
|
208
211
|
const { scroller } = notificationCenter();
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
state: { slot: "notification-center-scroller" }
|
|
212
|
+
return /* @__PURE__ */ jsx(ScrollArea, {
|
|
213
|
+
"data-slot": "notification-center-scroller",
|
|
214
|
+
overscroll: "contain",
|
|
215
|
+
...props,
|
|
216
|
+
className: scroller({ className })
|
|
215
217
|
});
|
|
216
218
|
}
|
|
217
219
|
function NotificationCenterList({ render, className, ...props }) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defaultNativeButton } from "../../lib/default-native-button.mjs";
|
|
2
|
-
import { useTapActivation } from "../../lib/tap-activation.mjs";
|
|
3
2
|
import { useMergedRef } from "../../lib/use-merged-ref.mjs";
|
|
3
|
+
import { useTapActivation } from "../../lib/tap-activation.mjs";
|
|
4
4
|
import { panelAction } from "./panel-action.recipe.mjs";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
import { Button } from "@base-ui/react/button";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ScrollAreaProps } from "../scroll-area/types.mjs";
|
|
1
2
|
import { useRender } from "@base-ui/react/use-render";
|
|
2
3
|
//#region src/components/panel/panel.d.ts
|
|
3
4
|
export type PanelEdge = "attached" | "inset";
|
|
@@ -14,8 +15,15 @@ export type PanelHeaderRootProps = useRender.ComponentProps<"div">;
|
|
|
14
15
|
export declare function PanelHeaderRoot({ className, render, ...props }: PanelHeaderRootProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
15
16
|
export type PanelBodyProps = useRender.ComponentProps<"div">;
|
|
16
17
|
export declare function PanelBody({ className, render, ...props }: PanelBodyProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
17
|
-
export type PanelScrollViewportProps =
|
|
18
|
-
|
|
18
|
+
export type PanelScrollViewportProps = ScrollAreaProps;
|
|
19
|
+
/**
|
|
20
|
+
* The panel's one scroll container, a ScrollArea: its overlay scrollbar takes
|
|
21
|
+
* no room and looks the same on every platform, and a scroll that reaches the
|
|
22
|
+
* end stops there (`overscroll="contain"`). `ref`, `className`, `render` and
|
|
23
|
+
* the native props are the scrolling element's; ScrollArea's options pass
|
|
24
|
+
* through.
|
|
25
|
+
*/
|
|
26
|
+
export declare function PanelScrollViewport({ className, ...props }: PanelScrollViewportProps): import("react").JSX.Element;
|
|
19
27
|
export type PanelScrollContentProps = useRender.ComponentProps<"div">;
|
|
20
28
|
export declare function PanelScrollContent({ className, render, ...props }: PanelScrollContentProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
21
29
|
export type PanelSectionProps = useRender.ComponentProps<"section">;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { ScrollArea } from "../scroll-area/scroll-area.mjs";
|
|
1
2
|
import { panel } from "./panel.recipe.mjs";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
4
|
import { mergeProps } from "@base-ui/react/merge-props";
|
|
3
5
|
import { useRender } from "@base-ui/react/use-render";
|
|
4
6
|
//#region src/components/panel/panel.tsx
|
|
@@ -44,11 +46,32 @@ function PanelBody({ className, render, ...props }) {
|
|
|
44
46
|
props: mergeProps(defaultProps, props)
|
|
45
47
|
});
|
|
46
48
|
}
|
|
47
|
-
|
|
49
|
+
/**
|
|
50
|
+
* The panel's one scroll container, a ScrollArea: its overlay scrollbar takes
|
|
51
|
+
* no room and looks the same on every platform, and a scroll that reaches the
|
|
52
|
+
* end stops there (`overscroll="contain"`). `ref`, `className`, `render` and
|
|
53
|
+
* the native props are the scrolling element's; ScrollArea's options pass
|
|
54
|
+
* through.
|
|
55
|
+
*/
|
|
56
|
+
function PanelScrollViewport({ className, ...props }) {
|
|
48
57
|
const { scrollViewport } = panel();
|
|
49
|
-
|
|
58
|
+
return /* @__PURE__ */ jsx(ScrollArea, {
|
|
50
59
|
"data-slot": "panel-scroll-viewport",
|
|
60
|
+
overscroll: "contain",
|
|
61
|
+
...props,
|
|
51
62
|
className: scrollViewport({ className })
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The panel's native scroller, for MessageList's phone path only, which
|
|
67
|
+
* scrolls natively below 768px (message-list.md#behavior). Not exported from
|
|
68
|
+
* the package.
|
|
69
|
+
*/
|
|
70
|
+
function PanelNativeScrollViewport({ className, render, ...props }) {
|
|
71
|
+
const { nativeScrollViewport } = panel();
|
|
72
|
+
const defaultProps = {
|
|
73
|
+
"data-slot": "panel-scroll-viewport",
|
|
74
|
+
className: nativeScrollViewport({ className })
|
|
52
75
|
};
|
|
53
76
|
return useRender({
|
|
54
77
|
defaultTagName: "div",
|
|
@@ -93,4 +116,4 @@ function PanelFooter({ className, render, ...props }) {
|
|
|
93
116
|
});
|
|
94
117
|
}
|
|
95
118
|
//#endregion
|
|
96
|
-
export { Panel, PanelBody, PanelFooter, PanelHeaderRoot, PanelScrollContent, PanelScrollViewport, PanelSection };
|
|
119
|
+
export { Panel, PanelBody, PanelFooter, PanelHeaderRoot, PanelNativeScrollViewport, PanelScrollContent, PanelScrollViewport, PanelSection };
|
|
@@ -5,7 +5,8 @@ const panel = tv({
|
|
|
5
5
|
root: ["[--panel-footer-clearance:10rem]", "bg-layer-canvas text-foreground"],
|
|
6
6
|
header: ["[@media(max-height:600px)]:h-(--header-height-short)"],
|
|
7
7
|
body: ["relative min-h-0 flex-1 overflow-hidden"],
|
|
8
|
-
scrollViewport: ["h-full min-h-0
|
|
8
|
+
scrollViewport: ["h-full min-h-0", "[overflow-anchor:auto]"],
|
|
9
|
+
nativeScrollViewport: ["h-full min-h-0 overflow-y-auto overscroll-contain", "[overflow-anchor:auto] [-webkit-overflow-scrolling:touch]"],
|
|
9
10
|
scrollContent: ["min-h-full"],
|
|
10
11
|
section: ["border-t px-(--surface-inset) py-4", "border-line-hairline"],
|
|
11
12
|
footer: [
|
|
@@ -9,9 +9,11 @@ export declare function SearchShellRoot({ className, edge, render, ...props }: S
|
|
|
9
9
|
export type SearchShellFiltersProps = ComponentPropsWithRef<"div">;
|
|
10
10
|
export declare function SearchShellFilters({ className, ...props }: SearchShellFiltersProps): import("react").JSX.Element;
|
|
11
11
|
export type SearchShellViewportProps = ComponentPropsWithRef<"div">;
|
|
12
|
-
/** The results' scroller
|
|
13
|
-
*
|
|
14
|
-
|
|
12
|
+
/** The results' scroller, a ScrollArea: its overlay scrollbar takes no room,
|
|
13
|
+
* so the result cells' fills sit 8px from both edges with or without it
|
|
14
|
+
* (design/patterns/lists.md). `ref`, `className` and the native props are the
|
|
15
|
+
* scrolling element's. */
|
|
16
|
+
export declare function SearchShellViewport({ className, ...props }: SearchShellViewportProps): import("react").JSX.Element;
|
|
15
17
|
export type SearchResultsSummaryProps = useRender.ComponentProps<"span">;
|
|
16
18
|
export declare function SearchResultsSummary({ className, render, ...props }: SearchResultsSummaryProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
17
19
|
export type SearchResultsSectionProps = useRender.ComponentProps<"div">;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ScrollArea } from "../scroll-area/scroll-area.mjs";
|
|
2
2
|
import { Panel } from "../panel/panel.mjs";
|
|
3
|
-
import { useScrollbarSize } from "../../lib/use-scrollbar-size.mjs";
|
|
4
3
|
import { search } from "./search.recipe.mjs";
|
|
5
4
|
import { jsx } from "react/jsx-runtime";
|
|
6
5
|
import { mergeProps } from "@base-ui/react/merge-props";
|
|
@@ -23,17 +22,17 @@ function SearchShellFilters({ className, ...props }) {
|
|
|
23
22
|
...props
|
|
24
23
|
});
|
|
25
24
|
}
|
|
26
|
-
/** The results' scroller
|
|
27
|
-
*
|
|
28
|
-
|
|
25
|
+
/** The results' scroller, a ScrollArea: its overlay scrollbar takes no room,
|
|
26
|
+
* so the result cells' fills sit 8px from both edges with or without it
|
|
27
|
+
* (design/patterns/lists.md). `ref`, `className` and the native props are the
|
|
28
|
+
* scrolling element's. */
|
|
29
|
+
function SearchShellViewport({ className, ...props }) {
|
|
29
30
|
const { viewport } = search();
|
|
30
|
-
|
|
31
|
-
const [setRef] = useMergedRef(ref, scrollbarRef);
|
|
32
|
-
return /* @__PURE__ */ jsx("div", {
|
|
31
|
+
return /* @__PURE__ */ jsx(ScrollArea, {
|
|
33
32
|
"data-slot": "search-shell-viewport",
|
|
34
|
-
|
|
33
|
+
overscroll: "contain",
|
|
35
34
|
...props,
|
|
36
|
-
|
|
35
|
+
className: viewport({ className })
|
|
37
36
|
});
|
|
38
37
|
}
|
|
39
38
|
function SearchResultsSummary({ className, render, ...props }) {
|
|
@@ -12,7 +12,7 @@ const search = tv({ slots: {
|
|
|
12
12
|
"border-b border-line-seam bg-layer-canvas px-(--column-margin) py-3",
|
|
13
13
|
"md:pointer-fine:py-[calc((var(--header-height)-1px-var(--control-height))/2)]"
|
|
14
14
|
],
|
|
15
|
-
viewport: ["min-h-0 flex-1
|
|
15
|
+
viewport: ["min-h-0 flex-1 p-4", "bg-layer-canvas px-0 pt-0 pb-4"],
|
|
16
16
|
summary: ["block", "mb-0 px-(--surface-inset) pt-2 font-sans text-footnote text-foreground-hint"],
|
|
17
17
|
section: ["mb-0"],
|
|
18
18
|
sectionHeading: [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { tv } from "../../lib/tv.mjs";
|
|
2
|
-
import { useTapActivation } from "../../lib/tap-activation.mjs";
|
|
3
2
|
import { useMergedRef } from "../../lib/use-merged-ref.mjs";
|
|
3
|
+
import { useTapActivation } from "../../lib/tap-activation.mjs";
|
|
4
4
|
import { Tooltip, TooltipContent, TooltipTrigger } from "../tooltip/tooltip.mjs";
|
|
5
5
|
import { createContext, use, useCallback, useLayoutEffect, useRef, useState } from "react";
|
|
6
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useMobileViewport } from "../../lib/use-mobile-viewport.mjs";
|
|
2
1
|
import { ScrollArea } from "../scroll-area/scroll-area.mjs";
|
|
2
|
+
import { useMobileViewport } from "../../lib/use-mobile-viewport.mjs";
|
|
3
3
|
import { sidebarRecipe } from "./sidebar.recipe.mjs";
|
|
4
4
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { mergeProps } from "@base-ui/react/merge-props";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { tv } from "../../lib/tv.mjs";
|
|
2
|
-
import { useTapActivation } from "../../lib/tap-activation.mjs";
|
|
3
2
|
import { useMergedRef } from "../../lib/use-merged-ref.mjs";
|
|
3
|
+
import { useTapActivation } from "../../lib/tap-activation.mjs";
|
|
4
4
|
import { createDragAnnouncements, dragInstructions } from "../drag/drag-announcements.mjs";
|
|
5
5
|
import { DragLift, useDragSiblingTransition, useLiftContainer } from "../drag/drag-lift.mjs";
|
|
6
6
|
import { useDragSensors } from "../drag/drag-sensors.mjs";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ScrollAreaProps } from "../scroll-area/types.mjs";
|
|
1
2
|
import { useRender } from "@base-ui/react/use-render";
|
|
2
3
|
//#region src/components/tasks/tasks-panel.d.ts
|
|
3
4
|
export type TasksPanelRootProps = useRender.ComponentProps<"section">;
|
|
@@ -15,8 +16,11 @@ export type TasksPanelToolbarViewProps = useRender.ComponentProps<"div">;
|
|
|
15
16
|
export declare function TasksPanelToolbarView({ className, render, ...props }: TasksPanelToolbarViewProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
16
17
|
export type TasksPanelToolbarLabelProps = useRender.ComponentProps<"span">;
|
|
17
18
|
export declare function TasksPanelToolbarLabel({ className, render, ...props }: TasksPanelToolbarLabelProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
18
|
-
export type TasksPanelViewportProps =
|
|
19
|
-
|
|
19
|
+
export type TasksPanelViewportProps = ScrollAreaProps;
|
|
20
|
+
/** The tasks' scroller, a ScrollArea in both directions (a board is wider
|
|
21
|
+
* than the panel): `ref`, `className`, `render` and the native props are the
|
|
22
|
+
* scrolling element's. */
|
|
23
|
+
export declare function TasksPanelViewport({ className, ...props }: TasksPanelViewportProps): import("react").JSX.Element;
|
|
20
24
|
export type TasksPanelEmptyProps = useRender.ComponentProps<"div">;
|
|
21
25
|
export declare function TasksPanelEmpty({ className, render, ...props }: TasksPanelEmptyProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
22
26
|
//#endregion
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { ScrollArea } from "../scroll-area/scroll-area.mjs";
|
|
1
2
|
import { tasksPanel } from "./tasks-panel.recipe.mjs";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
4
|
import { mergeProps } from "@base-ui/react/merge-props";
|
|
3
5
|
import { useRender } from "@base-ui/react/use-render";
|
|
4
6
|
//#region src/components/tasks/tasks-panel.tsx
|
|
@@ -86,16 +88,17 @@ function TasksPanelToolbarLabel({ className, render, ...props }) {
|
|
|
86
88
|
props: mergeProps(defaultProps, props)
|
|
87
89
|
});
|
|
88
90
|
}
|
|
89
|
-
|
|
91
|
+
/** The tasks' scroller, a ScrollArea in both directions (a board is wider
|
|
92
|
+
* than the panel): `ref`, `className`, `render` and the native props are the
|
|
93
|
+
* scrolling element's. */
|
|
94
|
+
function TasksPanelViewport({ className, ...props }) {
|
|
90
95
|
const { viewport } = tasksPanel();
|
|
91
|
-
|
|
96
|
+
return /* @__PURE__ */ jsx(ScrollArea, {
|
|
92
97
|
"data-slot": "tasks-panel-viewport",
|
|
98
|
+
orientation: "both",
|
|
99
|
+
overscroll: "contain",
|
|
100
|
+
...props,
|
|
93
101
|
className: viewport({ className })
|
|
94
|
-
};
|
|
95
|
-
return useRender({
|
|
96
|
-
defaultTagName: "div",
|
|
97
|
-
render,
|
|
98
|
-
props: mergeProps(defaultProps, props)
|
|
99
102
|
});
|
|
100
103
|
}
|
|
101
104
|
function TasksPanelEmpty({ className, render, ...props }) {
|
|
@@ -26,7 +26,7 @@ const tasksPanel = tv({ slots: {
|
|
|
26
26
|
"font-sans text-footnote font-semibold text-foreground-muted whitespace-nowrap"
|
|
27
27
|
],
|
|
28
28
|
viewport: [
|
|
29
|
-
"min-h-0 flex-1
|
|
29
|
+
"min-h-0 flex-1 p-4",
|
|
30
30
|
"pb-[calc(1rem+env(safe-area-inset-bottom,0px))]",
|
|
31
31
|
"bg-layer-canvas px-(--surface-inset)",
|
|
32
32
|
"@max-md/tasks:px-4"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { tv } from "../../lib/tv.mjs";
|
|
2
2
|
import { defaultNativeButton } from "../../lib/default-native-button.mjs";
|
|
3
|
-
import { useTapActivation } from "../../lib/tap-activation.mjs";
|
|
4
3
|
import { useMergedRef } from "../../lib/use-merged-ref.mjs";
|
|
4
|
+
import { useTapActivation } from "../../lib/tap-activation.mjs";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
import { Toggle } from "@base-ui/react/toggle";
|
|
7
7
|
import { ToggleGroup } from "@base-ui/react/toggle-group";
|
|
@@ -18,6 +18,9 @@
|
|
|
18
18
|
* scroll would restyle every row. Content that must follow the rows' offset uses `onTransformChange`.
|
|
19
19
|
*/
|
|
20
20
|
@layer components {
|
|
21
|
+
/* VirtualList renders its own scroller (scroll-area.md#native-scrolling): it
|
|
22
|
+
hides its scrollbar unless asked, and takes ScrollArea's through
|
|
23
|
+
useScrollAreaContainer. */
|
|
21
24
|
.r-virtual-list {
|
|
22
25
|
max-height: inherit;
|
|
23
26
|
overflow-anchor: none;
|
package/dist/index.d.mts
CHANGED
|
@@ -2,6 +2,7 @@ import { Button, ButtonProps, ButtonSize, DeprecatedButtonSize, buttonVariants }
|
|
|
2
2
|
import "./components/button/index.mjs";
|
|
3
3
|
import { AlertDialog, AlertDialogAction, AlertDialogActionProps, AlertDialogBody, AlertDialogBodyProps, AlertDialogCancel, AlertDialogCancelProps, AlertDialogClose, AlertDialogCloseProps, AlertDialogContent, AlertDialogContentProps, AlertDialogDescription, AlertDialogDescriptionProps, AlertDialogFooter, AlertDialogFooterProps, AlertDialogHeader, AlertDialogHeaderProps, AlertDialogOverlay, AlertDialogOverlayProps, AlertDialogPortal, AlertDialogPortalProps, AlertDialogProps, AlertDialogTitle, AlertDialogTitleProps, AlertDialogTrigger, AlertDialogTriggerProps } from "./components/alert-dialog/alert-dialog.mjs";
|
|
4
4
|
import "./components/alert-dialog/index.mjs";
|
|
5
|
+
import { ScrollAreaActions, ScrollAreaContainer, ScrollAreaContainerOptions, ScrollAreaContainerProps, ScrollAreaContentProps, ScrollAreaEdges, ScrollAreaFrameProps, ScrollAreaGuttersBinding, ScrollAreaGuttersPosition, ScrollAreaGuttersProps, ScrollAreaOptions, ScrollAreaOrientation, ScrollAreaOverscroll, ScrollAreaOwnProps, ScrollAreaProps, ScrollAreaRailInset, ScrollAreaScrollToElementOptions, ScrollAreaSize, ScrollAreaTextareaOwnProps, ScrollAreaTextareaProps, ScrollAreaTrigger } from "./components/scroll-area/types.mjs";
|
|
5
6
|
import { PanelAction, PanelActionProps } from "./components/panel/panel-action.mjs";
|
|
6
7
|
import { Dialog, DialogBody, DialogBodyProps, DialogClose, DialogCloseProps, DialogContent, DialogContentProps, DialogDescription, DialogDescriptionProps, DialogFooter, DialogFooterProps, DialogHeader, DialogHeaderProps, DialogNav, DialogNavProps, DialogOverlay, DialogOverlayProps, DialogPortal, DialogPortalProps, DialogProps, DialogSurface, DialogSurfaceProps, DialogTitle, DialogTitleProps, DialogTrigger, DialogTriggerProps } from "./components/dialog/dialog.mjs";
|
|
7
8
|
import "./components/dialog/index.mjs";
|
|
@@ -92,7 +93,6 @@ import { CodeBlock, CodeBlockAction, CodeBlockActionProps, CodeBlockActions, Cod
|
|
|
92
93
|
import "./components/code-block/index.mjs";
|
|
93
94
|
import { InlineCode, InlineCodeProps } from "./components/inline-code/inline-code.mjs";
|
|
94
95
|
import "./components/inline-code/index.mjs";
|
|
95
|
-
import { ScrollAreaActions, ScrollAreaContainer, ScrollAreaContainerOptions, ScrollAreaContainerProps, ScrollAreaContentProps, ScrollAreaEdges, ScrollAreaFrameProps, ScrollAreaGuttersBinding, ScrollAreaGuttersPosition, ScrollAreaGuttersProps, ScrollAreaOptions, ScrollAreaOrientation, ScrollAreaOverscroll, ScrollAreaOwnProps, ScrollAreaProps, ScrollAreaRailInset, ScrollAreaScrollToElementOptions, ScrollAreaSize, ScrollAreaTextareaOwnProps, ScrollAreaTextareaProps, ScrollAreaTrigger } from "./components/scroll-area/types.mjs";
|
|
96
96
|
import { MarkdownBlockquote, MarkdownBlockquoteProps, MarkdownCell, MarkdownCellProps, MarkdownCheckbox, MarkdownCheckboxProps, MarkdownHeaderCell, MarkdownHeaderCellProps, MarkdownHeading, MarkdownHeadingLevel, MarkdownHeadingProps, MarkdownImage, MarkdownImageProps, MarkdownInlineCode, MarkdownInlineCodeProps, MarkdownLink, MarkdownLinkProps, MarkdownList, MarkdownListItem, MarkdownListItemProps, MarkdownListProps, MarkdownMark, MarkdownMarkProps, MarkdownOrderedList, MarkdownOrderedListProps, MarkdownParagraph, MarkdownParagraphProps, MarkdownRule, MarkdownRuleProps, MarkdownTable, MarkdownTableProps, MarkdownTableRow, MarkdownTableRowProps, MarkdownTableScroll, MarkdownTableScrollProps } from "./components/markdown/markdown-parts.mjs";
|
|
97
97
|
import "./components/markdown/index.mjs";
|
|
98
98
|
import { MessageItem, MessageItemProps } from "./components/message-item/message-item-root.mjs";
|
package/dist/index.mjs
CHANGED
|
@@ -4,6 +4,9 @@ import { useTheme } from "./lib/theme/use-theme.mjs";
|
|
|
4
4
|
import { Spinner } from "./components/spinner/spinner.mjs";
|
|
5
5
|
import { Button, buttonVariants } from "./components/button/button.mjs";
|
|
6
6
|
import { AlertDialog, AlertDialogAction, AlertDialogBody, AlertDialogCancel, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger } from "./components/alert-dialog/alert-dialog.mjs";
|
|
7
|
+
import { ScrollAreaGutters } from "./components/scroll-area/scroll-area-gutters.mjs";
|
|
8
|
+
import { useScrollAreaContainer } from "./components/scroll-area/use-scroll-area-container.mjs";
|
|
9
|
+
import { ScrollArea, ScrollAreaContent } from "./components/scroll-area/scroll-area.mjs";
|
|
7
10
|
import { TextLink, TextLinkExternalIcon, textLinkVariants } from "./components/text-link/text-link.mjs";
|
|
8
11
|
import { PanelAction } from "./components/panel/panel-action.mjs";
|
|
9
12
|
import { Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogNav, DialogOverlay, DialogPortal, DialogSurface, DialogTitle, DialogTrigger } from "./components/dialog/dialog.mjs";
|
|
@@ -19,9 +22,6 @@ import { AppRailFooter, AppRailHeader, AppRailItem, AppRailItemAttention, AppRai
|
|
|
19
22
|
import { CopyableCode, CopyableCodeAction, CopyableCodeRoot } from "./components/copyable-code/copyable-code.mjs";
|
|
20
23
|
import { CheckboxIndicator } from "./components/checkbox/checkbox-indicator.mjs";
|
|
21
24
|
import { Checkbox } from "./components/checkbox/checkbox.mjs";
|
|
22
|
-
import { ScrollAreaGutters } from "./components/scroll-area/scroll-area-gutters.mjs";
|
|
23
|
-
import { useScrollAreaContainer } from "./components/scroll-area/use-scroll-area-container.mjs";
|
|
24
|
-
import { ScrollArea, ScrollAreaContent } from "./components/scroll-area/scroll-area.mjs";
|
|
25
25
|
import { ScrollAreaTextarea } from "./components/scroll-area/scroll-area-textarea.mjs";
|
|
26
26
|
import { SidebarBody, SidebarContent, SidebarGroupLabel, SidebarHeader, SidebarHeaderTitle, SidebarRoot } from "./components/sidebar/sidebar.mjs";
|
|
27
27
|
import { SidebarMenu, SidebarMenuAside, SidebarMenuCount, SidebarMenuIcon, SidebarMenuTitle } from "./components/sidebar/sidebar-menu.mjs";
|
|
@@ -125,7 +125,6 @@ import { TasksPanelEmpty, TasksPanelRoot, TasksPanelToolbar, TasksPanelToolbarFi
|
|
|
125
125
|
import { TaskLoadingList, TaskLoadingRow } from "./components/tasks/task-loading.mjs";
|
|
126
126
|
import { TaskChip } from "./components/tasks/task-chip.mjs";
|
|
127
127
|
import { TaskStatusBadge } from "./components/tasks/task-status-badge.mjs";
|
|
128
|
-
import { useScrollbarSize } from "./lib/use-scrollbar-size.mjs";
|
|
129
128
|
import { ActivityInboxLoadingMore, ActivityInboxPanel, ActivityInboxViewport } from "./components/activity-inbox/activity-inbox-shell.mjs";
|
|
130
129
|
import { ActivityInboxSidebar } from "./components/activity-inbox/activity-inbox-sidebar.mjs";
|
|
131
130
|
import { ActivityInboxControls, ActivityInboxSelectionCount, ActivityInboxSelectionToolbar } from "./components/activity-inbox/activity-inbox-toolbar.mjs";
|
|
@@ -136,6 +135,7 @@ import { SearchMessageResult, SearchMessageResultBody, SearchMessageResultHeader
|
|
|
136
135
|
import { SearchThreadResult, SearchThreadResultHeader, SearchThreadResultMessages, SearchThreadResultMeta, SearchThreadResultTimestamp, SearchThreadResultTitle } from "./components/search/search-thread.mjs";
|
|
137
136
|
import { SearchTrigger, SearchTriggerLabel, SearchTriggerShortcut } from "./components/search/search-trigger.mjs";
|
|
138
137
|
import { LOCATED_MS, useLocated } from "./lib/located.mjs";
|
|
138
|
+
import { useScrollbarSize } from "./lib/use-scrollbar-size.mjs";
|
|
139
139
|
import { installInputModality } from "./lib/input-modality.mjs";
|
|
140
140
|
import { ThemeProvider } from "./lib/theme/theme-provider.mjs";
|
|
141
141
|
export { ActivityInboxControls, ActivityInboxLoadingMore, ActivityInboxPanel, ActivityInboxSelectionCount, ActivityInboxSelectionToolbar, ActivityInboxSidebar, ActivityInboxViewport, AddCommentIcon, AlertDialog, AlertDialogAction, AlertDialogBody, AlertDialogCancel, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AppRailFooter, AppRailHeader, AppRailItem, AppRailItemAttention, AppRailItemBadge, AppRailItemIcon, AppRailItemIndicator, AppRailItemLabel, AppRailNav, AppRailRoot, AppShellMainSlot, AppShellOverlaySlot, AppShellPanelSlot, AppShellRailSlot, AppShellRoot, AppShellSidebarSlot, AppShellSidebarTrigger, ArtifactIcon, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Banner, BannerAction, BannerClose, BannerDescription, BannerTitle, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardLeading, CardTitle, CardTrailing, ChatIcon, Checkbox, CheckboxIndicator, CodeBlock, CodeBlockAction, CodeBlockActions, CodeBlockBody, CodeBlockHeader, CodeBlockPre, CodeBlockTitle, Combobox, ComboboxChip, ComboboxChipRemove, ComboboxChips, ComboboxClear, ComboboxCollection, ComboboxContent, ComboboxControl, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxHeader, ComboboxInput, ComboboxInputGroup, ComboboxItem, ComboboxItemIndicator, ComboboxLabel, ComboboxList, ComboboxPopup, ComboboxPortal, ComboboxRow, ComboboxSeparator, ComboboxTrigger, ComboboxTriggerCount, ComboboxTriggerIndicator, ComboboxValue, CommentIcon, Composer, ComposerActions, ComposerAttachment, ComposerAttachmentBody, ComposerAttachmentFailedOverlay, ComposerAttachmentFile, ComposerAttachmentImage, ComposerAttachmentMeta, ComposerAttachmentRemove, ComposerAttachmentTitle, ComposerAttachmentUploadProgressBar, ComposerAttachmentUploadingOverlay, ComposerAttachments, ComposerAttachmentsScrollArea, ComposerDropOverlay, ComposerDropOverlayLabel, ComposerDropOverlayPrompt, ComposerIconButton, ComposerInput, ComposerMeta, ComposerRoot, ComposerSubmit, ComposerSuggestionAside, ComposerSuggestionContent, ComposerSuggestionGroup, ComposerSuggestionGroupLabel, ComposerSuggestionIcon, ComposerSuggestionList, ComposerSuggestionMeta, ComposerSuggestionOption, ComposerSuggestionTitle, ComposerToolbar, ComposerToolbarLabel, ContextMenu, ContextMenuCheckboxItem, ContextMenuCheckboxItemIndicator, ContextMenuContent, ContextMenuFooter, ContextMenuItem, ContextMenuItemLabel, ContextMenuLabel, ContextMenuPopup, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRadioItemIndicator, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSubmenu, ContextMenuSubmenuTrigger, ContextMenuTrigger, ConversationPanelBody, ConversationPanelContent, ConversationPanelEmptyState, ConversationPanelEmptyStateBrand, ConversationPanelEmptyStateBrandMark, ConversationPanelFooter, ConversationPanelRoot, ConversationPanelTabs, CopyableCode, CopyableCodeAction, CopyableCodeRoot, DescriptionDetails, DescriptionItem, DescriptionList, DescriptionTerm, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogNav, DialogOverlay, DialogPortal, DialogSurface, DialogTitle, DialogTrigger, DirectMessageIcon, Drawer, DrawerActions, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuCheckboxItemIndicator, DropdownMenuContent, DropdownMenuFooter, DropdownMenuItem, DropdownMenuItemCount, DropdownMenuItemLabel, DropdownMenuLabel, DropdownMenuPopup, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuRadioItemIndicator, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSubmenu, DropdownMenuSubmenuTrigger, DropdownMenuTrigger, EmptyState, EmptyStateActions, EmptyStateContent, EmptyStateDescription, EmptyStateIcon, EmptyStateTitle, FeedbackIcon, Field, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldValidity, FileAction, FileActions, FileContent, FileImage, FileMeta, FileMetaItem, FileName, FilePreview, FilePreviewBadge, FilePreviewCode, FilePreviewDocument, FilePreviewFile, FilePreviewMedia, FileRow, FileRowOpen, FileThumbnail, FilesList, FilesPanel, FilesViewport, FollowArtifactIcon, FollowThreadIcon, FormSection, IconTile, InboxItem, InboxItemActions, InboxItemBody, InboxItemContent, InboxItemContext, InboxItemHeading, InboxItemHoverTarget, InboxItemLeading, InboxItemMarks, InboxItemMessage, InboxItemMetadata, InboxItemSelection, InboxItemSender, InboxItemSubtitle, InboxItemTimestamp, InboxItemTitle, InboxItemTrailing, InboxItemTrigger, InlineCode, Input, InputGroup, InputGroupAddon, InputGroupInput, JoinChannelIcon, JoinJointChannelIcon, JoinPrivateChannelIcon, Kbd, KbdGroup, LOCATED_MS, Label, LabelAsterisk, LabelOptional, LabelSub, LeaveChannelIcon, LeaveJointChannelIcon, LeavePrivateChannelIcon, Lightbox, LightboxActions, LightboxClose, LightboxContent, LightboxHeader, LightboxHeaderLabel, LightboxHeaderMeta, LightboxInfoActions, LightboxInfoBar, LightboxInfoDock, LightboxInfoTitle, LightboxMedia, LightboxNavigationButton, LightboxPortal, LightboxStage, LightboxThumbnail, LightboxThumbnailStrip, LightboxTitle, LightboxToolbar, LightboxTrigger, ListRow, ListRowBody, ListRowBottom, ListRowChevron, ListRowDescription, ListRowGroup, ListRowIcon, ListRowMeta, ListRowTitle, ListRowTop, ListRowValue, MarkdownBlockquote, MarkdownCell, MarkdownCheckbox, MarkdownHeaderCell, MarkdownHeading, MarkdownImage, MarkdownInlineCode, MarkdownLink, MarkdownList, MarkdownListItem, MarkdownMark, MarkdownOrderedList, MarkdownParagraph, MarkdownRule, MarkdownTable, MarkdownTableRow, MarkdownTableScroll, MessageActionCard, MessageActionCardActions, MessageActionCardActionsNote, MessageActionCardCollapseTrigger, MessageActionCardCompletion, MessageActionCardContent, MessageActionCardHeader, MessageActionCardHeaderDescription, MessageActionCardHeaderIcon, MessageActionCardHeaderStatus, MessageActionCardHeaderTitle, MessageActionCardHint, MessageActionCardHintLabel, MessageActionCardNotice, MessageActionCardProperties, MessageActionCardProperty, MessageActionCardPropertyLabel, MessageActionCardPropertyValue, MessageActionCardScope, MessageActionCardScopeDescription, MessageActionCardScopeList, MessageActionCardScopeListLabel, MessageActionCardScopeListViewport, MessageActionCardScopeName, MessageActionCardStatus, MessageAttachmentAction, MessageAttachmentCard, MessageAttachmentCommentSummary, MessageAttachmentDiffAddition, MessageAttachmentDiffDeletion, MessageAttachmentDiffSummary, MessageAttachmentGroup, MessageAttachmentMeta, MessageAttachmentMetaEnd, MessageAttachmentMetaStart, MessageAttachmentSummary, MessageAttachmentTitle, MessageEmbed, MessageEmbedContent, MessageEmbedFooter, MessageEmbedHeader, MessageForwardedBundle, MessageForwardedBundleAttachment, MessageForwardedBundleAttachmentMeta, MessageForwardedBundleAttachmentName, MessageForwardedBundleAttachments, MessageForwardedBundleFooter, MessageForwardedBundleFooterAction, MessageForwardedBundleGallery, MessageForwardedBundleGalleryTile, MessageForwardedBundleHeader, MessageForwardedBundleHeaderContent, MessageForwardedBundleHeaderCount, MessageForwardedBundleHeaderLabel, MessageForwardedBundleItem, MessageForwardedBundleItemAuthor, MessageForwardedBundleItemContent, MessageForwardedBundleItemMeta, MessageForwardedBundleItems, MessageForwardedBundleSource, MessageForwardedBundleSourceLabel, MessageIcon, MessageImageGallery, MessageImageGalleryAction, MessageImageGalleryItem, MessageImageGalleryMedia, MessageImageGalleryOverlay, MessageImageGalleryPreview, MessageImageGalleryRow, MessageItem, MessageItemAttachments, MessageItemAvatarSlot, MessageItemBadge, MessageItemBadgeSeparator, MessageItemBody, MessageItemContent, MessageItemContinuationTime, MessageItemEdited, MessageItemEmbedded, MessageItemFooter, MessageItemGutter, MessageItemHeader, MessageItemInlineStatus, MessageItemMeta, MessageItemReadReceipt, MessageItemSavedIndicator, MessageItemSearchMatch, MessageItemSender, MessageItemSenderBadges, MessageItemSenderButton, MessageItemSenderGroup, MessageItemTime, MessageItemToolbar, MessageItemToolbarButton, MessageItemTranslationAction, MessageItemTranslationFailedStatus, MessageItemTranslationOriginal, MessageItemTranslationOriginalLabel, MessageItemTranslationProgressTrack, MessageItemTranslationRetryAction, MessageItemTranslationStatus, MessageList, MessageListDateDivider, MessageListEndFade, MessageListHistoryLimited, MessageListNotice, MessageMultiSelect, MessageMultiSelectCheckbox, MessageMultiSelectToolbar, MessageMultiSelectToolbarActions, MessageQuotedPreview, MessageQuotedPreviewAttachment, MessageQuotedPreviewAttachments, MessageQuotedPreviewAuthor, MessageQuotedPreviewAuthorMeta, MessageQuotedPreviewAuthorName, MessageQuotedPreviewChannel, MessageQuotedPreviewContent, MessageQuotedPreviewHeader, MessageQuotedPreviewLoading, MessageQuotedPreviewText, MessageQuotedPreviewThread, MessageQuotedPreviewTimestamp, MessageQuotedPreviewUnavailable, MessageReactionAddButton, MessageReactionChip, MessageReactionCount, MessageReactionErrorIndicator, MessageReactionGlyph, MessageReactionPickerContent, MessageReactionPickerStatic, MessageReactionQuickButton, MessageReactionQuickRow, MessageReactionTooltipContent, MessageReactionTooltipMeta, MessageReactionTooltipName, MessageReactionTooltipNameText, MessageReactionTooltipNames, MessageReactionTooltipSeparator, MessageReferenceChip, MessageReferenceIndicator, MessageReferenceLabel, MessageReferencePending, MessageReferenceReadMark, MessageReferenceSuffix, MessageReferenceText, MessageReferenceUnavailable, MessageReplies, MessageRepliesItem, MessageRepliesItemContent, MessageRepliesItemSender, MessageRepliesItemTime, MessageRepliesSummary, MessageRepliesSummaryItem, MessageVideoPreview, MessageVideoPreviewAction, MessageVideoPreviewFailureAction, MessageVideoPreviewFailureContent, MessageVideoPreviewFailureIcon, MessageVideoPreviewFailureTitle, MessageVideoPreviewFallback, MessageVideoPreviewMedia, MobileNavItem, MobileNavLabel, MobileNavRoot, NotificationCenter, NotificationCenterActionButton, NotificationCenterCount, NotificationCenterEmptyState, NotificationCenterHeader, NotificationCenterItem, NotificationCenterItemActions, NotificationCenterItemBody, NotificationCenterItemContent, NotificationCenterItemIcon, NotificationCenterItemRow, NotificationCenterItemTitle, NotificationCenterList, NotificationCenterPopup, NotificationCenterScroller, NotificationCenterTitle, NotificationCenterTrigger, OtterIndicator, Panel, PanelAction, PanelActions, PanelActivity, PanelBody, PanelFooter, PanelHeader, PanelHeaderContent, PanelHeaderIcon, PanelHeaderRoot, PanelHeading, PanelMeta, PanelNotice, PanelNoticeActions, PanelNoticeContent, PanelScrollContent, PanelScrollViewport, PanelSection, PanelSectionHeader, PanelStatus, PanelTitle, PanelToggleAction, PickerTriggerButton, Popover, PopoverArrow, PopoverBackdrop, PopoverClose, PopoverContent, PopoverDescription, PopoverHeader, PopoverPopup, PopoverPortal, PopoverSeparator, PopoverTitle, PopoverTrigger, PopoverViewport, PreviewCard, PreviewCardArrow, PreviewCardContent, PreviewCardDescription, PreviewCardHeader, PreviewCardPopup, PreviewCardPortal, PreviewCardSeparator, PreviewCardTitle, PreviewCardTrigger, ProfilePanel, ProfilePanelBody, ProfilePanelHeader, ProfilePanelHeaderContent, ProfilePanelSection, Progress, ProgressHeader, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, RadioGroup, RadioGroupIndicator, RadioGroupItem, RaftLogo, RaftLogoLockup, RaftWordmark, ReopenTaskIcon, ResizableGroup, ResizableHandle, ResizablePanel, SINGLE_IMAGE_MAX_HEIGHT, SINGLE_IMAGE_MAX_WIDTH, ScrollArea, ScrollAreaContent, ScrollAreaGutters, ScrollAreaTextarea, SearchEntityResult, SearchEntityResultActivity, SearchEntityResultContent, SearchEntityResultDescription, SearchEntityResultHeader, SearchEntityResultIcon, SearchEntityResultLeading, SearchEntityResultTitle, SearchMessageResult, SearchMessageResultBody, SearchMessageResultHeader, SearchMessageResultMatch, SearchMessageResultMeta, SearchMessageResultSender, SearchMessageResultThreadMeta, SearchMessageResultTimestamp, SearchResultsList, SearchResultsSection, SearchResultsSectionHeading, SearchResultsSummary, SearchShellFilters, SearchShellRoot, SearchShellViewport, SearchThreadMessageResult, SearchThreadResult, SearchThreadResultHeader, SearchThreadResultMessages, SearchThreadResultMeta, SearchThreadResultTimestamp, SearchThreadResultTitle, SearchTrigger, SearchTriggerLabel, SearchTriggerShortcut, SegmentedControl, SegmentedControlCount, SegmentedControlItem, SegmentedControlLabel, Select, SelectActionItem, SelectArrow, SelectContent, SelectGroup, SelectGroupLabel, SelectIcon, SelectItem, SelectItemDescription, SelectItemIndicator, SelectItemLeading, SelectItemText, SelectLabel, SelectList, SelectPopup, SelectPortal, SelectScrollDownArrow, SelectScrollUpArrow, SelectSeparator, SelectTrigger, SelectValue, Separator, SidebarBody, SidebarContent, SidebarControl, SidebarGroupLabel, SidebarHeader, SidebarHeaderTitle, SidebarItem, SidebarItemAside, SidebarItemChannelIcon, SidebarItemContent, SidebarItemCount, SidebarItemCountSeparator, SidebarItemIcon, SidebarItemIndicator, SidebarItemMeta, SidebarItemMetaIcon, SidebarItemStatus, SidebarItemSubtitle, SidebarItemThreadCount, SidebarItemTitle, SidebarList, SidebarMenu, SidebarMenuAside, SidebarMenuCount, SidebarMenuIcon, SidebarMenuTitle, SidebarRoot, SidebarSection, SidebarSectionAttention, SidebarSectionChevron, SidebarSectionControl, SidebarSectionControls, SidebarSectionCount, SidebarSectionDisclosure, SidebarSectionEmpty, SidebarSectionEndChevron, SidebarSectionHeader, SidebarSectionTitle, SidebarSectionTrailing, Skeleton, SortableComposerAttachment, SortableComposerAttachments, SortableComposerAttachmentsScroll, SortableTabsList, SortableTabsTab, Spinner, Status, Step, Steps, Switch, SwitchThumb, SystemMessage, SystemMessageContent, SystemMessageGroup, SystemMessageGroupChevron, SystemMessageGroupDisclosure, SystemMessageGroupHeader, SystemMessageGroupPanel, SystemMessageGroupSummary, SystemMessageTime, TASK_STATUS_IDS, Table, TableBody, TableCaption, TableCell, TableColgroup, TableColumn, TableHead, TableHeader, TableRow, Tabs, TabsLabel, TabsList, TabsPanel, TabsTab, TaskBacklogIcon, TaskBoardColumn, TaskBoardColumnBadge, TaskBoardColumnChevron, TaskBoardColumnCount, TaskBoardColumnEmpty, TaskBoardColumnEmptyAllowed, TaskBoardColumnEmptyBlocked, TaskBoardColumnEmptyIdle, TaskBoardColumnHeading, TaskBoardColumnItems, TaskBoardColumnPanel, TaskBoardColumnTrigger, TaskBoardRoot, TaskCard, TaskCardBody, TaskCardChannel, TaskCardDescription, TaskCardLegacy, TaskCardMeta, TaskCardNumber, TaskCardRow, TaskCardStatus, TaskCardTitle, TaskChip, TaskClosedIcon, TaskDndProvider, TaskDoneIcon, TaskDragOverlay, TaskDraggable, TaskDropPlaceholder, TaskDropZone, TaskInProgressIcon, TaskInReviewIcon, TaskListRoot, TaskLoadingList, TaskLoadingRow, TaskSection, TaskSectionBadge, TaskSectionChevron, TaskSectionCount, TaskSectionEmpty, TaskSectionHeading, TaskSectionItems, TaskSectionPanel, TaskSectionTrigger, TaskStatusBadge, TaskStatusIcon, TaskTodoIcon, TasksPanelEmpty, TasksPanelRoot, TasksPanelToolbar, TasksPanelToolbarFilters, TasksPanelToolbarGroup, TasksPanelToolbarLabel, TasksPanelToolbarNewTask, TasksPanelToolbarView, TasksPanelViewport, Text, TextHeading, TextLink, TextLinkExternalIcon, TextMono, TextSans, TextSelectionToolbar, TextSelectionToolbarButton, TextSelectionToolbarSeparator, Textarea, TextareaCounter, TextareaGroup, ThemeProvider, ThreadIcon, ThreadPanelActions, ThreadPanelBody, ThreadPanelContent, ThreadPanelFooter, ThreadPanelHeader, ThreadPanelOriginalMessage, ThreadPanelReplyCount, ThreadPanelReplySummary, ThreadPanelRoot, ThreadPanelSearch, ThreadPanelSearchCount, ThreadPanelSearchTrailing, ThreadPanelTitle, ThreadPanelTitleMeta, Timeline, TimelineContent, TimelineItem, TimelineTime, TimelineTitle, ToastAction, ToastActions, ToastArrow, ToastBody, ToastClose, ToastContent, ToastDescription, ToastIcon, ToastPortal, ToastPositioner, ToastProgress, ToastProvider, ToastRoot, ToastTitle, ToastViewport, ToggleGroup, ToggleGroupItem, ToggleGroupLabel, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, UnfollowArtifactIcon, UnfollowThreadIcon, VirtualList, WorkspaceButton, WorkspaceButtonName, buildMessageImageGalleryRows, buttonVariants, classifyMessageImageAspect, cn, createTextSelectionAnchor, createToastManager, getTextSelectionFocusRect, installInputModality, taskStatusSoft, taskStatusStrong, textLinkVariants, toast, useComposerSuggestions, useLocated, useOrderedTabs, useScrollAreaContainer, useScrollbarSize, useTheme, useToastManager };
|
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
* deeper down that grows also grows the child that holds it. A child whose
|
|
11
11
|
* box keeps its size while its content overflows it would not be seen.
|
|
12
12
|
*
|
|
13
|
+
* For a native scroller that can't be a ScrollArea: a ScrollArea hides the
|
|
14
|
+
* native scrollbar and its own takes no room, so it needs none of this.
|
|
15
|
+
*
|
|
13
16
|
* Returns a ref callback for the scroller.
|
|
14
17
|
*/
|
|
15
18
|
export declare function useScrollbarSize<E extends HTMLElement>(): (el: E | null) => void;
|
|
@@ -11,6 +11,9 @@ import { useCallback, useRef } from "react";
|
|
|
11
11
|
* deeper down that grows also grows the child that holds it. A child whose
|
|
12
12
|
* box keeps its size while its content overflows it would not be seen.
|
|
13
13
|
*
|
|
14
|
+
* For a native scroller that can't be a ScrollArea: a ScrollArea hides the
|
|
15
|
+
* native scrollbar and its own takes no room, so it needs none of this.
|
|
16
|
+
*
|
|
14
17
|
* Returns a ref callback for the scroller.
|
|
15
18
|
*/
|
|
16
19
|
function useScrollbarSize() {
|
package/dist/styles.css
CHANGED
|
@@ -893,8 +893,9 @@ textarea:-webkit-autofill:disabled {
|
|
|
893
893
|
--list-cell: 1;
|
|
894
894
|
}
|
|
895
895
|
|
|
896
|
-
/*
|
|
897
|
-
lists.md
|
|
896
|
+
/* For a native scroller of list cells that can't be a ScrollArea
|
|
897
|
+
(design/patterns/lists.md; raft-ui's own list scrollers are ScrollAreas,
|
|
898
|
+
whose overlay scrollbar takes no room): an 8px classic scrollbar with a 4px thumb, so a cell's
|
|
898
899
|
end inset can come out of the scrollbar's own width and its fill sits 8px
|
|
899
900
|
from both edges of the list. Styling ::-webkit-scrollbar makes Chromium
|
|
900
901
|
draw this classic, always-visible 8px bar even where the platform's own
|