@setsquare/ui 0.2.4 → 0.4.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.
Files changed (43) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/NOTICE +1 -1
  3. package/README.md +13 -6
  4. package/dist/index.d.ts +6 -4
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +2 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/lib/page-items.d.ts +10 -0
  9. package/dist/lib/page-items.d.ts.map +1 -0
  10. package/dist/lib/page-items.js +26 -0
  11. package/dist/lib/page-items.js.map +1 -0
  12. package/dist/lint/index.d.ts.map +1 -1
  13. package/dist/lint/index.js +4 -0
  14. package/dist/lint/index.js.map +1 -1
  15. package/dist/shell/sidebar.d.ts +23 -0
  16. package/dist/shell/sidebar.d.ts.map +1 -1
  17. package/dist/shell/sidebar.js +22 -3
  18. package/dist/shell/sidebar.js.map +1 -1
  19. package/dist/styles/theme.css +548 -0
  20. package/dist/styles/tokens.css +8 -0
  21. package/dist/testing/index.d.ts +3 -2
  22. package/dist/testing/index.d.ts.map +1 -1
  23. package/dist/testing/index.js +30 -2
  24. package/dist/testing/index.js.map +1 -1
  25. package/dist/tokens.json +20 -0
  26. package/dist/ui/feature-card.d.ts.map +1 -1
  27. package/dist/ui/feature-card.js.map +1 -1
  28. package/dist/ui/pagination.d.ts +69 -14
  29. package/dist/ui/pagination.d.ts.map +1 -1
  30. package/dist/ui/pagination.js +177 -32
  31. package/dist/ui/pagination.js.map +1 -1
  32. package/dist/ui/tabs.d.ts +82 -15
  33. package/dist/ui/tabs.d.ts.map +1 -1
  34. package/dist/ui/tabs.js +274 -16
  35. package/dist/ui/tabs.js.map +1 -1
  36. package/dist/ui/time-of-day-icon.d.ts.map +1 -1
  37. package/dist/ui/time-of-day-icon.js.map +1 -1
  38. package/dist/ui/tree.d.ts +53 -0
  39. package/dist/ui/tree.d.ts.map +1 -0
  40. package/dist/ui/tree.js +36 -0
  41. package/dist/ui/tree.js.map +1 -0
  42. package/package.json +21 -25
  43. package/templates/next/page-transition.tsx +1 -1
@@ -1,48 +1,193 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Link } from 'react-aria-components';
4
- import { ChevronLeft, ChevronRight } from 'lucide-react';
3
+ import { useEffect, useId, useLayoutEffect, useRef, useState, } from 'react';
4
+ import { Link, useLocale } from 'react-aria-components';
5
+ import { ChevronLeft, ChevronRight, CircleAlert } from 'lucide-react';
5
6
  import { cn } from '../lib/cn.js';
6
7
  import { fill, withLabels } from '../lib/labels.js';
8
+ import { pageItems } from '../lib/page-items.js';
9
+ import { Button } from './button.js';
10
+ import { Option } from './list-box.js';
11
+ import { Select } from './select.js';
7
12
  const paginationLabels = {
8
13
  pagination: 'Pagination',
9
- previous: 'Previous',
10
- next: 'Next',
11
- page: 'Page {page}',
14
+ noun: 'results',
15
+ range: '{from}–{to} of {total}',
16
+ rangeTo: ' to ',
17
+ empty: 'No {noun}',
18
+ rowsPerPage: 'Rows per page',
19
+ page: 'Page {page} of {noun}',
20
+ previous: 'Previous page of {noun}',
21
+ next: 'Next page of {noun}',
22
+ field: 'Page',
23
+ of: 'of {last}',
24
+ go: 'Go',
25
+ outOfRange: 'Enter a page from 1 to {last}',
26
+ loading: 'Loading page {page}…',
27
+ errorPrefix: 'Error: ',
12
28
  };
