@setsquare/ui 0.9.0 → 0.10.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 +86 -0
- package/README.md +4 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/rail-name.d.ts +3 -8
- package/dist/lib/rail-name.d.ts.map +1 -1
- package/dist/lib/rail-name.js +3 -19
- package/dist/lib/rail-name.js.map +1 -1
- package/dist/lib/soft-hyphen.d.ts +24 -0
- package/dist/lib/soft-hyphen.d.ts.map +1 -0
- package/dist/lib/soft-hyphen.js +67 -0
- package/dist/lib/soft-hyphen.js.map +1 -0
- package/dist/lib/use-hyphenated.d.ts +22 -0
- package/dist/lib/use-hyphenated.d.ts.map +1 -0
- package/dist/lib/use-hyphenated.js +81 -0
- package/dist/lib/use-hyphenated.js.map +1 -0
- package/dist/lib/use-scroll-tab-stop.d.ts +9 -0
- package/dist/lib/use-scroll-tab-stop.d.ts.map +1 -0
- package/dist/lib/use-scroll-tab-stop.js +46 -0
- package/dist/lib/use-scroll-tab-stop.js.map +1 -0
- package/dist/shell/dashboard-shell.d.ts +1 -0
- package/dist/shell/dashboard-shell.d.ts.map +1 -1
- package/dist/shell/dashboard-shell.js +2 -34
- package/dist/shell/dashboard-shell.js.map +1 -1
- package/dist/shell/page-header.d.ts +7 -1
- package/dist/shell/page-header.d.ts.map +1 -1
- package/dist/shell/page-header.js +3 -2
- package/dist/shell/page-header.js.map +1 -1
- package/dist/shell/right-panel.d.ts +21 -1
- package/dist/shell/right-panel.d.ts.map +1 -1
- package/dist/shell/right-panel.js +12 -4
- package/dist/shell/right-panel.js.map +1 -1
- package/dist/styles/theme.css +25 -2
- package/dist/styles/tokens.css +18 -0
- package/dist/tokens.json +80 -0
- package/dist/ui/button.d.ts +2 -1
- package/dist/ui/button.d.ts.map +1 -1
- package/dist/ui/button.js +9 -3
- package/dist/ui/button.js.map +1 -1
- package/dist/ui/dialog.d.ts +14 -2
- package/dist/ui/dialog.d.ts.map +1 -1
- package/dist/ui/dialog.js +19 -4
- package/dist/ui/dialog.js.map +1 -1
- package/dist/ui/disabled-reason.d.ts +36 -0
- package/dist/ui/disabled-reason.d.ts.map +1 -0
- package/dist/ui/disabled-reason.js +27 -0
- package/dist/ui/disabled-reason.js.map +1 -0
- package/dist/ui/file-upload.d.ts.map +1 -1
- package/dist/ui/file-upload.js +24 -2
- package/dist/ui/file-upload.js.map +1 -1
- package/dist/ui/icon-button.d.ts.map +1 -1
- package/dist/ui/icon-button.js +10 -6
- package/dist/ui/icon-button.js.map +1 -1
- package/dist/ui/menu.d.ts +9 -3
- package/dist/ui/menu.d.ts.map +1 -1
- package/dist/ui/menu.js +22 -4
- package/dist/ui/menu.js.map +1 -1
- package/dist/ui/tabs.d.ts.map +1 -1
- package/dist/ui/tabs.js +8 -1
- package/dist/ui/tabs.js.map +1 -1
- package/dist/ui/tree.d.ts.map +1 -1
- package/dist/ui/tree.js +8 -3
- package/dist/ui/tree.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,91 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.10.0 — 2026-10-15
|
|
4
|
+
|
|
5
|
+
What Storyboard, a dense desktop video editor and the first product on the Rail, still needed from the package.
|
|
6
|
+
|
|
7
|
+
- **Dialog: wider sizes, an icon in the title, a pinned footer.** `size` takes `xl` (60rem) and `2xl` (77.5rem,
|
|
8
|
+
1240px) as well as `sm`, `md` and `lg`, and `full`, the viewport but its margins; each comes from a new
|
|
9
|
+
`dialog-width-*` token, and the old three keep their widths. `icon` puts an icon before the title, hidden from
|
|
10
|
+
assistive technology, so the dialog is still named by the title's words; the title stays a string. **Changed:**
|
|
11
|
+
in a dialog taller than the window, only the body between the title and the footer scrolls, so the footer's
|
|
12
|
+
buttons never scroll away (the whole dialog used to scroll). The body is a tab stop only while it scrolls with
|
|
13
|
+
nothing focusable in it, the rule `ShellMain` already followed, now `useScrollTabStop` and shared by both.
|
|
14
|
+
`DialogSize` is exported.
|
|
15
|
+
- **RightPanel: wider, without its title bar, and not closable.** `width="wide"` is the new paired token
|
|
16
|
+
`--panel-width-wide` (512px; 560px at AAA), for a panel that is a working surface such as a chat; a number of px is
|
|
17
|
+
kept between `--panel-width` and the smaller of `--panel-width-max` (720px) and half the shell, so a product can let
|
|
18
|
+
people set it and keep their choice. `hideTitleBar` hides the bar while the panel stays named by `title`, or by
|
|
19
|
+
`aria-labelledby` pointing at the content's own heading. `isDismissable={false}` leaves no close button beside main
|
|
20
|
+
and keeps the panel open. Below 1024px it is still the Sheet, which opens and closes as before. **Not done:** a drag
|
|
21
|
+
handle. WCAG 2.5.7 asks that anything done by dragging can also be done with a single pointer without dragging,
|
|
22
|
+
and keyboard support alone doesn't meet it, so a handle needs pointer controls such as Narrower and Wider beside it.
|
|
23
|
+
The number `width` lets a product build that with its own controls.
|
|
24
|
+
- **PageHeader: an icon in the title.** `icon` goes before the words, hidden from assistive technology, so the h1 is
|
|
25
|
+
named by its words. From a server component, pass the element.
|
|
26
|
+
- **Compact density for tool surfaces.** `data-density="compact"` on a container makes the controls inside it
|
|
27
|
+
denser at AA: 28px controls (24px small, 36px large), 8px padding, 4px gaps, rows at least 28px, 12px between fields
|
|
28
|
+
and 13px interface text, from 36, 28, 44, 12, 8, 36, 20 and 14. No target goes under `--target-min` (24px) and no text
|
|
29
|
+
under 13px. Button, IconButton, SegmentedControl, Toolbar, Menu and the fields follow it, and a Slider's label;
|
|
30
|
+
a menu, select or combo box's popover takes its trigger's density with it, though it renders outside the
|
|
31
|
+
container. At AAA it changes nothing: targets are 44px there. The values are new `*-compact` tokens; the rule is in
|
|
32
|
+
the stylesheet (`theme.css`), so the design-system artifact has it too.
|
|
33
|
+
- **Disabled with a reason.** `Button` and `IconButton` take `disabledReason`: the button keeps focus and hover
|
|
34
|
+
(`aria-disabled`, not `disabled`), its words turn `muted-foreground`, the reason is its description and its tooltip
|
|
35
|
+
(an IconButton's tooltip shows its label over the reason), and pressing it does nothing and submits no form. It
|
|
36
|
+
wins over `isDisabled`. The Button README says when to use which. `DisabledReasonProps` is exported.
|
|
37
|
+
- **lucide-react is a range, `^1.48.0`**, not an exact pin, so an app on a newer 1.x shares one copy instead of
|
|
38
|
+
bundling two. This repository's lockfile still installs 1.48.0. `@setsquare/ui-flows` and `@setsquare/ui-blocks`
|
|
39
|
+
still pin it exactly; their next releases should do the same.
|
|
40
|
+
- **Docs.** ui.setsquare.dev: a Brand kits dialog (xl, an icon, a pinned footer), an icon in the page header, a button
|
|
41
|
+
and an icon button disabled with a reason, and Themes and levels' new Compact density section, with the same tools
|
|
42
|
+
default and compact. Design-system cards: DialogWide, RightPanelWide, ButtonDisabledReason and Density, and the
|
|
43
|
+
PageHeader card has its icon. The Dialog, RightPanel, PageHeader, Button and IconButton READMEs, and the
|
|
44
|
+
design-system README's Compact density.
|
|
45
|
+
- **Tests.** `test/browser/surfaces.mjs` (Dialog widths, the pinned header and footer, the icon's name, the body's tab
|
|
46
|
+
stop; RightPanel widths, the hidden title bar and its name, `aria-labelledby`, a panel that can't be closed and
|
|
47
|
+
its Sheet; PageHeader's h1 name) and `test/browser/density.mjs` (each control default and compact at AA and AAA,
|
|
48
|
+
no target under the floor or overlapping, a menu's rows, and `disabledReason`: in the tab order, described,
|
|
49
|
+
its tooltip on focus and hover, a press doing nothing, the cursor), at AA and AAA. Unit tests for the RightPanel
|
|
50
|
+
and PageHeader as the server renders them, `disabledReason`, the compact tokens' floors, and the lucide range.
|
|
51
|
+
|
|
52
|
+
## 0.9.1 — 2026-10-15
|
|
53
|
+
|
|
54
|
+
- **Fix: a Tree row's title or description no longer breaks between two letters without a hyphen.** They had
|
|
55
|
+
`overflow-wrap: anywhere`, so a word too wide for the row was split wherever it ran out of room, with no hyphen,
|
|
56
|
+
as the Rail's names were before 0.9.0. Now a word too wide breaks with a visible hyphen: where the browser can
|
|
57
|
+
hyphenate it, at a soft hyphen (U+00AD) a product wrote in it, and otherwise at the last letter that fits, three
|
|
58
|
+
letters either side at least. A word that fits a line is left whole. The row's accessible name and `textValue` leave
|
|
59
|
+
soft hyphens out. It reads each row's own layout after it renders and when the row resizes, the title turns bold or
|
|
60
|
+
text spacing changes; it adds no layout of its own, so a long outline costs nothing extra.
|
|
61
|
+
- **Fix: a FileUpload file name no longer breaks between two letters without a mark.** It had `overflow-wrap:
|
|
62
|
+
anywhere`. A file name has to read exactly, so a hyphen added at a break would look like part of it. It now breaks
|
|
63
|
+
where it divides itself, with nothing added: after `_`, `-`, `.` and similar, at a change from lower to upper case,
|
|
64
|
+
and between letters and digits (`<wbr>`). A run too wide for the row with none of those breaks at the last letter
|
|
65
|
+
that fits, marked ↩ by `hyphenate-character`. When a name needs that mark, what is seen is hidden from assistive
|
|
66
|
+
technology and a plain copy is said, and copying the name copies it without the soft hyphens (Chrome would copy
|
|
67
|
+
them).
|
|
68
|
+
- **Fix: a vertical Tabs rail's name no longer breaks between two letters without a hyphen.** The rail's names had
|
|
69
|
+
`hyphens: auto` and `overflow-wrap: anywhere`, so a capitalised English word too wide for the tile, which Chrome and
|
|
70
|
+
Firefox won't hyphenate, was split silently. Now a word too wide breaks with a visible hyphen: the browser's, or at
|
|
71
|
+
the last letter that fits. The name and its hidden bold copy show the same text, so they break alike, and the grid
|
|
72
|
+
holding them is capped at the tile's width. With soft hyphens added, the tab is named by a plain copy. The Tabs
|
|
73
|
+
and TabsRail READMEs say so; they used to say the names were "hyphenated and wrapping anywhere".
|
|
74
|
+
- **Fix: the Rail's soft hyphens and the docs example's text.** The formatter had turned the `\u00AD` escapes in
|
|
75
|
+
three files into invisible characters, so the Rail page's example on ui.setsquare.dev read "written Storyboard"
|
|
76
|
+
where it meant to show `Story\u00ADboard`. Soft hyphens in the source are now written by their code point
|
|
77
|
+
(`String.fromCodePoint(0xad)`), which no formatter changes.
|
|
78
|
+
- **Tests.** Unit tests for the shared soft-hyphen helpers, and `test/browser/controls.mjs` renders a 220px Tree at AA
|
|
79
|
+
and AAA: German compounds no width fits, a selected (bold) row, a product's soft hyphen, a long word in a
|
|
80
|
+
description and a title whose words fit. No word breaks without a hyphen, nothing runs out of its row, the words
|
|
81
|
+
that fit get no soft hyphens, and rows are named without them; again with 1.4.12's text spacing. It also renders a
|
|
82
|
+
240px FileUpload at AA and AAA with names that divide at separators and at case and digit changes, and one with a
|
|
83
|
+
run nothing divides: they break only where they divide or at a soft hyphen drawn as ↩, nothing runs out, only the
|
|
84
|
+
run is marked, every name is said and copied plain; again with text spacing. Unit tests for `fileNameParts`.
|
|
85
|
+
`test/browser/tabs.mjs` renders a vertical rail in text display with German compounds and English words, at AA and
|
|
86
|
+
AAA: nothing runs out of its tile, both copies match, a word breaks only at a soft hyphen or between words, and
|
|
87
|
+
every tab is named plainly; again with text spacing.
|
|
88
|
+
|
|
3
89
|
## 0.9.0 — 2026-10-15
|
|
4
90
|
|
|
5
91
|
- **`findClippedText` waits two animation frames before it measures, and returns a Promise.** It applied 1.4.12's
|
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ Controls are built in three layers, so the switch changes targets without changi
|
|
|
18
18
|
pnpm add @setsquare/ui react-aria-components @internationalized/date
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
It needs React 19.2 or later, React Aria Components 1.21 or later, and Tailwind CSS 4 in the app. A module is a client component (`'use client'`) only when it needs to be: React Aria, a hook, a context or an event handler. The rest — `StatusBadge`, `Avatar`, `ProductMark`, `Kbd`, `EmptyState`, `IconButton`, `PageHeader`, `PageContent`, the site shell's `SiteShell`, `SiteMain`, `SiteHeader`, `SiteNav`, `SiteFooter` and `SiteFooterGroup`, the content components `Section`, `SectionHeader`, `Container`, `Eyebrow`, `Hero`, `HeroHighlight`, `Card`, `CardGrid`, `Prose`, `Steps`, `Step`, `Split`, `Tag`, `StatList` and `Stat`, `CodeBlock`, `ThemeScript`, `buttonTargetStyles()` and `buttonVisualStyles()` — have no directive, so a server component uses them without shipping them to the browser. Server components can render either kind. A server component that gives a client component an icon (`Alert`, `MenuItem`, `SidebarItem`, `RailItem`, a search item) passes the element, `icon={<Folder />}`: a component can't cross into a client component.
|
|
21
|
+
It needs React 19.2 or later, React Aria Components 1.21 or later, and Tailwind CSS 4 in the app. It brings `lucide-react` as a dependency at `^1.48.0`, so an app on a newer 1.x shares one copy rather than bundling two. A module is a client component (`'use client'`) only when it needs to be: React Aria, a hook, a context or an event handler. The rest — `StatusBadge`, `Avatar`, `ProductMark`, `Kbd`, `EmptyState`, `IconButton`, `PageHeader`, `PageContent`, the site shell's `SiteShell`, `SiteMain`, `SiteHeader`, `SiteNav`, `SiteFooter` and `SiteFooterGroup`, the content components `Section`, `SectionHeader`, `Container`, `Eyebrow`, `Hero`, `HeroHighlight`, `Card`, `CardGrid`, `Prose`, `Steps`, `Step`, `Split`, `Tag`, `StatList` and `Stat`, `CodeBlock`, `ThemeScript`, `buttonTargetStyles()` and `buttonVisualStyles()` — have no directive, so a server component uses them without shipping them to the browser. Server components can render either kind. A server component that gives a client component an icon (`Alert`, `MenuItem`, `SidebarItem`, `RailItem`, a search item) passes the element, `icon={<Folder />}`: a component can't cross into a client component.
|
|
22
22
|
|
|
23
23
|
In the app's global stylesheet, after Tailwind:
|
|
24
24
|
|
|
@@ -349,8 +349,10 @@ The positioning, target, link, reflow, text-spacing and motion scans run in the
|
|
|
349
349
|
- **Contrast:** `scripts/check-contrast.mjs` computes every token pair the usage notes promise, in all four themes. It doesn't check colours a product adds.
|
|
350
350
|
- **Browser (Chromium only):** the design-system previews on React 19, loaded as the design-system artifact loads them:
|
|
351
351
|
- axe-core on every preview in all four themes;
|
|
352
|
+
- Dialog sizes from their tokens, a tall dialog's title and footer staying while only the body scrolls, and its body a tab stop only while it scrolls with nothing focusable; RightPanel's widths, hidden title bar, its name by `title` or `aria-labelledby`, a panel that can't be closed beside main and its Sheet below 1024px; PageHeader and Dialog icons leaving the name to the words;
|
|
353
|
+
- compact density: each control's paint, padding, gap and text at AA, unchanged at AAA, no target under `--target-min` or overlapping, a menu's rows following their trigger; and `disabledReason`: in the tab order, described by the reason, its tooltip on focus and hover, a press doing nothing;
|
|
352
354
|
- the search's ⌘K / Ctrl+K on a page of its own: left to text fields, text areas, editors and a handler that took the key; one search on a page holding it, showing it and setting `aria-keyshortcuts`, and the next taking over; `shortcut={false}`; the console error for an item id used twice; and `aria-keyshortcuts` reaching the element through `Button`, `IconButton`, `LinkButton` and `Tree`, which React Aria's own components drop, and the page builder's Undo, Redo and outline saying their keys;
|
|
353
|
-
- keyboard and focus behaviour for the dashboard shell (with its search finding by keyword, in ranked order), forms, feedback states, and the slider, date, file and selection controls;
|
|
355
|
+
- keyboard and focus behaviour for the dashboard shell (with its search finding by keyword, in ranked order), forms, feedback states, and the slider, date, file and selection controls (a narrow Tree's long words breaking only with a hyphen, and its rows named without soft hyphens; a narrow FileUpload's names breaking only where they divide themselves or at a ↩ mark, said and copied plain; a vertical Tabs rail's long names breaking only with a hyphen; each with and without text spacing);
|
|
354
356
|
- the site shell: the phone menu opening, pushing the page down and closing on Escape from the panel or the button; the current page's weight and marker; one order for the header, the phone menu and the footer; a sticky header covering no focused control; and the header fitting at seven widths from 320px to 1280px, either side of `lg` among them;
|
|
355
357
|
- the motion rule on the Hero card's media: the motion check exempts it only for its visible pause control, Pause stops it, reduced motion never starts it, and nothing waits hidden for it;
|
|
356
358
|
- code blocks copying, announcing a second copy, a terminal copying its commands only, and a refused copy; the theme switcher's choice, System following the operating system, the level, and the theme script running under a CSP that allows only its published hash;
|
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export type { SetsquareLocaleProps, SetsquareLabels } from './lib/locale.js';
|
|
|
11
11
|
export { useElementWidth } from './lib/use-element-width.js';
|
|
12
12
|
export { Button, LinkButton } from './ui/button.js';
|
|
13
13
|
export type { ButtonProps, LinkButtonProps } from './ui/button.js';
|
|
14
|
+
export type { DisabledReasonProps } from './ui/disabled-reason.js';
|
|
14
15
|
export type { KeyshortcutsProps } from './lib/keyshortcuts.js';
|
|
15
16
|
export { buttonTargetStyles, buttonVisualStyles } from './ui/button-styles.js';
|
|
16
17
|
export type { ButtonVariant, ButtonVisualSize } from './ui/button-styles.js';
|
|
@@ -130,7 +131,7 @@ export type { AlertProps, AlertTone, AlertLabels, OfflineAlertLabels } from './u
|
|
|
130
131
|
export { EmptyState } from './ui/empty-state.js';
|
|
131
132
|
export type { EmptyStateProps } from './ui/empty-state.js';
|
|
132
133
|
export { Dialog, ConfirmDialog } from './ui/dialog.js';
|
|
133
|
-
export type { DialogProps, ConfirmDialogProps, DialogLabels, ConfirmDialogLabels, } from './ui/dialog.js';
|
|
134
|
+
export type { DialogProps, DialogSize, ConfirmDialogProps, DialogLabels, ConfirmDialogLabels, } from './ui/dialog.js';
|
|
134
135
|
export { Toaster, toast, toastQueue } from './ui/toast.js';
|
|
135
136
|
export type { ToastContent, ToastTone, ToasterLabels } from './ui/toast.js';
|
|
136
137
|
export { ErrorState, ErrorBoundary } from './ui/error-state.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/rail-name.d.ts
CHANGED
|
@@ -6,18 +6,13 @@
|
|
|
6
6
|
* a proper noun; `Hyphenation::ShouldHyphenateWord`), and Firefox doesn't either, so "Storyboard" gets no break
|
|
7
7
|
* point at all. `overflow-wrap: anywhere` then split it as "Storyboar" / "d".
|
|
8
8
|
*/
|
|
9
|
-
|
|
9
|
+
import { SOFT_HYPHEN, hyphenateEverywhere, withoutSoftHyphens } from './soft-hyphen.js';
|
|
10
|
+
export { SOFT_HYPHEN, hyphenateEverywhere };
|
|
10
11
|
/** The name as said and as matched: a product's soft hyphens taken out. */
|
|
11
|
-
export declare const plainName:
|
|
12
|
+
export declare const plainName: typeof withoutSoftHyphens;
|
|
12
13
|
/** The size the name is set in, and the floor it may shrink to: the rail's one exception to the 13px rule. */
|
|
13
14
|
export declare const RAIL_NAME_SIZE = 13;
|
|
14
15
|
export declare const RAIL_NAME_FLOOR = 11.5;
|
|
15
|
-
/**
|
|
16
|
-
* A soft hyphen at every place in `word` with at least three letters either side, so the browser breaks it, with a
|
|
17
|
-
* hyphen, at the last place that fits whatever the width, spacing or zoom. A word that already has one of a
|
|
18
|
-
* product's is left as it is.
|
|
19
|
-
*/
|
|
20
|
-
export declare function hyphenateEverywhere(word: string): string;
|
|
21
16
|
/** What laying the name out would give: whether a word runs out of the box, and how many lines it takes. */
|
|
22
17
|
export interface NameLayout {
|
|
23
18
|
overflows: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rail-name.d.ts","sourceRoot":"","sources":["../../src/lib/rail-name.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,
|
|
1
|
+
{"version":3,"file":"rail-name.d.ts","sourceRoot":"","sources":["../../src/lib/rail-name.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAExF,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;AAE5C,2EAA2E;AAC3E,eAAO,MAAM,SAAS,2BAAqB,CAAC;AAE5C,8GAA8G;AAC9G,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,eAAe,OAAO,CAAC;AAIpC,4GAA4G;AAC5G,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,WAAW,KAAK,UAAU,CAAC;AAElG,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,UAAU,CAqB1E"}
|
package/dist/lib/rail-name.js
CHANGED
|
@@ -6,31 +6,15 @@
|
|
|
6
6
|
* a proper noun; `Hyphenation::ShouldHyphenateWord`), and Firefox doesn't either, so "Storyboard" gets no break
|
|
7
7
|
* point at all. `overflow-wrap: anywhere` then split it as "Storyboar" / "d".
|
|
8
8
|
*/
|
|
9
|
-
|
|
9
|
+
import { SOFT_HYPHEN, hyphenateEverywhere, withoutSoftHyphens } from './soft-hyphen.js';
|
|
10
|
+
export { SOFT_HYPHEN, hyphenateEverywhere };
|
|
10
11
|
/** The name as said and as matched: a product's soft hyphens taken out. */
|
|
11
|
-
export const plainName =
|
|
12
|
+
export const plainName = withoutSoftHyphens;
|
|
12
13
|
/** The size the name is set in, and the floor it may shrink to: the rail's one exception to the 13px rule. */
|
|
13
14
|
export const RAIL_NAME_SIZE = 13;
|
|
14
15
|
export const RAIL_NAME_FLOOR = 11.5;
|
|
15
16
|
const STEP = 0.25;
|
|
16
17
|
const MAX_LINES = 2;
|
|
17
|
-
/** The fewest letters either side of a hyphen this adds. */
|
|
18
|
-
const EDGE = 3;
|
|
19
|
-
/**
|
|
20
|
-
* A soft hyphen at every place in `word` with at least three letters either side, so the browser breaks it, with a
|
|
21
|
-
* hyphen, at the last place that fits whatever the width, spacing or zoom. A word that already has one of a
|
|
22
|
-
* product's is left as it is.
|
|
23
|
-
*/
|
|
24
|
-
export function hyphenateEverywhere(word) {
|
|
25
|
-
if (word.includes(SOFT_HYPHEN))
|
|
26
|
-
return word;
|
|
27
|
-
const letters = [...word];
|
|
28
|
-
if (letters.length < EDGE * 2)
|
|
29
|
-
return word;
|
|
30
|
-
return letters
|
|
31
|
-
.map((letter, i) => (i >= EDGE && i <= letters.length - EDGE ? SOFT_HYPHEN : '') + letter)
|
|
32
|
-
.join('');
|
|
33
|
-
}
|
|
34
18
|
/**
|
|
35
19
|
* The largest size from 13px down to the floor at which every word fits whole on at most two lines. Failing that,
|
|
36
20
|
* the largest at which every word fits whole, on more lines. Failing that, a word is too long at any size allowed:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rail-name.js","sourceRoot":"","sources":["../../src/lib/rail-name.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,
|
|
1
|
+
{"version":3,"file":"rail-name.js","sourceRoot":"","sources":["../../src/lib/rail-name.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAExF,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;AAE5C,2EAA2E;AAC3E,MAAM,CAAC,MAAM,SAAS,GAAG,kBAAkB,CAAC;AAE5C,8GAA8G;AAC9G,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AACpC,MAAM,IAAI,GAAG,IAAI,CAAC;AAClB,MAAM,SAAS,GAAG,CAAC,CAAC;AAsBpB;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,OAAoB;IAC5D,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,gBAAoC,CAAC;IACzC,KAAK,IAAI,IAAI,GAAG,cAAc,EAAE,IAAI,IAAI,eAAe,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;QAC7E,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACzC,IAAI,EAAE,CAAC,SAAS;YAAE,SAAS;QAC3B,IAAI,EAAE,CAAC,KAAK,IAAI,SAAS;YAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACvD,gBAAgB,KAAK,IAAI,CAAC;IAC5B,CAAC;IACD,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAClF,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,SAAS;QACvD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI;SACd,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACZ,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,SAAS;QACzD,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC3B,CAAC,CAAC,IAAI,CACT;SACA,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Soft hyphens (U+00AD): where a long word may break, with a hyphen shown only when it does. */
|
|
2
|
+
/** U+00AD, written by its code point so no formatter turns it into an invisible character in the source. */
|
|
3
|
+
export declare const SOFT_HYPHEN: string;
|
|
4
|
+
/** The text as said and as matched: soft hyphens taken out. */
|
|
5
|
+
export declare const withoutSoftHyphens: (text: string) => string;
|
|
6
|
+
/**
|
|
7
|
+
* A soft hyphen at every place in `word` with at least three letters either side, so the browser breaks it, with a
|
|
8
|
+
* hyphen, at the last place that fits whatever the width, spacing or zoom. A word that already has one of a
|
|
9
|
+
* product's is left as it is.
|
|
10
|
+
*/
|
|
11
|
+
export declare function hyphenateEverywhere(word: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* `text` with soft hyphens added to each word wider than the line, by `widthOf`, so nothing breaks between two
|
|
14
|
+
* letters without a hyphen. A word that fits a line is left alone, so it wraps whole rather than being hyphenated
|
|
15
|
+
* at a line's end.
|
|
16
|
+
*/
|
|
17
|
+
export declare function hyphenateTooWide(text: string, lineWidth: number, widthOf: (word: string, start: number) => number): string;
|
|
18
|
+
/**
|
|
19
|
+
* A file name in the pieces it divides itself into, so it can break between them with nothing added: after a
|
|
20
|
+
* separator (`_`, `-`, `.` and the like), at a change from lower to upper case ("floorPlan"), and between letters
|
|
21
|
+
* and digits ("IMG20261014"). Joined, the pieces are the name.
|
|
22
|
+
*/
|
|
23
|
+
export declare function fileNameParts(name: string): string[];
|
|
24
|
+
//# sourceMappingURL=soft-hyphen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soft-hyphen.d.ts","sourceRoot":"","sources":["../../src/lib/soft-hyphen.ts"],"names":[],"mappings":"AAAA,iGAAiG;AAEjG,4GAA4G;AAC5G,eAAO,MAAM,WAAW,QAA6B,CAAC;AAEtD,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,SAAU,MAAM,WAAqC,CAAC;AAKrF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,UAWjD;AAKD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBpD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/** Soft hyphens (U+00AD): where a long word may break, with a hyphen shown only when it does. */
|
|
2
|
+
/** U+00AD, written by its code point so no formatter turns it into an invisible character in the source. */
|
|
3
|
+
export const SOFT_HYPHEN = String.fromCodePoint(0xad);
|
|
4
|
+
/** The text as said and as matched: soft hyphens taken out. */
|
|
5
|
+
export const withoutSoftHyphens = (text) => text.replaceAll(SOFT_HYPHEN, '');
|
|
6
|
+
/** The fewest letters either side of a hyphen this adds. */
|
|
7
|
+
const EDGE = 3;
|
|
8
|
+
/**
|
|
9
|
+
* A soft hyphen at every place in `word` with at least three letters either side, so the browser breaks it, with a
|
|
10
|
+
* hyphen, at the last place that fits whatever the width, spacing or zoom. A word that already has one of a
|
|
11
|
+
* product's is left as it is.
|
|
12
|
+
*/
|
|
13
|
+
export function hyphenateEverywhere(word) {
|
|
14
|
+
if (word.includes(SOFT_HYPHEN))
|
|
15
|
+
return word;
|
|
16
|
+
const letters = [...word];
|
|
17
|
+
if (letters.length < EDGE * 2)
|
|
18
|
+
return word;
|
|
19
|
+
return letters
|
|
20
|
+
.map((letter, i) => (i >= EDGE && i <= letters.length - EDGE ? SOFT_HYPHEN : '') + letter)
|
|
21
|
+
.join('');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* `text` with soft hyphens added to each word wider than the line, by `widthOf`, so nothing breaks between two
|
|
25
|
+
* letters without a hyphen. A word that fits a line is left alone, so it wraps whole rather than being hyphenated
|
|
26
|
+
* at a line's end.
|
|
27
|
+
*/
|
|
28
|
+
export function hyphenateTooWide(text, lineWidth, widthOf) {
|
|
29
|
+
let at = 0;
|
|
30
|
+
return text
|
|
31
|
+
.split(' ')
|
|
32
|
+
.map((word) => {
|
|
33
|
+
const start = at;
|
|
34
|
+
at += word.length + 1;
|
|
35
|
+
return widthOf(word, start) > lineWidth + 0.5 ? hyphenateEverywhere(word) : word;
|
|
36
|
+
})
|
|
37
|
+
.join(' ');
|
|
38
|
+
}
|
|
39
|
+
/** The characters a file name divides itself at: a break may follow each. */
|
|
40
|
+
const SEPARATOR = /[_\-.,+~@/\\]/u;
|
|
41
|
+
/**
|
|
42
|
+
* A file name in the pieces it divides itself into, so it can break between them with nothing added: after a
|
|
43
|
+
* separator (`_`, `-`, `.` and the like), at a change from lower to upper case ("floorPlan"), and between letters
|
|
44
|
+
* and digits ("IMG20261014"). Joined, the pieces are the name.
|
|
45
|
+
*/
|
|
46
|
+
export function fileNameParts(name) {
|
|
47
|
+
const parts = [];
|
|
48
|
+
let part = '';
|
|
49
|
+
const chars = [...name];
|
|
50
|
+
chars.forEach((char, i) => {
|
|
51
|
+
const before = chars[i - 1] ?? '';
|
|
52
|
+
const split = i > 0 &&
|
|
53
|
+
(SEPARATOR.test(before) ||
|
|
54
|
+
(/\p{Ll}/u.test(before) && /\p{Lu}/u.test(char)) ||
|
|
55
|
+
(/\p{L}/u.test(before) && /\p{N}/u.test(char)) ||
|
|
56
|
+
(/\p{N}/u.test(before) && /\p{L}/u.test(char)));
|
|
57
|
+
if (split && part) {
|
|
58
|
+
parts.push(part);
|
|
59
|
+
part = '';
|
|
60
|
+
}
|
|
61
|
+
part += char;
|
|
62
|
+
});
|
|
63
|
+
if (part)
|
|
64
|
+
parts.push(part);
|
|
65
|
+
return parts;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=soft-hyphen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soft-hyphen.js","sourceRoot":"","sources":["../../src/lib/soft-hyphen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The text to show, and a ref for the element that shows it, so a word too wide for its line breaks with a hyphen,
|
|
3
|
+
* never between two letters without one. With `overflow-wrap: normal`, a word the browser can't hyphenate runs out
|
|
4
|
+
* of the element; this reads its layout and gives each such word soft hyphens at every place with three letters
|
|
5
|
+
* either side, so the browser breaks it, with a hyphen, at the last place that fits.
|
|
6
|
+
*
|
|
7
|
+
* Give the ref to an `inline-block max-w-full` element holding just this text: it is as wide as its text up to its
|
|
8
|
+
* line, so a ResizeObserver sees the text widen (a selected row turning bold, text spacing) as well as the line
|
|
9
|
+
* narrow. A callback ref rather than an effect, because a collection such as React Aria's Tree renders an item once
|
|
10
|
+
* to build itself and again into the page: the work has to happen when the real element arrives. It only reads the
|
|
11
|
+
* layout, so a long list costs no extra layout per row.
|
|
12
|
+
*/
|
|
13
|
+
export declare function useHyphenated(text: string): [string, (el: HTMLElement | null) => (() => void) | void];
|
|
14
|
+
/**
|
|
15
|
+
* A file name's pieces to show (fileNameParts), and a ref for the `inline-block max-w-full` element that shows them
|
|
16
|
+
* with a `<wbr>` between each: the name breaks where it divides itself, with nothing added. A piece still wider than
|
|
17
|
+
* the line gets soft hyphens at every place with three letters either side, for the browser to break at the last
|
|
18
|
+
* that fits; the element's `hyphenate-character` marks that break as something other than the name's own hyphen.
|
|
19
|
+
* Read when the element arrives and whenever it resizes, as useHyphenated is.
|
|
20
|
+
*/
|
|
21
|
+
export declare function useFileNameParts(name: string): [string[], (el: HTMLElement | null) => (() => void) | void];
|
|
22
|
+
//# sourceMappingURL=use-hyphenated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-hyphenated.d.ts","sourceRoot":"","sources":["../../src/lib/use-hyphenated.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,GACX,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,CAyB3D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GACX,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,CAsB7D"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useCallback, useState } from 'react';
|
|
3
|
+
import { fileNameParts, hyphenateEverywhere, hyphenateTooWide, withoutSoftHyphens, } from './soft-hyphen.js';
|
|
4
|
+
/**
|
|
5
|
+
* The text to show, and a ref for the element that shows it, so a word too wide for its line breaks with a hyphen,
|
|
6
|
+
* never between two letters without one. With `overflow-wrap: normal`, a word the browser can't hyphenate runs out
|
|
7
|
+
* of the element; this reads its layout and gives each such word soft hyphens at every place with three letters
|
|
8
|
+
* either side, so the browser breaks it, with a hyphen, at the last place that fits.
|
|
9
|
+
*
|
|
10
|
+
* Give the ref to an `inline-block max-w-full` element holding just this text: it is as wide as its text up to its
|
|
11
|
+
* line, so a ResizeObserver sees the text widen (a selected row turning bold, text spacing) as well as the line
|
|
12
|
+
* narrow. A callback ref rather than an effect, because a collection such as React Aria's Tree renders an item once
|
|
13
|
+
* to build itself and again into the page: the work has to happen when the real element arrives. It only reads the
|
|
14
|
+
* layout, so a long list costs no extra layout per row.
|
|
15
|
+
*/
|
|
16
|
+
export function useHyphenated(text) {
|
|
17
|
+
const [shown, setShown] = useState(text);
|
|
18
|
+
// A new text from the product starts again; the same text with our soft hyphens added is kept.
|
|
19
|
+
if (shown !== text && withoutSoftHyphens(shown) !== withoutSoftHyphens(text))
|
|
20
|
+
setShown(text);
|
|
21
|
+
const ref = useCallback((el) => {
|
|
22
|
+
if (!el)
|
|
23
|
+
return;
|
|
24
|
+
const check = () => {
|
|
25
|
+
const node = el.firstChild;
|
|
26
|
+
if (!node || node.nodeType !== Node.TEXT_NODE)
|
|
27
|
+
return;
|
|
28
|
+
if (el.scrollWidth <= el.clientWidth + 0.5)
|
|
29
|
+
return;
|
|
30
|
+
const data = node.data;
|
|
31
|
+
const range = document.createRange();
|
|
32
|
+
const next = hyphenateTooWide(data, el.clientWidth, (word, start) => {
|
|
33
|
+
range.setStart(node, start);
|
|
34
|
+
range.setEnd(node, start + word.length);
|
|
35
|
+
return range.getBoundingClientRect().width;
|
|
36
|
+
});
|
|
37
|
+
if (next !== data)
|
|
38
|
+
setShown(next);
|
|
39
|
+
};
|
|
40
|
+
check();
|
|
41
|
+
const observer = new ResizeObserver(check);
|
|
42
|
+
observer.observe(el);
|
|
43
|
+
return () => observer.disconnect();
|
|
44
|
+
}, []);
|
|
45
|
+
return [shown, ref];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* A file name's pieces to show (fileNameParts), and a ref for the `inline-block max-w-full` element that shows them
|
|
49
|
+
* with a `<wbr>` between each: the name breaks where it divides itself, with nothing added. A piece still wider than
|
|
50
|
+
* the line gets soft hyphens at every place with three letters either side, for the browser to break at the last
|
|
51
|
+
* that fits; the element's `hyphenate-character` marks that break as something other than the name's own hyphen.
|
|
52
|
+
* Read when the element arrives and whenever it resizes, as useHyphenated is.
|
|
53
|
+
*/
|
|
54
|
+
export function useFileNameParts(name) {
|
|
55
|
+
const [parts, setParts] = useState(() => fileNameParts(name));
|
|
56
|
+
if (withoutSoftHyphens(parts.join('')) !== name)
|
|
57
|
+
setParts(fileNameParts(name));
|
|
58
|
+
const ref = useCallback((el) => {
|
|
59
|
+
if (!el)
|
|
60
|
+
return;
|
|
61
|
+
const check = () => {
|
|
62
|
+
if (el.scrollWidth <= el.clientWidth + 0.5)
|
|
63
|
+
return;
|
|
64
|
+
const range = document.createRange();
|
|
65
|
+
const nodes = [...el.childNodes].filter((n) => n.nodeType === Node.TEXT_NODE);
|
|
66
|
+
const wide = nodes.map((node) => {
|
|
67
|
+
range.selectNodeContents(node);
|
|
68
|
+
return range.getBoundingClientRect().width > el.clientWidth + 0.5;
|
|
69
|
+
});
|
|
70
|
+
if (!wide.some(Boolean))
|
|
71
|
+
return;
|
|
72
|
+
setParts((was) => was.map((part, i) => (wide[i] ? hyphenateEverywhere(part) : part)));
|
|
73
|
+
};
|
|
74
|
+
check();
|
|
75
|
+
const observer = new ResizeObserver(check);
|
|
76
|
+
observer.observe(el);
|
|
77
|
+
return () => observer.disconnect();
|
|
78
|
+
}, []);
|
|
79
|
+
return [parts, ref];
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=use-hyphenated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-hyphenated.js","sourceRoot":"","sources":["../../src/lib/use-hyphenated.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type RefObject } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Whether a vertical scroller should be a tab stop: while it scrolls and holds nothing a keyboard can reach (prose
|
|
4
|
+
* with no links, a changelog), so Tab reaches it and the arrow keys scroll it. That is what Chrome (132 and later)
|
|
5
|
+
* does for any scroller with no tabindex and no focusable children; an explicit tabindex opts out of it, so this
|
|
6
|
+
* puts it back, in every browser. Measured again when the scroller or its content resizes or changes.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useScrollTabStop(ref: RefObject<HTMLElement | null>): boolean;
|
|
9
|
+
//# sourceMappingURL=use-scroll-tab-stop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-scroll-tab-stop.d.ts","sourceRoot":"","sources":["../../src/lib/use-scroll-tab-stop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAK5D;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,OAAO,CAmC5E"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
const FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), summary, iframe, [contenteditable]:not([contenteditable="false"]), [tabindex]:not([tabindex="-1"])';
|
|
4
|
+
/**
|
|
5
|
+
* Whether a vertical scroller should be a tab stop: while it scrolls and holds nothing a keyboard can reach (prose
|
|
6
|
+
* with no links, a changelog), so Tab reaches it and the arrow keys scroll it. That is what Chrome (132 and later)
|
|
7
|
+
* does for any scroller with no tabindex and no focusable children; an explicit tabindex opts out of it, so this
|
|
8
|
+
* puts it back, in every browser. Measured again when the scroller or its content resizes or changes.
|
|
9
|
+
*/
|
|
10
|
+
export function useScrollTabStop(ref) {
|
|
11
|
+
const [tabbable, setTabbable] = useState(false);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
const el = ref.current;
|
|
14
|
+
if (!el)
|
|
15
|
+
return;
|
|
16
|
+
let frame = 0;
|
|
17
|
+
const resize = new ResizeObserver(() => measure());
|
|
18
|
+
const measure = () => {
|
|
19
|
+
cancelAnimationFrame(frame);
|
|
20
|
+
frame = requestAnimationFrame(() => {
|
|
21
|
+
// The content can grow without the scroller resizing, so watch what is in it too.
|
|
22
|
+
for (const child of el.children)
|
|
23
|
+
resize.observe(child);
|
|
24
|
+
const scrolls = el.scrollHeight > el.clientHeight + 1;
|
|
25
|
+
const reachable = [...el.querySelectorAll(FOCUSABLE)].some((child) => !child.closest('[inert]') && child.getClientRects().length > 0);
|
|
26
|
+
setTabbable(scrolls && !reachable);
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
measure();
|
|
30
|
+
resize.observe(el);
|
|
31
|
+
const mutation = new MutationObserver(measure);
|
|
32
|
+
mutation.observe(el, {
|
|
33
|
+
childList: true,
|
|
34
|
+
subtree: true,
|
|
35
|
+
attributes: true,
|
|
36
|
+
attributeFilter: ['href', 'disabled', 'tabindex', 'inert', 'hidden', 'contenteditable'],
|
|
37
|
+
});
|
|
38
|
+
return () => {
|
|
39
|
+
cancelAnimationFrame(frame);
|
|
40
|
+
resize.disconnect();
|
|
41
|
+
mutation.disconnect();
|
|
42
|
+
};
|
|
43
|
+
}, [ref]);
|
|
44
|
+
return tabbable;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=use-scroll-tab-stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-scroll-tab-stop.js","sourceRoot":"","sources":["../../src/lib/use-scroll-tab-stop.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAE5D,MAAM,SAAS,GACb,mOAAmO,CAAC;AAEtO;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAkC;IACjE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;QACvB,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5B,KAAK,GAAG,qBAAqB,CAAC,GAAG,EAAE;gBACjC,kFAAkF;gBAClF,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,QAAQ;oBAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACvD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CACxD,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,CAAC,CAC1E,CAAC;gBACF,WAAW,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,OAAO,EAAE,CAAC;QACV,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnB,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE;YACnB,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,CAAC;SACxF,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5B,MAAM,CAAC,UAAU,EAAE,CAAC;YACpB,QAAQ,CAAC,UAAU,EAAE,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACV,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -64,6 +64,7 @@ export declare function ShellBody({ children, className }: {
|
|
|
64
64
|
children: ReactNode;
|
|
65
65
|
className?: string;
|
|
66
66
|
}): import("react").JSX.Element;
|
|
67
|
+
/** Content a keyboard can already reach inside a scroller, which then needs no tab stop of its own. */
|
|
67
68
|
/**
|
|
68
69
|
* The main landmark and scroll container; the skip link lands here. `relative` so anything absolutely positioned
|
|
69
70
|
* inside (sr-only text, React Aria's hidden inputs) scrolls with the page instead of being placed against the shell.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-shell.d.ts","sourceRoot":"","sources":["../../src/shell/dashboard-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EASL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard-shell.d.ts","sourceRoot":"","sources":["../../src/shell/dashboard-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EASL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AACnE,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC3C,iFAAiF;AACjF,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,UAAU,EAAE,eAAe,CAAC;IAC5B,4EAA4E;IAC5E,YAAY,EAAE,OAAO,CAAC;CACvB;AAID,wBAAgB,QAAQ,IAAI,iBAAiB,CAI5C;AACD,wFAAwF;AACxF,wBAAgB,gBAAgB,IAAI,iBAAiB,GAAG,IAAI,CAE3D;AAeD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,wFAAwF;IACxF,WAAW,EAAE,MAAM,CAAC;IACpB,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kFAAkF;IAClF,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,sEAAsE;IACtE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,oBAA4B,EAC5B,uBAAuB,EACvB,IAAI,EAAE,UAAU,EAChB,UAAsB,EACtB,aAAa,EACb,MAAM,EACN,SAAS,EACT,KAAK,GACN,EAAE,mBAAmB,+BA8FrB;AAED,sGAAsG;AACtG,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAY9F;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAE7F;AAED,uGAAuG;AACvG;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,iBAAiB,EAAE,UAAU,GAC9B,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,+BAsBA"}
|