@abyss-project/commons-front-core 9.4.0 → 9.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +10 -0
  2. package/catalog/captures-plan.ts +5 -1
  3. package/catalog/catalog-entries.ts +7 -1
  4. package/catalog/pages/ExpressionSearch.tsx +65 -0
  5. package/catalog/pages/FacetPanel.tsx +81 -0
  6. package/catalog/pages/PageState.tsx +17 -0
  7. package/catalog/pages/PreviewDrawer.tsx +120 -0
  8. package/catalog/pages/ProductTour.tsx +88 -80
  9. package/catalog/pages/Section.tsx +10 -0
  10. package/catalog/pages/StatTile.tsx +13 -0
  11. package/catalog/pages/ValueMenu.tsx +40 -0
  12. package/catalog/pages/index.ts +8 -0
  13. package/catalog/specs/captures.spec.ts +7 -0
  14. package/catalog/specs/expression-search-scroll.spec.ts +33 -0
  15. package/catalog/specs/preview-drawer-trail.spec.ts +38 -0
  16. package/catalog/specs/write-capture-index.ts +1 -0
  17. package/dist/{AbyssCookieConsentProvider-L42RPb5f.js → AbyssCookieConsentProvider-B0_k-lsA.js} +406 -312
  18. package/dist/{CookieConsentSettings.component-CkhtQuGU.js → CookieConsentSettings.component-DPmXSN1B.js} +1 -1
  19. package/dist/components/data/FacetPanel/FacetPanel.d.ts +30 -0
  20. package/dist/components/data/FacetPanel/FacetPanel.spec.d.ts +1 -0
  21. package/dist/components/data/FacetPanel/facet-terms.d.ts +16 -0
  22. package/dist/components/data/StatTile/StatTile.d.ts +4 -1
  23. package/dist/components/data/chart-value-ticks.d.ts +38 -0
  24. package/dist/components/data/chart-value-ticks.spec.d.ts +1 -0
  25. package/dist/components/data/index.d.ts +1 -0
  26. package/dist/components/inputs/ExpressionSearch/ExpressionSearch.d.ts +30 -0
  27. package/dist/components/inputs/ExpressionSearch/ExpressionSearch.spec.d.ts +1 -0
  28. package/dist/components/inputs/ExpressionSearch/suggestion-context.d.ts +20 -0
  29. package/dist/components/inputs/index.d.ts +1 -0
  30. package/dist/components/layers/PreviewDrawer/PreviewDrawer.d.ts +18 -0
  31. package/dist/components/layers/PreviewDrawer/PreviewDrawer.spec.d.ts +1 -0
  32. package/dist/components/layers/PreviewDrawer/usePreviewStack.d.ts +32 -0
  33. package/dist/components/layers/ProductTour/ProductTour.d.ts +3 -3
  34. package/dist/components/layers/ProductTour/product-tour-geometry.d.ts +9 -3
  35. package/dist/components/layers/index.d.ts +2 -0
  36. package/dist/components/meaning/ValueMenu/ValueMenu.d.ts +25 -0
  37. package/dist/components/meaning/ValueMenu/ValueMenu.spec.d.ts +1 -0
  38. package/dist/components/meaning/index.d.ts +1 -0
  39. package/dist/components/states/PageState/PageState.d.ts +9 -2
  40. package/dist/components/structure/Section/Section.d.ts +3 -1
  41. package/dist/cookie-consent.js +2 -2
  42. package/dist/{design-theme-C3DcD-kA.js → design-theme-BI47S5Y9.js} +1 -1
  43. package/dist/hooks/use-rich-intl.hook.d.ts +96 -2
  44. package/dist/{index-BowQxHAl.js → index-1OsboYW9.js} +2 -2
  45. package/dist/{index-Bi1ITcfD.js → index-B0QTV2Ec.js} +2 -2
  46. package/dist/{index-C0jOpBPq.js → index-B8mXWPXG.js} +2 -2
  47. package/dist/{index-BAO0d8HL.js → index-BICvHJrd.js} +4 -4
  48. package/dist/{index-CMTzmSRJ.js → index-BIJlYkrW.js} +4 -4
  49. package/dist/{index-DrSNFgIl.js → index-BP9uZ3Ld.js} +2 -2
  50. package/dist/{index-DZ5svQvp.js → index-BXceTJm5.js} +2 -2
  51. package/dist/{index-sI8PQFKF.js → index-BclTcBBA.js} +3 -3
  52. package/dist/{index-BhRgGLuD.js → index-CCHQ4bPG.js} +2 -2
  53. package/dist/{index-DXLyOn3D.js → index-CPsEeNaw.js} +3 -3
  54. package/dist/{index-5hIRSHTc.js → index-CYAUKJ3V.js} +2 -2
  55. package/dist/{index-BLN9Vvdr.js → index-Co3DPyY5.js} +2 -2
  56. package/dist/{index-B-D0LQjw.js → index-CorDlbIR.js} +3 -3
  57. package/dist/{index-gVg-FLmC.js → index-CzA0TJ1Y.js} +1 -1
  58. package/dist/{index-DBKoCefj.js → index-DPRuF7Ck.js} +4 -4
  59. package/dist/{index-Cny_hr56.js → index-DYZzZCrS.js} +2 -2
  60. package/dist/{index-DyhinvD5.js → index-Di-F_MA0.js} +3 -3
  61. package/dist/{index-Dyp_SF7H.js → index-DwuRDQtG.js} +2 -2
  62. package/dist/{index-CuOhAUX-.js → index-KRGYLUiH.js} +28 -28
  63. package/dist/{index-Y46rQdc3.js → index-MCJIM7Di.js} +2 -2
  64. package/dist/{index-yTDpH9la.js → index-PVQUqoxX.js} +2 -2
  65. package/dist/{index-CvT5zdz7.js → index-Q-bMUnXP.js} +2 -2
  66. package/dist/index.js +5571 -4543
  67. package/dist/legacy.js +4 -4
  68. package/dist/translations/en.d.ts +48 -1
  69. package/dist/translations/fr.d.ts +48 -1
  70. package/package.json +5 -5
  71. package/test-results/catalog/.last-run.json +0 -4