13
- /** First, last, and the pages either side of the current one, with a gap where pages are left out. */
14
- function pageWindow(current, last) {
15
- const pages = [...new Set([1, last, current - 1, current, current + 1])]
16
- .filter((n) => n >= 1 && n <= last)
17
- .toSorted((a, b) => a - b);
18
- const out = [];
19
- let previous = 0;
20
- for (const n of pages) {
21
- if (n - previous > 1)
22
- out.push({ key: `gap-${previous}-${n}`, gap: true });
23
- out.push({ key: `page-${n}`, page: n });
24
- previous = n;
25
- }
26
- return out;
27
- }
29
+ /** An arrow's place, the same with the arrow or without, so the row keeps its length at the ends. */
30
+ const arrowSlot = 'flex w-[max(var(--target-min),var(--control-height))] min-h-target';
28
31
  /**
29
- * Links to the pages of a long list: Previous, the first and last pages, the ones either side of the current one,
30
- * and Next. Every page is a link, so it works with JavaScript off and goes through your router's
31
- * `RouterProvider` when it is on. The current page is marked `aria-current="page"` and painted as the primary
32
- * button: fill and weight, not colour alone. Previous and Next are left out at the ends rather than disabled.
33
- * Nothing renders for a single page.
32
+ * The footer of a long list: Rows per page, the range ("21–30 of 212 projects") and the pages. Up to 20 pages
33
+ * it shows numbers, seven slots at most, so the row never changes length; above that, a "Page [n] of N" field.
34
+ * Every page is a link, so it works with JavaScript off, and goes through your router's `RouterProvider` when it
35
+ * is on; the field is a GET form that keeps the rest of the query. The current page is `aria-current="page"`,
36
+ * painted as the primary button: fill and weight, not colour alone. Previous and Next are left out at the ends,
37
+ * with their place kept.
34
38
  */
