@stapel/search-react 0.37.0 → 0.38.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 CHANGED
@@ -1,5 +1,49 @@
1
1
  # @stapel/search-react
2
2
 
3
+ ## 0.38.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 552cca2: The rail's scrollbar is the skin's, and one token spaces every block on the page.
8
+
9
+ Two findings from a walk of a live storefront's category page in the dark
10
+ theme, both of them a decision nobody had taken.
11
+
12
+ **`<SearchPage railScrollbar>`** — default `"styled"`. The rail stays its own
13
+ scroll container: filters that stay put while the results move under them are
14
+ the whole point of it, and a page that scrolled for the rail would send a person
15
+ back up to the controls after every tick. What was never decided is the BAR. An
16
+ `overflow-y: auto` box gets the platform's, and the platform's is a grey chrome
17
+ strip standing beside the filters. `"styled"` replaces it with the skin's own,
18
+ from the tokens, in both themes: a 6px track, no arrows, no track fill, and a
19
+ thumb that is transparent at rest and arrives on `:hover` of the rail (a pointer
20
+ scrolling inside it) and on `:focus-within` (a keyboard doing the same), with
21
+ `scrollbar-gutter: stable` so the panel's right edge does not move when it
22
+ appears. Both vendor forms, because they are not alternatives — Firefox reads
23
+ `scrollbar-width`/`scrollbar-color`, WebKit reads the `::-webkit-scrollbar`
24
+ pseudo-elements — and under `(pointer: coarse)`, where neither hover nor focus
25
+ ever fires, the thumb stands. `railScrollbar="system"` hands the port back to the
26
+ platform untouched and mounts no rule set at all. `RAIL_SCROLLBAR_CLASS` and
27
+ `railScrollbarCss()` are exported for a host that mounts the panel itself.
28
+
29
+ **`<SearchPage blockRhythm>`** — default `"token"`. The distance between two
30
+ blocks on this page was `spacing[4]` written inline on the root `<Flex>`: 16px
31
+ is a form's field spacing, not a page's section spacing, and the blocks read as
32
+ one column with no seams. Every gap now comes from ONE pair of custom
33
+ properties, declared as a usage and not as a definition —
34
+ `var(--stapel-block-gap, 32px)`, and `var(--stapel-block-gap-compact, 24px)` on a
35
+ coarse pointer or under the tablet edge — so a host, a container or a brand sets
36
+ the property once, anywhere above the page, and every block moves together. Each
37
+ direct block's outer margin is reset in the same rule set, because a block with a
38
+ margin of its own is a second opinion about a distance the gap already states.
39
+ `@stapel/categories-react` declares the same two property names, so one
40
+ declaration tunes both halves of a category screen. `blockRhythm="legacy"`
41
+ restores the flat inline gap for a host whose layout was measured against it.
42
+
43
+ Both defaults are the NEW behaviour on purpose: neither the system scrollbar nor
44
+ the 16px gap was a design anybody chose — they are what a scroll port and a
45
+ vertical `<Flex>` do when nobody says otherwise.
46
+
3
47
  ## 0.37.0
4
48
 
5
49
  ### Minor Changes
@@ -101,27 +101,49 @@ export declare const FILTERS_RAIL_WIDTH = 280;
101
101
  * `alignSelf: flex-start` is load-bearing: a flex child stretches to the row's
102
102
  * height by default, and a stretched box has nothing to stick to.
103
103
  */
104
- /** The class the rail's own scrollbar rules are hung on. */
104
+ /** The class the rail's own geometry and scrollbar rules are hung on. */
105
105
  export declare const RAIL_CLASS = "stapel-search-rail";
106
+ /**
107
+ * The class that carries the SKIN's scrollbar — present under
108
+ * `railScrollbar: "styled"` and absent under `"system"`, so the two arms are
109
+ * one class apart and a stand can read which one is on screen.
110
+ */
111
+ export declare const RAIL_SCROLLBAR_CLASS = "stapel-search-rail-scrollbar";
106
112
  /** The `href` the hoisted rail sheet is deduplicated by. */
107
113
  export declare const RAIL_STYLE_HREF = "stapel-search-rail";
114
+ /** Whose scrollbar the rail's own scroll port draws — see
115
+ * {@link SearchPageProps.railScrollbar}. */
116
+ export type SearchRailScrollbar = "styled" | "system";
108
117
  /**
109
- * The rail scrolls, and its scrollbar must not sit ON the filters.
118
+ * The rail scrolls, and the bar that says so is the SKIN's, not the platform's.
119
+ *
120
+ * The system bar was never a decision — it is what an `overflow-y: auto` box
121
+ * gets when nobody says otherwise, and on the storefront it landed as a grey
122
+ * chrome-coloured strip standing next to the filters in a dark theme. What it
123
+ * is replaced with:
110
124
  *
111
- * `scrollbar-width: thin` and `scrollbar-gutter: stable` (below, in `RAIL`)
112
- * are the standard half of this and they are not enough: on every WebKit
113
- * platform with overlay scrollbars a Mac by default, every iOS browser
114
- * the bar is drawn OVER the content and the gutter reserves nothing, so the
115
- * walker saw the bar lying across the right edge of the checkbox labels.
125
+ * - a 6px track with no arrows and no track fill the rail's own hairline,
126
+ * not a widget;
127
+ * - a thumb that is TRANSPARENT at rest and appears on `:hover` of the rail
128
+ * (which is what a pointer scrolling inside it is doing) and on
129
+ * `:focus-within` (which is what a keyboard is doing). A coarse pointer
130
+ * fires neither, so under `(pointer: coarse)` the thumb stands — a touch
131
+ * surface with an invisible scrollbar is a rail with no sign it has a tail;
132
+ * - `scrollbar-gutter: stable`, so the panel's right edge does not move when
133
+ * the thumb arrives.
116
134
  *
117
- * So the rail also declares a CLASSIC scrollbar through the WebKit
118
- * pseudo-elements: a bar with a real width, which pushes the panel's content
119
- * in by exactly that much instead of floating above it, drawn in the token
120
- * palette so it is the panel's own hairline in both themes rather than a
121
- * hard-coded grey that glows in the dark one. `--stapel-*` custom properties
122
- * resolve per theme at paint time, which is why this is a sheet and not a
123
- * pair of computed inline values: an inline colour would freeze whichever
124
- * theme was mounted first.
135
+ * Both vendor forms, because they are not alternatives: Firefox reads
136
+ * `scrollbar-width`/`scrollbar-color` and nothing else, WebKit and Chromium
137
+ * read the `::-webkit-scrollbar` pseudo-elements and (in Chromium) the
138
+ * standard properties too.
139
+ *
140
+ * The colours are `--stapel-*` custom properties, which resolve per theme at
141
+ * paint time an inline colour or a `useToken()` value would freeze whichever
142
+ * theme was mounted first. This design system's neutral vocabulary has no
143
+ * `colorFill*` ramp of its own: `border` IS its tertiary-fill role (the
144
+ * hairline every pane is separated by) and `text-subtle` is that role one step
145
+ * stronger, which is what the thumb takes when a pointer is on the thumb
146
+ * itself.
125
147
  *
126
148
  * Emitted as one hoisted `<style>` (React 19 dedupes by `href`), because a
127
149
  * pseudo-element is unreachable from an inline style — the same reason
@@ -141,6 +163,30 @@ export declare function railScrollbarCss(): string;
141
163
  * publishes instead of restating it.
142
164
  */
143
165
  export declare function railStyle(top: number | string | undefined): CSSProperties;
