@imfusion/web-ui 0.9.1-dev.9.gdfff1530 → 0.10.1-dev.11.g9f5bc06e
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 +116 -21
- package/dist/code-NTcddiYk.js +139 -0
- package/dist/components/app-shell/app-shell.d.ts +1 -1
- package/dist/components/dialog/dialog.d.ts +148 -0
- package/dist/components/dialog/dialog.meta.d.ts +2 -0
- package/dist/components/dialog/index.d.ts +2 -0
- package/dist/components/drawer/drawer.d.ts +1 -1
- package/dist/components/scroll-area/index.d.ts +2 -0
- package/dist/components/scroll-area/scroll-area.d.ts +49 -0
- package/dist/components/scroll-area/scroll-area.meta.d.ts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2072 -1743
- package/dist/integrations/code-highlight.js +2 -2
- package/dist/integrations/frame-selection.js +1 -1
- package/dist/integrations/image-display-options.js +121 -111
- package/dist/{rolldown-runtime-Dy4uBu1J.js → resolve-state-props-DQf9WiGv.js} +12 -1
- package/dist/scroll-area-z9Lf9uIk.js +89 -0
- package/dist/slider-Bf274cMe.js +106 -0
- package/dist/style.css +1 -1
- package/dist/{tabs-DRyqtS04.js → tabs-Do0BFL12.js} +31 -32
- package/package.json +1 -1
- package/src/docgen/doc.gen.json +1099 -0
- package/src/llms/llms.gen.txt +12 -0
- package/src/llms/skills/imf-web-ui-conventions/templates/AUDIT_CHECKLIST.md +1 -0
- package/src/llms/skills/imf-web-ui-conventions/topics/authentication.md +2 -3
- package/src/llms/skills/imf-web-ui-conventions/topics/components.md +4 -1
- package/src/llms/skills/imf-web-ui-conventions/topics/data.md +11 -5
- package/src/llms/skills/imf-web-ui-conventions/topics/project-structure.md +11 -0
- package/src/llms/skills/imf-web-ui-conventions/topics/react.md +6 -4
- package/src/llms/skills/imf-web-ui-update/SKILL.md +20 -10
- package/dist/code-BYkr5k55.js +0 -134
- package/dist/slider-Cqpreglu.js +0 -116
package/CHANGELOG.md
CHANGED
|
@@ -2,39 +2,98 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
### Breaking
|
|
6
|
+
|
|
7
|
+
- **Breaking:** `AppShell.Main`, the AppShell aside drawer, and `Drawer.Content` scroll in a `ScrollArea` and pad their
|
|
8
|
+
content inside it ([WEBSDK-247](https://imfusion.atlassian.net/browse/WEBSDK-247)). — Nikolaus Brunner <brunner@imfusion.com>
|
|
9
|
+
- `AppShell.Main` stays the scrolling element and pads with `--imf-ui-appshell-padding`; a `padding` set on it adds to
|
|
10
|
+
that.
|
|
11
|
+
- `Drawer.Content` pads with `--imf-ui-drawer-content-padding`; a `padding`, `gap`, or grid set on it applies outside the
|
|
12
|
+
padded layer and does not reach the children.
|
|
13
|
+
- The aside drawer pads its content inside the scroll area; a `padding` on `AppShell.Aside` in drawer mode adds to it.
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- `ScrollArea` is a scrolling region with a slim primary-colored thumb that floats over the content and shows while the
|
|
18
|
+
area is hovered or scrolled, and a fade at each edge with more content behind it. `ScrollArea.Auto` wraps children with
|
|
19
|
+
the scrollbars for `orientation` (`vertical`, `horizontal`, `both`, or `none`); the parts compose by hand for anything else
|
|
20
|
+
([WEBSDK-247](https://imfusion.atlassian.net/browse/WEBSDK-247)) — Nikolaus Brunner <brunner@imfusion.com>
|
|
21
|
+
- `Dialog` is a modal window over a dimmed page, adapted from Base UI with all its parts. `Dialog.Header` takes a
|
|
22
|
+
`variant` (`main`, `support`, `minor`, or `primary` with light text); `Dialog.Title` renders as `Typo.H2` and
|
|
23
|
+
`Dialog.Description` as `Typo.P`. `Dialog.Body` scrolls in a `ScrollArea` while header and footer stay in view.
|
|
24
|
+
`Dialog.Popup` comes in `sm`, `md`, `lg`, and `full`, and stops at 40rem high (`--imf-ui-dialog-max-height`) except in
|
|
25
|
+
`full`. `Dialog.Status` adds a tinted status column like `Card.Status`, on top of the width the size sets.
|
|
26
|
+
`Dialog.Simple` builds the whole dialog from props, and `Dialog.Inline` opens it from a term inside running text
|
|
27
|
+
([WEBSDK-247](https://imfusion.atlassian.net/browse/WEBSDK-247)) — Nikolaus Brunner <brunner@imfusion.com>
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
- Agent skills — Nikolaus Brunner <brunner@imfusion.com>
|
|
32
|
+
- `imf-web-ui-conventions` has query factories own a numeric `staleTime` chosen by how fast other people change the data.
|
|
33
|
+
Loaders call `queryClient.query(options)` without an override, and `"static"` no longer appears in factories or
|
|
34
|
+
`defaultOptions`, where it blocked invalidation refetches.
|
|
35
|
+
- `imf-web-ui-conventions` puts a route's own views, forms, hooks, and tests in a `-<file-name>/` folder beside the route
|
|
36
|
+
file, and reserves `partials/` for parts that more than one route uses.
|
|
37
|
+
- Components ([WEBSDK-247](https://imfusion.atlassian.net/browse/WEBSDK-247)) — Nikolaus Brunner <brunner@imfusion.com>
|
|
38
|
+
- The AppShell navbar drawer, `Code`, and `ImageDisplayOptions` scroll in a `ScrollArea`, with its overlay thumb and edge
|
|
39
|
+
fades.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## `0.10.0` 2026.10.15
|
|
44
|
+
|
|
45
|
+
### Highlights
|
|
46
|
+
|
|
47
|
+
#### New and updated components
|
|
48
|
+
|
|
49
|
+
- `RichLink` is new. It is a link that fills a row: an optional icon on a tile tinted in the primary color, a label, an
|
|
50
|
+
optional description, and a trailing arrow that `endGlyph` replaces. It renders a plain anchor, so TanStack Router's
|
|
51
|
+
`createLink` can wrap it. `imf-web-ui-ux` picks it for a link that fills its own row, and `ChipLink` for one inside text
|
|
52
|
+
([WEBSDK-272](https://imfusion.atlassian.net/browse/WEBSDK-272)).
|
|
53
|
+
|
|
54
|
+

|
|
55
|
+

|
|
56
|
+
|
|
57
|
+
- `Skeleton.Root` takes `loading` and fades the data in over the bones when it turns false.
|
|
58
|
+
|
|
59
|
+
- The `variant="position"` `Slider` thumb is primary at rest and gray on hover. It is opaque, so a `Slider.Indicator` under
|
|
60
|
+
it stays hidden. Every Slider thumb now draws its focus ring on keyboard focus.
|
|
61
|
+
|
|
62
|
+

|
|
63
|
+

|
|
64
|
+
|
|
65
|
+
#### A type hierarchy that holds at every width
|
|
66
|
+
|
|
67
|
+
Every fluid font size grows across the same viewport range, 360px to 1920px, so a heading never ends up smaller than the one
|
|
68
|
+
below it. `--imf-ui-font-size-fluid-0` to `fluid-2` follow one ratio scale above `--imf-ui-font-size-body`: `fluid-0` runs
|
|
69
|
+
from 19.2px to 25px, `fluid-1` from 23px to 31.25px, and `fluid-2` from 27.6px to 39px.
|
|
70
|
+
|
|
71
|
+
Headings change with it, so check your pages. `Typo.H3` uses `fluid-1` and `Typo.H4` uses `fluid-0`, both at the regular
|
|
72
|
+
weight. `Typo.H2` is medium weight, `Typo.Blockquote` uses `fluid-0`, and `--imf-ui-font-lineheight-title` follows the larger
|
|
73
|
+
H2 range. The Typo page has a Hierarchy story that shows every member at 360px, 768px, 1440px, and 1920px side by side.
|
|
74
|
+
|
|
5
75
|
### Added
|
|
6
76
|
|
|
7
|
-
- `RichLink` is a link that fills a row: an optional icon on a tile tinted in the primary color, a label, an optional
|
|
8
|
-
description line, and a trailing arrow for where it leads, which `endGlyph` replaces. It renders a plain anchor, so
|
|
9
|
-
TanStack Router's `createLink` can wrap it
|
|
10
|
-
([WEBSDK-272](https://imfusion.atlassian.net/browse/WEBSDK-272)) — Nikolaus Brunner <brunner@imfusion.com>
|
|
11
77
|
- Agent skills — Nikolaus Brunner <brunner@imfusion.com>
|
|
12
78
|
- `imf-web-ui-conventions` puts a stand-in for a missing Web UI component in `components/web-ui-pending/`, built as
|
|
13
79
|
the library would ship it and deleted once it does.
|
|
14
|
-
-
|
|
15
|
-
-
|
|
80
|
+
- Storybook — Nikolaus Brunner <brunner@imfusion.com>
|
|
81
|
+
- A click on a screenshot in a docs carousel opens it full width in a dialog.
|
|
16
82
|
|
|
17
83
|
### Changed
|
|
18
84
|
|
|
19
85
|
- Agent skills — Nikolaus Brunner <brunner@imfusion.com>
|
|
20
|
-
- `
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
|
|
28
|
-
`fluid-0` runs from 19.2px to 25px, `fluid-1` from 23px to 31.25px, and `fluid-2` from 27.6px to 39px.
|
|
29
|
-
- `Typo.H3` uses `--imf-ui-font-size-fluid-1` and `Typo.H4` uses `--imf-ui-font-size-fluid-0`, both at the regular
|
|
30
|
-
weight. `Typo.H2` uses the medium weight, and `Typo.Blockquote` uses `--imf-ui-font-size-fluid-0`.
|
|
31
|
-
- `--imf-ui-font-lineheight-title` follows the larger H2 range.
|
|
32
|
-
- The Typo page has a Hierarchy story that renders every member at 360px, 768px, 1440px, and 1920px side by side.
|
|
86
|
+
- The `web-ui-dev-new-component` interview asks where the design comes from: a new Claude Design canvas, a local HTML
|
|
87
|
+
sketch when the session has no Claude Design, an existing design or placeholder, or a sibling to copy. The plan links
|
|
88
|
+
the design source, and verification checks the built stories against it.
|
|
89
|
+
- `web-ui-dev-update-component` and `web-ui-dev-design-component` ask how to preview a visual change when the session has
|
|
90
|
+
Claude Design, and recommend a canvas for a bigger change. A canvas is made in the Claude app before plan mode.
|
|
91
|
+
- Documentation — Nikolaus Brunner <brunner@imfusion.com>
|
|
92
|
+
- `docs/design-system.md` says to start new designs in the Claude app and when an agent session has Claude Design. The
|
|
93
|
+
standalone project's README marks it as legacy.
|
|
33
94
|
|
|
34
95
|
### Fixed
|
|
35
96
|
|
|
36
|
-
- Components — Nikolaus Brunner <brunner@imfusion.com>
|
|
37
|
-
- Slider thumbs draw their focus ring on keyboard focus.
|
|
38
97
|
- Storybook — Nikolaus Brunner <brunner@imfusion.com>
|
|
39
98
|
- The Slider `All` story renders the position variant without an indicator, as the `Position` story does.
|
|
40
99
|
|
|
@@ -215,6 +274,37 @@ AppShell sections draw no dividers. Delete overrides of the border properties, w
|
|
|
215
274
|
- --imf-ui-appshell-border-width: var(--imf-ui-border-size-2);
|
|
216
275
|
```
|
|
217
276
|
|
|
277
|
+
Navbar sections pad themselves with `--imf-ui-appshell-navbar-padding`, and that rule outranks a single class. Delete your
|
|
278
|
+
own section padding, and set the variable when the gutter needs to change:
|
|
279
|
+
|
|
280
|
+
```diff
|
|
281
|
+
- .navSection { padding: 0 var(--imf-ui-appshell-padding); }
|
|
282
|
+
+ .root { --imf-ui-appshell-navbar-padding: var(--imf-ui-size-5); }
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Nav links widen past the gutter only as `AppShell.NavItem`. Replace hand-built navbar links, and pass a router link through
|
|
286
|
+
`render`:
|
|
287
|
+
|
|
288
|
+
```diff
|
|
289
|
+
- <MyNavLink to="/products" icon={Box} label="Products" />
|
|
290
|
+
+ <AppShell.NavItem render={<Link to="/products" />} icon={<Icon glyph={Box} />}>Products</AppShell.NavItem>
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Above `lg` the aside docks whether or not `open` is set. Render no aside when there is nothing to show, not an empty one:
|
|
294
|
+
|
|
295
|
+
```diff
|
|
296
|
+
- <AppShell.Aside>{selected ? <Details /> : <div />}</AppShell.Aside>
|
|
297
|
+
+ {selected ? <AppShell.Aside><Details /></AppShell.Aside> : null}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
The navbar's first row and Main's offset read the header height while an `AppShell.Header` is rendered, even when CSS hides
|
|
301
|
+
it. Render the header conditionally instead of hiding it or setting the height to `0`:
|
|
302
|
+
|
|
303
|
+
```diff
|
|
304
|
+
- <AppShell.Header className={styles.hiddenOnDesktop}>…</AppShell.Header>
|
|
305
|
+
+ {isDesktop ? null : <AppShell.Header>…</AppShell.Header>}
|
|
306
|
+
```
|
|
307
|
+
|
|
218
308
|
### Breaking
|
|
219
309
|
|
|
220
310
|
- **Breaking:** The library supports Safari 17.5, Chrome 123, and Firefox 120 or newer. — Nikolaus Brunner <brunner@imfusion.com>
|
|
@@ -222,6 +312,11 @@ AppShell sections draw no dividers. Delete overrides of the border properties, w
|
|
|
222
312
|
- The JavaScript build targets the same versions.
|
|
223
313
|
- **Breaking:** AppShell sections draw no dividers, and the `--imf-ui-appshell-border-color`, `--imf-ui-appshell-border-width`, and `--imf-ui-appshell-border-style` properties are removed. ([WEBSDK-243](https://imfusion.atlassian.net/browse/WEBSDK-243)) — Nikolaus Brunner <brunner@imfusion.com>
|
|
224
314
|
- **Breaking:** `AppShell.Main` is the scroll container and the document does not scroll; window scroll listeners, scroll restoration, and `scrollTo` target `AppShell.Main`. ([WEBSDK-243](https://imfusion.atlassian.net/browse/WEBSDK-243)) — Nikolaus Brunner <brunner@imfusion.com>
|
|
315
|
+
- **Breaking:** AppShell owns its navbar and aside layout. ([WEBSDK-243](https://imfusion.atlassian.net/browse/WEBSDK-243)) — Nikolaus Brunner <brunner@imfusion.com>
|
|
316
|
+
- Navbar sections pad themselves with `--imf-ui-appshell-navbar-padding` through a rule that outranks a single class.
|
|
317
|
+
- Only `AppShell.NavItem` widens past the navbar gutter.
|
|
318
|
+
- Above `lg` the aside docks whether or not `open` is set.
|
|
319
|
+
- The navbar's first row and Main's offset read the header height whenever an `AppShell.Header` is rendered.
|
|
225
320
|
|
|
226
321
|
### Added
|
|
227
322
|
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { r as e } from "./resolve-state-props-DQf9WiGv.js";
|
|
2
|
+
import { Xo as t, ja as n, pM as r } from "./icons-BsK_o-Cb.js";
|
|
3
|
+
import { t as i } from "./meta-V_KyLeGn.js";
|
|
4
|
+
import { a, i as o, n as s, o as c, s as l } from "./scroll-area-z9Lf9uIk.js";
|
|
5
|
+
import { cx as u } from "class-variance-authority";
|
|
6
|
+
import { Fragment as d, jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
7
|
+
import { useCallback as m, useEffect as h, useRef as g, useState as _ } from "react";
|
|
8
|
+
import { mergeProps as v } from "@base-ui/react/merge-props";
|
|
9
|
+
import { useRender as y } from "@base-ui/react/use-render";
|
|
10
|
+
//#region src/hooks/use-clipboard.ts
|
|
11
|
+
function b({ timeout: e = 1500 } = {}) {
|
|
12
|
+
let [t, n] = _(!1), r = g(void 0);
|
|
13
|
+
return h(() => () => clearTimeout(r.current), []), {
|
|
14
|
+
copied: t,
|
|
15
|
+
copy: m((t) => {
|
|
16
|
+
navigator.clipboard.writeText(t).then(() => {
|
|
17
|
+
n(!0), clearTimeout(r.current), r.current = setTimeout(() => n(!1), e);
|
|
18
|
+
});
|
|
19
|
+
}, [e])
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
var x = {
|
|
23
|
+
block: "imf-ui-code-module-block",
|
|
24
|
+
copy: "imf-ui-code-module-copy",
|
|
25
|
+
inline: "imf-ui-code-module-inline",
|
|
26
|
+
inlineCopy: "imf-ui-code-module-inlineCopy",
|
|
27
|
+
inlineLink: "imf-ui-code-module-inlineLink",
|
|
28
|
+
language: "imf-ui-code-module-language",
|
|
29
|
+
pre: "imf-ui-code-module-pre",
|
|
30
|
+
separator: "imf-ui-code-module-separator"
|
|
31
|
+
}, S = /* @__PURE__ */ e({
|
|
32
|
+
Block: () => T,
|
|
33
|
+
Inline: () => C,
|
|
34
|
+
InlineLink: () => w
|
|
35
|
+
});
|
|
36
|
+
function C({ copyable: e = !1, children: i, render: a, ...o }) {
|
|
37
|
+
let { copied: s, copy: c } = b(), l = g(null), u = s ? n : t;
|
|
38
|
+
return y({
|
|
39
|
+
defaultTagName: "code",
|
|
40
|
+
render: a,
|
|
41
|
+
props: {
|
|
42
|
+
...v(o, {
|
|
43
|
+
className: x.inline,
|
|
44
|
+
children: /* @__PURE__ */ p(d, { children: [
|
|
45
|
+
/* @__PURE__ */ f("span", {
|
|
46
|
+
ref: l,
|
|
47
|
+
children: i
|
|
48
|
+
}),
|
|
49
|
+
e && /* @__PURE__ */ f("span", { className: x.separator }),
|
|
50
|
+
e && /* @__PURE__ */ f("button", {
|
|
51
|
+
type: "button",
|
|
52
|
+
className: x.inlineCopy,
|
|
53
|
+
"data-copied": s || void 0,
|
|
54
|
+
"aria-label": s ? "Copied" : "Copy",
|
|
55
|
+
onClick: () => c(l.current?.textContent ?? ""),
|
|
56
|
+
children: /* @__PURE__ */ f(r, {
|
|
57
|
+
glyph: u,
|
|
58
|
+
size: 12,
|
|
59
|
+
strokeWidth: 2,
|
|
60
|
+
"aria-hidden": !0
|
|
61
|
+
})
|
|
62
|
+
})
|
|
63
|
+
] })
|
|
64
|
+
}),
|
|
65
|
+
"data-imf-ui-component": "Code.Inline"
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
C.displayName = "Code.Inline";
|
|
70
|
+
function w({ kind: e = "external", ...t }) {
|
|
71
|
+
let n = e === "external" ? {
|
|
72
|
+
target: "_blank",
|
|
73
|
+
rel: "noreferrer"
|
|
74
|
+
} : {};
|
|
75
|
+
return y({
|
|
76
|
+
defaultTagName: "a",
|
|
77
|
+
render: t.render,
|
|
78
|
+
props: {
|
|
79
|
+
...v(n, t, {
|
|
80
|
+
className: u(x.inline, x.inlineLink, t.className),
|
|
81
|
+
children: t.children
|
|
82
|
+
}),
|
|
83
|
+
"data-imf-ui-component": "Code.InlineLink",
|
|
84
|
+
"data-kind": e
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
w.displayName = "Code.InlineLink";
|
|
89
|
+
function T({ className: e, language: i, hideCopy: d = !1, children: m, ...h }) {
|
|
90
|
+
let { copied: _, copy: v } = b(), y = g(null), S = _ ? n : t;
|
|
91
|
+
return /* @__PURE__ */ p("div", {
|
|
92
|
+
"data-imf-ui-component": "Code.Block",
|
|
93
|
+
className: u(x.block, e),
|
|
94
|
+
children: [
|
|
95
|
+
i != null && /* @__PURE__ */ f("span", {
|
|
96
|
+
className: x.language,
|
|
97
|
+
children: i
|
|
98
|
+
}),
|
|
99
|
+
!d && /* @__PURE__ */ f("button", {
|
|
100
|
+
type: "button",
|
|
101
|
+
className: x.copy,
|
|
102
|
+
"data-copied": _ || void 0,
|
|
103
|
+
"aria-label": _ ? "Copied" : "Copy",
|
|
104
|
+
onClick: () => v(y.current?.textContent ?? ""),
|
|
105
|
+
children: /* @__PURE__ */ f(r, {
|
|
106
|
+
glyph: S,
|
|
107
|
+
size: 12,
|
|
108
|
+
strokeWidth: 2,
|
|
109
|
+
"aria-hidden": !0
|
|
110
|
+
})
|
|
111
|
+
}),
|
|
112
|
+
/* @__PURE__ */ p(o, { children: [/* @__PURE__ */ f(l, { children: /* @__PURE__ */ f(s, { children: /* @__PURE__ */ f("pre", {
|
|
113
|
+
...h,
|
|
114
|
+
className: x.pre,
|
|
115
|
+
children: /* @__PURE__ */ f("code", {
|
|
116
|
+
ref: y,
|
|
117
|
+
children: m
|
|
118
|
+
})
|
|
119
|
+
}) }) }), /* @__PURE__ */ f(a, {
|
|
120
|
+
orientation: "horizontal",
|
|
121
|
+
children: /* @__PURE__ */ f(c, {})
|
|
122
|
+
})] })
|
|
123
|
+
]
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
T.displayName = "Code.Block";
|
|
127
|
+
//#endregion
|
|
128
|
+
//#region src/components/code/code.meta.ts
|
|
129
|
+
var E = {
|
|
130
|
+
name: "Code",
|
|
131
|
+
category: i.display,
|
|
132
|
+
status: "stable",
|
|
133
|
+
namespace: !0,
|
|
134
|
+
description: "Displays source code inline or in a block, with optional language labels and copying. Also called a code snippet or code block.",
|
|
135
|
+
origin: "native",
|
|
136
|
+
internalDependencies: ["ScrollArea"]
|
|
137
|
+
};
|
|
138
|
+
//#endregion
|
|
139
|
+
export { S as a, w as i, T as n, b as o, C as r, E as t };
|
|
@@ -44,7 +44,7 @@ declare function Footer(props: React.ComponentProps<"footer">): import("react/js
|
|
|
44
44
|
declare namespace Footer {
|
|
45
45
|
var displayName: string;
|
|
46
46
|
}
|
|
47
|
-
declare function Main(props: React.ComponentProps<"main">): import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
declare function Main({ children, ...props }: React.ComponentProps<"main">): import("react/jsx-runtime").JSX.Element;
|
|
48
48
|
declare namespace Main {
|
|
49
49
|
var displayName: string;
|
|
50
50
|
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { Dialog as DialogPrimitive } from '@base-ui/react/dialog';
|
|
2
|
+
import { VariantProps } from 'class-variance-authority';
|
|
3
|
+
import * as ScrollArea from '../scroll-area/scroll-area';
|
|
4
|
+
type HeaderVariant = "primary" | "main" | "support" | "minor";
|
|
5
|
+
declare const dialogTrigger: (props?: ({
|
|
6
|
+
inline?: boolean | null | undefined;
|
|
7
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
8
|
+
declare const dialogStatus: (props?: ({
|
|
9
|
+
variant?: "positive" | "negative" | "warning" | "info" | null | undefined;
|
|
10
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
11
|
+
export declare const createHandle: typeof DialogPrimitive.createHandle;
|
|
12
|
+
type RootProps<Payload = unknown> = React.ComponentProps<typeof DialogPrimitive.Root<Payload>>;
|
|
13
|
+
/**
|
|
14
|
+
* Dialog.Root — container that manages open/closed state.
|
|
15
|
+
*
|
|
16
|
+
* @see https://base-ui.com/react/components/dialog
|
|
17
|
+
* @llm https://base-ui.com/react/components/dialog.md
|
|
18
|
+
*/
|
|
19
|
+
export declare function Root<Payload = unknown>(props: RootProps<Payload>): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export declare namespace Root {
|
|
21
|
+
var displayName: string;
|
|
22
|
+
}
|
|
23
|
+
/** Dialog.Trigger — button that opens the dialog. `inline` styles it as a dashed-underlined term inside running text. */
|
|
24
|
+
export declare function Trigger({ inline, ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger> & VariantProps<typeof dialogTrigger>): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
export declare namespace Trigger {
|
|
26
|
+
var displayName: string;
|
|
27
|
+
}
|
|
28
|
+
/** Dialog.Portal — renders backdrop and popup in a portal outside the main document flow. */
|
|
29
|
+
export declare function Portal(props: React.ComponentProps<typeof DialogPrimitive.Portal>): import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
export declare namespace Portal {
|
|
31
|
+
var displayName: string;
|
|
32
|
+
}
|
|
33
|
+
/** Dialog.Backdrop — flat dark overlay that dims the page behind the dialog. */
|
|
34
|
+
export declare function Backdrop(props: React.ComponentProps<typeof DialogPrimitive.Backdrop>): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
export declare namespace Backdrop {
|
|
36
|
+
var displayName: string;
|
|
37
|
+
}
|
|
38
|
+
/** Dialog.Viewport — full-screen container that centres the popup. */
|
|
39
|
+
export declare function Viewport(props: React.ComponentProps<typeof DialogPrimitive.Viewport>): import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
export declare namespace Viewport {
|
|
41
|
+
var displayName: string;
|
|
42
|
+
}
|
|
43
|
+
interface PopupProps extends React.ComponentProps<typeof DialogPrimitive.Popup> {
|
|
44
|
+
/**
|
|
45
|
+
* Width of the window. `full` fills the screen minus a margin.
|
|
46
|
+
* @default 'md'
|
|
47
|
+
*/
|
|
48
|
+
size?: "sm" | "md" | "lg" | "full";
|
|
49
|
+
}
|
|
50
|
+
/** Dialog.Popup — the window. Holds Header, Body, and Footer, or any free content. */
|
|
51
|
+
export declare function Popup({ size, ...props }: PopupProps): import("react/jsx-runtime").JSX.Element;
|
|
52
|
+
export declare namespace Popup {
|
|
53
|
+
var displayName: string;
|
|
54
|
+
}
|
|
55
|
+
type HeaderProps = React.ComponentProps<"div"> & {
|
|
56
|
+
/**
|
|
57
|
+
* Colour of the header band. On `primary` the title, description, and close button turn light.
|
|
58
|
+
* @default 'main'
|
|
59
|
+
*/
|
|
60
|
+
variant?: HeaderVariant;
|
|
61
|
+
};
|
|
62
|
+
/** Dialog.Header — band at the top of the popup that holds the title, description, and close button. */
|
|
63
|
+
export declare function Header({ variant, ...props }: HeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
64
|
+
export declare namespace Header {
|
|
65
|
+
var displayName: string;
|
|
66
|
+
}
|
|
67
|
+
/** Dialog.Body — the scrolling region between header and footer, a ScrollArea with the library's thumb and edge fades. */
|
|
68
|
+
export declare function Body({ children, ...props }: React.ComponentProps<typeof ScrollArea.Auto>): import("react/jsx-runtime").JSX.Element;
|
|
69
|
+
export declare namespace Body {
|
|
70
|
+
var displayName: string;
|
|
71
|
+
}
|
|
72
|
+
/** Dialog.Footer — row of actions pinned to the bottom of the popup. */
|
|
73
|
+
export declare function Footer(props: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
74
|
+
export declare namespace Footer {
|
|
75
|
+
var displayName: string;
|
|
76
|
+
}
|
|
77
|
+
type StatusProps = React.ComponentProps<"div"> & VariantProps<typeof dialogStatus>;
|
|
78
|
+
/**
|
|
79
|
+
* Dialog.Status — a tinted column at the start of the popup, spanning its full height, that marks the dialog's
|
|
80
|
+
* status with the variant's glyph. Place it first inside `Dialog.Popup`. Pass children to replace the glyph.
|
|
81
|
+
* Decorative (`aria-hidden`); the title carries the status.
|
|
82
|
+
*/
|
|
83
|
+
export declare function Status({ variant, children, ...props }: StatusProps): import("react/jsx-runtime").JSX.Element;
|
|
84
|
+
export declare namespace Status {
|
|
85
|
+
var displayName: string;
|
|
86
|
+
}
|
|
87
|
+
/** Dialog.Title — heading that names the dialog for screen readers, set as `Typo.H2`. Light on a `primary` header. */
|
|
88
|
+
export declare function Title(props: React.ComponentProps<typeof DialogPrimitive.Title>): import("react/jsx-runtime").JSX.Element;
|
|
89
|
+
export declare namespace Title {
|
|
90
|
+
var displayName: string;
|
|
91
|
+
}
|
|
92
|
+
/** Dialog.Description — supplementary paragraph that describes the dialog for screen readers, set as `Typo.P`. */
|
|
93
|
+
export declare function Description(props: React.ComponentProps<typeof DialogPrimitive.Description>): import("react/jsx-runtime").JSX.Element;
|
|
94
|
+
export declare namespace Description {
|
|
95
|
+
var displayName: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Dialog.Close — button that closes the dialog. With no `children` and no `render` it renders the library's ghost close
|
|
99
|
+
* button (an × icon labelled "Close"); otherwise render your own `Button`.
|
|
100
|
+
*/
|
|
101
|
+
export declare function Close(props: React.ComponentProps<typeof DialogPrimitive.Close>): import("react/jsx-runtime").JSX.Element;
|
|
102
|
+
export declare namespace Close {
|
|
103
|
+
var displayName: string;
|
|
104
|
+
}
|
|
105
|
+
type ComposedProps = Omit<React.ComponentProps<typeof DialogPrimitive.Root>, "children"> & {
|
|
106
|
+
/** Heading of the dialog. */
|
|
107
|
+
title: React.ReactNode;
|
|
108
|
+
/** Short uppercase label above the title. */
|
|
109
|
+
eyebrow?: React.ReactNode;
|
|
110
|
+
/** Line of context under the title. */
|
|
111
|
+
description?: React.ReactNode;
|
|
112
|
+
/** Adds a `Dialog.Status` with this variant at the start of the popup. */
|
|
113
|
+
status?: NonNullable<VariantProps<typeof dialogStatus>["variant"]>;
|
|
114
|
+
/**
|
|
115
|
+
* Colour of the header band.
|
|
116
|
+
*/
|
|
117
|
+
headerVariant?: HeaderVariant;
|
|
118
|
+
/**
|
|
119
|
+
* Width of the window.
|
|
120
|
+
*/
|
|
121
|
+
size?: PopupProps["size"];
|
|
122
|
+
/** Content of the footer, usually buttons. The footer renders only when this is set. */
|
|
123
|
+
actions?: React.ReactNode;
|
|
124
|
+
/** Content of the body. */
|
|
125
|
+
children?: React.ReactNode;
|
|
126
|
+
};
|
|
127
|
+
type SimpleProps = ComposedProps & {
|
|
128
|
+
/** Element rendered as the trigger, such as a `Button`. Omit it for a controlled dialog. */
|
|
129
|
+
trigger?: React.ReactElement;
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Dialog.Simple — pre-composed dialog: trigger, header with title, description, optional status and close button, a
|
|
133
|
+
* scrolling body, and an optional footer. Root props pass through.
|
|
134
|
+
*/
|
|
135
|
+
export declare function Simple({ trigger, headerVariant, size, ...props }: SimpleProps): import("react/jsx-runtime").JSX.Element;
|
|
136
|
+
export declare namespace Simple {
|
|
137
|
+
var displayName: string;
|
|
138
|
+
}
|
|
139
|
+
type InlineProps = ComposedProps & {
|
|
140
|
+
/** Text of the trigger, set as an inline term inside running prose. */
|
|
141
|
+
trigger: React.ReactNode;
|
|
142
|
+
};
|
|
143
|
+
/** Dialog.Inline — like Dialog.Simple, but the trigger is text inside a sentence. */
|
|
144
|
+
export declare function Inline({ trigger, headerVariant, size, ...props }: InlineProps): import("react/jsx-runtime").JSX.Element;
|
|
145
|
+
export declare namespace Inline {
|
|
146
|
+
var displayName: string;
|
|
147
|
+
}
|
|
148
|
+
export {};
|
|
@@ -63,7 +63,7 @@ export declare namespace Popup {
|
|
|
63
63
|
var displayName: string;
|
|
64
64
|
}
|
|
65
65
|
/** Drawer.Content — scrollable content wrapper inside the popup. */
|
|
66
|
-
export declare function Content(props: React.ComponentProps<typeof DrawerPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
|
|
66
|
+
export declare function Content({ children, ...props }: React.ComponentProps<typeof DrawerPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
|
|
67
67
|
export declare namespace Content {
|
|
68
68
|
var displayName: string;
|
|
69
69
|
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ScrollArea as ScrollAreaPrimitive } from '@base-ui/react/scroll-area';
|
|
2
|
+
/**
|
|
3
|
+
* ScrollArea.Root — groups the viewport and its scrollbars. Give it a height or max-height.
|
|
4
|
+
*
|
|
5
|
+
* @see https://base-ui.com/react/components/scroll-area
|
|
6
|
+
* @llm https://base-ui.com/react/components/scroll-area.md
|
|
7
|
+
*/
|
|
8
|
+
export declare function Root(props: React.ComponentProps<typeof ScrollAreaPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export declare namespace Root {
|
|
10
|
+
var displayName: string;
|
|
11
|
+
}
|
|
12
|
+
/** ScrollArea.Viewport — the scrolling box. It fades its content out at each edge with more to scroll. */
|
|
13
|
+
export declare function Viewport(props: React.ComponentProps<typeof ScrollAreaPrimitive.Viewport>): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare namespace Viewport {
|
|
15
|
+
var displayName: string;
|
|
16
|
+
}
|
|
17
|
+
/** ScrollArea.Content — wraps the scrolled content so the viewport can measure it. */
|
|
18
|
+
export declare function Content(props: React.ComponentProps<typeof ScrollAreaPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare namespace Content {
|
|
20
|
+
var displayName: string;
|
|
21
|
+
}
|
|
22
|
+
/** ScrollArea.Scrollbar — overlay bar that shows while the area is hovered or scrolling. */
|
|
23
|
+
export declare function Scrollbar(props: React.ComponentProps<typeof ScrollAreaPrimitive.Scrollbar>): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export declare namespace Scrollbar {
|
|
25
|
+
var displayName: string;
|
|
26
|
+
}
|
|
27
|
+
/** ScrollArea.Thumb — the draggable part of the scrollbar. */
|
|
28
|
+
export declare function Thumb(props: React.ComponentProps<typeof ScrollAreaPrimitive.Thumb>): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
export declare namespace Thumb {
|
|
30
|
+
var displayName: string;
|
|
31
|
+
}
|
|
32
|
+
/** ScrollArea.Corner — the square where a vertical and a horizontal scrollbar meet. */
|
|
33
|
+
export declare function Corner(props: React.ComponentProps<typeof ScrollAreaPrimitive.Corner>): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
export declare namespace Corner {
|
|
35
|
+
var displayName: string;
|
|
36
|
+
}
|
|
37
|
+
interface AutoProps extends React.ComponentProps<typeof ScrollAreaPrimitive.Root> {
|
|
38
|
+
/**
|
|
39
|
+
* Which scrollbars to render. `both` also adds the Corner; `none` scrolls and fades without a visible bar.
|
|
40
|
+
* @default 'vertical'
|
|
41
|
+
*/
|
|
42
|
+
orientation?: "vertical" | "horizontal" | "both" | "none";
|
|
43
|
+
}
|
|
44
|
+
/** ScrollArea.Auto — Root, Viewport, Content, and the scrollbars for `orientation`, around `children`. */
|
|
45
|
+
export declare function Auto({ orientation, children, ...props }: AutoProps): import("react/jsx-runtime").JSX.Element;
|
|
46
|
+
export declare namespace Auto {
|
|
47
|
+
var displayName: string;
|
|
48
|
+
}
|
|
49
|
+
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -15,10 +15,12 @@ export { Toggle, toggleMeta } from './components/toggle';
|
|
|
15
15
|
export { ToggleGroup, toggleGroupMeta } from './components/toggle-group';
|
|
16
16
|
export { AppShell, appShellMeta } from './components/app-shell';
|
|
17
17
|
export { Card, cardMeta } from './components/card';
|
|
18
|
+
export { Dialog, dialogMeta } from './components/dialog';
|
|
18
19
|
export { Drawer, drawerMeta } from './components/drawer';
|
|
19
20
|
export { Popover, popoverMeta } from './components/popover';
|
|
20
21
|
export { Prose, proseMeta } from './components/prose';
|
|
21
22
|
export { Row, rowMeta } from './components/row';
|
|
23
|
+
export { ScrollArea, scrollAreaMeta } from './components/scroll-area';
|
|
22
24
|
export { Separator, separatorMeta } from './components/separator';
|
|
23
25
|
export { Stack, stackMeta } from './components/stack';
|
|
24
26
|
export { AccountCard, accountCardMeta } from './components/account-card';
|