35
- export function Pagination({ page, pageCount, href, labels: given, className }) {
36
- if (pageCount <= 1)
37
- return null;
39
+ export function Pagination(props) {
40
+ const { href, pageParam = 'page', fieldAbove = 20, labels: given, className } = props;
41
+ const meta = props.meta;
42
+ const current = meta ? meta.current_page : props.page;
43
+ const last = Math.max(1, meta ? meta.last_page : props.pageCount);
38
44
  const labels = withLabels(paginationLabels, given);
45
+ const noun = labels.noun;
46
+ const { locale } = useLocale();
47
+ const format = (n) => new Intl.NumberFormat(locale).format(n);
39
48
  const to = (n) => (typeof href === 'function' ? href(n) : fill(href, { page: n }));
40
- // A page link shows its number; the words around it ("Page …") are for its name, which keeps the number (2.5.3).
49
+ // Which way the last change went, for the range's figures and the current page.
50
+ const [seen, setSeen] = useState({
51
+ page: current,
52
+ per: meta?.per_page,
53
+ moved: false,
54
+ forward: true,
55
+ });
56
+ if (seen.page !== current || seen.per !== meta?.per_page) {
57
+ setSeen({
58
+ page: current,
59
+ per: meta?.per_page,
60
+ moved: true,
61
+ forward: seen.page !== current ? current > seen.page : (meta?.per_page ?? 0) > (seen.per ?? 0),
62
+ });
63
+ }
64
+ // Pending: the control you used, from the moment it's pressed until the page changes.
65
+ const [pending, setPending] = useState(null);
66
+ const [sayingFor, setSayingFor] = useState(null);
67
+ const saying = !!pending && sayingFor === pending;
68
+ if (pending && pending.from !== current)
69
+ setPending(null);
70
+ useEffect(() => {
71
+ if (!pending)
72
+ return;
73
+ // The message waits as long as the mark does (--duration-loading-delay), so a fast page says nothing.
74
+ const delay = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--duration-loading-delay')) || 400;
75
+ const timer = setTimeout(() => setSayingFor(pending), delay);
76
+ return () => clearTimeout(timer);
77
+ }, [pending]);
78
+ // Focus after paging: Previous and Next keep it unless they've gone at an end; a page number moves it to the
79
+ // new current page; the field keeps it.
80
+ const intent = useRef(null);
81
+ const currentRef = useRef(null);
82
+ const fieldRef = useRef(null);
83
+ useLayoutEffect(() => {
84
+ const kind = intent.current;
85
+ intent.current = null;
86
+ if (!kind)
87
+ return;
88
+ const gone = (kind === 'prev' && current === 1) || (kind === 'next' && current === last);
89
+ if (kind === 'field')
90
+ fieldRef.current?.focus();
91
+ else if (kind === 'num' || gone)
92
+ (currentRef.current ?? fieldRef.current)?.focus();
93
+ }, [current, last]);
94
+ const press = (kind, page) => (e) => {
95
+ // A new tab or window leaves this page as it is.
96
+ if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey)
97
+ return;
98
+ intent.current = kind;
99
+ setPending({ kind, page, from: current });
100
+ };
101
+ const fieldId = useId();
102
+ const [error, setError] = useState('');
103
+ const [errorPage, setErrorPage] = useState(current);
104
+ if (errorPage !== current) {
105
+ setErrorPage(current);
106
+ setError('');
107
+ }
108
+ const showSelect = !!meta && !!props.onPerPageChange;
109
+ const options = (meta && props.perPageOptions) || [10, 25, 50];
110
+ if (!meta && last <= 1)
111
+ return null;
112
+ const range = meta && (_jsx(Range, { meta: meta, labels: labels, format: format, moved: seen.moved, forward: seen.forward }));
113
+ return (_jsxs("div", { className: cn('@container/pagination relative w-full', className), children: [_jsxs("div", { className: "flex flex-wrap items-end justify-between gap-x-6 gap-y-3 @max-[560px]/pagination:flex-col @max-[560px]/pagination:items-stretch", children: [showSelect && (meta.total > Math.min(...options) || meta.last_page > 1) && (_jsx(Select, { label: labels.rowsPerPage, width: "xs", selectedKey: String(meta.per_page), onSelectionChange: (key) => {
114
+ const per = Number(key);
115
+ if (!per || per === meta.per_page)
116
+ return;
117
+ props.onPerPageChange?.(per, meta.from ? Math.floor((meta.from - 1) / per) + 1 : 1);
118
+ }, children: options.map((n) => (_jsx(Option, { id: String(n), children: format(n) }, n))) })), range && _jsx("div", { className: "flex min-h-control-target items-center", children: range }), last > 1 && (_jsxs("nav", { "aria-label": labels.pagination, "aria-busy": pending ? true : undefined, "data-moved": seen.moved ? '' : undefined, className: "relative min-w-0 @max-[560px]/pagination:self-start", style: { '--pagination-slot': `calc(${String(last).length}ch + 16px)` }, children: [_jsx("span", { role: "status", className: "sr-only", children: pending && saying ? fill(labels.loading, { page: format(pending.page) }) : '' }), _jsxs("div", { className: "flex items-center gap-1", children: [current > 1 ? (_jsx(Arrow, { href: to(current - 1), rel: "prev", label: fill(labels.previous, { noun }), pending: pending?.kind === 'prev', onPress: press('prev', current - 1) })) : (_jsx("span", { "aria-hidden": "true", className: arrowSlot })), last <= fieldAbove ? (_jsx(Numbers, { current: current, last: last, to: to, labels: labels, format: format, pending: pending, press: press, currentRef: currentRef })) : (_jsx(PageField, { id: fieldId, error: error, setError: setError, current: current, last: last, to: to, pageParam: pageParam, labels: labels, format: format, fieldRef: fieldRef, pending: pending?.kind === 'field', onGo: (n) => {
119
+ intent.current = 'field';
120
+ setPending({ kind: 'field', page: n, from: current });
121
+ } })), current < last ? (_jsx(Arrow, { href: to(current + 1), rel: "next", label: fill(labels.next, { noun }), pending: pending?.kind === 'next', onPress: press('next', current + 1) })) : (_jsx("span", { "aria-hidden": "true", className: arrowSlot }))] })] }))] }), last > fieldAbove && (_jsx("div", { role: "alert", id: `${fieldId}-error`, children: error && (_jsxs("p", { className: "mt-2 flex items-center gap-1.5 text-[13px] leading-5 font-semibold text-destructive", children: [_jsx(CircleAlert, { "aria-hidden": "true", className: "size-4 shrink-0" }), _jsxs("span", { children: [_jsx("span", { className: "sr-only", children: labels.errorPrefix }), error] })] })) }))] }));
122
+ }
123
+ /** "21–30 of 212 projects": the figures bold, the noun muted, and the dash read as "to". */
124
+ function Range({ meta, labels, format, moved, forward, }) {
125
+ if (!meta.total || meta.from == null || meta.to == null)
126
+ return (_jsx("p", { role: "status", className: "text-sm text-muted-foreground", children: fill(labels.empty, { noun: labels.noun }) }));
127
+ const match = /^(.*?)\{from\}(.*?)\{to\}(.*)$/.exec(labels.range);
128
+ const [, before = '', between = '', after = ''] = match ?? ['', '', '', labels.range];
129
+ const values = { total: format(meta.total), from: format(meta.from), to: format(meta.to) };
130
+ return (_jsxs("p", { role: "status", className: "text-sm text-muted-foreground tabular-nums", children: [_jsxs("span", { "data-direction": moved ? (forward ? 'forward' : 'back') : undefined, className: "pagination-roll font-semibold text-foreground", children: [fill(before, values), values.from, _jsx("span", { "aria-hidden": "true", children: between }), _jsx("span", { className: "sr-only", children: labels.rangeTo }), values.to, fill(after, values)] }, `${meta.from}-${meta.to}-${meta.total}`), ' ', labels.noun] }));
131
+ }
132
+ function Numbers({ current, last, to, labels, format, pending, press, currentRef, }) {
133
+ // A page link shows its number; the words around it are for its name, which keeps the number (2.5.3).
41
134
  const [before, after = ''] = labels.page.split('{page}');
42
- return (_jsx("nav", { "aria-label": labels.pagination, className: cn('min-w-0', className), children: _jsxs("ul", { role: "list", className: "flex flex-wrap items-center gap-1", children: [page > 1 && (_jsx("li", { children: _jsxs(PageLink, { href: to(page - 1), rel: "prev", children: [_jsx(ChevronLeft, { "aria-hidden": "true", className: "size-4" }), labels.previous] }) })), pageWindow(page, pageCount).map((entry) => 'gap' in entry ? (_jsx("li", { "aria-hidden": "true", className: "px-1 text-sm text-muted-foreground", children: "\u2026" }, entry.key)) : (_jsx("li", { children: _jsxs(PageLink, { href: to(entry.page), isCurrent: entry.page === page, children: [before && _jsx("span", { className: "sr-only", children: before }), entry.page, after && _jsx("span", { className: "sr-only", children: after })] }) }, entry.key))), page < pageCount && (_jsx("li", { children: _jsxs(PageLink, { href: to(page + 1), rel: "next", children: [labels.next, _jsx(ChevronRight, { "aria-hidden": "true", className: "size-4" })] }) }))] }) }));
135
+ return (_jsx("ul", { role: "list", className: "flex min-w-0 flex-wrap gap-1", children: pageItems(current, last).map((item) => (_jsx("li", { className: "flex w-[max(var(--target-min),var(--control-height),var(--pagination-slot))] justify-center", children: typeof item === 'number' ? (_jsxs(PageLink, { href: to(item), isCurrent: item === current, pending: pending?.kind === 'num' && pending.page === item, onPress: press('num', item), ref: item === current ? currentRef : undefined, children: [before && _jsx("span", { className: "sr-only", children: fill(before, { noun: labels.noun }) }), format(item), after && _jsx("span", { className: "sr-only", children: fill(after, { noun: labels.noun }) })] })) : (_jsx("span", { "aria-hidden": "true", className: "inline-flex h-control w-full items-center justify-center text-sm tracking-[1px] text-muted-foreground", children: "\u2026" })) }, typeof item === 'number' ? `page-${item}` : item))) }));
136
+ }
137
+ /** "Page [n] of N", a GET form that keeps the rest of the query. With JavaScript it goes through the router. */
138
+ function PageField({ id, error, setError, current, last, to, pageParam, labels, format, fieldRef, pending, onGo, }) {
139
+ const [value, setValue] = useState(String(current));
140
+ // A new page shows its own number; the field itself stays, so focus stays in it.
141
+ const [shown, setShown] = useState(current);
142
+ if (shown !== current) {
143
+ setShown(current);
144
+ setValue(String(current));
145
+ }
146
+ const [target, setTarget] = useState(null);
147
+ const link = useRef(null);
148
+ // Where the form goes without JavaScript: the page's own path, with the rest of its query as hidden fields.
149
+ const url = new URL(to(1), 'http://pagination.invalid');
150
+ const action = /^[a-z][a-z\d+.-]*:/i.test(to(1)) ? url.origin + url.pathname : url.pathname;
151
+ const hidden = [...url.searchParams].filter(([name]) => name !== pageParam);
152
+ const changed = value.trim() !== '' && value.trim() !== String(current);
153
+ const digits = Math.max(2, String(last).length);
154
+ // Navigate through the same link machinery as the page links, so a RouterProvider handles it.
155
+ useEffect(() => {
156
+ if (target != null)
157
+ link.current?.click();
158
+ }, [target]);
159
+ const submit = (e) => {
160
+ e.preventDefault();
161
+ const raw = value.trim();
162
+ const n = /^\d+$/.test(raw) ? Number(raw) : NaN;
163
+ if (!(n >= 1 && n <= last)) {
164
+ setError(fill(labels.outOfRange, { last: format(last) }));
165
+ return;
166
+ }
167
+ if (n === current)
168
+ return;
169
+ onGo(n);
170
+ setTarget(n);
171
+ };
172
+ return (_jsxs("form", { action: action, method: "get", noValidate: true, onSubmit: submit, className: "mx-1 inline-flex min-w-0 flex-wrap items-center gap-2", children: [hidden.map(([name, v]) => (_jsx("input", { type: "hidden", name: name, value: v }, name))), _jsx("label", { htmlFor: id, className: "text-sm font-semibold text-foreground", children: labels.field }), _jsx("div", { "data-invalid": error ? '' : undefined, className: cn('field-paint flex has-[input:focus]:before:focus-ring data-invalid:before:border-destructive data-invalid:before:shadow-[inset_0_0_0_1px_var(--destructive)]', pending && 'pagination-field-pending'), children: _jsx("input", { ref: fieldRef, id: id, name: pageParam, inputMode: "numeric", autoComplete: "off", value: value, "aria-invalid": error ? true : undefined, "aria-describedby": `${id}-of ${id}-error`, onChange: (e) => {
173
+ setValue(e.target.value);
174
+ setError('');
175
+ }, onKeyDown: (e) => {
176
+ if (e.key !== 'Escape' || value === String(current))
177
+ return;
178
+ e.preventDefault();
179
+ setValue(String(current));
180
+ setError('');
181
+ }, style: { width: `calc(${digits + 1}ch + 2 * var(--control-pad-x) + 2px)` }, className: "field-input cursor-text px-(--control-pad-x) text-center text-sm font-bold text-foreground tabular-nums" }) }), _jsx("span", { id: `${id}-of`, className: "text-sm whitespace-nowrap text-muted-foreground tabular-nums", children: fill(labels.of, { last: format(last) }) }), changed && (_jsx("span", { className: "pagination-go inline-flex", children: _jsx(Button, { type: "submit", isPending: pending, children: labels.go }) })), target != null && (_jsx("span", { hidden: true, children: _jsx(Link, { ref: link, href: to(target), children: format(target) }) }))] }));
43
182
  }