166
+ /** The custom property every block gap on this page reads. */
167
+ export declare const BLOCK_GAP_VAR = "--stapel-block-gap";
168
+ /** Its coarse-pointer / narrow-window twin. */
169
+ export declare const BLOCK_GAP_COMPACT_VAR = "--stapel-block-gap-compact";
170
+ /** The class the rhythm's rules are hung on. */
171
+ export declare const BLOCK_RHYTHM_CLASS = "stapel-block-rhythm";
172
+ /** The `href` the hoisted rhythm sheet is deduplicated by. */
173
+ export declare const BLOCK_RHYTHM_STYLE_HREF = "stapel-block-rhythm";
174
+ /** Where the page's block gap comes from — see
175
+ * {@link SearchPageProps.blockRhythm}. */
176
+ export type SearchBlockRhythm = "token" | "legacy";
177
+ /**
178
+ * The rhythm's rule set.
179
+ *
180
+ * Three rules, and the third is half of the fix: `margin-block: 0` on every
181
+ * direct child. A gap only governs the space a container puts BETWEEN its
182
+ * children — a block that also carries its own top or bottom margin adds to it
183
+ * and the spacing stops being one number, which is exactly how a page ends up
184
+ * with four different distances nobody chose.
185
+ *
186
+ * A sheet rather than inline styles because the compact arm is a media query
187
+ * and the reset addresses children this component does not own.
188
+ */
189
+ export declare function blockRhythmCss(): string;
144
190
  export interface SearchPageProps extends ThemeModeProp, ParseSearchStateOptions {
145
191
  /** The URL binding. `useRouterSearchParams()` from `./router` is the
146
192
  * react-router one. */
@@ -445,6 +491,46 @@ export interface SearchPageProps extends ThemeModeProp, ParseSearchStateOptions
445
491
  * header to clear.
446
492
  */
447
493
  readonly railTop?: number | string;
494
+ /**
495
+ * WHOSE SCROLLBAR the rail's own scroll port draws. Default `"styled"`.
496
+ *
497
+ * The rail is a scroll container and stays one: a person who has scrolled
498
+ * the filters and ticked one does not want the page to have moved under
499
+ * them. What it stopped drawing is the PLATFORM's bar — a grey chrome strip
500
+ * beside the filters, which is what an `overflow-y: auto` box gets when
501
+ * nobody decides otherwise.
502
+ *
503
+ * - `"styled"` — the skin's own bar, from the tokens, in both themes: a 6px
504
+ * track, no arrows, no track fill, and a thumb that is transparent at
505
+ * rest and appears while the rail is hovered or focused within (always,
506
+ * on a coarse pointer that can do neither). See {@link railScrollbarCss};
507
+ * - `"system"` — the platform's, untouched, for a host whose own stylesheet
508
+ * already dresses every scroll port on the page and would then be
509
+ * dressing this one twice.
510
+ *
511
+ * The default is the NEW behaviour, deliberately: the system bar was never a
512
+ * design decision here — it was the absence of one, and it is the thing the
513
+ * page was measured on.
514
+ */
515
+ readonly railScrollbar?: SearchRailScrollbar;
516
+ /**
517
+ * WHERE the space between this page's blocks comes from. Default `"token"`.
518
+ *
519
+ * - `"token"` — one gap for every block, read from
520
+ * `var(--stapel-block-gap)` (and `var(--stapel-block-gap-compact)` on a
521
+ * coarse pointer or a narrow window), defaulting to the design system's
522
+ * own spacing steps. Every direct block also has its outer margin reset,
523
+ * so the distance between two blocks is ONE number and a host can retune
524
+ * all of them by declaring the property once — see {@link blockRhythmCss};
525
+ * - `"legacy"` — the flat `spacing[4]` this page wrote inline for a host
526
+ * whose own layout was measured against it.
527
+ *
528
+ * The default is the NEW behaviour: 16px between a page's sections was the
529
+ * value a vertical `<Flex>` was given when the page was first assembled, not
530
+ * a rhythm anybody chose, and it is what made the blocks read as one column
531
+ * with no seams.
532
+ */
533
+ readonly blockRhythm?: SearchBlockRhythm;
448
534
  /**
449
535
  * PIN the results toolbar under whatever chrome is above this page — the
450
536
  * other column's half of {@link railTop}.
@@ -1 +1 @@
1
- {"version":3,"file":"SearchPage.d.ts","sourceRoot":"","sources":["../../src/default/SearchPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SearchPage.d.ts","sourceRoot":"","sources":["../../src/default/SearchPage.tsx"],"names":[],"mappings":"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"}
@@ -66,7 +66,7 @@ import { useState, useSyncExternalStore } from "react";
66
66
  import { Button, Flex } from "antd";
67
67
  import { SkinDialog, SkinTheme, useDialogSurface } from "@stapel/tokens-antd/skin";
68
68
  import { useT, useTPlural } from "@stapel/core";
69
- import { cssVar, spacing } from "@stapel/tokens";
69
+ import { breakpoints, cssVar, spacing } from "@stapel/tokens";
70
70
  import { SearchStateProvider, useSearchState } from "../headless/SearchStateProvider.js";
71
71
  import { useFacetPanel } from "../headless/FacetPanel.js";
72
72
  import { useAppliedCount } from "../headless/useAppliedCount.js";
@@ -162,45 +162,81 @@ export const FILTERS_RAIL_WIDTH = 280;
162
162
  * `alignSelf: flex-start` is load-bearing: a flex child stretches to the row's
163
163
  * height by default, and a stretched box has nothing to stick to.
164
164
  */
165
- /** The class the rail's own scrollbar rules are hung on. */
165
+ /** The class the rail's own geometry and scrollbar rules are hung on. */
166
166
  export const RAIL_CLASS = "stapel-search-rail";
167
+ /**
168
+ * The class that carries the SKIN's scrollbar — present under
169
+ * `railScrollbar: "styled"` and absent under `"system"`, so the two arms are
170
+ * one class apart and a stand can read which one is on screen.
171
+ */
172
+ export const RAIL_SCROLLBAR_CLASS = "stapel-search-rail-scrollbar";
167
173
  /** The `href` the hoisted rail sheet is deduplicated by. */
168
174
  export const RAIL_STYLE_HREF = "stapel-search-rail";
169
175
  /**
170
- * The rail scrolls, and its scrollbar must not sit ON the filters.
176
+ * The scrollbar's track width, in CSS pixels.
177
+ *
178
+ * Not on the spacing scale on purpose, and not a spacing decision: this is the
179
+ * thickness of a hairline instrument, the size every platform's own overlay
180
+ * bar lands within, and the number the storefront's owner named. Six is thin
181
+ * enough to read as part of the panel and thick enough to grab.
182
+ */
183
+ const RAIL_SCROLLBAR_WIDTH = 6;
184
+ /**
185
+ * The rail scrolls, and the bar that says so is the SKIN's, not the platform's.
171
186
  *
172
- * `scrollbar-width: thin` and `scrollbar-gutter: stable` (below, in `RAIL`)
173
- * are the standard half of this and they are not enough: on every WebKit
174
- * platform with overlay scrollbars a Mac by default, every iOS browser
175
- * the bar is drawn OVER the content and the gutter reserves nothing, so the
176
- * walker saw the bar lying across the right edge of the checkbox labels.
187
+ * The system bar was never a decision — it is what an `overflow-y: auto` box
188
+ * gets when nobody says otherwise, and on the storefront it landed as a grey
189
+ * chrome-coloured strip standing next to the filters in a dark theme. What it
190
+ * is replaced with:
177
191
  *
178
- * So the rail also declares a CLASSIC scrollbar through the WebKit
179
- * pseudo-elements: a bar with a real width, which pushes the panel's content
180
- * in by exactly that much instead of floating above it, drawn in the token
181
- * palette so it is the panel's own hairline in both themes rather than a
182
- * hard-coded grey that glows in the dark one. `--stapel-*` custom properties
183
- * resolve per theme at paint time, which is why this is a sheet and not a
184
- * pair of computed inline values: an inline colour would freeze whichever
185
- * theme was mounted first.
192
+ * - a 6px track with no arrows and no track fill — the rail's own hairline,
193
+ * not a widget;
194
+ * - a thumb that is TRANSPARENT at rest and appears on `:hover` of the rail
195
+ * (which is what a pointer scrolling inside it is doing) and on
196
+ * `:focus-within` (which is what a keyboard is doing). A coarse pointer
197
+ * fires neither, so under `(pointer: coarse)` the thumb stands a touch
198
+ * surface with an invisible scrollbar is a rail with no sign it has a tail;
199
+ * - `scrollbar-gutter: stable`, so the panel's right edge does not move when
200
+ * the thumb arrives.
201
+ *
202
+ * Both vendor forms, because they are not alternatives: Firefox reads
203
+ * `scrollbar-width`/`scrollbar-color` and nothing else, WebKit and Chromium
204
+ * read the `::-webkit-scrollbar` pseudo-elements and (in Chromium) the
205
+ * standard properties too.
206
+ *
207
+ * The colours are `--stapel-*` custom properties, which resolve per theme at
208
+ * paint time — an inline colour or a `useToken()` value would freeze whichever
209
+ * theme was mounted first. This design system's neutral vocabulary has no
210
+ * `colorFill*` ramp of its own: `border` IS its tertiary-fill role (the
211
+ * hairline every pane is separated by) and `text-subtle` is that role one step
212
+ * stronger, which is what the thumb takes when a pointer is on the thumb
213
+ * itself.
186
214
  *
187
215
  * Emitted as one hoisted `<style>` (React 19 dedupes by `href`), because a
188
216
  * pseudo-element is unreachable from an inline style — the same reason
189
217
  * `<LocationSummaryLine>` hoists one.
190
218
  */
191
219
  export function railScrollbarCss() {
192
- const rail = `.${RAIL_CLASS}`;
220
+ const bar = `.${RAIL_SCROLLBAR_CLASS}`;
221
+ const size = `${String(RAIL_SCROLLBAR_WIDTH)}px`;
222
+ const thumb = cssVar("border");
223
+ const awake = `${bar}:hover,${bar}:focus-within`;
193
224
  return [
194
- // A real width: an overlay bar occupies no space and therefore overlaps.
195
- `${rail}::-webkit-scrollbar{inline-size:8px;block-size:8px}`,
196
- `${rail}::-webkit-scrollbar-track{background:transparent}`,
197
- `${rail}::-webkit-scrollbar-thumb{background:${cssVar("border")};` +
225
+ // ── Firefox ────────────────────────────────────────────────────────────
226
+ `${bar}{scrollbar-width:thin;scrollbar-gutter:stable;` +
227
+ `scrollbar-color:transparent transparent}`,
228
+ `${awake}{scrollbar-color:${thumb} transparent}`,
229
+ // ── WebKit / Chromium ──────────────────────────────────────────────────
230
+ `${bar}::-webkit-scrollbar{inline-size:${size};block-size:${size}}`,
231
+ `${bar}::-webkit-scrollbar-track{background:transparent}`,
232
+ `${bar}::-webkit-scrollbar-thumb{background:transparent;` +
198
233
  `border-radius:${cssVar("radius-full")}}`,
199
- `${rail}::-webkit-scrollbar-thumb:hover{background:${cssVar("text-subtle")}}`,
200
- // Firefox/Chromium's standard properties, stated here too so the rule
201
- // travels with the class when the panel is used outside `<SearchPage>`.
202
- `${rail}{scrollbar-width:thin;scrollbar-gutter:stable;` +
203
- `scrollbar-color:${cssVar("border")} transparent}`,
234
+ `${bar}:hover::-webkit-scrollbar-thumb,` +
235
+ `${bar}:focus-within::-webkit-scrollbar-thumb{background:${thumb}}`,
236
+ `${bar}::-webkit-scrollbar-thumb:hover{background:${cssVar("text-subtle")}}`,
237
+ // ── A surface with no hover at all ─────────────────────────────────────
238
+ `@media (pointer:coarse){${bar}{scrollbar-color:${thumb} transparent}` +
239
+ `${bar}::-webkit-scrollbar-thumb{background:${thumb}}}`,
204
240
  ].join("\n");
205
241
  }
206
242
  const RAIL = {
@@ -218,14 +254,11 @@ const RAIL = {
218
254
  maxHeight: "100dvh",
219
255
  overflowY: "auto",
220
256
  overscrollBehavior: "contain",
221
- // The inner scroll must be VISIBLE. On overlay-scrollbar platforms (every
222
- // Mac by default, most phones) an `overflow-y: auto` column shows no
223
- // scrollbar until a pointer happens to scroll INSIDE itso a rail taller
224
- // than the window is indistinguishable from a rail that ends at the fold,
225
- // and the walker measured 5717px of panel whose tail nothing signposted.
226
- // A thin, always-there scrollbar is the sign there is more; the stable
227
- // gutter keeps the panel's right edge from jumping when it appears.
228
- scrollbarWidth: "thin",
257
+ // The gutter is the rail's, whichever bar draws in it: reserved here so the
258
+ // panel's right edge does not move when the thumb arrives. The bar's own
259
+ // width and colour are the skin's and live in `railScrollbarCss` — a rule
260
+ // set, not an inline pair, because a thumb that appears on hover cannot be
261
+ // said in a style attribute.
229
262
  scrollbarGutter: "stable",
230
263
  // Room for the focus ring of the last control against the scroll edge.
231
264
  paddingBlockEnd: spacing[2],
@@ -251,6 +284,61 @@ export function railStyle(top) {
251
284
  /** The results take what is left. `minWidth: 0` so a long word inside a card
252
285
  * cannot push the grid wider than its column. */
253
286
  const RESULTS_COLUMN = { flex: "1 1 auto", minWidth: 0 };
287
+ /* ── THE RHYTHM: ONE GAP BETWEEN BLOCKS, SAID ONCE ─────────────────────────
288
+ *
289
+ * This page is an assembly of BLOCKS — the query box, the breadcrumb, the
290
+ * location row, the header band, the applied chips, the columns — and every
291
+ * gap between two of them used to be `spacing[4]` on the root plus whatever
292
+ * outer margin the block itself happened to carry. Sixteen pixels is what a
293
+ * form's fields are spaced by, not what a page's sections are: on the walked
294
+ * storefront the blocks read as one undifferentiated column, and the owner's
295
+ * word for it was that everything is stuck together.
296
+ *
297
+ * The gap is now ONE PAIR of custom properties, declared as a usage and not as
298
+ * a definition — `var(--stapel-block-gap, 32px)`. That is the whole point of
299
+ * the shape: a host (or a container's own stylesheet, or a brand) sets the
300
+ * property anywhere above this page and every block on it moves together,
301
+ * while a host that sets nothing gets the design system's own spacing step.
302
+ *
303
+ * The compact value is for a COARSE POINTER or a narrow window, in one query
304
+ * with two arms: a phone has less height to spend on air, and a tablet held in
305
+ * a hand is a phone for this purpose whatever its width says.
306
+ *
307
+ * The names are the pair's published contract, which is why they are exported:
308
+ * `categories-react`'s pages declare the same two, so a storefront that tunes
309
+ * the rhythm tunes BOTH pairs with one declaration.
310
+ */
311
+ /** The custom property every block gap on this page reads. */
312
+ export const BLOCK_GAP_VAR = "--stapel-block-gap";
313
+ /** Its coarse-pointer / narrow-window twin. */
314
+ export const BLOCK_GAP_COMPACT_VAR = "--stapel-block-gap-compact";
315
+ /** The class the rhythm's rules are hung on. */
316
+ export const BLOCK_RHYTHM_CLASS = "stapel-block-rhythm";
317
+ /** The `href` the hoisted rhythm sheet is deduplicated by. */
318
+ export const BLOCK_RHYTHM_STYLE_HREF = "stapel-block-rhythm";
319
+ /**
320
+ * The rhythm's rule set.
321
+ *
322
+ * Three rules, and the third is half of the fix: `margin-block: 0` on every
323
+ * direct child. A gap only governs the space a container puts BETWEEN its
324
+ * children — a block that also carries its own top or bottom margin adds to it
325
+ * and the spacing stops being one number, which is exactly how a page ends up
326
+ * with four different distances nobody chose.
327
+ *
328
+ * A sheet rather than inline styles because the compact arm is a media query
329
+ * and the reset addresses children this component does not own.
330
+ */
331
+ export function blockRhythmCss() {
332
+ const block = `.${BLOCK_RHYTHM_CLASS}`;
333
+ const narrow = `(max-width:${String(breakpoints.tablet - 1)}px)`;
334
+ return [
335
+ `${block}{gap:var(${BLOCK_GAP_VAR},${String(spacing[6])}px)}`,
336
+ `@media (pointer:coarse),${narrow}{` +
337
+ `${block}{gap:var(${BLOCK_GAP_COMPACT_VAR},${String(spacing[5])}px)}}`,
338
+ // A block's own outer margin is a second opinion about the same distance.
339
+ `${block}>*{margin-block:0}`,
340
+ ].join("\n");
341
+ }
254
342
  /**
255
343
  * The two columns, inside the state provider — which is where they have to be,
256
344
  * because the layout decision reads the same search the panes read.
@@ -430,7 +518,10 @@ function SearchPageBody(props) {
430
518
  : {}), ...(categoryFeatures !== undefined ? { categoryFeatures } : {}), ...(props.renderEmptyExits !== undefined
431
519
  ? { renderEmptyExits: props.renderEmptyExits }
432
520
  : {}) }));
433
- return (_jsxs(Flex, { vertical: true, gap: spacing[4], "data-testid": "search-page", "data-filters": showFilters ? "on" : "off", "data-filters-layout": layout, children: [props.searchBox !== false && _jsx(SearchBox, {}), props.breadcrumb !== undefined && (_jsx("div", { "data-testid": "search-breadcrumb", children: props.breadcrumb })), _jsx(UrlIssueNotice, {}), (props.renderGeoFilter !== undefined ||
521
+ const legacyRhythm = props.blockRhythm === "legacy";
522
+ return (_jsxs(Flex, { vertical: true, ...(legacyRhythm
523
+ ? { gap: spacing[4] }
524
+ : { className: BLOCK_RHYTHM_CLASS }), "data-testid": "search-page", "data-rhythm": legacyRhythm ? "legacy" : "token", "data-filters": showFilters ? "on" : "off", "data-filters-layout": layout, children: [!legacyRhythm && (_jsx("style", { href: BLOCK_RHYTHM_STYLE_HREF, precedence: "default", children: blockRhythmCss() })), props.searchBox !== false && _jsx(SearchBox, {}), props.breadcrumb !== undefined && (_jsx("div", { "data-testid": "search-breadcrumb", children: props.breadcrumb })), _jsx(UrlIssueNotice, {}), (props.renderGeoFilter !== undefined ||
434
525
  state.geo !== undefined ||
435
526
  geoOffer !== undefined) && (_jsx(LocationSummaryLine, { ...(props.renderGeoFilter !== undefined
436
527
  ? { renderGeoFilter: props.renderGeoFilter }
@@ -451,12 +542,14 @@ function SearchPageBody(props) {
451
542
  setSheetOpen(false, "dismiss");
452
543
  }, title: t(SEARCH_I18N_KEYS.facetsTitle), dismissLabel: t(SEARCH_I18N_KEYS.filtersDismiss), "data-testid": "search-filters-sheet", footer: _jsx(Button, { block: true, type: "primary", "data-testid": "search-filters-apply", "data-analytics": "none", "data-analytics-reason": "the filters are already applied; this closes the sheet", onClick: () => {
453
544
  setSheetOpen(false, "apply");
454
- }, children: applyLabel }), children: panel }), results] })) : showFilters ? (_jsxs(Flex, { align: "flex-start", gap: spacing[5], "data-testid": "search-page-columns", children: [_jsxs("div", { className: RAIL_CLASS, style: railStyle(props.railTop), children: [_jsx("style", { href: RAIL_STYLE_HREF, precedence: "default", children: railScrollbarCss() }), panel] }), _jsx("div", { style: RESULTS_COLUMN, children: results })] })) : (results)] }));
545
+ }, children: applyLabel }), children: panel }), results] })) : showFilters ? (_jsxs(Flex, { align: "flex-start", gap: spacing[5], "data-testid": "search-page-columns", children: [_jsxs("div", { className: props.railScrollbar === "system"
546
+ ? RAIL_CLASS
547
+ : `${RAIL_CLASS} ${RAIL_SCROLLBAR_CLASS}`, style: railStyle(props.railTop), children: [props.railScrollbar !== "system" && (_jsx("style", { href: RAIL_STYLE_HREF, precedence: "default", children: railScrollbarCss() })), panel] }), _jsx("div", { style: RESULTS_COLUMN, children: results })] })) : (results)] }));
455
548
  }
456
549
  export function SearchPage(props) {
457
- const { adapter, renderCard, categoryFeatures, categoryFeaturesPending, locale, resolveFacetLabels, searchBox, languages, renderCategoryFilter, categoryLabel, renderGeoFilter, geoLabel, skippedNotice, geoOffer, footer, filtersHeader, filtersHeaderReserve, resultsHeader, resultsLead, categoryFilter, appliedChips, otherCategories, categoryName, categoryHref, categoryNamesPending, resultsHeading, degradationNotice, railFrom, filtersLayout, railTop, stickyToolbar, defaultFiltersOpen, filtersOpen, onFiltersOpenChange, pageSize, breadcrumb, wrapResults, views, defaultView, onViewChange, resultsAction, resultsHeadingLevel, resultsColumns, resultsReserve, resultsHeadingVisible, dictionaryMode, visibleGroups, footerBar, pinnedFacets, mode, ...parseOptions } = props;
550
+ const { adapter, renderCard, categoryFeatures, categoryFeaturesPending, locale, resolveFacetLabels, searchBox, languages, renderCategoryFilter, categoryLabel, renderGeoFilter, geoLabel, skippedNotice, geoOffer, footer, filtersHeader, filtersHeaderReserve, resultsHeader, resultsLead, categoryFilter, appliedChips, otherCategories, categoryName, categoryHref, categoryNamesPending, resultsHeading, degradationNotice, railFrom, filtersLayout, railTop, railScrollbar, blockRhythm, stickyToolbar, defaultFiltersOpen, filtersOpen, onFiltersOpenChange, pageSize, breadcrumb, wrapResults, views, defaultView, onViewChange, resultsAction, resultsHeadingLevel, resultsColumns, resultsReserve, resultsHeadingVisible, dictionaryMode, visibleGroups, footerBar, pinnedFacets, mode, ...parseOptions } = props;
458
551
  return (_jsx(SkinTheme, { surface: "base", ...(mode !== undefined ? { mode } : {}), children: _jsx(SearchStateProvider, { adapter: adapter, geoOffer: geoOffer, ...parseOptions, children: _jsx(SearchPageBody, { ...(renderCard !== undefined ? { renderCard } : {}), ...(resultsColumns !== undefined ? { resultsColumns } : {}), ...(resultsReserve !== undefined ? { resultsReserve } : {}), ...(resultsHeadingVisible !== undefined ? { resultsHeadingVisible } : {}), ...(dictionaryMode !== undefined ? { dictionaryMode } : {}), ...(visibleGroups !== undefined ? { visibleGroups } : {}), ...(footerBar !== undefined ? { footerBar } : {}), ...(pinnedFacets !== undefined ? { pinnedFacets } : {}), ...(categoryFeatures !== undefined ? { categoryFeatures } : {}), ...(categoryFeaturesPending !== undefined
459
552
  ? { categoryFeaturesPending }
460
- : {}), ...(locale !== undefined ? { locale } : {}), ...(resolveFacetLabels !== undefined ? { resolveFacetLabels } : {}), ...(searchBox !== undefined ? { searchBox } : {}), ...(languages !== undefined ? { languages } : {}), ...(renderCategoryFilter !== undefined ? { renderCategoryFilter } : {}), ...(categoryLabel !== undefined ? { categoryLabel } : {}), ...(renderGeoFilter !== undefined ? { renderGeoFilter } : {}), ...(geoLabel !== undefined ? { geoLabel } : {}), ...(skippedNotice !== undefined ? { skippedNotice } : {}), ...(footer !== undefined ? { footer } : {}), ...(filtersHeader !== undefined ? { filtersHeader } : {}), ...(filtersHeaderReserve !== undefined ? { filtersHeaderReserve } : {}), ...(resultsHeader !== undefined ? { resultsHeader } : {}), ...(resultsLead !== undefined ? { resultsLead } : {}), ...(categoryFilter !== undefined ? { categoryFilter } : {}), ...(appliedChips !== undefined ? { appliedChips } : {}), ...(otherCategories !== undefined ? { otherCategories } : {}), ...(categoryName !== undefined ? { categoryName } : {}), ...(categoryHref !== undefined ? { categoryHref } : {}), ...(categoryNamesPending !== undefined ? { categoryNamesPending } : {}), ...(resultsHeading !== undefined ? { resultsHeading } : {}), ...(degradationNotice !== undefined ? { degradationNotice } : {}), ...(railFrom !== undefined ? { railFrom } : {}), ...(filtersLayout !== undefined ? { filtersLayout } : {}), ...(railTop !== undefined ? { railTop } : {}), ...(stickyToolbar !== undefined ? { stickyToolbar } : {}), ...(defaultFiltersOpen !== undefined ? { defaultFiltersOpen } : {}), ...(filtersOpen !== undefined ? { filtersOpen } : {}), ...(onFiltersOpenChange !== undefined ? { onFiltersOpenChange } : {}), ...(pageSize !== undefined ? { pageSize } : {}), ...(breadcrumb !== undefined ? { breadcrumb } : {}), ...(wrapResults !== undefined ? { wrapResults } : {}), ...(views !== undefined ? { views } : {}), ...(defaultView !== undefined ? { defaultView } : {}), ...(onViewChange !== undefined ? { onViewChange } : {}), ...(resultsAction !== undefined ? { resultsAction } : {}), ...(resultsHeadingLevel !== undefined ? { resultsHeadingLevel } : {}) }) }) }));
553
+ : {}), ...(locale !== undefined ? { locale } : {}), ...(resolveFacetLabels !== undefined ? { resolveFacetLabels } : {}), ...(searchBox !== undefined ? { searchBox } : {}), ...(languages !== undefined ? { languages } : {}), ...(renderCategoryFilter !== undefined ? { renderCategoryFilter } : {}), ...(categoryLabel !== undefined ? { categoryLabel } : {}), ...(renderGeoFilter !== undefined ? { renderGeoFilter } : {}), ...(geoLabel !== undefined ? { geoLabel } : {}), ...(skippedNotice !== undefined ? { skippedNotice } : {}), ...(footer !== undefined ? { footer } : {}), ...(filtersHeader !== undefined ? { filtersHeader } : {}), ...(filtersHeaderReserve !== undefined ? { filtersHeaderReserve } : {}), ...(resultsHeader !== undefined ? { resultsHeader } : {}), ...(resultsLead !== undefined ? { resultsLead } : {}), ...(categoryFilter !== undefined ? { categoryFilter } : {}), ...(appliedChips !== undefined ? { appliedChips } : {}), ...(otherCategories !== undefined ? { otherCategories } : {}), ...(categoryName !== undefined ? { categoryName } : {}), ...(categoryHref !== undefined ? { categoryHref } : {}), ...(categoryNamesPending !== undefined ? { categoryNamesPending } : {}), ...(resultsHeading !== undefined ? { resultsHeading } : {}), ...(degradationNotice !== undefined ? { degradationNotice } : {}), ...(railFrom !== undefined ? { railFrom } : {}), ...(filtersLayout !== undefined ? { filtersLayout } : {}), ...(railTop !== undefined ? { railTop } : {}), ...(railScrollbar !== undefined ? { railScrollbar } : {}), ...(blockRhythm !== undefined ? { blockRhythm } : {}), ...(stickyToolbar !== undefined ? { stickyToolbar } : {}), ...(defaultFiltersOpen !== undefined ? { defaultFiltersOpen } : {}), ...(filtersOpen !== undefined ? { filtersOpen } : {}), ...(onFiltersOpenChange !== undefined ? { onFiltersOpenChange } : {}), ...(pageSize !== undefined ? { pageSize } : {}), ...(breadcrumb !== undefined ? { breadcrumb } : {}), ...(wrapResults !== undefined ? { wrapResults } : {}), ...(views !== undefined ? { views } : {}), ...(defaultView !== undefined ? { defaultView } : {}), ...(onViewChange !== undefined ? { onViewChange } : {}), ...(resultsAction !== undefined ? { resultsAction } : {}), ...(resultsHeadingLevel !== undefined ? { resultsHeadingLevel } : {}) }) }) }));
461
554
  }
462
555
  //# sourceMappingURL=SearchPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchPage.js","sourceRoot":"","sources":["../../src/default/SearchPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SearchPage.js","sourceRoot":"","sources":["../../src/default/SearchPage.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AACH,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAMrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAM3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAIhF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA0ErD;;;;;;;;;GASG;AACH,SAAS,YAAY,CAAC,EAAsB;IAC1C,MAAM,KAAK,GAAG,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IACvE,OAAO,oBAAoB,CACzB,CAAC,QAAoB,EAAE,EAAE;QACvB,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;QAC3C,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1C,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC,CAAC;IACJ,CAAC,EACD,GAAG,EAAE;QACH,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAChC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IAC7C,CAAC,EACD,GAAG,EAAE,CAAC,IAAI,CACX,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,GAAG,IAAI,GAAG,EAA0B,CAAC;AACrD,IAAI,gBAAgB,GAAoC,IAAI,CAAC;AAE7D,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC7E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,gBAAgB,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;QAC3C,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC;QACrC,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACtC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAEtC;;;;;;;;;;;;;GAaG;AACH,yEAAyE;AACzE,MAAM,CAAC,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,8BAA8B,CAAC;AAEnE,4DAA4D;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAMpD;;;;;;;GAOG;AACH,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,GAAG,GAAG,IAAI,oBAAoB,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,GAAG,GAAG,UAAU,GAAG,eAAe,CAAC;IACjD,OAAO;QACL,0EAA0E;QAC1E,GAAG,GAAG,gDAAgD;YACpD,0CAA0C;QAC5C,GAAG,KAAK,oBAAoB,KAAK,eAAe;QAChD,0EAA0E;QAC1E,GAAG,GAAG,mCAAmC,IAAI,eAAe,IAAI,GAAG;QACnE,GAAG,GAAG,mDAAmD;QACzD,GAAG,GAAG,mDAAmD;YACvD,iBAAiB,MAAM,CAAC,aAAa,CAAC,GAAG;QAC3C,GAAG,GAAG,kCAAkC;YACtC,GAAG,GAAG,qDAAqD,KAAK,GAAG;QACrE,GAAG,GAAG,8CAA8C,MAAM,CAAC,aAAa,CAAC,GAAG;QAC5E,0EAA0E;QAC1E,2BAA2B,GAAG,oBAAoB,KAAK,eAAe;YACpE,GAAG,GAAG,wCAAwC,KAAK,IAAI;KAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,IAAI,GAAkB;IAC1B,IAAI,EAAE,OAAO,MAAM,CAAC,kBAAkB,CAAC,IAAI;IAC3C,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,wEAAwE;IACxE,iEAAiE;IACjE,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,CAAC;IACN,SAAS,EAAE,YAAY;IACvB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,MAAM;IACjB,kBAAkB,EAAE,SAAS;IAC7B,4EAA4E;IAC5E,yEAAyE;IACzE,0EAA0E;IAC1E,2EAA2E;IAC3E,6BAA6B;IAC7B,eAAe,EAAE,QAAQ;IACzB,uEAAuE;IACvE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,SAAS,CAAC,GAAgC;IACxD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAClE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,iBAAiB,MAAM,GAAG,EAAE,CAAC;AACjE,CAAC;AAED;iDACiD;AACjD,MAAM,cAAc,GAAkB,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,8DAA8D;AAC9D,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAElD,+CAA+C;AAC/C,MAAM,CAAC,MAAM,qBAAqB,GAAG,4BAA4B,CAAC;AAElE,gDAAgD;AAChD,MAAM,CAAC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAExD,8DAA8D;AAC9D,MAAM,CAAC,MAAM,uBAAuB,GAAG,qBAAqB,CAAC;AAM7D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,cAAc,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;IACjE,OAAO;QACL,GAAG,KAAK,YAAY,aAAa,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM;QAC7D,2BAA2B,MAAM,GAAG;YAClC,GAAG,KAAK,YAAY,qBAAqB,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;QACxE,0EAA0E;QAC1E,GAAG,KAAK,oBAAoB;KAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAuiBD;;;GAGG;AACH,SAAS,cAAc,CAAC,KAA0B;IAChD,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAC9E,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,aAAa,CAAC;QAC3B,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpE,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,MAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,MAAM,GACV,KAAK,CAAC,aAAa;QACnB,CAAC,iBAAiB,KAAK,IAAI;YACzB,CAAC,CAAC,iBAAiB;gBACjB,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,OAAO;YACX,CAAC,CAAC,OAAO,KAAK,OAAO;gBACnB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClB;;;;;;;OAOG;IACH,MAAM,SAAS,GACb,KAAK,CAAC,SAAS,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACjE,4EAA4E;IAC5E,4EAA4E;IAC5E,2EAA2E;IAC3E,2EAA2E;IAC3E,+BAA+B;IAC/B,MAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAAC;IAChD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAClD,KAAK,CAAC,kBAAkB,KAAK,IAAI,CAClC,CAAC;IACF,MAAM,SAAS,GAAG,qBAAqB,IAAI,cAAc,CAAC;IAC1D,MAAM,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,YAAY,GAAG,CAAC,IAAa,EAAE,MAA+B,EAAQ,EAAE;QAC5E,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;YACxC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,GAAS,EAAE;QAC9B,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAClC,CAAC,CAAC;IAEF,2EAA2E;IAC3E,yEAAyE;IACzE,6EAA6E;IAC7E,kBAAkB;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,oBAAoB,CAAC;IAClD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAqB,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACpE,MAAM,UAAU,GAAG,CAAC,IAAY,EAAQ,EAAE;QACxC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF;;;;;;;;OAQG;IACH,MAAM,UAAU,GACd,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAClD,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC;QAClC,CAAC,CAAC,OAAO,CACL,OAAO,CAAC,IAAI,KAAK,UAAU;YACzB,CAAC,CAAC,gBAAgB,CAAC,uBAAuB;YAC1C,CAAC,CAAC,gBAAgB,CAAC,gBAAgB,EACrC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CACzB,CAAC;IAER,wEAAwE;IACxE,yEAAyE;IACzE,0EAA0E;IAC1E,yEAAyE;IACzE,4BAA4B;IAC5B,MAAM,MAAM,GAAG,gBAAgB,CAAC;QAC9B,KAAK;QACL,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,0EAA0E;QAC1E,yEAAyE;QACzE,iCAAiC;QACjC,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClE,CAAC,CAAC;IACH;;;oEAGgE;IAChE,MAAM,aAAa,GAAG,KAAK,CAAC,uBAAuB,KAAK,IAAI,CAAC;IAC7D,MAAM,YAAY,GAChB,CAAC,aAAa;QACd,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO;QAC/B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAC9B,uEAAuE;QACvE,sEAAsE;QACtE,uEAAuE;QACvE,yEAAyE;QACzE,sEAAsE;QACtE,QAAQ;QACR,MAAM,CAAC,aAAa,KAAK,CAAC;QAC1B,MAAM,CAAC,MAAM,KAAK,CAAC;QACnB,wEAAwE;QACxE,yEAAyE;QACzE,kEAAkE;QAClE,CAAC,KAAK,CAAC,cAAc,KAAK,KAAK;YAC7B,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS;gBAC3B,KAAK,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,KAAK,SAAS;QACxB,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IACvC,MAAM,WAAW,GACf,aAAa,KAAK,SAAS;QAC3B,KAAK,CAAC,oBAAoB,KAAK,SAAS;QACxC,CAAC,YAAY,CAAC;IAEhB,MAAM,KAAK,GAAG,CACZ,MAAC,IAAI,IAAC,QAAQ,QAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,aAK3B,CAAC,aAAa,KAAK,SAAS;gBAC3B,KAAK,CAAC,oBAAoB,KAAK,SAAS,CAAC,IAAI,CAC7C,6BACc,uBAAuB,KAC/B,CAAC,KAAK,CAAC,oBAAoB,KAAK,SAAS;oBAC3C,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,oBAAoB,EAAE,EAAE;oBACzD,CAAC,CAAC,EAAE,CAAC,YAON,OAAO,aAAa,KAAK,UAAU;oBAClC,CAAC,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;oBAClD,CAAC,CAAC,aAAa,GACb,CACP,EAYA,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACrB,KAAC,cAAc,OACT,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC7C,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAClD,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;gBAChF,iEAAiE;gBACjE,iEAAiE;gBACjE,6DAA6D;gBAC7D,aAAa,EACX,KAAK,CAAC,aAAa,KAAK,SAAS;oBAC/B,CAAC,CAAC,KAAK,CAAC,aAAa;oBACrB,CAAC,CAAC,MAAM,KAAK,OAAO;wBAClB,CAAC,CAAC,CAAC;wBACH,CAAC,CAAC,EAAE,KAEN,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC5D,CAAC,KAAK,CAAC,uBAAuB,KAAK,SAAS;oBAC9C,CAAC,CAAC,EAAE,uBAAuB,EAAE,KAAK,CAAC,uBAAuB,EAAE;oBAC5D,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,KAAK,CAAC,gBAAgB,KAAK,SAAS;oBACvC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE;oBAC9C,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACxC,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAChE,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS;oBACnC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE;oBACtC,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACrE,CAAC,KAAK,CAAC,oBAAoB,KAAK,SAAS;oBAC3C,CAAC,CAAC,EAAE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,EAAE;oBACtD,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS;oBACrC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE;oBAC1C,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS;oBACpC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE;oBACxC,CAAC,CAAC,EAAE,CAAC,GACP,CACH,IACI,CACR,CAAC;IAEF;;;;;;;;;;OAUG;IACH,MAAM,YAAY,GAAG,MAAM,KAAK,OAAO,CAAC;IACxC,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAC7B,MAAC,IAAI,IACH,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,eAAe,EACvB,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EACf,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAExB,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,aAC1D,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,GAAI,EAClE,KAAC,UAAU,IAAC,OAAO,SAAG,IACjB,EACN,KAAK,CAAC,aAAa,IACf,CACR,CAAC,CAAC,CAAC,CACF,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,QAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,aACvC,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,GAAI,EAClE,KAAC,UAAU,KAAG,EACb,KAAK,CAAC,QAAQ,KAAK,KAAK,IAAI,KAAC,cAAc,KAAG,EAC9C,KAAK,CAAC,aAAa,IACf,CACR,CAAC;IAEF,MAAM,OAAO,GAAG,CACd,KAAC,iBAAiB,IAChB,OAAO,EAAE,OAAO,KACZ,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACpE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACpD,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS;YACpC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE;YACxC,CAAC,CAAC,EAAE,CAAC,EACP,YAAY,EAAE,KAAK,CAAC,mBAAmB,IAAI,CAAC,KACxC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACjE,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC3E,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC1D,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACxE,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS;YACrC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,cAAc,EAAE;YACnC,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS;YACrC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,cAAc,EAAE;YACnC,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,KAAK,CAAC,qBAAqB,KAAK,SAAS;YAC5C,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,qBAAqB,EAAE;YACjD,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC5D,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS;YACtC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE;YAC5C,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS;YACnC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE;YACtC,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS;YACnC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE;YACtC,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,KAAK,CAAC,oBAAoB,KAAK,SAAS;YAC3C,CAAC,CAAC,EAAE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,EAAE;YACtD,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS;YACrC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,cAAc,EAAE;YACnC,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,KAAK,CAAC,iBAAiB,KAAK,SAAS;YACxC,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE;YAChD,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC5D,CAAC,KAAK,CAAC,gBAAgB,KAAK,SAAS;YACvC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE;YAC9C,CAAC,CAAC,EAAE,CAAC,GACP,CACH,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC;IACpD,OAAO,CACL,MAAC,IAAI,IACH,QAAQ,WAGJ,CAAC,YAAY;YACf,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE;YACrB,CAAC,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,iBAC1B,aAAa,iBACZ,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,kBAChC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,yBACnB,MAAM,aAK1B,CAAC,YAAY,IAAI,CAChB,gBAAO,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAC,SAAS,YACvD,cAAc,EAAE,GACX,CACT,EACA,KAAK,CAAC,SAAS,KAAK,KAAK,IAAI,KAAC,SAAS,KAAG,EAC1C,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,CACjC,6BAAiB,mBAAmB,YAAE,KAAK,CAAC,UAAU,GAAO,CAC9D,EACD,KAAC,cAAc,KAAG,EAiBjB,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS;gBACnC,KAAK,CAAC,GAAG,KAAK,SAAS;gBACvB,QAAQ,KAAK,SAAS,CAAC,IAAI,CAC3B,KAAC,mBAAmB,OACd,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS;oBACtC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE;oBAC5C,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,oEAAoE;gBACpE,iDAAiD;gBACjD,WAAW,EAAE,MAAM,KAAK,OAAO,EAC/B,SAAS,EAAE,GAAG,EAAE;oBACd,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC7B,CAAC,GACD,CACH,EAMA,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,CACpC,6BAAiB,uBAAuB,YAAE,KAAK,CAAC,aAAa,GAAO,CACrE,EAMA,CAAC,KAAK,CAAC,YAAY,KAAK,IAAI;gBAC3B,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,IAAI,CAC7D,KAAC,WAAW,IACV,IAAI,EAAC,SAAS,KACV,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC5D,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACxC,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GACpE,CACH,EAEA,WAAW,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CACnC,8BAOE,KAAC,WAAW,IACV,SAAS,EAAE,GAAG,EAAE;4BACd,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;wBAC7B,CAAC,KACG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC5D,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACxC,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAIhE,CAAC,KAAK,CAAC,oBAAoB,KAAK,SAAS;4BAC7C,KAAK,CAAC,cAAc,KAAK,KAAK;4BAC5B,CAAC,CAAC,EAAE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,EAAE;4BACtD,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS;4BACpC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE;4BACxC,CAAC,CAAC,EAAE,CAAC,GACP,EACF,KAAC,UAAU,IACT,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,GAAG,EAAE;4BACZ,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;wBACjC,CAAC,EACD,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,EACtC,YAAY,EAAE,CAAC,CAAC,gBAAgB,CAAC,cAAc,CAAC,iBACpC,sBAAsB,EAClC,MAAM,EACJ,KAAC,MAAM,IACL,KAAK,QACL,IAAI,EAAC,SAAS,iBACF,sBAAsB,oBACnB,MAAM,2BACC,wDAAwD,EAC9E,OAAO,EAAE,GAAG,EAAE;gCACZ,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;4BAC/B,CAAC,YAEA,UAAU,GACJ,YAGV,KAAK,GACK,EACZ,OAAO,IACP,CACJ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAChB,MAAC,IAAI,IAAC,KAAK,EAAC,YAAY,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,iBAAc,qBAAqB,aACzE,eACE,SAAS,EACP,KAAK,CAAC,aAAa,KAAK,QAAQ;4BAC9B,CAAC,CAAC,UAAU;4BACZ,CAAC,CAAC,GAAG,UAAU,IAAI,oBAAoB,EAAE,EAE7C,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,aAM9B,KAAK,CAAC,aAAa,KAAK,QAAQ,IAAI,CACnC,gBAAO,IAAI,EAAE,eAAe,EAAE,UAAU,EAAC,SAAS,YAC/C,gBAAgB,EAAE,GACb,CACT,EACA,KAAK,IACF,EAON,cAAK,KAAK,EAAE,cAAc,YAAG,OAAO,GAAO,IACtC,CACR,CAAC,CAAC,CAAC,CACF,OAAO,CACR,IACI,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EACJ,OAAO,EACP,UAAU,EACV,gBAAgB,EAChB,uBAAuB,EACvB,MAAM,EACN,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,MAAM,EACN,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,cAAc,EACd,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,aAAa,EACb,OAAO,EACP,aAAa,EACb,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,WAAW,EACX,KAAK,EACL,WAAW,EACX,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,SAAS,EACT,YAAY,EACZ,IAAI,EACJ,GAAG,YAAY,EAChB,GAAG,KAAK,CAAC;IAEV,OAAO,CACL,KAAC,SAAS,IAAC,OAAO,EAAC,MAAM,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,YAChE,KAAC,mBAAmB,IAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,KAAM,YAAY,YACzE,KAAC,cAAc,OACT,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAChD,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACxD,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACxD,CAAC,qBAAqB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACtE,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACxD,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACtD,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC9C,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACpD,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC5D,CAAC,uBAAuB,KAAK,SAAS;oBACxC,CAAC,CAAC,EAAE,uBAAuB,EAAE;oBAC7B,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACxC,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAChE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC9C,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC9C,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACpE,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACtD,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC1D,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC5C,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACtD,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACxC,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACtD,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACpE,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACtD,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAClD,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACxD,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACpD,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC1D,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACpD,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACpD,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACpE,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACxD,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC9D,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC5C,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACtD,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC1C,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACtD,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAClD,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACtD,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAChE,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAClD,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAClE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC5C,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAChD,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAClD,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACtC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAClD,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACpD,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACtD,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GACtE,GACkB,GACZ,CACb,CAAC;AACJ,CAAC"}
@@ -38,8 +38,8 @@
38
38
  * `SkinTheme` from the substrate instead — same props, one implementation, and
39
39
  * a runtime `data-theme` flip actually repaints it.
40
40
  */
41
- export { SearchPage, RAIL_CLASS, RAIL_STYLE_HREF, railScrollbarCss, railStyle, } from "./SearchPage.js";
42
- export type { SearchPageProps, SearchFiltersLayout, SearchFiltersHeader, SearchFiltersHeaderSlotProps, SearchFiltersOpenReason, SearchRailFrom, } from "./SearchPage.js";
41
+ export { SearchPage, BLOCK_GAP_COMPACT_VAR, BLOCK_GAP_VAR, BLOCK_RHYTHM_CLASS, BLOCK_RHYTHM_STYLE_HREF, blockRhythmCss, RAIL_CLASS, RAIL_SCROLLBAR_CLASS, RAIL_STYLE_HREF, railScrollbarCss, railStyle, } from "./SearchPage.js";
42
+ export type { SearchPageProps, SearchFiltersLayout, SearchFiltersHeader, SearchFiltersHeaderSlotProps, SearchFiltersOpenReason, SearchBlockRhythm, SearchRailFrom, SearchRailScrollbar, } from "./SearchPage.js";
43
43
  export { OtherCategoriesLine, OTHER_CATEGORIES_CLASS, OTHER_CATEGORIES_PHONE_ROWS, OTHER_CATEGORIES_SLOT_MIN_HEIGHT, OTHER_CATEGORIES_STYLE_HREF, otherCategoriesCss, otherCategoriesSlotHeight, } from "./OtherCategoriesLine.js";
44
44
  export type { OtherCategoriesLineProps, OtherCategoryHrefResolver, OtherCategoryNamer, } from "./OtherCategoriesLine.js";
45
45
  export { SearchResultsPane, RESULTS_MAX_WIDTH, RESULTS_AUTO_FILL_COLUMNS, RESULTS_COLUMNS_CLASS, RESULTS_COLUMNS_STYLE_HREF, RESULTS_TOOLBAR_CLASS, resultsColumnsCss, } from "./SearchResultsPane.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/default/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/default/index.ts"],"names":[],"mappings":"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"}
@@ -39,7 +39,7 @@
39
39
  * a runtime `data-theme` flip actually repaints it.
40
40
  */
41
41
  // ── surfaces ────────────────────────────────────────────────────────────────
42
- export { SearchPage, RAIL_CLASS, RAIL_STYLE_HREF, railScrollbarCss, railStyle, } from "./SearchPage.js";
42
+ export { SearchPage, BLOCK_GAP_COMPACT_VAR, BLOCK_GAP_VAR, BLOCK_RHYTHM_CLASS, BLOCK_RHYTHM_STYLE_HREF, blockRhythmCss, RAIL_CLASS, RAIL_SCROLLBAR_CLASS, RAIL_STYLE_HREF, railScrollbarCss, railStyle, } from "./SearchPage.js";
43
43
  export { OtherCategoriesLine, OTHER_CATEGORIES_CLASS, OTHER_CATEGORIES_PHONE_ROWS, OTHER_CATEGORIES_SLOT_MIN_HEIGHT, OTHER_CATEGORIES_STYLE_HREF, otherCategoriesCss, otherCategoriesSlotHeight, } from "./OtherCategoriesLine.js";
44
44
  export { SearchResultsPane, RESULTS_MAX_WIDTH, RESULTS_AUTO_FILL_COLUMNS, RESULTS_COLUMNS_CLASS, RESULTS_COLUMNS_STYLE_HREF, RESULTS_TOOLBAR_CLASS, resultsColumnsCss, } from "./SearchResultsPane.js";
45
45
  export { FilterChips, CHIP_BAND_ORDER, CHIP_ROW_CAP, CHIP_ROW_CLASS, CHIP_ROW_STYLE_HREF, appliedChipTestId, appliedRowMinHeight, buildAppliedChips, capChipRow, categoryLeaf, chipRowCss, chipRowMinHeight, orderChipFilters, rangeChipText, rangeLabelSource, } from "./FilterChips.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/default/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,+EAA+E;AAC/E,OAAO,EACL,UAAU,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,SAAS,GACV,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,2BAA2B,EAC3B,gCAAgC,EAChC,2BAA2B,EAC3B,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAShC,OAAO,EACL,WAAW,EACX,eAAe,EACf,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAY1B,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGlF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAOhC,0EAA0E;AAC1E,uEAAuE;AACvE,8EAA8E;AAC9E,OAAO,EACL,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGtF,+EAA+E;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEhF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,+EAA+E;AAC/E,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAK3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/default/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,+EAA+E;AAC/E,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,SAAS,GACV,MAAM,iBAAiB,CAAC;AAYzB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,2BAA2B,EAC3B,gCAAgC,EAChC,2BAA2B,EAC3B,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAShC,OAAO,EACL,WAAW,EACX,eAAe,EACf,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAY1B,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGlF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAOhC,0EAA0E;AAC1E,uEAAuE;AACvE,8EAA8E;AAC9E,OAAO,EACL,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGtF,+EAA+E;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEhF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,+EAA+E;AAC/E,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAK3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
package/llms.txt CHANGED
@@ -1,4 +1,4 @@
1
- # @stapel/search-react 0.37.0
1
+ # @stapel/search-react 0.38.0
2
2
 
3
3
  Headless React flow pair for stapel-search (contract >=0.16 <0.17) — business + state, zero visual opinion.
4
4
  Built on @stapel/core: typed client + StapelApiError envelope, auth token refresh,
@@ -85,7 +85,7 @@ const { tracked } = useTracked();
85
85
  - search.language-select → <LanguageSelect> [offered|from-a-link] demo/LanguageSelect.demo.tsx
86
86
  - search.location-summary → <LocationSummaryLine> [everywhere|placed|narrowed|long-place|wide] demo/LocationSummaryLine.demo.tsx
87
87
  - search.other-categories-line → <OtherCategoriesLine> [line|narrow|empty] demo/OtherCategoriesLine.demo.tsx
88
- - search.page → <SearchPage> [desktop|phone|catalogue-leaf|under-a-header|filters-header-navigates|unreadable-link] demo/SearchPage.demo.tsx
88
+ - search.page → <SearchPage> [desktop|phone|catalogue-leaf|under-a-header|system-scrollbar|legacy-rhythm|filters-header-navigates|unreadable-link] demo/SearchPage.demo.tsx
89
89
  - search.page-size-select → <PageSizeSelect> [ladder|off-ladder] demo/PageSizeSelect.demo.tsx
90
90
  - search.partition-chips → <PartitionChips> [parent|counted|child] demo/PartitionChips.demo.tsx
91
91
  - search.popular-values → <PopularValues> [desktop|responsive|narrow-column] demo/PopularValues.demo.tsx
package/manifest.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$generated": "by scripts/gen-manifest.mjs — do not edit; drift-gated (pnpm gen:manifest:check)",
3
3
  "package": "@stapel/search-react",
4
- "version": "0.37.0",
4
+ "version": "0.38.0",
5
5
  "backend": {
6
6
  "module": "stapel-search",
7
7
  "contract": ">=0.16 <0.17"
@@ -582,6 +582,8 @@
582
582
  "phone",
583
583
  "catalogue-leaf",
584
584
  "under-a-header",
585
+ "system-scrollbar",
586
+ "legacy-rhythm",
585
587
  "filters-header-navigates",
586
588
  "unreadable-link"
587
589
  ],
package/nav-manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "@stapel/search-react",
3
- "version": "0.37.0",
3
+ "version": "0.38.0",
4
4
  "entries": [
5
5
  {
6
6
  "id": "search.results",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stapel/search-react",
3
- "version": "0.37.0",
3
+ "version": "0.38.0",
4
4
  "description": "Headless React pair for stapel-search: a typed query client, TanStack Query hooks, and a URL-first state codec that makes a search shareable by construction (filters, ranges, geo, sort and the keyset cursor all live in the query string). Drill-down facets rendered with their remaining counts and with the server's own honesty flags — approximate, skipped, degraded — never swallowed; keyset pagination with the window refusal named; DSA Art. 26 `promoted` marking carried into every card slot and the P2B Art. 5 ranking disclosure exposed as data. Zero visual opinion in the main entry; an opt-in /default subpath ships the antd skin, and /router binds the codec to react-router's useSearchParams.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -57,7 +57,7 @@
57
57
  "limit": "14.5 KB"
58
58
  },
59
59
  {
60
- "name": "default — the antd skin (query box + a typeahead that offers CATEGORY destinations with their live counts, filters incl. ranges/geo/category slots + the phone chip row with its leading category chip and the location summary row + the rail's evidence-ranked disclosure groups, panel search and sticky count/clear footer, results incl. the view switch, the card photo GALLERY as a SkinCarousel strip, the empty state's derived exits, ranking, the dictionary control for a vocabulary facet, the popular-values block, the partition row in both its chip and segmented variants, the select-style dictionary FIELD the desktop rail opens, the from/to pickers a bounded integer axis draws and the rail's own scrollbar sheet) must stay out of the main bundle. Raised 24.5 → 25.5 KB for those four controls, then 25.5 → 26.25 KB for the chip row's APPLIED mode — one chip per applied value and per numeric bound, each removing that one constraint beside a rail that is already on screen (a storefront was carrying its own copy of it), then 26.25 → 27 KB for the \"search in other categories\" LINE — which is a net deletion on the page that mounts it, replacing a full-width block of one row per section that arrived after the results and pushed them, then 27 → 27.75 KB for the two frames the page now tells apart: the dictionary FIELD reaching `<SearchPage>` at all (per-layout default, field in the rail and inline in the sheet) and the footer bar being static in a column and sticky in a sheet, where it used to be pinned over the last two groups everywhere, then 27.75 → 28.5 KB for `categoryHref` on the other-categories line — a real `<a href>` per row with a modifier-click left to the browser, instead of a `<button>` with no address a person could open in a new tab, then 28.5 → 29.25 KB for the phone's dictionary SHEET — a trigger row over the shared `SkinPickerSheet` with a recommended band, an alphabetical rest paged fifty at a time and a draft committed in one write, which is the control the composer's vocabulary picker already was while the buyer got a wall of checkboxes, then 29.25 → 30.5 KB for the panel that draws all of it: groups and ranges as one ordered sequence with one «Apply» for the panel rather than one per row, the empty-group heading rule, `categoryFilter={false}` and the `resultsLead` slot for a page reached by walking the catalogue, `PopularValues columns=\\\"responsive\\\"` on a container query, `SortSelect` annotating a blocked option at every width, a loading arm that covers the whole pane (0.34 CLS on a live host), and the chip row reserving its own box (a further 0.045). Measured with dependencies held constant, this package's src at the commit before that work and then at it: 29.05 -> 30.16 KB — 1.11 KB, and every part of it is a shift or a mislabelled control a host was living with, then 30.5 -> 31 KB for `<SearchResultsPane columns>` and its pass-through on `<SearchPage resultsColumns>`: a fixed track count or a per-breakpoint map, emitted as a hoisted container-query sheet (the results block is the window minus a 280px rail, so a media query would answer about a width the cards never have). Measured with dependencies held constant, this package's src before and after: 30.40 -> 30.65 KB — 250 B, and what it replaces is a host's `!important` rule against a grid declaration it could not read back, then 31 -> 31.25 KB for the segmented partition being antd's `Segmented` rather than a row of buttons wearing a border: the walker read `data-variant=\"segmented\"` with `role=\"radiogroup\"` and found `.ant-segmented` zero times and `input[type=radio]` zero times (D304), so the cells are the design system's now — real radios under one name, the browser's own arrow keys and Tab stop. Measured with dependencies held constant, this package's src before and after: 30.95 -> 31.05 KB — 100 B, against ~30 lines of hand-rolled joined-row geometry deleted, then 31.25 -> 31.5 KB for the two PINNING seams: `<SearchPage railTop>` (the rail's sticky offset and its height cap moved together, so a rail under a 64px header still ends at the foot of the window) and `<SearchResultsPane stickyToolbar>` with the toolbar's own element in both header shapes. Measured with dependencies held constant, this package's src before and after: 31.05 -> 31.2 KB — 150 B, and what it replaces in one deployment is an `!important` over the pair's own inline geometry, a `:has()`, a `display: contents` and this pair's rail breakpoint restated in the host's media query, then 31.5 -> 31.75 KB for the rail saying when its answer is IN FLIGHT: `FacetPanelBag.refreshing` off `loadStateFromQuery(…, { keepPrevious })`, `data-facets-refreshing` on the rail, and each facet group standing on its own last measured height (a `min-block-size` floor held in a ref) until the new answer lands. Measured with dependencies held constant, this package's src before and after: 31.43 -> 31.51 KB — 80 B, against 0.0586 CLS on a partition press (p43), where the groups survive and RESIZE, then 31.75 -> 32 KB for the FIRST MOUNT, which had none of that: `refreshing` is never true on a cold load, so nothing above reached the one pass a plain load is made of. Three parts. `<SearchPage categoryFeaturesPending>` / `<FacetPanelPane categoryFeaturesPending>` is the third state `categoryFeatures` never had — undefined means both \"no schema\" and \"not yet\", and on a category leaf the schema is a SECOND read, so the panel drew the rail from the answer alone and then drew it again when the schema landed: on the live cars leaf make and model went from three-row checkbox lists to one-row dictionary fields, condition and colour from checkboxes to pills, and `orderFacetGroupsBySchema` reordered all of them (p41, 0.0586 CLS on a plain load of `/c/transport-avtomobili`, make -152px and model -76px). Told the schema is coming, the panel keeps the box it already reserves and draws the rail ONCE. Second, every group now stands on a DECLARED box from the frame it mounts in (`facetGroupReservedHeight` — heading, rows and fold per shape), with its measured height preferred only while an answer is in flight. Third, `<SearchPage filtersHeaderReserve>` puts the host's own band above the rail in flow from the first frame, for the partition row that is two chained catalogue reads behind the answer. Measured with dependencies held constant, this package's src before and after: 30.77 -> 31.14 KB — 366 B, then 32 -> 32.25 KB for the filter sheet's open state becoming the HOST's: `<SearchPage filtersOpen>` / `onFiltersOpenChange(open, reason)` as React's usual controlled pair, and `filtersHeader` accepting a function handed `{ closeFilters, open }`. What it costs is the four call sites naming WHY the sheet moved (`open`, `apply`, `dismiss`, `consumer`) and the slot's function arm; what it buys is a header whose own control NAVIGATES being able to take the sheet down on the same press — the page published only `defaultFiltersOpen`, so a partition chip inside the sheet left the drawer standing over the page it had just opened. Measured with dependencies held constant, this package's src before and after: 31.14 -> 31.26 KB — 120 B, then 32.25 -> 32.5 KB for the two levers a storefront could not reach: `<SearchPage footerBar>` (the rail's footer bar writes its own `display` inline, so a consumer stylesheet could only suppress it with an `!important` its own gate forbids, and this page hard-coded the column's value) and `PartitionChild.count`, which the chip draws itself in the muted weight the facet rows use instead of a host welding the number onto the name. Measured with dependencies held constant, this package's src before and after: 32.01 -> 32.10 KB — 90 B, against a string-joining hack and an unreachable bar, then 32.5 -> 32.75 KB for THE THREE BOXES A STOREFRONT WAS HOLDING FOR THIS PAIR. The phone chip row's reserve is `chipRowMinHeight(token.controlHeight)` instead of a `44 + …` constant: the touch floor raises the chips to 44 only BELOW the tablet breakpoint, so from 768px up the reserve stood 12px taller than the 40px row and the results pane ROSE when the row landed (0.0725 CLS on a category leaf at 768, against 0.00016 at 390). `<SortSelect compact>` reserves the width of the longest label it can display, measured by the browser through an `aria-hidden` sizer stacked with the select in one grid cell, instead of `minWidth: 0` inline and a control that GREW 115px when the answer named the sort. And `<SearchResultsPane>` names its own root (`data-testid=\"search-results-pane\"`) and takes `reserve` — `<SearchPage resultsReserve>` — for the box the feed arrives into, which a host was holding with `#search-page > :last-child`. Measured with dependencies held constant, this package's src before and after: 32.10 -> 32.25 KB — 150 B, against a hand-guessed height, a sibling-count selector and two stylesheet rules a consumer can now delete",
60
+ "name": "default — the antd skin (query box + a typeahead that offers CATEGORY destinations with their live counts, filters incl. ranges/geo/category slots + the phone chip row with its leading category chip and the location summary row + the rail's evidence-ranked disclosure groups, panel search and sticky count/clear footer, results incl. the view switch, the card photo GALLERY as a SkinCarousel strip, the empty state's derived exits, ranking, the dictionary control for a vocabulary facet, the popular-values block, the partition row in both its chip and segmented variants, the select-style dictionary FIELD the desktop rail opens, the from/to pickers a bounded integer axis draws and the rail's own scrollbar sheet) must stay out of the main bundle. Raised 24.5 → 25.5 KB for those four controls, then 25.5 → 26.25 KB for the chip row's APPLIED mode — one chip per applied value and per numeric bound, each removing that one constraint beside a rail that is already on screen (a storefront was carrying its own copy of it), then 26.25 → 27 KB for the \"search in other categories\" LINE — which is a net deletion on the page that mounts it, replacing a full-width block of one row per section that arrived after the results and pushed them, then 27 → 27.75 KB for the two frames the page now tells apart: the dictionary FIELD reaching `<SearchPage>` at all (per-layout default, field in the rail and inline in the sheet) and the footer bar being static in a column and sticky in a sheet, where it used to be pinned over the last two groups everywhere, then 27.75 → 28.5 KB for `categoryHref` on the other-categories line — a real `<a href>` per row with a modifier-click left to the browser, instead of a `<button>` with no address a person could open in a new tab, then 28.5 → 29.25 KB for the phone's dictionary SHEET — a trigger row over the shared `SkinPickerSheet` with a recommended band, an alphabetical rest paged fifty at a time and a draft committed in one write, which is the control the composer's vocabulary picker already was while the buyer got a wall of checkboxes, then 29.25 → 30.5 KB for the panel that draws all of it: groups and ranges as one ordered sequence with one «Apply» for the panel rather than one per row, the empty-group heading rule, `categoryFilter={false}` and the `resultsLead` slot for a page reached by walking the catalogue, `PopularValues columns=\\\"responsive\\\"` on a container query, `SortSelect` annotating a blocked option at every width, a loading arm that covers the whole pane (0.34 CLS on a live host), and the chip row reserving its own box (a further 0.045). Measured with dependencies held constant, this package's src at the commit before that work and then at it: 29.05 -> 30.16 KB — 1.11 KB, and every part of it is a shift or a mislabelled control a host was living with, then 30.5 -> 31 KB for `<SearchResultsPane columns>` and its pass-through on `<SearchPage resultsColumns>`: a fixed track count or a per-breakpoint map, emitted as a hoisted container-query sheet (the results block is the window minus a 280px rail, so a media query would answer about a width the cards never have). Measured with dependencies held constant, this package's src before and after: 30.40 -> 30.65 KB — 250 B, and what it replaces is a host's `!important` rule against a grid declaration it could not read back, then 31 -> 31.25 KB for the segmented partition being antd's `Segmented` rather than a row of buttons wearing a border: the walker read `data-variant=\"segmented\"` with `role=\"radiogroup\"` and found `.ant-segmented` zero times and `input[type=radio]` zero times (D304), so the cells are the design system's now — real radios under one name, the browser's own arrow keys and Tab stop. Measured with dependencies held constant, this package's src before and after: 30.95 -> 31.05 KB — 100 B, against ~30 lines of hand-rolled joined-row geometry deleted, then 31.25 -> 31.5 KB for the two PINNING seams: `<SearchPage railTop>` (the rail's sticky offset and its height cap moved together, so a rail under a 64px header still ends at the foot of the window) and `<SearchResultsPane stickyToolbar>` with the toolbar's own element in both header shapes. Measured with dependencies held constant, this package's src before and after: 31.05 -> 31.2 KB — 150 B, and what it replaces in one deployment is an `!important` over the pair's own inline geometry, a `:has()`, a `display: contents` and this pair's rail breakpoint restated in the host's media query, then 31.5 -> 31.75 KB for the rail saying when its answer is IN FLIGHT: `FacetPanelBag.refreshing` off `loadStateFromQuery(…, { keepPrevious })`, `data-facets-refreshing` on the rail, and each facet group standing on its own last measured height (a `min-block-size` floor held in a ref) until the new answer lands. Measured with dependencies held constant, this package's src before and after: 31.43 -> 31.51 KB — 80 B, against 0.0586 CLS on a partition press (p43), where the groups survive and RESIZE, then 31.75 -> 32 KB for the FIRST MOUNT, which had none of that: `refreshing` is never true on a cold load, so nothing above reached the one pass a plain load is made of. Three parts. `<SearchPage categoryFeaturesPending>` / `<FacetPanelPane categoryFeaturesPending>` is the third state `categoryFeatures` never had — undefined means both \"no schema\" and \"not yet\", and on a category leaf the schema is a SECOND read, so the panel drew the rail from the answer alone and then drew it again when the schema landed: on the live cars leaf make and model went from three-row checkbox lists to one-row dictionary fields, condition and colour from checkboxes to pills, and `orderFacetGroupsBySchema` reordered all of them (p41, 0.0586 CLS on a plain load of `/c/transport-avtomobili`, make -152px and model -76px). Told the schema is coming, the panel keeps the box it already reserves and draws the rail ONCE. Second, every group now stands on a DECLARED box from the frame it mounts in (`facetGroupReservedHeight` — heading, rows and fold per shape), with its measured height preferred only while an answer is in flight. Third, `<SearchPage filtersHeaderReserve>` puts the host's own band above the rail in flow from the first frame, for the partition row that is two chained catalogue reads behind the answer. Measured with dependencies held constant, this package's src before and after: 30.77 -> 31.14 KB — 366 B, then 32 -> 32.25 KB for the filter sheet's open state becoming the HOST's: `<SearchPage filtersOpen>` / `onFiltersOpenChange(open, reason)` as React's usual controlled pair, and `filtersHeader` accepting a function handed `{ closeFilters, open }`. What it costs is the four call sites naming WHY the sheet moved (`open`, `apply`, `dismiss`, `consumer`) and the slot's function arm; what it buys is a header whose own control NAVIGATES being able to take the sheet down on the same press — the page published only `defaultFiltersOpen`, so a partition chip inside the sheet left the drawer standing over the page it had just opened. Measured with dependencies held constant, this package's src before and after: 31.14 -> 31.26 KB — 120 B, then 32.25 -> 32.5 KB for the two levers a storefront could not reach: `<SearchPage footerBar>` (the rail's footer bar writes its own `display` inline, so a consumer stylesheet could only suppress it with an `!important` its own gate forbids, and this page hard-coded the column's value) and `PartitionChild.count`, which the chip draws itself in the muted weight the facet rows use instead of a host welding the number onto the name. Measured with dependencies held constant, this package's src before and after: 32.01 -> 32.10 KB — 90 B, against a string-joining hack and an unreachable bar, then 32.5 -> 32.75 KB for THE THREE BOXES A STOREFRONT WAS HOLDING FOR THIS PAIR. The phone chip row's reserve is `chipRowMinHeight(token.controlHeight)` instead of a `44 + …` constant: the touch floor raises the chips to 44 only BELOW the tablet breakpoint, so from 768px up the reserve stood 12px taller than the 40px row and the results pane ROSE when the row landed (0.0725 CLS on a category leaf at 768, against 0.00016 at 390). `<SortSelect compact>` reserves the width of the longest label it can display, measured by the browser through an `aria-hidden` sizer stacked with the select in one grid cell, instead of `minWidth: 0` inline and a control that GREW 115px when the answer named the sort. And `<SearchResultsPane>` names its own root (`data-testid=\"search-results-pane\"`) and takes `reserve` — `<SearchPage resultsReserve>` — for the box the feed arrives into, which a host was holding with `#search-page > :last-child`. Measured with dependencies held constant, this package's src before and after: 32.10 -> 32.25 KB — 150 B, against a hand-guessed height, a sibling-count selector and two stylesheet rules a consumer can now delete. 32.75 KB HOLDS for the rail's own scrollbar and the block rhythm (owner's walk of the storefront, dark theme): measured 32539 B against the 32.75 KB line, 290 B over the 32249 B this note last recorded, and 211 B of room left. The rail stays its own scroll container — filters that stay put while the results move under them is the whole point of it — and `railScrollbar` names whose BAR draws in the gutter: `\"styled\"` (the new default) is a hoisted rule set in both vendor forms, a 6px track with no arrows and no track fill and a thumb that is transparent at rest and arrives from the tokens on hover or focus-within, standing always under `(pointer: coarse)` where neither fires; `\"system\"` hands the port back to the platform and mounts no sheet at all. The system bar was never a decision, which is why the default is the new arm. The rest is `blockRhythm`: one gap for every block on this page from `var(--stapel-block-gap)` / `var(--stapel-block-gap-compact)` with each block's outer margin reset, in place of the flat `spacing[4]` the root `<Flex>` wrote inline. A budget is not raised for a change that fits under the line it already has",
61
61
  "path": "dist/default/index.js",
62
62
  "limit": "32.75 KB"
63
63
  },
@@ -115,8 +115,8 @@
115
115
  "size-limit": "^11.2.0",
116
116
  "typescript": "^5.8.3",
117
117
  "vitest": "^3.2.4",
118
- "@stapel/attributes-react": "^0.16.6",
119
- "@stapel/core": "^0.26.0",
118
+ "@stapel/core": "^0.26.1",
119
+ "@stapel/attributes-react": "^0.17.0",
120
120
  "@stapel/image": "^0.4.2",
121
121
  "@stapel/showcase": "^0.3.0",
122
122
  "@stapel/tokens": "^0.8.0",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$generated": "by scripts/gen-events.mjs — do not edit; drift-gated (pnpm gen:events:check)",
3
3
  "package": "@stapel/search-react",
4
- "version": "0.37.0",
4
+ "version": "0.38.0",
5
5
  "defined": [],
6
6
  "flows": []
7
7
  }
@@ -66,7 +66,7 @@ import type { CSSProperties, ReactElement, ReactNode } from "react";
66
66
  import { Button, Flex } from "antd";
67
67
  import { SkinDialog, SkinTheme, useDialogSurface } from "@stapel/tokens-antd/skin";
68
68
  import { useT, useTPlural } from "@stapel/core";
69
- import { cssVar, spacing } from "@stapel/tokens";
69
+ import { breakpoints, cssVar, spacing } from "@stapel/tokens";
70
70
  import type { FeatureDef } from "@stapel/attributes-react";
71
71
  import { SearchStateProvider, useSearchState } from "../headless/SearchStateProvider.js";
72
72
  import type { SearchParamsAdapter } from "../headless/SearchStateProvider.js";
@@ -261,47 +261,89 @@ export const FILTERS_RAIL_WIDTH = 280;
261
261
  * `alignSelf: flex-start` is load-bearing: a flex child stretches to the row's
262
262
  * height by default, and a stretched box has nothing to stick to.
263
263
  */
264
- /** The class the rail's own scrollbar rules are hung on. */
264
+ /** The class the rail's own geometry and scrollbar rules are hung on. */
265
265
  export const RAIL_CLASS = "stapel-search-rail";
266
266
 
267
+ /**
268
+ * The class that carries the SKIN's scrollbar — present under
269
+ * `railScrollbar: "styled"` and absent under `"system"`, so the two arms are
270
+ * one class apart and a stand can read which one is on screen.
271
+ */
272
+ export const RAIL_SCROLLBAR_CLASS = "stapel-search-rail-scrollbar";
273
+
267
274
  /** The `href` the hoisted rail sheet is deduplicated by. */
268
275
  export const RAIL_STYLE_HREF = "stapel-search-rail";
269
276
 
277
+ /** Whose scrollbar the rail's own scroll port draws — see
278
+ * {@link SearchPageProps.railScrollbar}. */
279
+ export type SearchRailScrollbar = "styled" | "system";
280
+
270
281
  /**
271
- * The rail scrolls, and its scrollbar must not sit ON the filters.
282
+ * The scrollbar's track width, in CSS pixels.
272
283
  *
273
- * `scrollbar-width: thin` and `scrollbar-gutter: stable` (below, in `RAIL`)
274
- * are the standard half of this and they are not enough: on every WebKit
275
- * platform with overlay scrollbars a Mac by default, every iOS browser
276
- * the bar is drawn OVER the content and the gutter reserves nothing, so the
277
- * walker saw the bar lying across the right edge of the checkbox labels.
284
+ * Not on the spacing scale on purpose, and not a spacing decision: this is the
285
+ * thickness of a hairline instrument, the size every platform's own overlay
286
+ * bar lands within, and the number the storefront's owner named. Six is thin
287
+ * enough to read as part of the panel and thick enough to grab.
288
+ */
289
+ const RAIL_SCROLLBAR_WIDTH = 6;
290
+
291
+ /**
292
+ * The rail scrolls, and the bar that says so is the SKIN's, not the platform's.
293
+ *
294
+ * The system bar was never a decision — it is what an `overflow-y: auto` box
295
+ * gets when nobody says otherwise, and on the storefront it landed as a grey
296
+ * chrome-coloured strip standing next to the filters in a dark theme. What it
297
+ * is replaced with:
298
+ *
299
+ * - a 6px track with no arrows and no track fill — the rail's own hairline,
300
+ * not a widget;
301
+ * - a thumb that is TRANSPARENT at rest and appears on `:hover` of the rail
302
+ * (which is what a pointer scrolling inside it is doing) and on
303
+ * `:focus-within` (which is what a keyboard is doing). A coarse pointer
304
+ * fires neither, so under `(pointer: coarse)` the thumb stands — a touch
305
+ * surface with an invisible scrollbar is a rail with no sign it has a tail;
306
+ * - `scrollbar-gutter: stable`, so the panel's right edge does not move when
307
+ * the thumb arrives.
278
308
  *
279
- * So the rail also declares a CLASSIC scrollbar through the WebKit
280
- * pseudo-elements: a bar with a real width, which pushes the panel's content
281
- * in by exactly that much instead of floating above it, drawn in the token
282
- * palette so it is the panel's own hairline in both themes rather than a
283
- * hard-coded grey that glows in the dark one. `--stapel-*` custom properties
284
- * resolve per theme at paint time, which is why this is a sheet and not a
285
- * pair of computed inline values: an inline colour would freeze whichever
286
- * theme was mounted first.
309
+ * Both vendor forms, because they are not alternatives: Firefox reads
310
+ * `scrollbar-width`/`scrollbar-color` and nothing else, WebKit and Chromium
311
+ * read the `::-webkit-scrollbar` pseudo-elements and (in Chromium) the
312
+ * standard properties too.
313
+ *
314
+ * The colours are `--stapel-*` custom properties, which resolve per theme at
315
+ * paint time an inline colour or a `useToken()` value would freeze whichever
316
+ * theme was mounted first. This design system's neutral vocabulary has no
317
+ * `colorFill*` ramp of its own: `border` IS its tertiary-fill role (the
318
+ * hairline every pane is separated by) and `text-subtle` is that role one step
319
+ * stronger, which is what the thumb takes when a pointer is on the thumb
320
+ * itself.
287
321
  *
288
322
  * Emitted as one hoisted `<style>` (React 19 dedupes by `href`), because a
289
323
  * pseudo-element is unreachable from an inline style — the same reason
290
324
  * `<LocationSummaryLine>` hoists one.
291
325
  */
292
326
  export function railScrollbarCss(): string {
293
- const rail = `.${RAIL_CLASS}`;
327
+ const bar = `.${RAIL_SCROLLBAR_CLASS}`;
328
+ const size = `${String(RAIL_SCROLLBAR_WIDTH)}px`;
329
+ const thumb = cssVar("border");
330
+ const awake = `${bar}:hover,${bar}:focus-within`;
294
331
  return [
295
- // A real width: an overlay bar occupies no space and therefore overlaps.
296
- `${rail}::-webkit-scrollbar{inline-size:8px;block-size:8px}`,
297
- `${rail}::-webkit-scrollbar-track{background:transparent}`,
298
- `${rail}::-webkit-scrollbar-thumb{background:${cssVar("border")};` +
332
+ // ── Firefox ────────────────────────────────────────────────────────────
333
+ `${bar}{scrollbar-width:thin;scrollbar-gutter:stable;` +
334
+ `scrollbar-color:transparent transparent}`,
335
+ `${awake}{scrollbar-color:${thumb} transparent}`,
336
+ // ── WebKit / Chromium ──────────────────────────────────────────────────
337
+ `${bar}::-webkit-scrollbar{inline-size:${size};block-size:${size}}`,
338
+ `${bar}::-webkit-scrollbar-track{background:transparent}`,
339
+ `${bar}::-webkit-scrollbar-thumb{background:transparent;` +
299
340
  `border-radius:${cssVar("radius-full")}}`,
300
- `${rail}::-webkit-scrollbar-thumb:hover{background:${cssVar("text-subtle")}}`,
301
- // Firefox/Chromium's standard properties, stated here too so the rule
302
- // travels with the class when the panel is used outside `<SearchPage>`.
303
- `${rail}{scrollbar-width:thin;scrollbar-gutter:stable;` +
304
- `scrollbar-color:${cssVar("border")} transparent}`,
341
+ `${bar}:hover::-webkit-scrollbar-thumb,` +
342
+ `${bar}:focus-within::-webkit-scrollbar-thumb{background:${thumb}}`,
343
+ `${bar}::-webkit-scrollbar-thumb:hover{background:${cssVar("text-subtle")}}`,
344
+ // ── A surface with no hover at all ─────────────────────────────────────
345
+ `@media (pointer:coarse){${bar}{scrollbar-color:${thumb} transparent}` +
346
+ `${bar}::-webkit-scrollbar-thumb{background:${thumb}}}`,
305
347
  ].join("\n");
306
348
  }
307
349
 
@@ -320,14 +362,11 @@ const RAIL: CSSProperties = {
320
362
  maxHeight: "100dvh",
321
363
  overflowY: "auto",
322
364
  overscrollBehavior: "contain",
323
- // The inner scroll must be VISIBLE. On overlay-scrollbar platforms (every
324
- // Mac by default, most phones) an `overflow-y: auto` column shows no
325
- // scrollbar until a pointer happens to scroll INSIDE itso a rail taller
326
- // than the window is indistinguishable from a rail that ends at the fold,
327
- // and the walker measured 5717px of panel whose tail nothing signposted.
328
- // A thin, always-there scrollbar is the sign there is more; the stable
329
- // gutter keeps the panel's right edge from jumping when it appears.
330
- scrollbarWidth: "thin",
365
+ // The gutter is the rail's, whichever bar draws in it: reserved here so the
366
+ // panel's right edge does not move when the thumb arrives. The bar's own
367
+ // width and colour are the skin's and live in `railScrollbarCss` — a rule
368
+ // set, not an inline pair, because a thumb that appears on hover cannot be
369
+ // said in a style attribute.
331
370
  scrollbarGutter: "stable",
332
371
  // Room for the focus ring of the last control against the scroll edge.
333
372
  paddingBlockEnd: spacing[2],
@@ -355,6 +394,71 @@ export function railStyle(top: number | string | undefined): CSSProperties {
355
394
  * cannot push the grid wider than its column. */
356
395
  const RESULTS_COLUMN: CSSProperties = { flex: "1 1 auto", minWidth: 0 };
357
396
 
397
+ /* ── THE RHYTHM: ONE GAP BETWEEN BLOCKS, SAID ONCE ─────────────────────────
398
+ *
399
+ * This page is an assembly of BLOCKS — the query box, the breadcrumb, the
400
+ * location row, the header band, the applied chips, the columns — and every
401
+ * gap between two of them used to be `spacing[4]` on the root plus whatever
402
+ * outer margin the block itself happened to carry. Sixteen pixels is what a
403
+ * form's fields are spaced by, not what a page's sections are: on the walked
404
+ * storefront the blocks read as one undifferentiated column, and the owner's
405
+ * word for it was that everything is stuck together.
406
+ *
407
+ * The gap is now ONE PAIR of custom properties, declared as a usage and not as
408
+ * a definition — `var(--stapel-block-gap, 32px)`. That is the whole point of
409
+ * the shape: a host (or a container's own stylesheet, or a brand) sets the
410
+ * property anywhere above this page and every block on it moves together,
411
+ * while a host that sets nothing gets the design system's own spacing step.
412
+ *
413
+ * The compact value is for a COARSE POINTER or a narrow window, in one query
414
+ * with two arms: a phone has less height to spend on air, and a tablet held in
415
+ * a hand is a phone for this purpose whatever its width says.
416
+ *
417
+ * The names are the pair's published contract, which is why they are exported:
418
+ * `categories-react`'s pages declare the same two, so a storefront that tunes
419
+ * the rhythm tunes BOTH pairs with one declaration.
420
+ */
421
+
422
+ /** The custom property every block gap on this page reads. */
423
+ export const BLOCK_GAP_VAR = "--stapel-block-gap";
424
+
425
+ /** Its coarse-pointer / narrow-window twin. */
426
+ export const BLOCK_GAP_COMPACT_VAR = "--stapel-block-gap-compact";
427
+
428
+ /** The class the rhythm's rules are hung on. */
429
+ export const BLOCK_RHYTHM_CLASS = "stapel-block-rhythm";
430
+
431
+ /** The `href` the hoisted rhythm sheet is deduplicated by. */
432
+ export const BLOCK_RHYTHM_STYLE_HREF = "stapel-block-rhythm";
433
+
434
+ /** Where the page's block gap comes from — see
435
+ * {@link SearchPageProps.blockRhythm}. */
436
+ export type SearchBlockRhythm = "token" | "legacy";
437
+
438
+ /**
439
+ * The rhythm's rule set.
440
+ *
441
+ * Three rules, and the third is half of the fix: `margin-block: 0` on every
442
+ * direct child. A gap only governs the space a container puts BETWEEN its
443
+ * children — a block that also carries its own top or bottom margin adds to it
444
+ * and the spacing stops being one number, which is exactly how a page ends up
445
+ * with four different distances nobody chose.
446
+ *
447
+ * A sheet rather than inline styles because the compact arm is a media query
448
+ * and the reset addresses children this component does not own.
449
+ */
450
+ export function blockRhythmCss(): string {
451
+ const block = `.${BLOCK_RHYTHM_CLASS}`;
452
+ const narrow = `(max-width:${String(breakpoints.tablet - 1)}px)`;
453
+ return [
454
+ `${block}{gap:var(${BLOCK_GAP_VAR},${String(spacing[6])}px)}`,
455
+ `@media (pointer:coarse),${narrow}{` +
456
+ `${block}{gap:var(${BLOCK_GAP_COMPACT_VAR},${String(spacing[5])}px)}}`,
457
+ // A block's own outer margin is a second opinion about the same distance.
458
+ `${block}>*{margin-block:0}`,
459
+ ].join("\n");
460
+ }
461
+
358
462
  export interface SearchPageProps extends ThemeModeProp, ParseSearchStateOptions {
359
463
  /** The URL binding. `useRouterSearchParams()` from `./router` is the
360
464
  * react-router one. */
@@ -659,6 +763,46 @@ export interface SearchPageProps extends ThemeModeProp, ParseSearchStateOptions
659
763
  * header to clear.
660
764
  */
661
765
  readonly railTop?: number | string;
766
+ /**
767
+ * WHOSE SCROLLBAR the rail's own scroll port draws. Default `"styled"`.
768
+ *
769
+ * The rail is a scroll container and stays one: a person who has scrolled
770
+ * the filters and ticked one does not want the page to have moved under
771
+ * them. What it stopped drawing is the PLATFORM's bar — a grey chrome strip
772
+ * beside the filters, which is what an `overflow-y: auto` box gets when
773
+ * nobody decides otherwise.
774
+ *
775
+ * - `"styled"` — the skin's own bar, from the tokens, in both themes: a 6px
776
+ * track, no arrows, no track fill, and a thumb that is transparent at
777
+ * rest and appears while the rail is hovered or focused within (always,
778
+ * on a coarse pointer that can do neither). See {@link railScrollbarCss};
779
+ * - `"system"` — the platform's, untouched, for a host whose own stylesheet
780
+ * already dresses every scroll port on the page and would then be
781
+ * dressing this one twice.
782
+ *
783
+ * The default is the NEW behaviour, deliberately: the system bar was never a
784
+ * design decision here — it was the absence of one, and it is the thing the
785
+ * page was measured on.
786
+ */
787
+ readonly railScrollbar?: SearchRailScrollbar;
788
+ /**
789
+ * WHERE the space between this page's blocks comes from. Default `"token"`.
790
+ *
791
+ * - `"token"` — one gap for every block, read from
792
+ * `var(--stapel-block-gap)` (and `var(--stapel-block-gap-compact)` on a
793
+ * coarse pointer or a narrow window), defaulting to the design system's
794
+ * own spacing steps. Every direct block also has its outer margin reset,
795
+ * so the distance between two blocks is ONE number and a host can retune
796
+ * all of them by declaring the property once — see {@link blockRhythmCss};
797
+ * - `"legacy"` — the flat `spacing[4]` this page wrote inline for a host
798
+ * whose own layout was measured against it.
799
+ *
800
+ * The default is the NEW behaviour: 16px between a page's sections was the
801
+ * value a vertical `<Flex>` was given when the page was first assembled, not
802
+ * a rhythm anybody chose, and it is what made the blocks read as one column
803
+ * with no seams.
804
+ */
805
+ readonly blockRhythm?: SearchBlockRhythm;
662
806
  /**
663
807
  * PIN the results toolbar under whatever chrome is above this page — the
664
808
  * other column's half of {@link railTop}.
@@ -845,6 +989,8 @@ interface SearchPageBodyProps {
845
989
  readonly railFrom?: SearchRailFrom;
846
990
  readonly filtersLayout?: SearchFiltersLayout;
847
991
  readonly railTop?: number | string;
992
+ readonly railScrollbar?: SearchRailScrollbar;
993
+ readonly blockRhythm?: SearchBlockRhythm;
848
994
  readonly stickyToolbar?: SearchToolbarPin;
849
995
  readonly defaultFiltersOpen?: boolean;
850
996
  readonly filtersOpen?: boolean;
@@ -1152,14 +1298,28 @@ function SearchPageBody(props: SearchPageBodyProps): ReactElement {
1152
1298
  />
1153
1299
  );
1154
1300
 
1301
+ const legacyRhythm = props.blockRhythm === "legacy";
1155
1302
  return (
1156
1303
  <Flex
1157
1304
  vertical
1158
- gap={spacing[4]}
1305
+ // ONE gap for every block on this page, from the token pair — or the
1306
+ // 16px this page used to state inline, for a host pinned to it.
1307
+ {...(legacyRhythm
1308
+ ? { gap: spacing[4] }
1309
+ : { className: BLOCK_RHYTHM_CLASS })}
1159
1310
  data-testid="search-page"
1311
+ data-rhythm={legacyRhythm ? "legacy" : "token"}
1160
1312
  data-filters={showFilters ? "on" : "off"}
1161
1313
  data-filters-layout={layout}
1162
1314
  >
1315
+ {/* The rhythm's rules — see `blockRhythmCss`. Hoisted, deduped by
1316
+ `href`, and not mounted at all when the host asked for the old
1317
+ inline gap. */}
1318
+ {!legacyRhythm && (
1319
+ <style href={BLOCK_RHYTHM_STYLE_HREF} precedence="default">
1320
+ {blockRhythmCss()}
1321
+ </style>
1322
+ )}
1163
1323
  {props.searchBox !== false && <SearchBox />}
1164
1324
  {props.breadcrumb !== undefined && (
1165
1325
  <div data-testid="search-breadcrumb">{props.breadcrumb}</div>
@@ -1275,12 +1435,23 @@ function SearchPageBody(props: SearchPageBodyProps): ReactElement {
1275
1435
  </>
1276
1436
  ) : showFilters ? (
1277
1437
  <Flex align="flex-start" gap={spacing[5]} data-testid="search-page-columns">
1278
- <div className={RAIL_CLASS} style={railStyle(props.railTop)}>
1438
+ <div
1439
+ className={
1440
+ props.railScrollbar === "system"
1441
+ ? RAIL_CLASS
1442
+ : `${RAIL_CLASS} ${RAIL_SCROLLBAR_CLASS}`
1443
+ }
1444
+ style={railStyle(props.railTop)}
1445
+ >
1279
1446
  {/* The rail's scrollbar, in the gutter and in the token palette —
1280
- see `railScrollbarCss`. Hoisted, deduped by `href`. */}
1281
- <style href={RAIL_STYLE_HREF} precedence="default">
1282
- {railScrollbarCss()}
1283
- </style>
1447
+ see `railScrollbarCss`. Hoisted, deduped by `href`. Not mounted
1448
+ at all under `"system"`: a sheet whose only selector is a class
1449
+ nothing carries is dead weight in the document. */}
1450
+ {props.railScrollbar !== "system" && (
1451
+ <style href={RAIL_STYLE_HREF} precedence="default">
1452
+ {railScrollbarCss()}
1453
+ </style>
1454
+ )}
1284
1455
  {panel}
1285
1456
  </div>
1286
1457
  {/* ONE heading and ONE sort control. The page used to caption
@@ -1330,6 +1501,8 @@ export function SearchPage(props: SearchPageProps): ReactElement {
1330
1501
  railFrom,
1331
1502
  filtersLayout,
1332
1503
  railTop,
1504
+ railScrollbar,
1505
+ blockRhythm,
1333
1506
  stickyToolbar,
1334
1507
  defaultFiltersOpen,
1335
1508
  filtersOpen,
@@ -1394,6 +1567,8 @@ export function SearchPage(props: SearchPageProps): ReactElement {
1394
1567
  {...(railFrom !== undefined ? { railFrom } : {})}
1395
1568
  {...(filtersLayout !== undefined ? { filtersLayout } : {})}
1396
1569
  {...(railTop !== undefined ? { railTop } : {})}
1570
+ {...(railScrollbar !== undefined ? { railScrollbar } : {})}
1571
+ {...(blockRhythm !== undefined ? { blockRhythm } : {})}
1397
1572
  {...(stickyToolbar !== undefined ? { stickyToolbar } : {})}
1398
1573
  {...(defaultFiltersOpen !== undefined ? { defaultFiltersOpen } : {})}
1399
1574
  {...(filtersOpen !== undefined ? { filtersOpen } : {})}
@@ -42,7 +42,13 @@
42
42
  // ── surfaces ────────────────────────────────────────────────────────────────
43
43
  export {
44
44
  SearchPage,
45
+ BLOCK_GAP_COMPACT_VAR,
46
+ BLOCK_GAP_VAR,
47
+ BLOCK_RHYTHM_CLASS,
48
+ BLOCK_RHYTHM_STYLE_HREF,
49
+ blockRhythmCss,
45
50
  RAIL_CLASS,
51
+ RAIL_SCROLLBAR_CLASS,
46
52
  RAIL_STYLE_HREF,
47
53
  railScrollbarCss,
48
54
  railStyle,
@@ -53,7 +59,9 @@ export type {
53
59
  SearchFiltersHeader,
54
60
  SearchFiltersHeaderSlotProps,
55
61
  SearchFiltersOpenReason,
62
+ SearchBlockRhythm,
56
63
  SearchRailFrom,
64
+ SearchRailScrollbar,
57
65
  } from "./SearchPage.js";
58
66
 
59
67
  export {