@nimblebrain/synapse 0.15.0 → 0.17.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.
Files changed (59) hide show
  1. package/README.md +61 -111
  2. package/dist/{chunk-SN7YXLAV.cjs → chunk-EHLQWCYV.cjs} +6 -6
  3. package/dist/{chunk-SN7YXLAV.cjs.map → chunk-EHLQWCYV.cjs.map} +1 -1
  4. package/dist/{chunk-ZMNYUGSF.cjs → chunk-FDMRJZKT.cjs} +576 -662
  5. package/dist/chunk-FDMRJZKT.cjs.map +1 -0
  6. package/dist/{chunk-E7OOOYVR.js → chunk-SRQNQ26I.js} +3 -3
  7. package/dist/{chunk-E7OOOYVR.js.map → chunk-SRQNQ26I.js.map} +1 -1
  8. package/dist/{chunk-RYWW6EHB.cjs → chunk-TXJMGQYF.cjs} +3 -5
  9. package/dist/chunk-TXJMGQYF.cjs.map +1 -0
  10. package/dist/{chunk-J5ICAHK2.js → chunk-UPDBDXQB.js} +4 -5
  11. package/dist/chunk-UPDBDXQB.js.map +1 -0
  12. package/dist/{chunk-GNTQJSQX.js → chunk-VYR6V47N.js} +573 -663
  13. package/dist/chunk-VYR6V47N.js.map +1 -0
  14. package/dist/codegen/cli.cjs +1 -1
  15. package/dist/codegen/cli.js +1 -1
  16. package/dist/codegen/index.d.cts +1 -1
  17. package/dist/codegen/index.d.ts +1 -1
  18. package/dist/connect.iife.global.js +28 -28
  19. package/dist/{detect-C_qmYsh9.d.cts → detect-BHYg26_d.d.cts} +1 -1
  20. package/dist/{detect-Dfd0upoz.d.ts → detect-Bf8Q_0dK.d.ts} +1 -1
  21. package/dist/host/index.cjs +14 -14
  22. package/dist/host/index.d.cts +3 -3
  23. package/dist/host/index.d.ts +3 -3
  24. package/dist/host/index.js +2 -2
  25. package/dist/index.cjs +28 -87
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.cts +58 -26
  28. package/dist/index.d.ts +58 -26
  29. package/dist/index.js +3 -81
  30. package/dist/index.js.map +1 -1
  31. package/dist/react/index.cjs +81 -140
  32. package/dist/react/index.cjs.map +1 -1
  33. package/dist/react/index.d.cts +66 -82
  34. package/dist/react/index.d.ts +66 -82
  35. package/dist/react/index.js +82 -136
  36. package/dist/react/index.js.map +1 -1
  37. package/dist/{server-ERRDGEZ7.js → server-5N76YCWC.js} +3 -3
  38. package/dist/{server-ERRDGEZ7.js.map → server-5N76YCWC.js.map} +1 -1
  39. package/dist/{server-P54IYX2G.cjs → server-QIYIJHD5.cjs} +3 -3
  40. package/dist/{server-P54IYX2G.cjs.map → server-QIYIJHD5.cjs.map} +1 -1
  41. package/dist/synapse-runtime.iife.global.js +28 -28
  42. package/dist/synapse-ui.iife.global.js +2 -2
  43. package/dist/{types-BSZasM8q.d.cts → types-uEO4VFJ2.d.cts} +87 -166
  44. package/dist/{types-BSZasM8q.d.ts → types-uEO4VFJ2.d.ts} +87 -166
  45. package/dist/ui/index.cjs +403 -91
  46. package/dist/ui/index.cjs.map +1 -1
  47. package/dist/ui/index.d.cts +115 -3
  48. package/dist/ui/index.d.ts +115 -3
  49. package/dist/ui/index.js +401 -93
  50. package/dist/ui/index.js.map +1 -1
  51. package/dist/vite/index.cjs +1 -1
  52. package/dist/vite/index.cjs.map +1 -1
  53. package/dist/vite/index.js +1 -1
  54. package/dist/vite/index.js.map +1 -1
  55. package/package.json +1 -1
  56. package/dist/chunk-GNTQJSQX.js.map +0 -1
  57. package/dist/chunk-J5ICAHK2.js.map +0 -1
  58. package/dist/chunk-RYWW6EHB.cjs.map +0 -1
  59. package/dist/chunk-ZMNYUGSF.cjs.map +0 -1