@@ -1,7 +1,7 @@
1
1
  import { jsx as e, jsxs as a } from "react/jsx-runtime";
2
2
  import { useState as m, useEffect as C } from "react";
3
3
  import { Card as v, CardContent as b, Stack as u, Typography as o, FormControlLabel as l, Box as r, Checkbox as d, Button as M } from "@mui/material";
4
- import { g as R, u as x } from "./AbyssCookieConsentProvider-L42RPb5f.js";
4
+ import { g as R, u as x } from "./AbyssCookieConsentProvider-B0_k-lsA.js";
5
5
  const B = () => {
6
6
  const t = R(), { consent: i, save: y } = x(), [h, g] = m((i == null ? void 0 : i.analytics) ?? !1), [k, f] = m((i == null ? void 0 : i.marketing) ?? !1), c = i == null ? void 0 : i.analytics, n = i == null ? void 0 : i.marketing;
7
7
  return C(() => {
@@ -0,0 +1,30 @@
1
+ export interface FacetValue {
2
+ value: string;
3
+ count: number;
4
+ }
5
+ export interface Facet {
6
+ /** The field as written in an expression: `level`, or `@plan` for a free attribute. */
7
+ field: string;
8
+ label: string;
9
+ values: FacetValue[];
10
+ /** The counts come from a sample of the period, not from every line. */
11
+ estimated: boolean;
12
+ loading: boolean;
13
+ /** Why the values could not be read; shown in place of the list. */
14
+ error?: string;
15
+ /** Reads the facet again; with it, a failed facet offers « Réessayer » under its cause. */
16
+ onRetry?: () => void;
17
+ }
18
+ export interface FacetPanelProps {
19
+ facets: Facet[];
20
+ /** The expression the facets read their ticks from and write their conditions to. */
21
+ expression: string;
22
+ onExpressionChange(next: string): void;
23
+ }
24
+ /**
25
+ * The most frequent values of the fields of a source, as a column of ticks beside a list. A tick
26
+ * adds `field:value` to the expression, « Exclure » adds `-field:value`; ticking again, or
27
+ * pressing « Exclure » again, takes the condition back out. The panel holds no state of its own:
28
+ * the expression is the single source of truth, shared with `ExpressionSearch`.
29
+ */
30
+ export declare function FacetPanel({ facets, expression, onExpressionChange, }: FacetPanelProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,16 @@
1
+ /** What an expression says about `field:value`. */
2
+ export declare enum FacetValueState {
3
+ /** Not a top-level condition of the expression (or the expression does not parse). */
4
+ None = "none",
5
+ /** `field:value` is one of the conditions the lines must meet. */
6
+ Included = "included",
7
+ /** `-field:value` is one of the conditions the lines must meet. */
8
+ Excluded = "excluded"
9
+ }
10
+ /** Whether `field:value` filters the lines in, filters them out, or does neither. */
11
+ export declare function facetValueState(expression: string, field: string, value: string): FacetValueState;
12
+ /**
13
+ * The expression without its top-level `field:value` (or `-field:value` when `excluded`): what
14
+ * unticking a facet value does. An expression that does not parse is returned as it is.
15
+ */
16
+ export declare function removeTermFromExpression(expression: string, field: string, value: string, excluded: boolean): string;
@@ -1,3 +1,4 @@
1
+ import { ReactNode } from 'react';
1
2
  import { SemanticToken } from '../../../theme/tokens/semantic';
2
3
  export interface StatTileDelta {
3
4
  /** Already formatted by the host (`+12 %`, `− 3`). */
@@ -6,6 +7,8 @@ export interface StatTileDelta {
6
7
  }
7
8
  export interface StatTileProps {
8
9
  label: string;
10
+ /** Decorative mark before the label (a `ToolIcon`): hidden from assistive technology. */
11
+ icon?: ReactNode;
9
12
  /** Already formatted by the host (`intl.formatNumber`). */
10
13
  value: string;
11
14
  unit?: string;
@@ -18,4 +21,4 @@ export interface StatTileProps {
18
21
  * One key figure (`.kpi`): label, figure in mono with its unit, a colored delta and an optional
19
22
  * trend. With `href`, the whole tile is a router link.
20
23
  */
21
- export declare function StatTile({ label, value, unit, delta, trend, href, }: StatTileProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare function StatTile({ label, icon, value, unit, delta, trend, href, }: StatTileProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,38 @@
1
+ /** Approximate tick count of a value axis, handed to d3. */
2
+ export declare const VALUE_TICKS = 5;
3
+ export declare enum ValueStacking {
4
+ /** Each value stands on its own: series side by side, or lines. */
5
+ None = "none",
6
+ /** Stacked bars: at a category the positive values pile up from zero, the negative ones down. */
7
+ Diverging = "diverging",
8
+ /** Stacked areas: each series piles on the running total of the series before it, in order. */
9
+ Cumulative = "cumulative"
10
+ }
11
+ export interface ValueAxisOptions {
12
+ stacking: ValueStacking;
13
+ /** The values are drawn from a zero baseline (bars, areas): zero lies inside the axis. */
14
+ fromZero: boolean;
15
+ }
16
+ export interface ValueAxisScale {
17
+ /** Bottom of the value scale, before nivo's `nice` if the chart asks for it. */
18
+ min: number;
19
+ /** Top of the value scale, before nivo's `nice` if the chart asks for it. */
20
+ max: number;
21
+ /**
22
+ * The `tickValues` of the value axis: `VALUE_TICKS` for d3 to choose, or every integer of the
23
+ * scale when d3 would step by less than one through values that are all integers.
24
+ */
25
+ tickValues: number | number[];
26
+ }
27
+ /**
28
+ * The value scale and ticks of a chart whose values are `columns`, one array per category or x
29
+ * (the value of each series there). The scale spans the values, or stacked, the totals of the
30
+ * piles, and zero with `fromZero`; without any value it is zero alone.
31
+ *
32
+ * d3 steps by 1, 2 or 5 times a power of ten: over a span shorter than `VALUE_TICKS` it steps by
33
+ * less than one (0, 0.2, 0.4… for a span of one). When every value is an integer (a count), the
34
+ * scale ends on integers and the ticks are then its integers, a subset of d3's: never more ticks,
35
+ * none beyond the scale, no two that a formatter rounds to the same text. A span of `VALUE_TICKS`
36
+ * or more already gets integer steps from d3; decimal values keep d3's ticks.
37
+ */
38
+ export declare function valueAxisScale(columns: number[][], { stacking, fromZero }: ValueAxisOptions): ValueAxisScale;
@@ -0,0 +1 @@
1
+ export {};
@@ -8,3 +8,4 @@ export * from './Pagination/Pagination';
8
8
  export * from './LineChart/LineChart';
9
9
  export * from './BarChart/BarChart';
10
10
  export * from './chart-series-tone';
11
+ export * from './FacetPanel/FacetPanel';
@@ -0,0 +1,30 @@
1
+ export interface ExpressionKeySuggestion {
2
+ /** The key as written in an expression: `level`, or `@plan` for a free attribute. */
3
+ name: string;
4
+ count?: number;
5
+ }
6
+ export interface ExpressionValueSuggestion {
7
+ value: string;
8
+ count: number;
9
+ }
10
+ export interface ExpressionSearchProps {
11
+ value: string;
12
+ onChange(value: string): void;
13
+ /** Enter on a valid expression (or an empty one, which clears the filter). */
14
+ onSubmit(value: string): void;
15
+ /** The keys that start with `prefix`, most frequent first. */
16
+ fetchKeys(prefix: string): Promise<ExpressionKeySuggestion[]>;
17
+ /** The values of `field` (as typed, `@` included) that start with `prefix`. */
18
+ fetchValues(field: string, prefix: string): Promise<ExpressionValueSuggestion[]>;
19
+ placeholder?: string;
20
+ }
21
+ /** Pause after the last keystroke before the suggestions are asked for, in ms. */
22
+ export declare const SUGGESTION_DELAY_MS = 150;
23
+ /**
24
+ * A single-line filter field for the explore expression language (`level:ERROR -env:staging`).
25
+ * The expression is parsed on every change: a syntax error is underlined where the parser stops
26
+ * and explained under the field, the input is never altered. Keys, then the values of the key
27
+ * before the colon, are suggested from the host's lookups; ArrowUp and ArrowDown move through
28
+ * them, Enter picks (or submits when none is highlighted), Escape closes the list.
29
+ */
30
+ export declare function ExpressionSearch({ value, onChange, onSubmit, fetchKeys, fetchValues, placeholder, }: ExpressionSearchProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,20 @@
1
+ export declare enum SuggestionKind {
2
+ Key = "key",
3
+ Value = "value"
4
+ }
5
+ /** What the caret is typing, and the range of the text a picked suggestion replaces. */
6
+ export interface SuggestionContext {
7
+ kind: SuggestionKind;
8
+ /** The field whose value is typed (`SuggestionKind.Value` only), `@` sign included. */
9
+ field: string | null;
10
+ /** What was typed so far of the key or of the value, up to the caret. */
11
+ prefix: string;
12
+ /** Replaced range of the text: from the start of the key or value to the end of its word. */
13
+ start: number;
14
+ end: number;
15
+ }
16
+ /**
17
+ * Reads the word under the caret: a key (`lev`) or the value of a field (`level:ER`). Inside a
18
+ * quoted phrase, or after an operator, nothing is suggested.
19
+ */
20
+ export declare function suggestionContextAt(text: string, caret: number): SuggestionContext | null;
@@ -13,3 +13,4 @@ export * from './ImportButton/ImportButton';
13
13
  export * from './UserPicker/UserPicker';
14
14
  export * from './CompanySearchField/CompanySearchField';
15
15
  export * from './EntityImageField/EntityImageField';
16
+ export * from './ExpressionSearch/ExpressionSearch';
@@ -0,0 +1,18 @@
1
+ import { ReactNode } from 'react';
2
+ import { IPreviewRef } from './usePreviewStack';
3
+ export interface PreviewDrawerProps {
4
+ /** The content of a preview: the host reads the object and draws it. */
5
+ render(ref: IPreviewRef): ReactNode;
6
+ /** The page that shows the same object in full. */
7
+ fullPageHref(ref: IPreviewRef): string;
8
+ titleOf(ref: IPreviewRef): string;
9
+ }
10
+ /**
11
+ * The side panel that previews an object without leaving the list. The previews stack in the
12
+ * URL (`?preview=`, five at most, see `usePreviewStack`): opening a second one keeps the first
13
+ * under it, the trail returns to any level, `Échap` closes the one on top, and the close button closes
14
+ * them all. Nothing is drawn while the stack is empty. With two levels or more a trail of the
15
+ * whole stack sits under the header, each level but the current one a button that returns to it;
16
+ * on a phone it folds to « … » and the last two levels.
17
+ */
18
+ export declare function PreviewDrawer({ render, fullPageHref, titleOf, }: PreviewDrawerProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,32 @@
1
+ /** What a preview shows: an object of a given type, such as `request:<id>` or `session:<id>`. */
2
+ export interface IPreviewRef {
3
+ type: string;
4
+ id: string;
5
+ }
6
+ export interface PreviewStack {
7
+ /** The open previews, the first opened first; the last one is the one on screen. */
8
+ stack: IPreviewRef[];
9
+ /**
10
+ * Opens `ref` on top of the stack. With `replace`, it takes the place of the top one instead
11
+ * (a link followed inside a preview that should not pile up another level).
12
+ */
13
+ open(ref: IPreviewRef, options?: {
14
+ replace?: boolean;
15
+ }): void;
16
+ /** Closes the top preview and shows the one under it. */
17
+ back(): void;
18
+ /** Returns to the preview at `index` of the stack, closing the ones above it. */
19
+ backTo(index: number): void;
20
+ /** Closes every preview. */
21
+ close(): void;
22
+ }
23
+ /** Name of the URL search parameter that carries the stack: `?preview=request:<id>,session:<id>`. */
24
+ export declare const PREVIEW_PARAM = "preview";
25
+ /** Previews kept at once; opening one more drops the oldest. */
26
+ export declare const PREVIEW_STACK_LIMIT = 5;
27
+ /**
28
+ * The stack of open previews, kept in the `?preview=` search parameter so that a pasted link
29
+ * opens the same stack and the browser's back button steps through it. The other search
30
+ * parameters are left as they are.
31
+ */
32
+ export declare function usePreviewStack(): PreviewStack;
@@ -11,14 +11,14 @@ export interface ProductTourProps {
11
11
  steps: readonly [ProductTourStep, ...ProductTourStep[]];
12
12
  /** Called by the button of the last step. */
13
13
  onComplete(): void;
14
- /** Called by « Passer la visite » and by Escape, at any step. */
14
+ /** Called by the close button and by Escape, at any step. */
15
15
  onSkip(): void;
16
16
  }
17
17
  /**
18
18
  * A guided tour over the page (maquette E, spec §6.7): one step at a time, a bubble anchored to
19
19
  * the element carrying `data-tour="<target>"`, the rest of the page dimmed around a cut-out. Below
20
20
  * 768 px the bubble becomes a sheet at the bottom of the screen. Focus is trapped in the step and
21
- * returns to the opener when the tour closes; Escape skips the tour, the arrow keys move between
22
- * steps. A step whose target is not on the page is shown in the middle of a fully dimmed screen.
21
+ * returns to the opener when the tour closes; the cross and Escape skip the tour, the arrow keys
22
+ * move between steps, « Précédent » goes back. A step whose target is not on the page is shown in the middle of a fully dimmed screen.
23
23
  */
24
24
  export declare function ProductTour({ open, steps, onComplete, onSkip, }: ProductTourProps): import("react/jsx-runtime").JSX.Element;
@@ -45,7 +45,13 @@ export declare const sameSize: (a: TourSize, b: TourSize) => boolean;
45
45
  /** Name of the attribute a host puts on the element a step points at. */
46
46
  export declare const TOUR_TARGET_ATTRIBUTE = "data-tour";
47
47
  /**
48
- * The element whose `data-tour` attribute is `target`, or `null` when the page does not hold it.
49
- * Compared as a string rather than built into a selector, so any value is safe.
48
+ * The first element of `root` whose `data-tour` attribute is `target` and that is rendered, or
49
+ * `null` when the page holds none. A hidden twin (a desktop-only copy on a phone) is skipped for
50
+ * the one that shows. Compared as a string rather than built into a selector, so any value is safe.
50
51
  */
51
- export declare const findTourTarget: (target: string) => HTMLElement | null;
52
+ export declare const findTourTarget: (target: string, root?: ParentNode) => HTMLElement | null;
53
+ /**
54
+ * How far the page must scroll (positive: down) so that `target` fits between the top of the
55
+ * viewport and the top edge of the bottom sheet. A target taller than that room shows its top.
56
+ */
57
+ export declare const sheetScrollOffset: (target: DOMRect, sheetTop: number, viewportHeight: number) => number;
@@ -6,3 +6,5 @@ export * from './Toast/Toast';
6
6
  export * from './CommandPalette/CommandPalette';
7
7
  export * from './ConfirmDialog/useConfirmDialog';
8
8
  export * from './ProductTour/ProductTour';
9
+ export * from './PreviewDrawer/PreviewDrawer';
10
+ export * from './PreviewDrawer/usePreviewStack';
@@ -0,0 +1,25 @@
1
+ import { ReactNode } from 'react';
2
+ export interface ValueMenuProps {
3
+ /** The field the value belongs to, as written in an expression (`level`, `@plan`). */
4
+ field: string;
5
+ value: string;
6
+ /** Keep only the lines where `field` is `value`. */
7
+ onFilter(): void;
8
+ /** Drop the lines where `field` is `value`. */
9
+ onExclude(): void;
10
+ onCopy(): void;
11
+ /** Lists that can show the field as a column. */
12
+ onAddColumn?(): void;
13
+ /** A series of the value over the period. */
14
+ onTrend?(): void;
15
+ /** The value names an object that has a preview. */
16
+ onOpen?(): void;
17
+ /** The value as the page shows it; it opens the menu. */
18
+ children: ReactNode;
19
+ }
20
+ /**
21
+ * Makes a value of a known field clickable: it opens a menu to filter on it, exclude it, copy
22
+ * it and, when the page supports them, add its field as a column, see its trend or open the
23
+ * object it names. The menu only reports the choice: the page edits the expression.
24
+ */
25
+ export declare function ValueMenu({ field, value, onFilter, onExclude, onCopy, onAddColumn, onTrend, onOpen, children, }: ValueMenuProps): import("react/jsx-runtime").JSX.Element;
@@ -7,3 +7,4 @@ export * from './ToolIcon/ToolIcon';
7
7
  export * from './Avatar/Avatar';
8
8
  export * from './AvatarGroup/AvatarGroup';
9
9
  export * from './TeamAvatar/TeamAvatar';
10
+ export * from './ValueMenu/ValueMenu';
@@ -5,7 +5,8 @@ export declare enum PageStatus {
5
5
  Empty = "empty",
6
6
  Error = "error",
7
7
  Forbidden = "forbidden",
8
- NotFound = "notFound"
8
+ NotFound = "notFound",
9
+ RateLimited = "rateLimited"
9
10
  }
10
11
  export interface PageStateEmpty {
11
12
  title: string;
@@ -28,6 +29,12 @@ export interface PageStateProps {
28
29
  empty?: PageStateEmpty;
29
30
  error?: PageStateError;
30
31
  forbidden?: PageStateForbidden;
32
+ /**
33
+ * When the server accepts requests again (`Retry-After`), for `RateLimited`. Without it the
34
+ * block states the limit without a countdown. `error.onRetry` adds a « Réessayer » button,
35
+ * enabled once the countdown is over.
36
+ */
37
+ retryAt?: Date;
31
38
  /** The ready content. */
32
39
  children: ReactNode;
33
40
  }
@@ -35,4 +42,4 @@ export interface PageStateProps {
35
42
  * The content slot of a page in each of its states. The page frame (header, toolbar) stays around
36
43
  * it: only the slot changes, so an empty or failed page keeps its header and actions.
37
44
  */
38
- export declare function PageState({ status, skeleton, empty, error, forbidden, children, }: PageStateProps): import("react/jsx-runtime").JSX.Element | undefined;
45
+ export declare function PageState({ status, skeleton, empty, error, forbidden, retryAt, children, }: PageStateProps): import("react/jsx-runtime").JSX.Element | undefined;
@@ -6,6 +6,8 @@ export declare enum SectionTone {
6
6
  }
7
7
  export interface SectionProps {
8
8
  title: string;
9
+ /** Decorative mark before the title (a `ToolIcon`): hidden from assistive technology. */
10
+ icon?: ReactNode;
9
11
  /** Number of items in the section, shown next to the title in mono. */
10
12
  count?: number;
11
13
  /** Actions aligned to the right of the title (a link, a button, a `Toolbar`). */
@@ -19,4 +21,4 @@ export interface SectionProps {
19
21
  * then its content. The `<section>` is named by its title. In the danger tone, a rule in
20
22
  * `status.danger` sets the block apart and the title takes the same color.
21
23
  */
22
- export declare function Section({ title, count, actions, tone, children, }: SectionProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare function Section({ title, icon, count, actions, tone, children, }: SectionProps): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,5 @@
1
- import { A as e, c as a, C as n, D as C, R as i, V as t, d as r, f as A, r as k, e as c, u as l, b, a as f, w as u } from "./AbyssCookieConsentProvider-L42RPb5f.js";
2
- import { C as E } from "./CookieConsentSettings.component-CkhtQuGU.js";
1
+ import { A as e, c as a, C as n, D as C, R as i, V as t, d as r, f as A, r as k, e as c, u as l, b, a as f, w as u } from "./AbyssCookieConsentProvider-B0_k-lsA.js";
2
+ import { C as E } from "./CookieConsentSettings.component-DPmXSN1B.js";
3
3
  export {
4
4
  e as AbyssCookieConsentProvider,
5
5
  a as COOKIE_NAME,
@@ -1,4 +1,4 @@
1
- import { s as nt, _ as An, g as Bw, $ as S_, a0 as __, h as M_, m as k_ } from "./AbyssCookieConsentProvider-L42RPb5f.js";
1
+ import { s as nt, _ as An, g as Bw, $ as S_, a0 as __, h as M_, m as k_ } from "./AbyssCookieConsentProvider-B0_k-lsA.js";
2
2
  import { W as U_, r as E_, C as F_ } from "./index-D7cgykJH.js";
3
3
  import * as kn from "react";
4
4
  import za, { useState as vt, useRef as Re, useEffect as _t, useLayoutEffect as Nw, forwardRef as fi, useCallback as de, useContext as oa, useMemo as be, memo as pt, createContext as nu, createElement as Ue, cloneElement as xs, Component as I_, Fragment as ws, isValidElement as Zn, useReducer as Lw, useImperativeHandle as O_, useId as R_ } from "react";
@@ -1938,6 +1938,7 @@ export declare const translations: {
1938
1938
  submit: string;
1939
1939
  };
1940
1940
  'mfa-banner': {
1941
+ title: string;
1941
1942
  admin: string;
1942
1943
  organization: string;
1943
1944
  'organization-overdue': string;
@@ -1982,6 +1983,22 @@ export declare const translations: {
1982
1983
  swatches: string;
1983
1984
  invalid: string;
1984
1985
  };
1986
+ 'expression-search': {
1987
+ label: string;
1988
+ placeholder: string;
1989
+ 'keys-label': string;
1990
+ 'values-label': string;
1991
+ 'suggestions-failed': string;
1992
+ expected: {
1993
+ VALUE: string;
1994
+ FIELD: string;
1995
+ CLOSING_PAREN: string;
1996
+ CLOSING_BRACKET: string;
1997
+ CLOSING_QUOTE: string;
1998
+ OPERAND: string;
1999
+ END: string;
2000
+ };
2001
+ };
1985
2002
  'copy-field': {
1986
2003
  masked: string;
1987
2004
  reveal: string;
@@ -2115,6 +2132,9 @@ export declare const translations: {
2115
2132
  'forbidden-description': string;
2116
2133
  'not-found-title': string;
2117
2134
  'not-found-description': string;
2135
+ 'rate-limited-title': string;
2136
+ 'rate-limited-description': string;
2137
+ 'rate-limited-ready': string;
2118
2138
  };
2119
2139
  callout: {
2120
2140
  close: string;
@@ -2145,6 +2165,17 @@ export declare const translations: {
2145
2165
  loading: string;
2146
2166
  rows: string;
2147
2167
  };
2168
+ 'facet-panel': {
2169
+ retry: string;
2170
+ 'retry-facet': string;
2171
+ label: string;
2172
+ loading: string;
2173
+ empty: string;
2174
+ estimated: string;
2175
+ 'estimated-count': string;
2176
+ exclude: string;
2177
+ 'exclude-value': string;
2178
+ };
2148
2179
  'stat-tile': {
2149
2180
  trend: string;
2150
2181
  };
@@ -2153,6 +2184,15 @@ export declare const translations: {
2153
2184
  };
2154
2185
  };
2155
2186
  meaning: {
2187
+ 'value-menu': {
2188
+ trigger: string;
2189
+ filter: string;
2190
+ exclude: string;
2191
+ copy: string;
2192
+ 'add-column': string;
2193
+ trend: string;
2194
+ open: string;
2195
+ };
2156
2196
  severity: {
2157
2197
  debug: string;
2158
2198
  info: string;
@@ -2223,6 +2263,12 @@ export declare const translations: {
2223
2263
  drawer: {
2224
2264
  close: string;
2225
2265
  };
2266
+ 'preview-drawer': {
2267
+ trail: string;
2268
+ close: string;
2269
+ back: string;
2270
+ 'full-page': string;
2271
+ };
2226
2272
  toast: {
2227
2273
  region: string;
2228
2274
  dismiss: string;
@@ -2241,7 +2287,8 @@ export declare const translations: {
2241
2287
  step: string;
2242
2288
  next: string;
2243
2289
  finish: string;
2244
- skip: string;
2290
+ previous: string;
2291
+ close: string;
2245
2292
  };
2246
2293
  };
2247
2294
  };
@@ -4182,6 +4229,7 @@ export declare const translations: {
4182
4229
  submit: string;
4183
4230
  };
4184
4231
  'mfa-banner': {
4232
+ title: string;
4185
4233
  admin: string;
4186
4234
  organization: string;
4187
4235
  'organization-overdue': string;
@@ -4226,6 +4274,22 @@ export declare const translations: {
4226
4274
  swatches: string;
4227
4275
  invalid: string;
4228
4276
  };
4277
+ 'expression-search': {
4278
+ label: string;
4279
+ placeholder: string;
4280
+ 'keys-label': string;
4281
+ 'values-label': string;
4282
+ 'suggestions-failed': string;
4283
+ expected: {
4284
+ VALUE: string;
4285
+ FIELD: string;
4286
+ CLOSING_PAREN: string;
4287
+ CLOSING_BRACKET: string;
4288
+ CLOSING_QUOTE: string;
4289
+ OPERAND: string;
4290
+ END: string;
4291
+ };
4292
+ };
4229
4293
  'copy-field': {
4230
4294
  masked: string;
4231
4295
  reveal: string;
@@ -4359,6 +4423,9 @@ export declare const translations: {
4359
4423
  'forbidden-description': string;
4360
4424
  'not-found-title': string;
4361
4425
  'not-found-description': string;
4426
+ 'rate-limited-title': string;
4427
+ 'rate-limited-description': string;
4428
+ 'rate-limited-ready': string;
4362
4429
  };
4363
4430
  callout: {
4364
4431
  close: string;
@@ -4389,6 +4456,17 @@ export declare const translations: {
4389
4456
  loading: string;
4390
4457
  rows: string;
4391
4458
  };
4459
+ 'facet-panel': {
4460
+ retry: string;
4461
+ 'retry-facet': string;
4462
+ label: string;
4463
+ loading: string;
4464
+ empty: string;
4465
+ estimated: string;
4466
+ 'estimated-count': string;
4467
+ exclude: string;
4468
+ 'exclude-value': string;
4469
+ };
4392
4470
  'stat-tile': {
4393
4471
  trend: string;
4394
4472
  };
@@ -4397,6 +4475,15 @@ export declare const translations: {
4397
4475
  };
4398
4476
  };
4399
4477
  meaning: {
4478
+ 'value-menu': {
4479
+ trigger: string;
4480
+ filter: string;
4481
+ exclude: string;
4482
+ copy: string;
4483
+ 'add-column': string;
4484
+ trend: string;
4485
+ open: string;
4486
+ };
4400
4487
  severity: {
4401
4488
  debug: string;
4402
4489
  info: string;
@@ -4467,6 +4554,12 @@ export declare const translations: {
4467
4554
  drawer: {
4468
4555
  close: string;
4469
4556
  };
4557
+ 'preview-drawer': {
4558
+ trail: string;
4559
+ close: string;
4560
+ back: string;
4561
+ 'full-page': string;
4562
+ };
4470
4563
  toast: {
4471
4564
  region: string;
4472
4565
  dismiss: string;
@@ -4485,7 +4578,8 @@ export declare const translations: {
4485
4578
  step: string;
4486
4579
  next: string;
4487
4580
  finish: string;
4488
- skip: string;
4581
+ previous: string;
4582
+ close: string;
4489
4583
  };
4490
4584
  };
4491
4585
  };
@@ -1,5 +1,5 @@
1
- import { L as D, E as h, C as L } from "./index-gVg-FLmC.js";
2
- import { s as H, t as n, b as B, a as K, L as M, e as OO, i as eO, f as iO, j as f, g as aO, o as nO, I as rO, d as QO, n as d } from "./index-CuOhAUX-.js";
1
+ import { L as D, E as h, C as L } from "./index-CzA0TJ1Y.js";
2
+ import { s as H, t as n, b as B, a as K, L as M, e as OO, i as eO, f as iO, j as f, g as aO, o as nO, I as rO, d as QO, n as d } from "./index-KRGYLUiH.js";
3
3
  const tO = 1, Z = 194, j = 195, oO = 196, x = 197, dO = 198, sO = 199, lO = 200, TO = 2, E = 3, u = 201, SO = 24, pO = 25, qO = 49, gO = 50, PO = 55, mO = 56, $O = 57, hO = 59, cO = 60, fO = 61, XO = 62, yO = 63, zO = 65, WO = 238, vO = 71, RO = 241, kO = 242, _O = 243, xO = 244, uO = 245, UO = 246, bO = 247, VO = 248, Y = 72, GO = 249, wO = 250, ZO = 251, jO = 252, EO = 253, YO = 254, FO = 255, CO = 256, JO = 73, AO = 77, IO = 263, NO = 112, DO = 130, LO = 151, HO = 152, BO = 155, p = 10, q = 13, k = 32, c = 9, _ = 35, KO = 40, MO = 46, R = 123, U = 125, F = 39, C = 34, b = 92, Oe = 111, ee = 120, ie = 78, ae = 117, ne = 85, re = /* @__PURE__ */ new Set([
4
4
  pO,
5
5
  qO,
@@ -1,5 +1,5 @@
1
- import { L as te, a as re, i as ae, f as ne, s as ie, c as se, t as i, b as oe, d as le, e as ce } from "./index-CuOhAUX-.js";
2
- import { L as de, E as me } from "./index-gVg-FLmC.js";
1
+ import { L as te, a as re, i as ae, f as ne, s as ie, c as se, t as i, b as oe, d as le, e as ce } from "./index-KRGYLUiH.js";
2
+ import { L as de, E as me } from "./index-CzA0TJ1Y.js";
3
3
  const ue = 36, B = 1, pe = 2, y = 3, C = 4, fe = 5, _e = 6, ge = 7, he = 8, ye = 9, be = 10, ve = 11, ke = 12, xe = 13, Oe = 14, we = 15, Qe = 16, Ce = 17, X = 18, Se = 19, A = 20, E = 21, I = 22, qe = 23, Pe = 24;
4
4
  function q(t) {
5
5
  return t >= 65 && t <= 90 || t >= 97 && t <= 122 || t >= 48 && t <= 57;
@@ -1,5 +1,5 @@
1
- import { L as s } from "./index-gVg-FLmC.js";
2
- import { s as n, t as r, a as o, L as P, i as Q, f as i, c as a, g as c } from "./index-CuOhAUX-.js";
1
+ import { L as s } from "./index-CzA0TJ1Y.js";
2
+ import { s as n, t as r, a as o, L as P, i as Q, f as i, c as a, g as c } from "./index-KRGYLUiH.js";
3
3
  const g = n({
4
4
  String: r.string,
5
5
  Number: r.number,
@@ -1,7 +1,7 @@
1
- import { a as g, L as P, p as l, s as q, t as r } from "./index-CuOhAUX-.js";
2
- import { html as c } from "./index-CMTzmSRJ.js";
3
- import { javascriptLanguage as i } from "./index-5hIRSHTc.js";
4
- import { L as R, E as p } from "./index-gVg-FLmC.js";
1
+ import { a as g, L as P, p as l, s as q, t as r } from "./index-KRGYLUiH.js";
2
+ import { html as c } from "./index-BIJlYkrW.js";
3
+ import { javascriptLanguage as i } from "./index-CYAUKJ3V.js";
4
+ import { L as R, E as p } from "./index-CzA0TJ1Y.js";
5
5
  const b = 1, $ = 33, m = 34, v = 35, x = 36, W = /* @__PURE__ */ new p((O) => {
6
6
  let t = O.pos;
7
7
  for (; ; ) {
@@ -1,7 +1,7 @@
1
- import { L as be, E as $, C as Pe } from "./index-gVg-FLmC.js";
2
- import { p as xe, s as Te, t as h, E as Ve, a as we, L as ye, e as K, h as ve, i as Xe, f as ke, H as $e } from "./index-CuOhAUX-.js";
3
- import { cssLanguage as J, css as _e } from "./index-DZ5svQvp.js";
4
- import { typescriptLanguage as qe, jsxLanguage as Ce, tsxLanguage as Qe, javascriptLanguage as R, javascript as Ae } from "./index-5hIRSHTc.js";
1
+ import { L as be, E as $, C as Pe } from "./index-CzA0TJ1Y.js";
2
+ import { p as xe, s as Te, t as h, E as Ve, a as we, L as ye, e as K, h as ve, i as Xe, f as ke, H as $e } from "./index-KRGYLUiH.js";
3
+ import { cssLanguage as J, css as _e } from "./index-BXceTJm5.js";
4
+ import { typescriptLanguage as qe, jsxLanguage as Ce, tsxLanguage as Qe, javascriptLanguage as R, javascript as Ae } from "./index-CYAUKJ3V.js";
5
5
  const Ye = 54, Me = 1, Re = 55, Ee = 2, Ze = 56, Be = 3, z = 4, ze = 5, X = 6, ee = 7, te = 8, ae = 9, le = 10, We = 11, De = 12, Ne = 13, _ = 57, Ge = 14, W = 58, re = 20, Ie = 22, ne = 23, je = 24, Y = 26, se = 27, Ue = 28, Le = 31, Fe = 34, He = 36, Ke = 37, Je = 0, et = 1, tt = {
6
6
  area: !0,
7
7
  base: !0,