44
183
  /** Three layers: the link is the target, at least --target-min both ways; the painted box carries hover, focus and current. */
45
- function PageLink({ href, rel, isCurrent, children, }) {
46
- return (_jsx(Link, { href: href, rel: rel, "aria-current": isCurrent ? 'page' : undefined, className: "group/page relative inline-flex min-h-target min-w-target cursor-pointer items-center justify-center no-underline outline-none", children: _jsx("span", { className: cn('inline-flex h-control min-w-control items-center justify-center gap-1 rounded-md px-2 text-sm font-medium text-foreground tabular-nums', 'group-data-hovered/page:bg-accent group-data-focus-visible/page:focus-ring', 'group-aria-[current=page]/page:bg-primary group-aria-[current=page]/page:font-bold group-aria-[current=page]/page:text-primary-foreground'), children: children }) }));
184
+ function PageLink({ href, rel, isCurrent, pending, onPress, ref, label, className, children, }) {
185
+ return (_jsx(Link, { ref: ref, href: href, rel: rel, "aria-current": isCurrent ? 'page' : undefined, "aria-label": label, "data-pending": pending ? '' : undefined, onPress: onPress, className: cn('group/page relative inline-flex min-h-target w-full min-w-target cursor-pointer items-center justify-center no-underline outline-none data-pending:cursor-wait', className), children: _jsx("span", { className: "pagination-paint group-data-focus-visible/page:focus-ring", children: children }) }));
186
+ }
187
+ function Arrow({ href, rel, label, pending, onPress, }) {
188
+ const Icon = rel === 'prev' ? ChevronLeft : ChevronRight;
189
+ return (_jsxs(PageLink, { href: href, rel: rel, pending: pending, onPress: onPress, className: arrowSlot, children: [_jsx(Icon, { "aria-hidden": "true", className: cn('size-4 transition-transform duration-(--duration-fast) motion-reduce:transition-none aaa:translate-x-0!', rel === 'prev'
190
+ ? 'group-data-hovered/page:-translate-x-0.5'
191
+ : 'group-data-hovered/page:translate-x-0.5') }), _jsx("span", { className: "sr-only", children: label })] }));
47
192
  }
48
193
  //# sourceMappingURL=pagination.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/ui/pagination.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/ui/pagination.tsx"],"names":[],"mappings":"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"}
package/dist/ui/tabs.d.ts CHANGED
@@ -1,43 +1,110 @@
1
- import { type TabListProps as RACTabListProps, type TabPanelProps as RACTabPanelProps, type TabProps as RACTabProps, type TabsProps as RACTabsProps } from 'react-aria-components';
2
- export interface TabsProps extends Omit<RACTabsProps, 'className'> {
1
+ import * as React from 'react';
2
+ import { type ReactNode } from 'react';
3
+ import { type Key, type TabListProps as RACTabListProps, type TabPanelProps as RACTabPanelProps, type TabProps as RACTabProps, type TabsProps as RACTabsProps } from 'react-aria-components';
4
+ import { type IconProp } from './icon.js';
5
+ /** Tabs' words, for the `labels` prop. `{name}` is a tab's name. */
6
+ export interface TabsLabels {
7
+ /** Added to a tab's name for its count, which shows as a number only: "Files, 8". */
8
+ count: string;
9
+ /** Added to a tab's name for its badge's words: "Notes, 2 new notes". */
10
+ badge: string;
11
+ /** A tooltip for a tab with a count: "Files (8)". */
12
+ tipCount: string;
13
+ /** A tooltip for a tab with a badge: "Settings · 1 to check". */
14
+ tipBadge: string;
15
+ /** Said politely when an important badge rises, with `announceBadges`: "Settings: 2 settings need attention". */
16
+ badgeRise: string;
17
+ }
18
+ /**
19
+ * What a closed tab shows. `expanding`: icons, and the selected tab opens to show its name. `text`: every name,
20
+ * no icons. `icon`: icons only; names are in tooltips. A tab without an icon always shows its name.
21
+ */
22
+ export type TabsDisplay = 'expanding' | 'text' | 'icon';
23
+ /**
24
+ * What happens to a panel you leave. `visited`: kept once it has been shown, with its state, scroll position and
25
+ * drafts. `all`: every panel rendered from the start, hidden until chosen. `unmount`: gone until it is chosen
26
+ * again. Kept panels are hidden with React's `<Activity>`, which also stops their effects.
27
+ */
28
+ export type TabsHiddenPanels = 'visited' | 'all' | 'unmount';
29
+ /** Something new on a tab, shown while it is closed: a count or a dot. */
30
+ export interface TabBadge {
31
+ /** The number shown; above 99 it shows "99+". Leave it out, with `dot`, for a dot. */
32
+ count?: number;
33
+ dot?: boolean;
34
+ /** What a screen reader hears after the tab's name: "2 new notes". */
35
+ label: string;
36
+ /** What the tooltip says after the name: "2 new". Defaults to `label`. */
37
+ short?: string;
38
+ /** The destructive colour and a ring that stays, and a pulse that plays three times when it appears or rises. */
39
+ important?: boolean;
40
+ /** Fades out a second after the tab is opened, then calls `onBadgeClear` so the app can mark the items read. */
41
+ clearOnOpen?: boolean;
42
+ }
43
+ export interface TabsProps extends Omit<RACTabsProps, 'className' | 'children'> {
44
+ children: ReactNode;
45
+ /** Default `expanding`. */
46
+ display?: TabsDisplay;
47
+ /** Default `visited`. */
48
+ hiddenPanels?: TabsHiddenPanels;
49
+ /** Called once a `clearOnOpen` badge has gone, with its tab's id. */
50
+ onBadgeClear?: (id: Key) => void;
51
+ /** Politely announce a rise in an important badge ("Settings: 2 settings need attention"). Default off. */
52
+ announceBadges?: boolean;
53
+ labels?: Partial<TabsLabels>;
3
54
  className?: string;
4
55
  }
5
56
  /**
6
57
  * Views of the same thing, one at a time: a TabList and a TabPanel for each tab. Arrow keys move between tabs and
7
58
  * show each as focus reaches it; Tab moves on to the panel. Use them for peers people switch between, not for
8
59
  * steps in order (that's a form) or for navigation between pages (that's links).
60
+ *
61
+ * `orientation="vertical"` puts the tabs in a rail beside the panel. Narrower than 480px the rail becomes a row
62
+ * above it, and the arrow keys and `aria-orientation` follow.
9
63
  */
10
- export declare function Tabs({ className, ...props }: TabsProps): import("react").JSX.Element;
64
+ export declare function Tabs({ display, hiddenPanels, orientation, onBadgeClear, announceBadges, labels: given, className, children, ...props }: TabsProps): React.JSX.Element;
11
65
  export interface TabListProps<T extends object> extends Omit<RACTabListProps<T>, 'className'> {
12
66
  /** What the tabs switch between: "Project details". */
13
67
  'aria-label': string;
14
68
  className?: string;
15
69
  }
16
70
  /**
17
- * The row of tabs, on a rule. It wraps rather than scrolls when the tabs don't fit, so no tab is ever hidden off
18
- * the edge at 320px (1.4.10).
71
+ * The tabs. In a row they wrap rather than scroll when they don't fit, so no tab is ever hidden off the edge at
72
+ * 320px (1.4.10). In a rail they are 104px wide tiles, and the selected one grows downwards to show its name.
19
73
  */
20
- export declare function TabList<T extends object>({ className, ...props }: TabListProps<T>): import("react").JSX.Element;
21
- export interface TabProps extends Omit<RACTabProps, 'className'> {
74
+ export declare function TabList<T extends object>({ className, ...props }: TabListProps<T>): React.JSX.Element;
75
+ export interface TabProps extends Omit<RACTabProps, 'className' | 'children'> {
76
+ /** The tab's name. */
77
+ children: ReactNode;
78
+ /** The name as plain text, for its tooltip and announcements, when `children` isn't a string. */
79
+ textValue?: string;
80
+ /** Shown closed; the name opens beside it when the tab is selected. A server component passes the element. */
81
+ icon?: IconProp;
82
+ /** A number after the name ("Files 8"), and in its name as ", 8". Not shown in a rail. */
83
+ count?: number;
84
+ badge?: TabBadge;
22
85
  /** Layer 1, the target. */
23
86
  className?: string;
24
87
  /** Layer 2, the painted tab. */
25
88
  visualClassName?: string;
26
89
  }
27
90
  /**
28
- * A tab in three layers. The tab is the target (Layer 1), at least --target-min both ways. The painted tab
29
- * inside it (Layer 2) takes the hover ground and the focus ring, and the selected one is bold with a brand bar on
30
- * the rule: weight and the bar, never colour alone. The bar is the brand colour, which clears 3:1 against every
31
- * surface because it is also the focus ring.
91
+ * A tab in three layers. The tab is the target (Layer 1), at least --target-min both ways. The pill inside it
92
+ * (Layer 2) takes the hover ground and the focus ring. Selected, it takes the brand-subtle ground and a bold name,
93
+ * and its icon turns brand; where the name doesn't open to mark it (text and icon only), a brand marker does, so
94
+ * selection never rests on the fill alone.
95
+ *
96
+ * A tab whose name isn't showing has a tooltip: on hover after 500ms (at once if another just closed), on keyboard
97
+ * focus at once, closed by Escape from anywhere. The tooltip is hidden from assistive tech, because the tab's name
98
+ * is already its own collapsed label.
32
99
  */
33
- export declare function Tab({ className, visualClassName, children, ...props }: TabProps): import("react").JSX.Element;
34
- export interface TabPanelProps extends Omit<RACTabPanelProps, 'className'> {
100
+ export declare function Tab({ id, icon, count, badge, className, visualClassName, children, textValue, ...props }: TabProps): React.JSX.Element;
101
+ export interface TabPanelProps extends Omit<RACTabPanelProps, 'className' | 'shouldForceMount'> {
35
102
  className?: string;
36
103
  }
37
104
  /**
38
105
  * A tab's content. With nothing focusable inside, React Aria makes the panel itself a tab stop so a keyboard
39
106
  * reaches it after the tabs; it shows the focus ring then. Positioned, so hidden text inside it is placed against
40
- * it.
107
+ * it. It comes in from the side the selection moved towards (a fade alone at AAA).
41
108
  */
42
- export declare function TabPanel({ className, ...props }: TabPanelProps): import("react").JSX.Element;
109
+ export declare function TabPanel({ className, id, ...props }: TabPanelProps): React.JSX.Element | null;
43
110
  //# sourceMappingURL=tabs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/ui/tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,YAAY,IAAI,eAAe,EACpC,KAAK,aAAa,IAAI,gBAAgB,EACtC,KAAK,QAAQ,IAAI,WAAW,EAC5B,KAAK,SAAS,IAAI,YAAY,EAC/B,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,+BAEtD;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;IAC3F,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,+BAOjF;AAED,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC;IAC9D,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,QAAQ,+BAwB/E;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,+BAO9D"}
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/ui/tabs.tsx"],"names":[],"mappings":"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"}