@@ -18,6 +18,18 @@ interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
18
18
  }
19
19
  declare function Badge({ tone, style, children, ...rest }: BadgeProps): react_jsx_runtime.JSX.Element;
20
20
 
21
+ interface Crumb {
22
+ label: string;
23
+ /** Omit on the current step. A crumb with no handler renders as plain text. */
24
+ onClick?: () => void;
25
+ }
26
+ interface BreadcrumbProps extends Omit<HTMLAttributes<HTMLElement>, "children"> {
27
+ crumbs: Crumb[];
28
+ /** The glyph between steps. */
29
+ separator?: string;
30
+ }
31
+ declare function Breadcrumb({ crumbs, separator, style, ...rest }: BreadcrumbProps): react_jsx_runtime.JSX.Element;
32
+
21
33
  type Variant = "primary" | "secondary" | "ghost";
22
34
  type Size = "sm" | "md";
23
35
  interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
@@ -102,6 +114,20 @@ interface ListRowProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
102
114
  }
103
115
  declare function ListRow({ title, meta, leading, trailing, interactive, style, className, ...rest }: ListRowProps): react_jsx_runtime.JSX.Element;
104
116
 
117
+ interface PageHeaderProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
118
+ /** The trail. Omit on a top-level page, which has nothing above it to name. */
119
+ crumbs?: Crumb[];
120
+ title: ReactNode;
121
+ /** Sits beside the title — typically a `Badge`. */
122
+ status?: ReactNode;
123
+ /** Sits at the far end of the title's row. Buttons, a menu. */
124
+ actions?: ReactNode;
125
+ description?: ReactNode;
126
+ /** Lines the description is clamped to before ellipsis. `0` removes the clamp. */
127
+ descriptionLines?: number;
128
+ }
129
+ declare function PageHeader({ crumbs, title, status, actions, description, descriptionLines, style, ...rest }: PageHeaderProps): react_jsx_runtime.JSX.Element;
130
+
105
131
  interface PaginationProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
106
132
  /** Current page, 1-based. */
107
133
  page: number;
@@ -160,6 +186,12 @@ interface Column<T> {
160
186
  /** Cell content for a row. */
161
187
  render: (row: T, index: number) => ReactNode;
162
188
  align?: Align$1;
189
+ /**
190
+ * Column width (`"40%"`, `220`, `"12rem"`). Declaring one on any column switches
191
+ * the table to `table-layout: fixed`, and columns without a width then divide the
192
+ * remainder equally. Required on any column whose cell truncates — see the note on
193
+ * the module above.
194
+ */
163
195
  width?: number | string;
164
196
  }
165
197
  interface TableProps<T> extends Omit<HTMLAttributes<HTMLTableElement>, "children"> {
@@ -170,8 +202,39 @@ interface TableProps<T> extends Omit<HTMLAttributes<HTMLTableElement>, "children
170
202
  onRowClick?: (row: T, index: number) => void;
171
203
  /** Shown when `data` is empty. */
172
204
  empty?: ReactNode;
205
+ /**
206
+ * The narrowest this table stays readable, and the switch that turns scrolling on.
207
+ *
208
+ * A fixed-layout table has no lower bound of its own, so seven columns in a 400px pane
209
+ * become seven clipped headers and a badge overflowing its cell. Below this width the
210
+ * table scrolls inside its own container instead of crushing — and setting the floor is
211
+ * the only way to ask for that, because a scroller with no floor has no defined moment to
212
+ * engage: under fixed layout the table always fits its container, and under auto layout it
213
+ * engages at whatever width the content happens to reach.
214
+ *
215
+ * The cost is the sticky header. An `overflow-x` container captures the stickiness
216
+ * `position: sticky` resolves against the page's own scroller, and CSS gives no way to
217
+ * scroll one axis while leaving the other visible — so a table without a floor keeps its
218
+ * sticky header, and one with a floor trades it.
219
+ */
220
+ minWidth?: number | string;
221
+ }
222
+ declare function Table<T>({ data, columns, rowKey, onRowClick, empty, minWidth, style, className, ...rest }: TableProps<T>): react_jsx_runtime.JSX.Element;
223
+
224
+ interface Tab<T extends string> {
225
+ label: string;
226
+ value: T;
227
+ /** A small trailing count. Rendered muted, and omitted entirely when undefined. */
228
+ count?: number;
229
+ }
230
+ interface TabsProps<T extends string> extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
231
+ tabs: Tab<T>[];
232
+ value: T;
233
+ onChange: (value: T) => void;
234
+ /** Accessible name for the tab set — what these are facets OF. */
235
+ label?: string;
173
236
  }
