stylegallery 0.1.9 → 0.1.10

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.
@@ -0,0 +1,325 @@
1
+ // allow: SIZE_OK - explicit 46-pattern sample and rule data table; generation logic stays separate.
2
+ export const sources = {
3
+ carbonGrid: "https://carbondesignsystem.com/elements/2x-grid/overview/",
4
+ everyLayout: "https://every-layout.dev/layouts/",
5
+ everySidebar: "https://every-layout.dev/layouts/sidebar/",
6
+ everyStack: "https://every-layout.dev/layouts/stack/",
7
+ govukLayout: "https://design-system.service.gov.uk/styles/layout/",
8
+ materialCanonical: "https://m3.material.io/foundations/adaptive-design/canonical-layouts",
9
+ mdnCookbook: "https://developer.mozilla.org/en-US/docs/Web/CSS/How_to/Layout_cookbook",
10
+ mdnGrid: "https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/CSS_layout/Grids",
11
+ mdnOverflow: "https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/overflow",
12
+ mdnPosition: "https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/position",
13
+ webOneLine: "https://web.dev/articles/one-line-layouts",
14
+ };
15
+
16
+ export const samples = {
17
+ "stack": `
18
+ <section class="stack" aria-labelledby="stack-heading">
19
+ <h2 id="stack-heading">Release checklist</h2>
20
+ <p>Review copy, verify forms, and publish the notes in order.</p>
21
+ <button>Start review</button>
22
+ </section>`,
23
+ "box": `
24
+ <aside class="box" aria-labelledby="box-heading">
25
+ <h2 id="box-heading">Support window</h2>
26
+ <p>Responses resume Monday at 09:00.</p>
27
+ </aside>`,
28
+ "center": `
29
+ <article class="center" aria-labelledby="center-heading">
30
+ <h2 id="center-heading">Editorial policy</h2>
31
+ <p>Long-form guidance stays readable while the page around it remains fluid.</p>
32
+ </article>`,
33
+ "cluster": `
34
+ <nav class="cluster" aria-label="Project actions">
35
+ <a href="#">Backlog</a>
36
+ <a href="#">Milestones</a>
37
+ <a href="#">Roadmap</a>
38
+ </nav>`,
39
+ "content-limiter": `
40
+ <article class="content_limiter" aria-labelledby="limiter-heading">
41
+ <h2 id="limiter-heading">Incident summary</h2>
42
+ <p>The report keeps a comfortable measure even inside a wide dashboard shell.</p>
43
+ </article>`,
44
+ "super-center": `
45
+ <section class="super_center" aria-labelledby="centered-dialog-title">
46
+ <form aria-labelledby="centered-dialog-title">
47
+ <h2 id="centered-dialog-title">Confirm archive</h2>
48
+ <button>Archive project</button>
49
+ </form>
50
+ </section>`,
51
+ "icon-frame": `
52
+ <span class="icon_frame" role="img" aria-label="Calendar">
53
+ <svg aria-hidden="true" viewBox="0 0 24 24"></svg>
54
+ </span>`,
55
+ "frame": `
56
+ <figure class="frame">
57
+ <img alt="Product walkthrough still" class="frame_media">
58
+ </figure>`,
59
+ "cover": `
60
+ <section class="cover" aria-labelledby="cover-title">
61
+ <header><p>Step 2 of 4</p></header>
62
+ <main><h1 id="cover-title">Choose a billing profile</h1></main>
63
+ <footer><button>Continue</button></footer>
64
+ </section>`,
65
+ "sidebar": `
66
+ <section class="sidebar" aria-labelledby="sidebar-title">
67
+ <article class="sidebar_primary">
68
+ <h2 id="sidebar-title">Quarterly planning notes</h2>
69
+ <p>The main article keeps priority when the available inline space changes.</p>
70
+ </article>
71
+ <aside class="sidebar_secondary">Meeting agenda and owners</aside>
72
+ </section>`,
73
+ "switcher": `
74
+ <section class="switcher" aria-label="Pricing tiers">
75
+ <article class="switcher_item">Starter plan</article>
76
+ <article class="switcher_item">Team plan</article>
77
+ <article class="switcher_item">Enterprise plan</article>
78
+ </section>`,
79
+ "media-object": `
80
+ <article class="media_object">
81
+ <figure class="media_object_media"><img alt="Speaker portrait"></figure>
82
+ <div class="media_object_content">
83
+ <h2>Design systems briefing</h2>
84
+ <p>Speaker details align beside the portrait without squeezing the text.</p>
85
+ </div>
86
+ </article>`,
87
+ "split-nav": `
88
+ <nav class="split_nav" aria-label="Documentation">
89
+ <section class="split_nav_primary"><a href="#">Guides</a><a href="#">API</a></section>
90
+ <section class="split_nav_secondary"><a href="#">Sign in</a></section>
91
+ </nav>`,
92
+ "holy-grail": `
93
+ <section class="holy_grail" aria-label="News page">
94
+ <header class="holy_grail_header">Daily briefing</header>
95
+ <aside class="holy_grail_left">Topic navigation</aside>
96
+ <main class="holy_grail_main">Lead story and article stream</main>
97
+ <aside class="holy_grail_right">Market snapshot</aside>
98
+ <footer class="holy_grail_footer">Edition links</footer>
99
+ </section>`,
100
+ "sticky-footer": `
101
+ <section class="sticky_footer" aria-label="Account setup">
102
+ <header>Account setup</header>
103
+ <main class="sticky_footer_main">Profile fields and preferences</main>
104
+ <footer><button>Save profile</button></footer>
105
+ </section>`,
106
+ "sticky-header": `
107
+ <header class="sticky_header">
108
+ <nav aria-label="Repository"><a href="#">Code</a><a href="#">Issues</a><a href="#">Pull requests</a></nav>
109
+ </header>`,
110
+ "scroll-body-shell": `
111
+ <section class="scroll_body_shell" aria-label="Inbox">
112
+ <header>Inbox filters</header>
113
+ <main class="scroll_body_shell_body">Message list owns vertical scrolling</main>
114
+ <footer>Selected message actions</footer>
115
+ </section>`,
116
+ "fixed-sidenav-shell": `
117
+ <section class="fixed_sidenav_shell" aria-label="Settings">
118
+ <nav class="fixed_sidenav_shell_list"><a href="#">Profile</a><a href="#">Billing</a></nav>
119
+ <main class="fixed_sidenav_shell_main">Editable settings form scrolls independently</main>
120
+ </section>`,
121
+ "sticky-aside": `
122
+ <section class="sticky_aside" aria-label="Long article">
123
+ <main class="sticky_aside_main">Article sections continue down the page.</main>
124
+ <aside class="sticky_aside_side">Table of contents</aside>
125
+ </section>`,
126
+ "ram-grid": `
127
+ <section class="ram_grid" aria-label="Photo albums">
128
+ <article>Spring launch album</article>
129
+ <article>Customer meetup album</article>
130
+ <article>Workshop album</article>
131
+ </section>`,
132
+ "card-grid": `
133
+ <section class="card_grid" aria-label="Project cards">
134
+ <article>Design audit</article>
135
+ <article>Analytics migration</article>
136
+ <article>Onboarding rewrite</article>
137
+ </section>`,
138
+ "twelve-span-grid": `
139
+ <section class="twelve_span_grid" aria-label="Dashboard modules">
140
+ <article class="twelve_span_grid_item">Revenue module</article>
141
+ <article class="twelve_span_grid_item">Retention module</article>
142
+ <article class="twelve_span_grid_item">Pipeline module</article>
143
+ </section>`,
144
+ "page-grid": `
145
+ <section class="page_grid" aria-label="Article page">
146
+ <main class="page_grid_content">Centered article track with fluid outer gutters</main>
147
+ </section>`,
148
+ "grid-wrapper": `
149
+ <section class="grid_wrapper" aria-label="Marketing page">
150
+ <main class="grid_wrapper_main">Centered campaign copy</main>
151
+ </section>`,
152
+ "columns": `
153
+ <article class="columns" aria-labelledby="columns-heading">
154
+ <h2 id="columns-heading">Release notes</h2>
155
+ <p>Several short updates can flow into balanced columns when there is room.</p>
156
+ <p>When the container narrows, the same content returns to a single column.</p>
157
+ </article>`,
158
+ "deconstructed-pancake": `
159
+ <section class="deconstructed_pancake" aria-label="Plan comparison">
160
+ <article class="deconstructed_pancake_item">Solo plan</article>
161
+ <article class="deconstructed_pancake_item">Studio plan</article>
162
+ <article class="deconstructed_pancake_item">Agency plan</article>
163
+ </section>`,
164
+ "line-up": `
165
+ <article class="line_up" aria-labelledby="line-up-title">
166
+ <section class="line_up_body"><h2 id="line-up-title">Implementation proposal</h2><p>Variable-length summary copy sits above the aligned action row.</p></section>
167
+ <footer class="line_up_footer"><button>Review proposal</button></footer>
168
+ </article>`,
169
+ "clamped-card": `
170
+ <article class="clamped_card" aria-labelledby="clamped-title">
171
+ <h2 id="clamped-title">Invite teammate</h2>
172
+ <p>The card grows with the viewport but stops at the intended reading width.</p>
173
+ </article>`,
174
+ "fluid-styles": `
175
+ <section class="fluid_styles" aria-labelledby="fluid-title">
176
+ <h2 id="fluid-title">Operations overview</h2>
177
+ <p>The region fills the parent without exceeding the shared page measure.</p>
178
+ </section>`,
179
+ "split-screen": `
180
+ <section class="split_screen" aria-label="Compare documents">
181
+ <section class="split_screen_pane">Draft contract</section>
182
+ <section class="split_screen_pane">Reviewed contract</section>
183
+ </section>`,
184
+ "list-detail": `
185
+ <section class="list_detail" aria-label="Customer records">
186
+ <nav class="list_detail_list"><a href="#">Acme Co.</a><a href="#">Northwind</a></nav>
187
+ <section class="list_detail_detail">Selected customer timeline</section>
188
+ </section>`,
189
+ "supporting-pane": `
190
+ <section class="supporting_pane" aria-label="Invoice editor">
191
+ <main class="supporting_pane_main">Invoice line-item editor</main>
192
+ <aside class="supporting_pane_summary">Payment summary</aside>
193
+ </section>`,
194
+ "feed": `
195
+ <section class="feed" aria-label="Activity feed">
196
+ <article>Build completed</article>
197
+ <article>Review requested</article>
198
+ <article>Deployment approved</article>
199
+ </section>`,
200
+ "breadcrumb": `
201
+ <nav class="breadcrumb" aria-label="Breadcrumb">
202
+ <a href="#">Workspace</a>
203
+ <a href="#">Projects</a>
204
+ <span>Layout gallery</span>
205
+ </nav>`,
206
+ "pagination": `
207
+ <nav class="pagination" aria-label="Search results pages">
208
+ <a href="#">Previous</a>
209
+ <a href="#">Page 4</a>
210
+ <a href="#">Next</a>
211
+ </nav>`,
212
+ "badge-list": `
213
+ <section class="badge_list" aria-label="Repository counts">
214
+ <div class="badge_list_item"><span>Open issues</span><span>12</span></div>
215
+ <div class="badge_list_item"><span>Pull requests</span><span>4</span></div>
216
+ <div class="badge_list_item"><span>Reviews waiting</span><span>7</span></div>
217
+ </section>`,
218
+ "step-nav": `
219
+ <nav class="step_nav" aria-label="Checkout steps">
220
+ <a href="#">Shipping address</a>
221
+ <a href="#">Payment method</a>
222
+ <a href="#">Order review</a>
223
+ </nav>`,
224
+ "tab-strip": `
225
+ <nav class="tab_strip" aria-label="Report views">
226
+ <a href="#">Summary</a>
227
+ <a href="#">Cohorts</a>
228
+ <a href="#">Exports</a>
229
+ </nav>`,
230
+ "reel": `
231
+ <section class="reel" aria-label="Upcoming events">
232
+ <article>Design critique</article>
233
+ <article>Planning workshop</article>
234
+ <article>Launch review</article>
235
+ </section>`,
236
+ "imposter": `
237
+ <section class="imposter_anchor" aria-label="Draft editor">
238
+ <p>Draft body text stays in normal document flow.</p>
239
+ <section class="imposter" aria-label="Modal placement">
240
+ <dialog open>Unsaved changes confirmation</dialog>
241
+ </section>
242
+ </section>`,
243
+ "panel-layout": `
244
+ <section class="panel_layout" aria-label="Console workspace">
245
+ <main class="panel_layout_main">Query editor</main>
246
+ <aside class="panel_layout_side">Execution history</aside>
247
+ </section>`,
248
+ "overlay-stack": `
249
+ <section class="overlay_stack" aria-label="Map with controls">
250
+ <figure class="overlay_stack_item">Transit map</figure>
251
+ <form class="overlay_stack_item">Route search controls</form>
252
+ </section>`,
253
+ "wrap-row": `
254
+ <form class="wrap_row" aria-label="Filter tickets">
255
+ <label>Status <select></select></label>
256
+ <label>Owner <select></select></label>
257
+ <button>Apply filters</button>
258
+ </form>`,
259
+ "dense-grid": `
260
+ <section class="dense_grid" aria-label="Keyboard shortcuts">
261
+ <kbd>Cmd K</kbd>
262
+ <kbd>Cmd Shift P</kbd>
263
+ <kbd>Esc</kbd>
264
+ </section>`,
265
+ "masonry-approx": `
266
+ <section class="masonry_approx" aria-label="Research notes">
267
+ <article>Interview excerpt with a longer observation.</article>
268
+ <article>Short survey result.</article>
269
+ <article>Workshop synthesis note.</article>
270
+ </section>`,
271
+ "main-with-rail": `
272
+ <section class="main_with_rail" aria-label="Documentation page">
273
+ <main class="main_with_rail_main">API reference article</main>
274
+ <aside class="main_with_rail_side">On this page links</aside>
275
+ </section>`,
276
+ };
277
+
278
+ export const patterns = [
279
+ ["stack", "Stacking", "Create consistent vertical rhythm between direct children.", "block", "fluid", sources.everyStack, [[".stack", { display: "grid", gap: "1rem" }]]],
280
+ ["box", "Containment", "Wrap content with predictable internal spacing.", "block", "fixed", sources.everyLayout, [[".box", { "box-sizing": "border-box", display: "block", padding: "1rem" }]]],
281
+ ["center", "Centering", "Center a block while respecting a maximum measure.", "inline", "fluid", sources.everyLayout, [[".center", { "margin-inline": "auto", "max-inline-size": "64rem", "padding-inline": "1rem" }]]],
282
+ ["cluster", "In-line grouping", "Keep related items together while allowing wrapping.", "inline", "wrap", sources.everyLayout, [[".cluster", { display: "flex", "flex-wrap": "wrap", gap: "0.75rem", "justify-content": "flex-start" }]]],
283
+ ["content-limiter", "Containment", "Keep prose width readable inside fluid containers.", "inline", "fluid", sources.govukLayout, [[".content_limiter", { "margin-inline": "auto", "max-inline-size": "70ch", "padding-inline": "1rem" }]]],
284
+ ["super-center", "Centering", "Center one region along both axes.", "both", "fluid", sources.webOneLine, [[".super_center", { display: "grid", "min-block-size": "100dvh", "place-items": "center" }]]],
285
+ ["icon-frame", "Media / Fit", "Keep an icon aligned inside a fixed square slot.", "both", "fixed", sources.everyLayout, [[".icon_frame", { "block-size": "2.5rem", display: "grid", "inline-size": "2.5rem", "place-items": "center" }]]],
286
+ ["frame", "Media / Fit", "Preserve media aspect ratio in a responsive slot.", "both", "fluid", sources.everyLayout, [[".frame", { "aspect-ratio": "16 / 9", display: "grid", "inline-size": "100%", overflow: "clip" }], [".frame_media", { "block-size": "100%", "inline-size": "100%", "min-block-size": "0", "min-inline-size": "0", "object-fit": "cover" }]]],
287
+ ["cover", "Viewport / Shell", "Keep a central region balanced between optional header and footer.", "block", "fluid", sources.everyLayout, [[".cover", { display: "grid", gap: "1rem", "grid-template-rows": "auto 1fr auto", "min-block-size": "100dvh", padding: "1rem" }]]],
288
+ ["sidebar", "Split / Sidebar", "Let a narrow sidebar and wider content wrap when space is tight.", "inline", "wrap", sources.everySidebar, [[".sidebar", { display: "flex", "flex-wrap": "wrap", gap: "1rem" }], [".sidebar_primary", { "flex-basis": "0", "flex-grow": "999", "min-inline-size": "16rem" }], [".sidebar_secondary", { "flex-basis": "18rem", "flex-grow": "1" }]]],
289
+ ["switcher", "Split / Sidebar", "Switch equal regions from row to stack without a viewport breakpoint.", "inline", "wrap", sources.everyLayout, [[".switcher", { display: "flex", "flex-wrap": "wrap", gap: "1rem" }], [".switcher_item", { "flex-basis": "calc((40rem - 100%) * 999)", "flex-grow": "1" }]]],
290
+ ["media-object", "Split / Sidebar", "Align media and descriptive content as a stable pair.", "inline", "reflow", sources.mdnCookbook, [[".media_object", { "align-items": "start", display: "flex", "flex-wrap": "wrap", gap: "1rem" }], [".media_object_media", { "flex-basis": "6rem", "flex-grow": "0" }], [".media_object_content", { "flex-basis": "min(20rem, 100%)", "flex-grow": "1", "min-inline-size": "0" }]]],
291
+ ["split-nav", "In-line grouping", "Separate primary and secondary nav actions in one row.", "inline", "wrap", sources.mdnCookbook, [[".split_nav", { "align-items": "center", display: "flex", "flex-wrap": "wrap", gap: "0.75rem" }], [".split_nav_primary", { display: "flex", gap: "0.75rem" }], [".split_nav_secondary", { "margin-inline-start": "auto" }]]],
292
+ ["holy-grail", "Viewport / Shell", "Place header, footer, sidebars, and main content in a resilient shell.", "both", "breakpointed", sources.webOneLine, [[".holy_grail", { display: "grid", gap: "1rem", "grid-template": '"header header header" auto "left main right" 1fr "footer footer footer" auto / minmax(12rem, auto) 1fr minmax(12rem, auto)', "min-block-size": "100dvh" }], [".holy_grail_header", { "grid-area": "header" }], [".holy_grail_left", { "grid-area": "left" }], [".holy_grail_main", { "grid-area": "main", "min-inline-size": "0" }], [".holy_grail_right", { "grid-area": "right" }], [".holy_grail_footer", { "grid-area": "footer" }], ["@media (max-width: 47.99rem)", [[".holy_grail", { "grid-template": '"header" auto "left" auto "main" 1fr "right" auto "footer" auto / 1fr' }]], "Below 48rem the two 12rem side columns no longer fit beside main content, so all five regions stack in one column in DOM order: header, left, main, right, footer. At 48rem and wider the three-column shell applies."]]],
293
+ ["sticky-footer", "Viewport / Shell", "Keep footer at the bottom when content is short.", "block", "fluid", sources.mdnCookbook, [[".sticky_footer", { display: "grid", "grid-template-rows": "auto 1fr auto", "min-block-size": "100dvh" }], [".sticky_footer_main", { "min-block-size": "0" }]]],
294
+ ["sticky-header", "Viewport / Shell", "Keep a header visible above a scrolling content region.", "block", "fluid", sources.mdnPosition, [[".sticky_header", { "inset-block-start": "0", position: "sticky", "z-index": "1" }]]],
295
+ ["scroll-body-shell", "Viewport / Shell", "Keep shell regions fixed while only the body scrolls.", "block", "fluid", sources.mdnOverflow, [[".scroll_body_shell", { display: "grid", "grid-template-rows": "auto minmax(0, 1fr) auto", "max-block-size": "100dvh" }], [".scroll_body_shell_body", { "min-block-size": "0", overflow: "auto" }]], "Pattern owns the named scroll container."],
296
+ ["fixed-sidenav-shell", "Viewport / Shell", "Keep side navigation stable while main content scrolls.", "both", "fluid", sources.carbonGrid, [[".fixed_sidenav_shell", { display: "grid", "grid-template-columns": "16rem minmax(0, 1fr)", "grid-template-rows": "minmax(0, 1fr)", "max-block-size": "100dvh" }], [".fixed_sidenav_shell_list", { "min-block-size": "0" }], [".fixed_sidenav_shell_main", { "min-block-size": "0", overflow: "auto" }]], "Pattern owns the named scroll container."],
297
+ ["sticky-aside", "Split / Sidebar", "Keep related aside content visible during long reads.", "block", "fluid", sources.mdnPosition, [[".sticky_aside", { "align-items": "start", display: "grid", gap: "1rem", "grid-template-columns": "minmax(0, 1fr) 16rem" }], [".sticky_aside_main", { "min-inline-size": "0" }], [".sticky_aside_side", { "inset-block-start": "1rem", position: "sticky" }]]],
298
+ ["ram-grid", "Grid / Repetition", "Repeat items into as many useful columns as space allows.", "both", "fluid", sources.webOneLine, [[".ram_grid", { display: "grid", gap: "1rem", "grid-template-columns": "repeat(auto-fit, minmax(min(16rem, 100%), 1fr))" }]]],
299
+ ["card-grid", "Grid / Repetition", "Align repeating cards in rows and columns.", "both", "fluid", sources.mdnCookbook, [[".card_grid", { display: "grid", gap: "1rem", "grid-template-columns": "repeat(auto-fit, minmax(min(18rem, 100%), 1fr))" }]]],
300
+ ["twelve-span-grid", "Grid / Repetition", "Provide a twelve-column placement scaffold.", "both", "fluid", sources.webOneLine, [[".twelve_span_grid", { display: "grid", gap: "1rem", "grid-template-columns": "repeat(12, minmax(0, 1fr))" }], [".twelve_span_grid_item", { "grid-column": "span 4" }]]],
301
+ ["page-grid", "Grid / Repetition", "Align page content to margins, gutters, and a central track.", "inline", "fluid", sources.carbonGrid, [[".page_grid", { display: "grid", gap: "1rem", "grid-template-columns": "minmax(1rem, 1fr) minmax(0, 72rem) minmax(1rem, 1fr)" }], [".page_grid_content", { "grid-column": "2" }]]],
302
+ ["grid-wrapper", "Grid / Repetition", "Center grid tracks while allowing full-width breakout tracks.", "inline", "fluid", sources.mdnCookbook, [[".grid_wrapper", { display: "grid", "grid-template-columns": "1fr minmax(0, 64rem) 1fr" }], [".grid_wrapper_main", { "grid-column": "2" }]]],
303
+ ["columns", "Grid / Repetition", "Flow long content into balanced text columns.", "inline", "fluid", sources.mdnCookbook, [[".columns", { "column-gap": "2rem", columns: "18rem" }]]],
304
+ ["deconstructed-pancake", "In-line grouping", "Let equal cards stretch in a row and stack naturally when narrow.", "inline", "wrap", sources.webOneLine, [[".deconstructed_pancake", { display: "flex", "flex-wrap": "wrap", gap: "1rem" }], [".deconstructed_pancake_item", { flex: "1 1 16rem" }]]],
305
+ ["line-up", "Stacking", "Keep card footer actions aligned at the bottom.", "block", "fluid", sources.webOneLine, [[".line_up", { display: "flex", "flex-direction": "column", gap: "1rem" }], [".line_up_body", { "min-block-size": "0" }], [".line_up_footer", { "margin-block-start": "auto" }]]],
306
+ ["clamped-card", "Containment", "Constrain a card to a readable fluid width.", "inline", "fluid", sources.webOneLine, [[".clamped_card", { "inline-size": "clamp(16rem, 50vw, 28rem)", "margin-inline": "auto" }]]],
307
+ ["fluid-styles", "Containment", "Let a region fill available width without exceeding a readable max.", "inline", "fluid", sources.carbonGrid, [[".fluid_styles", { "inline-size": "min(100%, 72rem)", "margin-inline": "auto" }]]],
308
+ ["split-screen", "Split / Sidebar", "Split a viewport or region into two balanced panes.", "inline", "reflow", sources.materialCanonical, [[".split_screen", { display: "grid", gap: "1rem", "grid-template-columns": "repeat(auto-fit, minmax(min(20rem, 100%), 1fr))", "min-block-size": "100dvh" }], [".split_screen_pane", { "min-inline-size": "0" }]]],
309
+ ["list-detail", "Split / Sidebar", "Place an explorable list beside its detail region.", "inline", "reflow", sources.materialCanonical, [[".list_detail", { display: "grid", gap: "1rem", "grid-template-columns": "repeat(auto-fit, minmax(min(18rem, 100%), 1fr))" }], [".list_detail_list", { "min-inline-size": "0" }], [".list_detail_detail", { "min-inline-size": "0" }]]],
310
+ ["supporting-pane", "Split / Sidebar", "Keep supplemental information beside a primary task.", "inline", "reflow", sources.materialCanonical, [[".supporting_pane", { display: "grid", gap: "1rem", "grid-template-columns": "repeat(auto-fit, minmax(min(20rem, 100%), 1fr))" }], [".supporting_pane_main", { "min-inline-size": "0" }], [".supporting_pane_summary", { "min-inline-size": "0" }]]],
311
+ ["feed", "Stacking", "Stack repeated content items with stable rhythm.", "block", "fluid", sources.materialCanonical, [[".feed", { display: "grid", gap: "1rem", "grid-auto-rows": "minmax(min-content, auto)" }]]],
312
+ ["breadcrumb", "In-line grouping", "Lay out hierarchy links compactly with wrapping.", "inline", "wrap", sources.mdnCookbook, [[".breadcrumb", { "align-items": "center", display: "flex", "flex-wrap": "wrap", gap: "0.5rem" }]]],
313
+ ["pagination", "In-line grouping", "Lay out page controls as a bounded wrapping row.", "inline", "wrap", sources.mdnCookbook, [[".pagination", { display: "flex", "flex-wrap": "wrap", gap: "0.5rem", "justify-content": "center" }]]],
314
+ ["badge-list", "In-line grouping", "Align item labels with trailing counts.", "inline", "fluid", sources.mdnCookbook, [[".badge_list", { display: "grid", gap: "0.5rem" }], [".badge_list_item", { "align-items": "center", display: "flex", gap: "0.75rem", "justify-content": "space-between" }]]],
315
+ ["step-nav", "Stacking", "Present sequential steps with consistent vertical rhythm.", "block", "fluid", sources.govukLayout, [[".step_nav", { display: "grid", gap: "0.75rem", "margin-block": "1rem" }]]],
316
+ ["tab-strip", "In-line grouping", "Keep peer tabs in one stable row that can wrap.", "inline", "wrap", sources.govukLayout, [[".tab_strip", { display: "flex", "flex-wrap": "wrap", gap: "0.75rem" }]]],
317
+ ["reel", "In-line grouping", "Let a row scroll horizontally instead of wrapping.", "inline", "scroll", sources.everyLayout, [[".reel", { display: "grid", gap: "1rem", "grid-auto-columns": "minmax(14rem, 35%)", "grid-auto-flow": "column", "overflow-x": "auto" }]], "Pattern owns the named scroll container."],
318
+ ["imposter", "Overlay / Exception", "Place an overlay region over a parent without changing document order.", "both", "fixed", sources.everyLayout, [[".imposter_anchor", { position: "relative" }], [".imposter", { display: "grid", inset: "0", "place-items": "center", position: "absolute", "z-index": "1" }]]],
319
+ ["panel-layout", "Viewport / Shell", "Create predictable main and utility panels.", "inline", "reflow", sources.carbonGrid, [[".panel_layout", { display: "grid", gap: "1rem", "grid-template-columns": "repeat(auto-fit, minmax(min(22rem, 100%), 1fr))" }], [".panel_layout_main", { "min-inline-size": "0" }], [".panel_layout_side", { "min-inline-size": "0" }]]],
320
+ ["overlay-stack", "Overlay / Exception", "Stack several regions into the same grid cell.", "both", "fluid", sources.webOneLine, [[".overlay_stack", { display: "grid" }], [".overlay_stack_item", { "grid-area": "1 / 1" }]]],
321
+ ["wrap-row", "In-line grouping", "Wrap controls into rows with stable gaps.", "inline", "wrap", sources.mdnCookbook, [[".wrap_row", { "align-items": "center", display: "flex", "flex-wrap": "wrap", gap: "0.75rem" }]]],
322
+ ["dense-grid", "Grid / Repetition", "Fill a compact grid with repeated small items.", "both", "fluid", sources.mdnGrid, [[".dense_grid", { display: "grid", gap: "0.5rem", "grid-template-columns": "repeat(auto-fill, minmax(8rem, 1fr))" }]]],
323
+ ["masonry-approx", "Grid / Repetition", "Approximate staggered content with columns when exact row alignment is not needed.", "block", "fluid", sources.mdnCookbook, [[".masonry_approx", { "column-gap": "1rem", "column-width": "14rem" }]]],
324
+ ["main-with-rail", "Split / Sidebar", "Keep primary content dominant with a narrow secondary rail.", "inline", "reflow", sources.govukLayout, [[".main_with_rail", { display: "grid", gap: "1rem", "grid-template-columns": "repeat(auto-fit, minmax(min(18rem, 100%), 1fr))" }], [".main_with_rail_main", { "min-inline-size": "0" }], [".main_with_rail_side", { "min-inline-size": "0" }]]],
325
+ ];