@charcuterie/ui 4.1.0 → 4.2.1
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/README.md +3 -2
- package/dist/Main/Main.d.ts +33 -0
- package/dist/Main/Main.d.ts.map +1 -1
- package/dist/Main/Main.js +34 -1
- package/dist/Main/Main.js.map +1 -1
- package/dist/RouterLink/UnstyledLink.d.ts +17 -0
- package/dist/RouterLink/UnstyledLink.d.ts.map +1 -0
- package/dist/RouterLink/UnstyledLink.js +24 -0
- package/dist/RouterLink/UnstyledLink.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/ActionTiles/ActionTiles.mdx +18 -2
- package/src/Main/Main.mdx +30 -1
- package/src/Main/Main.stories.tsx +39 -7
- package/src/Main/Main.test.tsx +84 -1
- package/src/Main/Main.tsx +34 -1
- package/src/RouterLink/RouterLink.mdx +25 -4
- package/src/RouterLink/UnstyledLink.stories.tsx +57 -0
- package/src/RouterLink/UnstyledLink.test.tsx +40 -0
- package/src/RouterLink/UnstyledLink.tsx +34 -0
- package/src/Shell/Shell.stories.tsx +11 -0
- package/src/index.ts +2 -0
- package/src/shell.storyHelpers.tsx +67 -19
- package/src/sourceRules.test.ts +2 -3
package/README.md
CHANGED
|
@@ -27,12 +27,13 @@ an accordion panel is [a `group` rather than a landmark](../../docs/decisions/20
|
|
|
27
27
|
and [not every boolean is a state kind](../../docs/decisions/2026-07-31-not-every-boolean-is-a-state-kind.md).
|
|
28
28
|
Full write-up: [M6a handoff](../../docs/2026-07-31-m6a-the-p1-components.md).
|
|
29
29
|
|
|
30
|
-
**The link family** — `TextLink` and `
|
|
30
|
+
**The link family** — `TextLink`, `ButtonLink`, and `UnstyledLink` — closes the gap that had seven repos
|
|
31
31
|
hand-rolling a `←` back-link, plex-channels navigating with
|
|
32
32
|
`<button onClick={() => navigate(…)}>`, and mux-magic reloading the page through 14 raw
|
|
33
33
|
`<a href>`. Buttons are for on-page actions; links are for navigation, and both of these
|
|
34
34
|
render a real `<a href>` so middle-click, ctrl-click, open-in-new-tab and copy-link-address
|
|
35
|
-
work.
|
|
35
|
+
work. The first two differ in **paint, not semantics**. `UnstyledLink` owns no paint and
|
|
36
|
+
preserves an established app-owned treatment while still using the same router seam
|
|
36
37
|
([decision](../../docs/decisions/2026-08-10-buttons-are-actions-links-are-navigation.md)).
|
|
37
38
|
The router is **injected** rather than depended on — `RouterLinkProvider` at the app root,
|
|
38
39
|
with `@charcuterie/ui/react-router` as an optional subpath adapter and a plain `<a>` when
|
package/dist/Main/Main.d.ts
CHANGED
|
@@ -80,6 +80,39 @@ export type MainProps = ComponentPropsWithRef<"main"> & {
|
|
|
80
80
|
* an app's own fixed chrome belongs in `Shell`, beside `Main`
|
|
81
81
|
* rather than in it.
|
|
82
82
|
*
|
|
83
|
+
* ## `relative` — the scrollport has to be the containing block
|
|
84
|
+
*
|
|
85
|
+
* `<main>` is the page's only vertical scrollport, so everything
|
|
86
|
+
* in it is supposed to scroll *inside* it. An absolutely
|
|
87
|
+
* positioned descendant does not, unless this element is its
|
|
88
|
+
* containing block: with `position: static` here, the nearest
|
|
89
|
+
* positioned ancestor is `Shell`, which is **outside** the
|
|
90
|
+
* scrollport. The box then resolves against `Shell`, `<main>`'s
|
|
91
|
+
* `overflow-y` has no authority over it, and its static position —
|
|
92
|
+
* a couple of thousand pixels down a long document — becomes
|
|
93
|
+
* scrollable overflow on `documentElement`. The page grows to
|
|
94
|
+
* reach it and the reader gets a **second scrollbar** beside the
|
|
95
|
+
* one `<main>` already has.
|
|
96
|
+
*
|
|
97
|
+
* The box does not have to be exotic. Tailwind's `sr-only` is
|
|
98
|
+
* `position: absolute`, so the visually hidden
|
|
99
|
+
* `<span>(opens in a new tab)</span>` on one link in a document
|
|
100
|
+
* footer is enough. Measured on Folio at 1440x900: `<main>` was
|
|
101
|
+
* 835px tall and `document.documentElement.scrollHeight` read
|
|
102
|
+
* 2085, which is exactly where that span sat.
|
|
103
|
+
*
|
|
104
|
+
* `overflow-x: hidden` comes with it and is not decoration.
|
|
105
|
+
* `relative` moves every absolutely positioned descendant's
|
|
106
|
+
* containing block from `Shell` to here, which also moves what
|
|
107
|
+
* clips them **sideways**: `Shell`'s `overflow-x: clip` no longer
|
|
108
|
+
* reaches them, so a drawer parked at `translateX(110%)` inside
|
|
109
|
+
* `Main` would draw a horizontal scrollbar on the scrollport
|
|
110
|
+
* instead of being clipped. `hidden` rather than `clip` because
|
|
111
|
+
* this element already scrolls on the other axis — a `clip` beside
|
|
112
|
+
* an `auto` computes to `hidden` anyway, and writing what the
|
|
113
|
+
* browser will use is the honest spelling. `Shell`'s note on the
|
|
114
|
+
* clip explains the other half.
|
|
115
|
+
*
|
|
83
116
|
* ## It remembers where each history entry was scrolled to
|
|
84
117
|
*
|
|
85
118
|
* `Shell` gives this element the page's only vertical scrollport,
|
package/dist/Main/Main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Main.d.ts","sourceRoot":"","sources":["../../src/Main/Main.tsx"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EAGf,MAAM,OAAO,CAAA;AAEd,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,0BAA0B,CAAA;AAMjC,MAAM,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,GAAG;IACtD,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"Main.d.ts","sourceRoot":"","sources":["../../src/Main/Main.tsx"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EAGf,MAAM,OAAO,CAAA;AAEd,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,0BAA0B,CAAA;AAMjC,MAAM,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,GAAG;IACtD,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2KG;AACH,eAAO,MAAM,IAAI,GAAI,8DAOlB,SAAS,KAAG,SA0Dd,CAAA"}
|
package/dist/Main/Main.js
CHANGED
|
@@ -83,6 +83,39 @@ import { useScrollMemory } from "./useScrollMemory.js";
|
|
|
83
83
|
* an app's own fixed chrome belongs in `Shell`, beside `Main`
|
|
84
84
|
* rather than in it.
|
|
85
85
|
*
|
|
86
|
+
* ## `relative` — the scrollport has to be the containing block
|
|
87
|
+
*
|
|
88
|
+
* `<main>` is the page's only vertical scrollport, so everything
|
|
89
|
+
* in it is supposed to scroll *inside* it. An absolutely
|
|
90
|
+
* positioned descendant does not, unless this element is its
|
|
91
|
+
* containing block: with `position: static` here, the nearest
|
|
92
|
+
* positioned ancestor is `Shell`, which is **outside** the
|
|
93
|
+
* scrollport. The box then resolves against `Shell`, `<main>`'s
|
|
94
|
+
* `overflow-y` has no authority over it, and its static position —
|
|
95
|
+
* a couple of thousand pixels down a long document — becomes
|
|
96
|
+
* scrollable overflow on `documentElement`. The page grows to
|
|
97
|
+
* reach it and the reader gets a **second scrollbar** beside the
|
|
98
|
+
* one `<main>` already has.
|
|
99
|
+
*
|
|
100
|
+
* The box does not have to be exotic. Tailwind's `sr-only` is
|
|
101
|
+
* `position: absolute`, so the visually hidden
|
|
102
|
+
* `<span>(opens in a new tab)</span>` on one link in a document
|
|
103
|
+
* footer is enough. Measured on Folio at 1440x900: `<main>` was
|
|
104
|
+
* 835px tall and `document.documentElement.scrollHeight` read
|
|
105
|
+
* 2085, which is exactly where that span sat.
|
|
106
|
+
*
|
|
107
|
+
* `overflow-x: hidden` comes with it and is not decoration.
|
|
108
|
+
* `relative` moves every absolutely positioned descendant's
|
|
109
|
+
* containing block from `Shell` to here, which also moves what
|
|
110
|
+
* clips them **sideways**: `Shell`'s `overflow-x: clip` no longer
|
|
111
|
+
* reaches them, so a drawer parked at `translateX(110%)` inside
|
|
112
|
+
* `Main` would draw a horizontal scrollbar on the scrollport
|
|
113
|
+
* instead of being clipped. `hidden` rather than `clip` because
|
|
114
|
+
* this element already scrolls on the other axis — a `clip` beside
|
|
115
|
+
* an `auto` computes to `hidden` anyway, and writing what the
|
|
116
|
+
* browser will use is the honest spelling. `Shell`'s note on the
|
|
117
|
+
* clip explains the other half.
|
|
118
|
+
*
|
|
86
119
|
* ## It remembers where each history entry was scrolled to
|
|
87
120
|
*
|
|
88
121
|
* `Shell` gives this element the page's only vertical scrollport,
|
|
@@ -155,7 +188,7 @@ export const Main = ({ children, className, contentWidth, id, ref, ...mainProps
|
|
|
155
188
|
const maxInlineSize = toMaxInlineSize(contentWidth ??
|
|
156
189
|
shell?.contentWidth ??
|
|
157
190
|
DEFAULT_CONTENT_WIDTH);
|
|
158
|
-
return (_jsx("main", { ...mainProps, className: toClassName("charcuterie-scrollbar col-start-1 row-start-3 min-h-0 min-w-0 overflow-y-auto md:col-start-2 md:row-start-2", className), id: id ?? shell?.mainId ?? fallbackId,
|
|
191
|
+
return (_jsx("main", { ...mainProps, className: toClassName("charcuterie-scrollbar relative col-start-1 row-start-3 min-h-0 min-w-0 overflow-x-hidden overflow-y-auto md:col-start-2 md:row-start-2", className), id: id ?? shell?.mainId ?? fallbackId,
|
|
159
192
|
// A caller's `ref` is a subscription, not a value, so the
|
|
160
193
|
// scroll memory composes with it rather than replacing it.
|
|
161
194
|
//
|
package/dist/Main/Main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Main.js","sourceRoot":"","sources":["../../src/Main/Main.tsx"],"names":[],"mappings":";AAAA,OAAO,EAEL,SAAS,EACT,WAAW,GACZ,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAIL,UAAU,GACX,MAAM,OAAO,CAAA;AAEd,OAAO,EAEL,qBAAqB,EACrB,eAAe,GAChB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAMtD
|
|
1
|
+
{"version":3,"file":"Main.js","sourceRoot":"","sources":["../../src/Main/Main.tsx"],"names":[],"mappings":";AAAA,OAAO,EAEL,SAAS,EACT,WAAW,GACZ,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAIL,UAAU,GACX,MAAM,OAAO,CAAA;AAEd,OAAO,EAEL,qBAAqB,EACrB,eAAe,GAChB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAMtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2KG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EACnB,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,EAAE,EACF,GAAG,EACH,GAAG,SAAS,EACF,EAAa,EAAE;IACzB,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;IACtC,MAAM,WAAW,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAA;IACnD,MAAM,aAAa,GAAG,eAAe,CAAC,WAAW,CAAC,CAAA;IAElD,iEAAiE;IACjE,2DAA2D;IAC3D,MAAM,UAAU,GAAG,WAAW,EAAE,CAAA;IAEhC,MAAM,aAAa,GAAG,eAAe,CACnC,YAAY;QACV,KAAK,EAAE,YAAY;QACnB,qBAAqB,CACxB,CAAA;IAED,OAAO,CACL,kBACM,SAAS,EACb,SAAS,EAAE,WAAW,CACpB,wIAAwI,EACxI,SAAS,CACV,EACD,EAAE,EAAE,EAAE,IAAI,KAAK,EAAE,MAAM,IAAI,UAAU;QACrC,0DAA0D;QAC1D,2DAA2D;QAC3D,EAAE;QACF,yDAAyD;QACzD,8DAA8D;QAC9D,qBAAqB;QACrB,GAAG,EACD,GAAG;YACD,CAAC,CAAE,SAAS,CACR,GAAmB,EACnB,aAAa,CACe;YAChC,CAAC,CAAC,aAAa,EAEnB,QAAQ,EAAE,CAAC,CAAC,YAaZ,cACE,SAAS,EAAC,uFAAuF,EACjG,KAAK,EAAE,EAAE,aAAa,EAAE,YAEvB,QAAQ,GACL,GACD,CACR,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import { type RouterLinkProps } from "./routerLink.ts";
|
|
3
|
+
export type UnstyledLinkProps = RouterLinkProps;
|
|
4
|
+
/**
|
|
5
|
+
* A router-aware link that owns no paint.
|
|
6
|
+
*
|
|
7
|
+
* Use this only when the caller already owns the complete visual
|
|
8
|
+
* treatment. `TextLink` and `ButtonLink` remain the defaults for the
|
|
9
|
+
* two link appearances the library owns.
|
|
10
|
+
*
|
|
11
|
+
* An in-app destination goes through the injected router. Another
|
|
12
|
+
* origin, another scheme, or a same-page fragment stays a platform
|
|
13
|
+
* anchor. With no provider, the injected component is `AnchorLink`,
|
|
14
|
+
* so this remains a working `<a href>` in Storybook and tests.
|
|
15
|
+
*/
|
|
16
|
+
export declare const UnstyledLink: ({ href, ...linkProps }: UnstyledLinkProps) => ReactNode;
|
|
17
|
+
//# sourceMappingURL=UnstyledLink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnstyledLink.d.ts","sourceRoot":"","sources":["../../src/RouterLink/UnstyledLink.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAA;AAExB,MAAM,MAAM,iBAAiB,GAAG,eAAe,CAAA;AAE/C;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,GAAI,wBAG1B,iBAAiB,KAAG,SAOtB,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { AnchorLink } from "./AnchorLink.js";
|
|
3
|
+
import { useRouterLink } from "./RouterLinkProvider.js";
|
|
4
|
+
import { getIsRoutedHref, } from "./routerLink.js";
|
|
5
|
+
/**
|
|
6
|
+
* A router-aware link that owns no paint.
|
|
7
|
+
*
|
|
8
|
+
* Use this only when the caller already owns the complete visual
|
|
9
|
+
* treatment. `TextLink` and `ButtonLink` remain the defaults for the
|
|
10
|
+
* two link appearances the library owns.
|
|
11
|
+
*
|
|
12
|
+
* An in-app destination goes through the injected router. Another
|
|
13
|
+
* origin, another scheme, or a same-page fragment stays a platform
|
|
14
|
+
* anchor. With no provider, the injected component is `AnchorLink`,
|
|
15
|
+
* so this remains a working `<a href>` in Storybook and tests.
|
|
16
|
+
*/
|
|
17
|
+
export const UnstyledLink = ({ href, ...linkProps }) => {
|
|
18
|
+
const RouterLink = useRouterLink();
|
|
19
|
+
const LinkElement = getIsRoutedHref(href)
|
|
20
|
+
? RouterLink
|
|
21
|
+
: AnchorLink;
|
|
22
|
+
return _jsx(LinkElement, { ...linkProps, href: href });
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=UnstyledLink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnstyledLink.js","sourceRoot":"","sources":["../../src/RouterLink/UnstyledLink.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAA0B,CAAA;AACxD,OAAO,EACL,eAAe,GAEhB,MAAM,iBAAiB,CAAA;AAIxB;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC3B,IAAI,EACJ,GAAG,SAAS,EACM,EAAa,EAAE;IACjC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC;QACvC,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,UAAU,CAAA;IAEd,OAAO,KAAC,WAAW,OAAK,SAAS,EAAE,IAAI,EAAE,IAAI,GAAI,CAAA;AACnD,CAAC,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -169,6 +169,8 @@ export { AnchorLink } from "./RouterLink/AnchorLink.tsx";
|
|
|
169
169
|
export { RouterLinkProvider, useRouterLink, } from "./RouterLink/RouterLinkProvider.tsx";
|
|
170
170
|
export type { RouterLinkComponent, RouterLinkProps, } from "./RouterLink/routerLink.ts";
|
|
171
171
|
export { getIsRoutedHref } from "./RouterLink/routerLink.ts";
|
|
172
|
+
export type { UnstyledLinkProps } from "./RouterLink/UnstyledLink.tsx";
|
|
173
|
+
export { UnstyledLink } from "./RouterLink/UnstyledLink.tsx";
|
|
172
174
|
export type { SearchInputProps } from "./SearchInput/SearchInput.tsx";
|
|
173
175
|
export { SearchInput } from "./SearchInput/SearchInput.tsx";
|
|
174
176
|
export type { SegmentedControlProps, SegmentedItem, } from "./SegmentedControl/SegmentedControl.tsx";
|
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
CHANGED
|
@@ -99,6 +99,7 @@ export { ReorderList } from "./ReorderList/ReorderList.js";
|
|
|
99
99
|
export { AnchorLink } from "./RouterLink/AnchorLink.js";
|
|
100
100
|
export { RouterLinkProvider, useRouterLink, } from "./RouterLink/RouterLinkProvider.js";
|
|
101
101
|
export { getIsRoutedHref } from "./RouterLink/routerLink.js";
|
|
102
|
+
export { UnstyledLink } from "./RouterLink/UnstyledLink.js";
|
|
102
103
|
export { SearchInput } from "./SearchInput/SearchInput.js";
|
|
103
104
|
export { SegmentedControl } from "./SegmentedControl/SegmentedControl.js";
|
|
104
105
|
export { Select } from "./Select/Select.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -173,12 +173,28 @@ same constant `RadioGroup`'s tile shape uses, and each of its three parts is loa
|
|
|
173
173
|
class strings, so `` `grid-cols-[…${n}px…]` `` generates nothing, paints nothing and
|
|
174
174
|
reports nothing.
|
|
175
175
|
|
|
176
|
+
### The floor sizes the CONTAINER's tracks, not the tiles
|
|
177
|
+
|
|
178
|
+
`minTileInlineSize` is the narrowest a **track** may be, and `auto-fill` lays as many of
|
|
179
|
+
them as fit whether or not there are tiles to put in them. So the number to pick comes from
|
|
180
|
+
the width of the box the set is in, divided by how many tiles you want across it — not from
|
|
181
|
+
how many tiles you have.
|
|
182
|
+
|
|
183
|
+
Leave it at the 200px default in a 1024px container and the grid cuts four tracks. Two
|
|
184
|
+
tiles take the first two, the other half of the row is empty background, and the set reads
|
|
185
|
+
as a layout bug.
|
|
186
|
+
|
|
187
|
+
⚠️ **Nothing reports this.** It type-checks, it lints, it passes every unit and e2e test,
|
|
188
|
+
and the DOM is correct — the tiles really are in a grid, and the grid really has the columns
|
|
189
|
+
it was asked for. Three apps shipped a half-empty row on the day they adopted this
|
|
190
|
+
component, and each one was caught by a screenshot. If a set has few tiles, look at it.
|
|
191
|
+
|
|
192
|
+
<Canvas of={ActionTilesStories.Responsive} />
|
|
193
|
+
|
|
176
194
|
This is **not** `useAdaptiveColumns`. That hook buys a column with **height**, for an
|
|
177
195
|
unbounded gallery that is going to scroll; a tile set is a bounded group inside a form section
|
|
178
196
|
or a first step, where the only question is how many fit across the box it was given.
|
|
179
197
|
|
|
180
|
-
<Canvas of={ActionTilesStories.Responsive} />
|
|
181
|
-
|
|
182
198
|
## What this deliberately does not do
|
|
183
199
|
|
|
184
200
|
- **Hold a selection.** That is `RadioGroup itemShape="tile"`, and giving these tiles
|
package/src/Main/Main.mdx
CHANGED
|
@@ -109,7 +109,9 @@ for a `getBoundingClientRect()` assertion to catch. That is why the gate asserts
|
|
|
109
109
|
`document.documentElement.scrollWidth`, and why `Main.test.tsx` pins the computed value.
|
|
110
110
|
|
|
111
111
|
That is the cheap half of the horizontal-scroll fix; the other halves are `minmax(0, 1fr)`
|
|
112
|
-
and `overflow-x: clip` on `Shell
|
|
112
|
+
and `overflow-x: clip` on `Shell`, plus `overflow-x: hidden` here for anything absolutely
|
|
113
|
+
positioned **inside** the scrollport — the next section says why that one cannot be left to
|
|
114
|
+
the frame.
|
|
113
115
|
|
|
114
116
|
A `<table>` is the one thing neither can save. Table columns have min-content widths that no
|
|
115
117
|
`overflow-wrap` reaches, so a wide table goes in a scroll container:
|
|
@@ -140,6 +142,33 @@ satisfy it and the choice is not a matter of taste:
|
|
|
140
142
|
`aria-label` on the container is worth it either way: it turns the scroller into a named
|
|
141
143
|
region, so the table is announced as a thing rather than as loose content.
|
|
142
144
|
|
|
145
|
+
## `relative`, and the second scrollbar
|
|
146
|
+
|
|
147
|
+
`<main>` is the page's only vertical scrollport, so the document itself must never scroll.
|
|
148
|
+
An absolutely positioned descendant breaks that unless `<main>` is its **containing block**.
|
|
149
|
+
With `position: static` the nearest positioned ancestor is `Shell`, which sits *outside* the
|
|
150
|
+
scrollport: the box resolves against the frame, `<main>`'s `overflow-y` has no authority over
|
|
151
|
+
it, and its static position — a couple of thousand pixels down a long document — lands as
|
|
152
|
+
scrollable overflow on `documentElement`. The page grows to reach it, and the reader gets a
|
|
153
|
+
**second scrollbar** beside the one `<main>` already has.
|
|
154
|
+
|
|
155
|
+
The box does not have to be exotic, which is what makes this hard to spot. Tailwind's
|
|
156
|
+
`sr-only` is `position: absolute`, so one visually hidden `(opens in a new tab)` span in a
|
|
157
|
+
document footer is enough. Measured on Folio at 1440x900 before this: `<main>` 835px tall,
|
|
158
|
+
`document.documentElement.scrollHeight` 2085 — the span's offset, exactly. Nothing on the
|
|
159
|
+
page looked wrong; there were simply two scrollbars.
|
|
160
|
+
|
|
161
|
+
`overflow-x: hidden` comes with the `relative` and is not decoration. Moving every
|
|
162
|
+
absolutely positioned descendant's containing block from `Shell` to `<main>` also moves what
|
|
163
|
+
clips them sideways, so `Shell`'s `overflow-x: clip` no longer reaches them — a drawer parked
|
|
164
|
+
at `translateX(110%)` **inside** `Main` would draw a horizontal scrollbar on the scrollport
|
|
165
|
+
instead of being clipped. `hidden` rather than `clip` because this element already scrolls on
|
|
166
|
+
the other axis: `clip` beside an `auto` computes to `hidden` anyway, so writing `hidden` is
|
|
167
|
+
writing what the browser will use.
|
|
168
|
+
|
|
169
|
+
An app's own parked chrome still belongs in `Shell`, beside `Main` rather than in it. That is
|
|
170
|
+
what `Shell`'s clip is for, and it is the arrangement `Shell.stories.tsx` demonstrates.
|
|
171
|
+
|
|
143
172
|
## `tabIndex={-1}`
|
|
144
173
|
|
|
145
174
|
<Canvas of={MainStories.Interactive} />
|
|
@@ -10,10 +10,13 @@ import { toMaxInlineSize } from "../Shell/contentWidth.ts"
|
|
|
10
10
|
import { Shell } from "../Shell/Shell.tsx"
|
|
11
11
|
import { Spinner } from "../Spinner/Spinner.tsx"
|
|
12
12
|
import {
|
|
13
|
+
ExternalLinkFooter,
|
|
13
14
|
HeaderSchemeToggle,
|
|
14
15
|
OverflowingContent,
|
|
15
16
|
PageContent,
|
|
17
|
+
ParkedDrawer,
|
|
16
18
|
RailNavigation,
|
|
19
|
+
ScrollFiller,
|
|
17
20
|
} from "../shell.storyHelpers.tsx"
|
|
18
21
|
import { Main } from "./Main.tsx"
|
|
19
22
|
import { ScrollMemoryProvider } from "./ScrollMemoryProvider.tsx"
|
|
@@ -124,14 +127,29 @@ export const AllVariants: Story = {
|
|
|
124
127
|
}
|
|
125
128
|
|
|
126
129
|
/**
|
|
127
|
-
* The 390px fixture
|
|
128
|
-
*
|
|
130
|
+
* The 390px fixture: everything that tries to make the **page**
|
|
131
|
+
* scroll when only `<main>` should, in one column.
|
|
129
132
|
*
|
|
130
|
-
* The path wraps because `Main` sets
|
|
131
|
-
* the table cannot wrap at all and
|
|
132
|
-
* keyboard-reachable scroll container
|
|
133
|
-
*
|
|
134
|
-
*
|
|
133
|
+
* Sideways, three ways. The path wraps because `Main` sets
|
|
134
|
+
* `overflow-wrap: anywhere`; the table cannot wrap at all and
|
|
135
|
+
* lives in a labelled, keyboard-reachable scroll container; and
|
|
136
|
+
* the drawer parked at `translateX(110%)` is clipped. The drawer
|
|
137
|
+
* is **inside** `Main` here, unlike `Shell.stories.tsx`, so the
|
|
138
|
+
* element clipping it is `Main` — `position: relative` moved that
|
|
139
|
+
* job in from the frame, and `overflow-x: hidden` is `Main`
|
|
140
|
+
* taking it.
|
|
141
|
+
*
|
|
142
|
+
* Downwards, once, and it is the shape nobody looks for: the
|
|
143
|
+
* footer link's `sr-only` "(opens in a new tab)" span is
|
|
144
|
+
* `position: absolute`, so it resolves against the nearest
|
|
145
|
+
* positioned ancestor. Before `Main` was one that was `Shell`,
|
|
146
|
+
* outside the scrollport, and the span's static position past the
|
|
147
|
+
* fold became scrollable overflow on the page. `ScrollFiller` is
|
|
148
|
+
* what puts it past the fold; without the height there is nothing
|
|
149
|
+
* to escape.
|
|
150
|
+
*
|
|
151
|
+
* The assertions are in `Main.test.tsx` at a real 390px viewport
|
|
152
|
+
* — a story is a demo.
|
|
135
153
|
*/
|
|
136
154
|
export const Responsive: Story = {
|
|
137
155
|
render: (mainProps) => (
|
|
@@ -139,7 +157,21 @@ export const Responsive: Story = {
|
|
|
139
157
|
<Header heading="Transfers" />
|
|
140
158
|
|
|
141
159
|
<Main {...mainProps}>
|
|
160
|
+
<ParkedDrawer />
|
|
161
|
+
|
|
142
162
|
<OverflowingContent />
|
|
163
|
+
|
|
164
|
+
{/*
|
|
165
|
+
Twice. One is a few dozen pixels short of filling an
|
|
166
|
+
844px phone, and the footer below has to sit past the
|
|
167
|
+
fold or there is nothing for its hidden span to escape
|
|
168
|
+
to.
|
|
169
|
+
*/}
|
|
170
|
+
<ScrollFiller />
|
|
171
|
+
|
|
172
|
+
<ScrollFiller />
|
|
173
|
+
|
|
174
|
+
<ExternalLinkFooter />
|
|
143
175
|
</Main>
|
|
144
176
|
</Shell>
|
|
145
177
|
),
|
package/src/Main/Main.test.tsx
CHANGED
|
@@ -89,7 +89,7 @@ test("main is the query container its content responds to", async () => {
|
|
|
89
89
|
).toHaveLength(2)
|
|
90
90
|
})
|
|
91
91
|
|
|
92
|
-
test("
|
|
92
|
+
test("nothing in the fixture widens the page at 390px", async () => {
|
|
93
93
|
await setViewport(PHONE)
|
|
94
94
|
|
|
95
95
|
const { canvas, canvasElement } =
|
|
@@ -131,6 +131,30 @@ test("neither an unbroken path nor a wide table widens the page at 390px", async
|
|
|
131
131
|
scroller.clientWidth,
|
|
132
132
|
)
|
|
133
133
|
|
|
134
|
+
// The drawer parked at `translateX(110%)`, which is inside
|
|
135
|
+
// `Main` in this story rather than beside it. `Shell`'s
|
|
136
|
+
// `overflow-x: clip` cannot reach it any more — `Main` is
|
|
137
|
+
// `position: relative`, so `Main` is its containing block and
|
|
138
|
+
// `Main`'s own `overflow-x` is the only thing between it and a
|
|
139
|
+
// horizontal scrollbar on the scrollport.
|
|
140
|
+
const parkedDrawer = canvasElement.querySelector(
|
|
141
|
+
"#parked-drawer",
|
|
142
|
+
) as HTMLElement
|
|
143
|
+
|
|
144
|
+
const main = canvas.getByRole("main")
|
|
145
|
+
|
|
146
|
+
await expect(parkedDrawer.offsetParent).toBe(main)
|
|
147
|
+
|
|
148
|
+
// `hidden` rather than `clip`, and the browser decides that:
|
|
149
|
+
// `overflow-x: clip` beside an `overflow-y: auto` computes to
|
|
150
|
+
// `hidden`, so `Main` writes what will actually be used. It is
|
|
151
|
+
// also why the assertion is on the *page* below rather than on
|
|
152
|
+
// `main.scrollWidth` — a `hidden` box still reports the
|
|
153
|
+
// overflow it is refusing to scroll to.
|
|
154
|
+
await expect(
|
|
155
|
+
globalThis.getComputedStyle(main).overflowX,
|
|
156
|
+
).toBe("hidden")
|
|
157
|
+
|
|
134
158
|
const { documentElement } = document
|
|
135
159
|
|
|
136
160
|
await expect(
|
|
@@ -140,6 +164,65 @@ test("neither an unbroken path nor a wide table widens the page at 390px", async
|
|
|
140
164
|
await expectNoAxeViolations(canvasElement)
|
|
141
165
|
})
|
|
142
166
|
|
|
167
|
+
/**
|
|
168
|
+
* The second scrollbar, and how cheaply it is bought.
|
|
169
|
+
*
|
|
170
|
+
* `<main>` is the page's only vertical scrollport, so the document
|
|
171
|
+
* itself must not scroll. An absolutely positioned descendant
|
|
172
|
+
* breaks that unless `<main>` is its containing block: resolve it
|
|
173
|
+
* against `Shell` instead — which is what `position: static` here
|
|
174
|
+
* used to mean — and the box keeps its static position, deep down
|
|
175
|
+
* a long document, while sitting outside the scrollport. The page
|
|
176
|
+
* grows to reach it.
|
|
177
|
+
*
|
|
178
|
+
* The box in this fixture is Tailwind's `sr-only`, one pixel of
|
|
179
|
+
* nothing on an "opens in a new tab" hint. Measured on Folio
|
|
180
|
+
* before this: `<main>` 835px tall,
|
|
181
|
+
* `document.documentElement.scrollHeight` 2085 — the span's
|
|
182
|
+
* offset, exactly.
|
|
183
|
+
*/
|
|
184
|
+
test("a visually hidden span past the fold does not give the page a second scrollbar", async () => {
|
|
185
|
+
await setViewport(PHONE)
|
|
186
|
+
|
|
187
|
+
const { canvas, canvasElement } =
|
|
188
|
+
await mountStory(Responsive)
|
|
189
|
+
|
|
190
|
+
const main = canvas.getByRole("main")
|
|
191
|
+
|
|
192
|
+
// The fixture is only a fixture if `<main>` genuinely scrolls
|
|
193
|
+
// and the span genuinely sits past the fold. Without the
|
|
194
|
+
// height there is nothing for it to escape to, and every
|
|
195
|
+
// assertion below would pass against a short page.
|
|
196
|
+
await expect(main.scrollHeight).toBeGreaterThan(
|
|
197
|
+
main.clientHeight,
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
// By id rather than by text: the hint's words are part of the
|
|
201
|
+
// link's accessible name too, so a text query matches both the
|
|
202
|
+
// span and the anchor around it.
|
|
203
|
+
const hint = canvasElement.querySelector(
|
|
204
|
+
"#new-tab-hint",
|
|
205
|
+
) as HTMLElement
|
|
206
|
+
|
|
207
|
+
await expect(
|
|
208
|
+
globalThis.getComputedStyle(hint).position,
|
|
209
|
+
).toBe("absolute")
|
|
210
|
+
|
|
211
|
+
await expect(
|
|
212
|
+
hint.getBoundingClientRect().top,
|
|
213
|
+
).toBeGreaterThan(main.getBoundingClientRect().bottom)
|
|
214
|
+
|
|
215
|
+
await expect(hint.offsetParent).toBe(main)
|
|
216
|
+
|
|
217
|
+
const { documentElement } = document
|
|
218
|
+
|
|
219
|
+
await expect(
|
|
220
|
+
documentElement.scrollHeight,
|
|
221
|
+
).toBeLessThanOrEqual(documentElement.clientHeight)
|
|
222
|
+
|
|
223
|
+
await expectNoAxeViolations(canvasElement)
|
|
224
|
+
})
|
|
225
|
+
|
|
143
226
|
/**
|
|
144
227
|
* `tabIndex={-1}` is the difference between a skip link that
|
|
145
228
|
* works and one that only scrolls. It must not put `<main>` in
|
package/src/Main/Main.tsx
CHANGED
|
@@ -101,6 +101,39 @@ export type MainProps = ComponentPropsWithRef<"main"> & {
|
|
|
101
101
|
* an app's own fixed chrome belongs in `Shell`, beside `Main`
|
|
102
102
|
* rather than in it.
|
|
103
103
|
*
|
|
104
|
+
* ## `relative` — the scrollport has to be the containing block
|
|
105
|
+
*
|
|
106
|
+
* `<main>` is the page's only vertical scrollport, so everything
|
|
107
|
+
* in it is supposed to scroll *inside* it. An absolutely
|
|
108
|
+
* positioned descendant does not, unless this element is its
|
|
109
|
+
* containing block: with `position: static` here, the nearest
|
|
110
|
+
* positioned ancestor is `Shell`, which is **outside** the
|
|
111
|
+
* scrollport. The box then resolves against `Shell`, `<main>`'s
|
|
112
|
+
* `overflow-y` has no authority over it, and its static position —
|
|
113
|
+
* a couple of thousand pixels down a long document — becomes
|
|
114
|
+
* scrollable overflow on `documentElement`. The page grows to
|
|
115
|
+
* reach it and the reader gets a **second scrollbar** beside the
|
|
116
|
+
* one `<main>` already has.
|
|
117
|
+
*
|
|
118
|
+
* The box does not have to be exotic. Tailwind's `sr-only` is
|
|
119
|
+
* `position: absolute`, so the visually hidden
|
|
120
|
+
* `<span>(opens in a new tab)</span>` on one link in a document
|
|
121
|
+
* footer is enough. Measured on Folio at 1440x900: `<main>` was
|
|
122
|
+
* 835px tall and `document.documentElement.scrollHeight` read
|
|
123
|
+
* 2085, which is exactly where that span sat.
|
|
124
|
+
*
|
|
125
|
+
* `overflow-x: hidden` comes with it and is not decoration.
|
|
126
|
+
* `relative` moves every absolutely positioned descendant's
|
|
127
|
+
* containing block from `Shell` to here, which also moves what
|
|
128
|
+
* clips them **sideways**: `Shell`'s `overflow-x: clip` no longer
|
|
129
|
+
* reaches them, so a drawer parked at `translateX(110%)` inside
|
|
130
|
+
* `Main` would draw a horizontal scrollbar on the scrollport
|
|
131
|
+
* instead of being clipped. `hidden` rather than `clip` because
|
|
132
|
+
* this element already scrolls on the other axis — a `clip` beside
|
|
133
|
+
* an `auto` computes to `hidden` anyway, and writing what the
|
|
134
|
+
* browser will use is the honest spelling. `Shell`'s note on the
|
|
135
|
+
* clip explains the other half.
|
|
136
|
+
*
|
|
104
137
|
* ## It remembers where each history entry was scrolled to
|
|
105
138
|
*
|
|
106
139
|
* `Shell` gives this element the page's only vertical scrollport,
|
|
@@ -189,7 +222,7 @@ export const Main = ({
|
|
|
189
222
|
<main
|
|
190
223
|
{...mainProps}
|
|
191
224
|
className={toClassName(
|
|
192
|
-
"charcuterie-scrollbar col-start-1 row-start-3 min-h-0 min-w-0 overflow-y-auto md:col-start-2 md:row-start-2",
|
|
225
|
+
"charcuterie-scrollbar relative col-start-1 row-start-3 min-h-0 min-w-0 overflow-x-hidden overflow-y-auto md:col-start-2 md:row-start-2",
|
|
193
226
|
className,
|
|
194
227
|
)}
|
|
195
228
|
id={id ?? shell?.mainId ?? fallbackId}
|
|
@@ -4,10 +4,11 @@ import { Meta } from "@storybook/addon-docs/blocks";
|
|
|
4
4
|
|
|
5
5
|
# Routing
|
|
6
6
|
|
|
7
|
-
`TextLink` and `
|
|
8
|
-
at all — it navigates, it can be middle-clicked, ctrl-clicked, opened
|
|
9
|
-
copied — it just reloads the page. **One provider at the app root**
|
|
10
|
-
the tree to the app's own soft navigation, with no change at any
|
|
7
|
+
`TextLink`, `ButtonLink`, and `UnstyledLink` render a real `<a href>`. That is already
|
|
8
|
+
correct with no setup at all — it navigates, it can be middle-clicked, ctrl-clicked, opened
|
|
9
|
+
in a new tab and copied — it just reloads the page. **One provider at the app root**
|
|
10
|
+
upgrades every link in the tree to the app's own soft navigation, with no change at any
|
|
11
|
+
call site.
|
|
11
12
|
|
|
12
13
|
## Why the library does not just import a router
|
|
13
14
|
|
|
@@ -107,6 +108,25 @@ export const ChannelCard = ({ channel }) => (
|
|
|
107
108
|
)
|
|
108
109
|
```
|
|
109
110
|
|
|
111
|
+
`TextLink` owns the fleet's inline and standalone text-link paint. `ButtonLink` owns the
|
|
112
|
+
button-shaped paint. When an app already owns the complete appearance and must preserve it,
|
|
113
|
+
`UnstyledLink` supplies only the same routing behavior:
|
|
114
|
+
|
|
115
|
+
```tsx
|
|
116
|
+
import { UnstyledLink } from "@charcuterie/ui"
|
|
117
|
+
|
|
118
|
+
<UnstyledLink
|
|
119
|
+
className="text-xs text-content-secondary hover:text-content-primary"
|
|
120
|
+
href="/jobs"
|
|
121
|
+
>
|
|
122
|
+
Jobs
|
|
123
|
+
</UnstyledLink>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
It adds no class and changes no target, relation, or accessible name. Prefer the two painted
|
|
127
|
+
components for new UI. Use `UnstyledLink` for an established app-owned treatment whose
|
|
128
|
+
appearance is not part of the change.
|
|
129
|
+
|
|
110
130
|
## Any other router
|
|
111
131
|
|
|
112
132
|
The seam's contract is **a component that takes `href`**, so an adapter is a rename. There
|
|
@@ -208,6 +228,7 @@ what `Main.stories.tsx` does.
|
|
|
208
228
|
| `useRouterLink()` | `@charcuterie/ui` | The injected component, or `AnchorLink`. For an app building its own link-shaped component. |
|
|
209
229
|
| `RouterLinkComponent` / `RouterLinkProps` | `@charcuterie/ui` | The contract: `ComponentPropsWithRef<"a">` with `href` required. |
|
|
210
230
|
| `AnchorLink` | `@charcuterie/ui` | The plain `<a href>` default. |
|
|
231
|
+
| `UnstyledLink` | `@charcuterie/ui` | The router-aware link seam with no library paint. |
|
|
211
232
|
| `getIsRoutedHref(href)` | `@charcuterie/ui` | The destination test above. |
|
|
212
233
|
| `ScrollMemoryProvider` | `@charcuterie/ui` | The scroll seam. `entry` is `{ key, path }` for the current history entry. |
|
|
213
234
|
| `ScrollEntry` | `@charcuterie/ui` | That pair's type. |
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
|
+
import type { ReactNode } from "react"
|
|
3
|
+
|
|
4
|
+
import { RouterLinkProvider } from "./RouterLinkProvider.tsx"
|
|
5
|
+
import type { RouterLinkProps } from "./routerLink.ts"
|
|
6
|
+
import { UnstyledLink } from "./UnstyledLink.tsx"
|
|
7
|
+
|
|
8
|
+
const SoftRouterLink = ({
|
|
9
|
+
href,
|
|
10
|
+
...linkProps
|
|
11
|
+
}: RouterLinkProps): ReactNode => (
|
|
12
|
+
<a {...linkProps} data-router="soft" href={href} />
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
const meta = {
|
|
16
|
+
title: "Utilities/UnstyledLink",
|
|
17
|
+
component: UnstyledLink,
|
|
18
|
+
parameters: { layout: "padded" },
|
|
19
|
+
args: {
|
|
20
|
+
children: "Jobs",
|
|
21
|
+
className:
|
|
22
|
+
"text-sm text-intent-accent-content hover:underline",
|
|
23
|
+
href: "/jobs",
|
|
24
|
+
},
|
|
25
|
+
} satisfies Meta<typeof UnstyledLink>
|
|
26
|
+
|
|
27
|
+
export default meta
|
|
28
|
+
|
|
29
|
+
type Story = StoryObj<typeof meta>
|
|
30
|
+
|
|
31
|
+
export const Default: Story = {}
|
|
32
|
+
|
|
33
|
+
export const Routed: Story = {
|
|
34
|
+
decorators: [
|
|
35
|
+
(Story) => (
|
|
36
|
+
<RouterLinkProvider link={SoftRouterLink}>
|
|
37
|
+
<Story />
|
|
38
|
+
</RouterLinkProvider>
|
|
39
|
+
),
|
|
40
|
+
],
|
|
41
|
+
render: (linkProps) => (
|
|
42
|
+
<div className="flex gap-4">
|
|
43
|
+
<UnstyledLink {...linkProps}>
|
|
44
|
+
Routed jobs
|
|
45
|
+
</UnstyledLink>
|
|
46
|
+
<UnstyledLink
|
|
47
|
+
{...linkProps}
|
|
48
|
+
href="https://example.com/jobs"
|
|
49
|
+
>
|
|
50
|
+
External jobs
|
|
51
|
+
</UnstyledLink>
|
|
52
|
+
<UnstyledLink {...linkProps} href="#jobs">
|
|
53
|
+
Jobs fragment
|
|
54
|
+
</UnstyledLink>
|
|
55
|
+
</div>
|
|
56
|
+
),
|
|
57
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { composeStories } from "@storybook/react"
|
|
2
|
+
import { expect } from "storybook/test"
|
|
3
|
+
import { test } from "vitest"
|
|
4
|
+
|
|
5
|
+
import { mountStory } from "../mountStory.testHelpers.ts"
|
|
6
|
+
import { expectAgentDrivable } from "../testing/index.ts"
|
|
7
|
+
import * as stories from "./UnstyledLink.stories.tsx"
|
|
8
|
+
|
|
9
|
+
const { Default, Routed } = composeStories(stories)
|
|
10
|
+
|
|
11
|
+
test("keeps the caller's paint and works without a router", async () => {
|
|
12
|
+
const { canvas } = await mountStory(Default)
|
|
13
|
+
const link = expectAgentDrivable(canvas, {
|
|
14
|
+
name: "Jobs",
|
|
15
|
+
role: "link",
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
await expect(link).toHaveAttribute("href", "/jobs")
|
|
19
|
+
await expect(link).toHaveAttribute(
|
|
20
|
+
"class",
|
|
21
|
+
"text-sm text-intent-accent-content hover:underline",
|
|
22
|
+
)
|
|
23
|
+
await expect(link).not.toHaveAttribute("data-router")
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
test("routes only destinations the injected router can serve", async () => {
|
|
27
|
+
const { canvas } = await mountStory(Routed)
|
|
28
|
+
|
|
29
|
+
await expect(
|
|
30
|
+
canvas.getByRole("link", { name: "Routed jobs" }),
|
|
31
|
+
).toHaveAttribute("data-router", "soft")
|
|
32
|
+
|
|
33
|
+
await expect(
|
|
34
|
+
canvas.getByRole("link", { name: "External jobs" }),
|
|
35
|
+
).not.toHaveAttribute("data-router")
|
|
36
|
+
|
|
37
|
+
await expect(
|
|
38
|
+
canvas.getByRole("link", { name: "Jobs fragment" }),
|
|
39
|
+
).not.toHaveAttribute("data-router")
|
|
40
|
+
})
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ReactNode } from "react"
|
|
2
|
+
|
|
3
|
+
import { AnchorLink } from "./AnchorLink.tsx"
|
|
4
|
+
import { useRouterLink } from "./RouterLinkProvider.tsx"
|
|
5
|
+
import {
|
|
6
|
+
getIsRoutedHref,
|
|
7
|
+
type RouterLinkProps,
|
|
8
|
+
} from "./routerLink.ts"
|
|
9
|
+
|
|
10
|
+
export type UnstyledLinkProps = RouterLinkProps
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A router-aware link that owns no paint.
|
|
14
|
+
*
|
|
15
|
+
* Use this only when the caller already owns the complete visual
|
|
16
|
+
* treatment. `TextLink` and `ButtonLink` remain the defaults for the
|
|
17
|
+
* two link appearances the library owns.
|
|
18
|
+
*
|
|
19
|
+
* An in-app destination goes through the injected router. Another
|
|
20
|
+
* origin, another scheme, or a same-page fragment stays a platform
|
|
21
|
+
* anchor. With no provider, the injected component is `AnchorLink`,
|
|
22
|
+
* so this remains a working `<a href>` in Storybook and tests.
|
|
23
|
+
*/
|
|
24
|
+
export const UnstyledLink = ({
|
|
25
|
+
href,
|
|
26
|
+
...linkProps
|
|
27
|
+
}: UnstyledLinkProps): ReactNode => {
|
|
28
|
+
const RouterLink = useRouterLink()
|
|
29
|
+
const LinkElement = getIsRoutedHref(href)
|
|
30
|
+
? RouterLink
|
|
31
|
+
: AnchorLink
|
|
32
|
+
|
|
33
|
+
return <LinkElement {...linkProps} href={href} />
|
|
34
|
+
}
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
HeaderSchemeToggle,
|
|
9
9
|
OverflowingContent,
|
|
10
10
|
PageContent,
|
|
11
|
+
ParkedDrawer,
|
|
11
12
|
RailDetail,
|
|
12
13
|
RailNavigation,
|
|
13
14
|
ScrollFiller,
|
|
@@ -130,6 +131,14 @@ export const WithBothRails: Story = {
|
|
|
130
131
|
* scrolls left and right today for the first reason; the second
|
|
131
132
|
* is what an `overflow-wrap` alone cannot save.
|
|
132
133
|
*
|
|
134
|
+
* The third shape is `ParkedDrawer`, and it sits **beside**
|
|
135
|
+
* `Main` rather than in it — an app's parked chrome is parked
|
|
136
|
+
* against the frame, which is the arrangement `Shell`'s
|
|
137
|
+
* `overflow-x: clip` exists for. Absolutely positioned children
|
|
138
|
+
* of a grid container take no track, so it costs the layout
|
|
139
|
+
* nothing. `Main.stories.tsx` renders the same drawer *inside*
|
|
140
|
+
* `Main`, where the clip that answers it is `Main`'s own.
|
|
141
|
+
*
|
|
133
142
|
* `document.documentElement.scrollWidth <= clientWidth` at 390px
|
|
134
143
|
* is the assertion, and it is in `Shell.test.tsx` rather than
|
|
135
144
|
* here — a story is a demo.
|
|
@@ -150,6 +159,8 @@ export const Responsive: Story = {
|
|
|
150
159
|
<OverflowingContent />
|
|
151
160
|
</Main>
|
|
152
161
|
|
|
162
|
+
<ParkedDrawer />
|
|
163
|
+
|
|
153
164
|
<Rail label="Job detail" side="end">
|
|
154
165
|
<RailDetail />
|
|
155
166
|
</Rail>
|
package/src/index.ts
CHANGED
|
@@ -383,6 +383,8 @@ export type {
|
|
|
383
383
|
RouterLinkProps,
|
|
384
384
|
} from "./RouterLink/routerLink.ts"
|
|
385
385
|
export { getIsRoutedHref } from "./RouterLink/routerLink.ts"
|
|
386
|
+
export type { UnstyledLinkProps } from "./RouterLink/UnstyledLink.tsx"
|
|
387
|
+
export { UnstyledLink } from "./RouterLink/UnstyledLink.tsx"
|
|
386
388
|
export type { SearchInputProps } from "./SearchInput/SearchInput.tsx"
|
|
387
389
|
export { SearchInput } from "./SearchInput/SearchInput.tsx"
|
|
388
390
|
export type {
|
|
@@ -140,8 +140,73 @@ export const ScrollFiller = (): ReactNode => (
|
|
|
140
140
|
)
|
|
141
141
|
|
|
142
142
|
/**
|
|
143
|
-
*
|
|
144
|
-
*
|
|
143
|
+
* A closed drawer parked off the inline edge by a transform — the
|
|
144
|
+
* third shape that makes a page scroll sideways, and the one that
|
|
145
|
+
* broke plex-channels.
|
|
146
|
+
*
|
|
147
|
+
* It is still laid out, still painted, and still part of the
|
|
148
|
+
* scrollable overflow region of whatever it resolves against: a
|
|
149
|
+
* transform does not remove a box from that region, and neither
|
|
150
|
+
* does `visibility: hidden`. So the page scrolls sideways to reach
|
|
151
|
+
* a panel nobody can see, and every `min-width: 0` in the tree is
|
|
152
|
+
* irrelevant. Only a clip on the box's containing block answers
|
|
153
|
+
* it.
|
|
154
|
+
*
|
|
155
|
+
* **Which element that is depends on where the drawer is
|
|
156
|
+
* rendered, and the two stories place it differently on purpose.**
|
|
157
|
+
* Beside `Main` it is `Shell`'s to clip, which is where an app's
|
|
158
|
+
* parked chrome belongs. Inside `Main` it is `Main`'s, because
|
|
159
|
+
* `Main` is `position: relative` — and that is why `Main` carries
|
|
160
|
+
* an `overflow-x: hidden` of its own rather than leaning on the
|
|
161
|
+
* frame's.
|
|
162
|
+
*/
|
|
163
|
+
export const ParkedDrawer = (): ReactNode => (
|
|
164
|
+
<div
|
|
165
|
+
aria-hidden="true"
|
|
166
|
+
className="pointer-events-none absolute top-0 end-0 h-40 w-80 translate-x-[110%] rounded-lg border border-border-subtle bg-surface-raised"
|
|
167
|
+
id="parked-drawer"
|
|
168
|
+
/>
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* The shape that makes a page scroll **down** when only `<main>`
|
|
173
|
+
* was supposed to: an ordinary external link whose "opens in a new
|
|
174
|
+
* tab" hint is visually hidden.
|
|
175
|
+
*
|
|
176
|
+
* `sr-only` is `position: absolute`. Nothing here looks like
|
|
177
|
+
* layout at all — the span is one pixel and paints nothing — and
|
|
178
|
+
* that is the point: whatever it resolves against inherits its
|
|
179
|
+
* static position, which is wherever the link happens to sit in a
|
|
180
|
+
* long document. Resolve it outside the scrollport and the page
|
|
181
|
+
* grows to reach it, which is a second scrollbar beside `Main`'s.
|
|
182
|
+
* Folio drew both.
|
|
183
|
+
*
|
|
184
|
+
* It goes at the END of a fixture, past the fold, or the escape it
|
|
185
|
+
* demonstrates has nowhere to escape to.
|
|
186
|
+
*/
|
|
187
|
+
export const ExternalLinkFooter = (): ReactNode => (
|
|
188
|
+
<p className="text-content-secondary text-sm">
|
|
189
|
+
<a
|
|
190
|
+
className="text-intent-accent-content underline"
|
|
191
|
+
href="#runbook"
|
|
192
|
+
id="runbook-link"
|
|
193
|
+
rel="noreferrer"
|
|
194
|
+
target="_blank"
|
|
195
|
+
>
|
|
196
|
+
The transfer runbook
|
|
197
|
+
<span className="sr-only" id="new-tab-hint">
|
|
198
|
+
{" "}
|
|
199
|
+
(opens in a new tab)
|
|
200
|
+
</span>
|
|
201
|
+
</a>
|
|
202
|
+
</p>
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* The two shapes of *content* that make a page scroll sideways,
|
|
207
|
+
* and each needs a different answer. The third shape is a box
|
|
208
|
+
* rather than content and lives in `ParkedDrawer`, because where
|
|
209
|
+
* it is rendered is half of what it demonstrates.
|
|
145
210
|
*
|
|
146
211
|
* The **path** is content that *can* wrap and does not, because
|
|
147
212
|
* nothing in it is a break opportunity. `Main`'s `wrap-anywhere`
|
|
@@ -166,23 +231,6 @@ export const ScrollFiller = (): ReactNode => (
|
|
|
166
231
|
*/
|
|
167
232
|
export const OverflowingContent = (): ReactNode => (
|
|
168
233
|
<>
|
|
169
|
-
{/*
|
|
170
|
-
The third shape, and the one that broke plex-channels: a
|
|
171
|
-
closed drawer parked off the inline edge by a transform.
|
|
172
|
-
|
|
173
|
-
It is still laid out, still painted, and still part of the
|
|
174
|
-
document's scrollable overflow region — a transform does not
|
|
175
|
-
remove a box from it, and neither does `visibility: hidden`.
|
|
176
|
-
So the page scrolls sideways to reach a panel nobody can see,
|
|
177
|
-
and every `min-width: 0` in the tree is irrelevant. `Shell`'s
|
|
178
|
-
`overflow-x: clip` is what actually answers it.
|
|
179
|
-
*/}
|
|
180
|
-
<div
|
|
181
|
-
aria-hidden="true"
|
|
182
|
-
className="pointer-events-none absolute top-0 end-0 h-40 w-80 translate-x-[110%] rounded-lg border border-border-subtle bg-surface-raised"
|
|
183
|
-
id="parked-drawer"
|
|
184
|
-
/>
|
|
185
|
-
|
|
186
234
|
<p className="text-content-secondary text-sm">
|
|
187
235
|
/mnt/Bunnies/Family/Media/Television/Some-Very-Long-Show-Name/Season-01/Some-Very-Long-Show-Name-S01E01-Pilot-2160p-HDR-DTS-HD-MA.mkv
|
|
188
236
|
</p>
|
package/src/sourceRules.test.ts
CHANGED
|
@@ -382,11 +382,10 @@ test("the barrel is the only place components are re-exported", async () => {
|
|
|
382
382
|
// back-link and made `Button` get used for navigation: `TextLink`
|
|
383
383
|
// and `ButtonLink`, both a real `<a href>`, differing in paint
|
|
384
384
|
// rather than semantics: +2 -> 38, on top of `AdaptiveGrid`'s 36.
|
|
385
|
-
// `AnchorLink`,
|
|
385
|
+
// `AnchorLink`, `UnstyledLink`,
|
|
386
386
|
// `RouterLinkProvider`, `ReactRouterLink`, `ScrollMemoryProvider`
|
|
387
387
|
// and `ReactRouterAdapter` are the router seam rather
|
|
388
|
-
// than components
|
|
389
|
-
// `Main/` and
|
|
388
|
+
// than painted components, and live in `RouterLink/`, `Main/` and
|
|
390
389
|
// `reactRouter/` — outside this count by the `<Name>/<Name>.tsx`
|
|
391
390
|
// rule, exactly as `Overlay/`'s parts are.
|
|
392
391
|
// The unified app shell adds four: `Shell`, `Header`, `Rail`,
|