174
- declare function Table<T>({ data, columns, rowKey, onRowClick, empty, style, className, ...rest }: TableProps<T>): react_jsx_runtime.JSX.Element;
237
+ declare function Tabs<T extends string>({ tabs, value, onChange, label, style, className, onKeyDown: callerKeyDown, ...rest }: TabsProps<T>): react_jsx_runtime.JSX.Element;
175
238
 
176
239
  type ContentWidth = "reading" | "full";
177
240
  interface AppFrameProps extends HTMLAttributes<HTMLDivElement> {
@@ -233,6 +296,38 @@ declare const ListDetailLayout: typeof ListDetailLayoutRoot & {
233
296
  Back: typeof Back;
234
297
  };
235
298
 
299
+ interface PageLayoutProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
300
+ /** The trail. Omit at the top level, which has nothing above it to name. */
301
+ crumbs?: Crumb[];
302
+ title: ReactNode;
303
+ /** Beside the title — typically a `Badge`. */
304
+ status?: ReactNode;
305
+ /** The far end of the title's row. */
306
+ actions?: ReactNode;
307
+ description?: ReactNode;
308
+ /** Lines the description is clamped to. `0` removes the clamp. */
309
+ descriptionLines?: number;
310
+ /**
311
+ * ONE tab bar, of the facets of whatever the title names. A `Tabs`.
312
+ *
313
+ * A slot rather than typed props because `Tabs` already has an API worth having, and
314
+ * wrapping it here would mean maintaining a second copy of it that drifts. What the layout
315
+ * owns is the bar's POSITION — under the header, above the content — which is the part
316
+ * apps get wrong.
317
+ */
318
+ tabs?: ReactNode;
319
+ /**
320
+ * Controls that narrow the content below: a search field, a status filter, a view toggle.
321
+ *
322
+ * Distinct from `tabs` on purpose. A tab changes which facet of one entity is shown; a
323
+ * toolbar reshapes a set within that facet. Rendering them as one row is how an app ends up
324
+ * with two identical-looking control strips whose difference nobody can see.
325
+ */
326
+ toolbar?: ReactNode;
327
+ children?: ReactNode;
328
+ }
329
+ declare function PageLayout({ crumbs, title, status, actions, description, descriptionLines, tabs, toolbar, children, style, ...rest }: PageLayoutProps): react_jsx_runtime.JSX.Element;
330
+
236
331
  type CollapseMode = "reflow" | "drawer";
237
332
  type Side = "left" | "right";
238
333
  interface SidebarState {
@@ -405,7 +500,24 @@ interface TextProps extends Omit<HTMLAttributes<HTMLElement>, "color"> {
405
500
  weight?: Weight;
406
501
  tone?: Tone;
407
502
  mono?: boolean;
408
- /** Single-line ellipsis truncation. */
503
+ /**
504
+ * Single-line ellipsis truncation.
505
+ *
506
+ * Sets `display: block` alongside the ellipsis rules, and that is load-bearing rather
507
+ * than incidental: `overflow` and `text-overflow` do not apply to a non-replaced INLINE
508
+ * box, so on the default `<span>` the only declaration that survived was
509
+ * `white-space: nowrap` — and the prop did the exact opposite of its name, making text
510
+ * unwrappable instead of clipping it. Inside an auto-layout `<table>` that widened the
511
+ * column to the full string and pushed every later column off the pane.
512
+ *
513
+ * `min-width: 0` comes with it so the box can actually shrink as a flex item; without it
514
+ * a truncating `Text` inside `Inline`/`Stack` refuses to go below its content width and
515
+ * pushes its container instead, which is the same bug one layer out.
516
+ *
517
+ * A truncating cell in a `Table` also needs its column to declare a `width` — see
518
+ * `Column.width`. Auto table layout sizes to content, so the ellipsis has nothing to
519
+ * clip against until some column is pinned.
520
+ */
409
521
  truncate?: boolean;
410
522
  as?: ElementType;
411
523
  children?: ReactNode;
@@ -422,4 +534,4 @@ interface HeadingProps extends Omit<HTMLAttributes<HTMLHeadingElement>, "color">
422
534
  /** Display heading using the heading font slot. Defaults to md, semibold. */
423
535
  declare function Heading({ size, weight, tone, as: As, style, children, ...rest }: HeadingProps): react_jsx_runtime.JSX.Element;
424
536
 
425
- export { AppFrame, Avatar, Badge, type BadgeTone, Button, Card, type Column, Divider, Drawer, EmptyState, Heading, type HeadingSize, Inline, ListDetailLayout, ListRow, Pagination, Prose, SearchField, SegmentedControl, SidebarLayout, Spacer, Spinner, Stack, type Status, StatusDot, Table, Text, TextLink, type TextSize, type Tokens, headingStyle, textStyle, tokens, useBreakpoint, useListDetail, useSidebar };
537
+ export { AppFrame, Avatar, Badge, type BadgeTone, Breadcrumb, Button, Card, type Column, type Crumb, Divider, Drawer, EmptyState, Heading, type HeadingSize, Inline, ListDetailLayout, ListRow, PageHeader, PageLayout, Pagination, Prose, SearchField, SegmentedControl, SidebarLayout, Spacer, Spinner, Stack, type Status, StatusDot, Table, Tabs, Text, TextLink, type TextSize, type Tokens, headingStyle, textStyle, tokens, useBreakpoint, useListDetail, useSidebar };
@@ -18,6 +18,18 @@ interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
18
18
  }
19
19
  declare function Badge({ tone, style, children, ...rest }: BadgeProps): react_jsx_runtime.JSX.Element;
20
20
 
21
+ interface Crumb {
22
+ label: string;
23
+ /** Omit on the current step. A crumb with no handler renders as plain text. */
24
+ onClick?: () => void;
25
+ }
26
+ interface BreadcrumbProps extends Omit<HTMLAttributes<HTMLElement>, "children"> {
27
+ crumbs: Crumb[];
28
+ /** The glyph between steps. */
29
+ separator?: string;
30
+ }
31
+ declare function Breadcrumb({ crumbs, separator, style, ...rest }: BreadcrumbProps): react_jsx_runtime.JSX.Element;
32
+
21
33
  type Variant = "primary" | "secondary" | "ghost";
22
34
  type Size = "sm" | "md";
23
35
  interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
@@ -102,6 +114,20 @@ interface ListRowProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
102
114
  }
103
115
  declare function ListRow({ title, meta, leading, trailing, interactive, style, className, ...rest }: ListRowProps): react_jsx_runtime.JSX.Element;
104
116
 
117
+ interface PageHeaderProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
118
+ /** The trail. Omit on a top-level page, which has nothing above it to name. */
119
+ crumbs?: Crumb[];
120
+ title: ReactNode;
121
+ /** Sits beside the title — typically a `Badge`. */
122
+ status?: ReactNode;
123
+ /** Sits at the far end of the title's row. Buttons, a menu. */
124
+ actions?: ReactNode;
125
+ description?: ReactNode;
126
+ /** Lines the description is clamped to before ellipsis. `0` removes the clamp. */
127
+ descriptionLines?: number;
128
+ }
129
+ declare function PageHeader({ crumbs, title, status, actions, description, descriptionLines, style, ...rest }: PageHeaderProps): react_jsx_runtime.JSX.Element;
130
+
105
131
  interface PaginationProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
106
132
  /** Current page, 1-based. */
107
133
  page: number;
@@ -160,6 +186,12 @@ interface Column<T> {
160
186
  /** Cell content for a row. */
161
187
  render: (row: T, index: number) => ReactNode;
162
188
  align?: Align$1;
189
+ /**
190
+ * Column width (`"40%"`, `220`, `"12rem"`). Declaring one on any column switches
191
+ * the table to `table-layout: fixed`, and columns without a width then divide the
192
+ * remainder equally. Required on any column whose cell truncates — see the note on
193
+ * the module above.
194
+ */
163
195
  width?: number | string;
164
196
  }
165
197
  interface TableProps<T> extends Omit<HTMLAttributes<HTMLTableElement>, "children"> {
@@ -170,8 +202,39 @@ interface TableProps<T> extends Omit<HTMLAttributes<HTMLTableElement>, "children
170
202
  onRowClick?: (row: T, index: number) => void;
171
203
  /** Shown when `data` is empty. */
172
204
  empty?: ReactNode;
205
+ /**
206
+ * The narrowest this table stays readable, and the switch that turns scrolling on.
207
+ *
208
+ * A fixed-layout table has no lower bound of its own, so seven columns in a 400px pane
209
+ * become seven clipped headers and a badge overflowing its cell. Below this width the
210
+ * table scrolls inside its own container instead of crushing — and setting the floor is
211
+ * the only way to ask for that, because a scroller with no floor has no defined moment to
212
+ * engage: under fixed layout the table always fits its container, and under auto layout it
213
+ * engages at whatever width the content happens to reach.
214
+ *
215
+ * The cost is the sticky header. An `overflow-x` container captures the stickiness
216
+ * `position: sticky` resolves against the page's own scroller, and CSS gives no way to
217
+ * scroll one axis while leaving the other visible — so a table without a floor keeps its
218
+ * sticky header, and one with a floor trades it.
219
+ */
220
+ minWidth?: number | string;
221
+ }
222
+ declare function Table<T>({ data, columns, rowKey, onRowClick, empty, minWidth, style, className, ...rest }: TableProps<T>): react_jsx_runtime.JSX.Element;
223
+
224
+ interface Tab<T extends string> {
225
+ label: string;
226
+ value: T;
227
+ /** A small trailing count. Rendered muted, and omitted entirely when undefined. */
228
+ count?: number;
229
+ }
230
+ interface TabsProps<T extends string> extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
231
+ tabs: Tab<T>[];
232
+ value: T;
233
+ onChange: (value: T) => void;
234
+ /** Accessible name for the tab set — what these are facets OF. */
235
+ label?: string;
173
236
  }
174
- declare function Table<T>({ data, columns, rowKey, onRowClick, empty, style, className, ...rest }: TableProps<T>): react_jsx_runtime.JSX.Element;
237
+ declare function Tabs<T extends string>({ tabs, value, onChange, label, style, className, onKeyDown: callerKeyDown, ...rest }: TabsProps<T>): react_jsx_runtime.JSX.Element;
175
238
 
176
239
  type ContentWidth = "reading" | "full";
177
240
  interface AppFrameProps extends HTMLAttributes<HTMLDivElement> {
@@ -233,6 +296,38 @@ declare const ListDetailLayout: typeof ListDetailLayoutRoot & {
233
296
  Back: typeof Back;
234
297
  };
235
298
 
299
+ interface PageLayoutProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
300
+ /** The trail. Omit at the top level, which has nothing above it to name. */
301
+ crumbs?: Crumb[];
302
+ title: ReactNode;
303
+ /** Beside the title — typically a `Badge`. */
304
+ status?: ReactNode;
305
+ /** The far end of the title's row. */
306
+ actions?: ReactNode;
307
+ description?: ReactNode;
308
+ /** Lines the description is clamped to. `0` removes the clamp. */
309
+ descriptionLines?: number;
310
+ /**
311
+ * ONE tab bar, of the facets of whatever the title names. A `Tabs`.
312
+ *
313
+ * A slot rather than typed props because `Tabs` already has an API worth having, and
314
+ * wrapping it here would mean maintaining a second copy of it that drifts. What the layout
315
+ * owns is the bar's POSITION — under the header, above the content — which is the part
316
+ * apps get wrong.
317
+ */
318
+ tabs?: ReactNode;
319
+ /**
320
+ * Controls that narrow the content below: a search field, a status filter, a view toggle.
321
+ *
322
+ * Distinct from `tabs` on purpose. A tab changes which facet of one entity is shown; a
323
+ * toolbar reshapes a set within that facet. Rendering them as one row is how an app ends up
324
+ * with two identical-looking control strips whose difference nobody can see.
325
+ */
326
+ toolbar?: ReactNode;
327
+ children?: ReactNode;
328
+ }
329
+ declare function PageLayout({ crumbs, title, status, actions, description, descriptionLines, tabs, toolbar, children, style, ...rest }: PageLayoutProps): react_jsx_runtime.JSX.Element;
330
+
236
331
  type CollapseMode = "reflow" | "drawer";
237
332
  type Side = "left" | "right";
238
333
  interface SidebarState {
@@ -405,7 +500,24 @@ interface TextProps extends Omit<HTMLAttributes<HTMLElement>, "color"> {
405
500
  weight?: Weight;
406
501
  tone?: Tone;
407
502
  mono?: boolean;
408
- /** Single-line ellipsis truncation. */
503
+ /**
504
+ * Single-line ellipsis truncation.
505
+ *
506
+ * Sets `display: block` alongside the ellipsis rules, and that is load-bearing rather
507
+ * than incidental: `overflow` and `text-overflow` do not apply to a non-replaced INLINE
508
+ * box, so on the default `<span>` the only declaration that survived was
509
+ * `white-space: nowrap` — and the prop did the exact opposite of its name, making text
510
+ * unwrappable instead of clipping it. Inside an auto-layout `<table>` that widened the
511
+ * column to the full string and pushed every later column off the pane.
512
+ *
513
+ * `min-width: 0` comes with it so the box can actually shrink as a flex item; without it
514
+ * a truncating `Text` inside `Inline`/`Stack` refuses to go below its content width and
515
+ * pushes its container instead, which is the same bug one layer out.
516
+ *
517
+ * A truncating cell in a `Table` also needs its column to declare a `width` — see
518
+ * `Column.width`. Auto table layout sizes to content, so the ellipsis has nothing to
519
+ * clip against until some column is pinned.
520
+ */
409
521
  truncate?: boolean;
410
522
  as?: ElementType;
411
523
  children?: ReactNode;
@@ -422,4 +534,4 @@ interface HeadingProps extends Omit<HTMLAttributes<HTMLHeadingElement>, "color">
422
534
  /** Display heading using the heading font slot. Defaults to md, semibold. */
423
535
  declare function Heading({ size, weight, tone, as: As, style, children, ...rest }: HeadingProps): react_jsx_runtime.JSX.Element;
424
536
 
425
- export { AppFrame, Avatar, Badge, type BadgeTone, Button, Card, type Column, Divider, Drawer, EmptyState, Heading, type HeadingSize, Inline, ListDetailLayout, ListRow, Pagination, Prose, SearchField, SegmentedControl, SidebarLayout, Spacer, Spinner, Stack, type Status, StatusDot, Table, Text, TextLink, type TextSize, type Tokens, headingStyle, textStyle, tokens, useBreakpoint, useListDetail, useSidebar };
537
+ export { AppFrame, Avatar, Badge, type BadgeTone, Breadcrumb, Button, Card, type Column, type Crumb, Divider, Drawer, EmptyState, Heading, type HeadingSize, Inline, ListDetailLayout, ListRow, PageHeader, PageLayout, Pagination, Prose, SearchField, SegmentedControl, SidebarLayout, Spacer, Spinner, Stack, type Status, StatusDot, Table, Tabs, Text, TextLink, type TextSize, type Tokens, headingStyle, textStyle, tokens, useBreakpoint, useListDetail, useSidebar };