@optimum-intelligence/opti-ui 0.7.2 → 0.7.3

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 (53) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/components/app-shell/AppShell.d.ts +12 -3
  3. package/dist/components/app-shell/AppShell.js +45 -26
  4. package/dist/components/app-shell/AppShell.js.map +1 -1
  5. package/dist/components/data-table/DataTable.d.ts +25 -4
  6. package/dist/components/data-table/DataTable.js +238 -90
  7. package/dist/components/data-table/DataTable.js.map +1 -1
  8. package/dist/components/data-table/DataTableContent.d.ts +6 -1
  9. package/dist/components/data-table/DataTableContent.js +306 -409
  10. package/dist/components/data-table/DataTableContent.js.map +1 -1
  11. package/dist/components/data-table/DataTableFilters.d.ts +6 -1
  12. package/dist/components/data-table/DataTableFilters.js +65 -45
  13. package/dist/components/data-table/DataTableFilters.js.map +1 -1
  14. package/dist/components/data-table/DataTableRow.js +2 -0
  15. package/dist/components/data-table/DataTableRow.js.map +1 -1
  16. package/dist/components/data-table/types.d.ts +14 -1
  17. package/dist/components/data-table/useDataTable.js +2 -0
  18. package/dist/components/data-table/useDataTable.js.map +1 -1
  19. package/dist/components/drawer/Drawer.d.ts +7 -4
  20. package/dist/components/drawer/Drawer.js +2 -1
  21. package/dist/components/drawer/Drawer.js.map +1 -1
  22. package/dist/components/map/Map.d.ts +30 -6
  23. package/dist/components/map/Map.js +387 -271
  24. package/dist/components/map/Map.js.map +1 -1
  25. package/dist/components/stat-card/StatCard.d.ts +2 -2
  26. package/dist/components/stat-card/StatCard.js +1 -1
  27. package/dist/components/stat-card/StatCard.js.map +1 -1
  28. package/dist/components/stepper/Stepper.d.ts +7 -1
  29. package/dist/components/stepper/Stepper.js +46 -27
  30. package/dist/components/stepper/Stepper.js.map +1 -1
  31. package/dist/components/table/Table.d.ts +1 -1
  32. package/dist/components/table/Table.js +3 -1
  33. package/dist/components/table/Table.js.map +1 -1
  34. package/dist/components/tabs/Tabs.d.ts +4 -1
  35. package/dist/components/tabs/Tabs.js +33 -23
  36. package/dist/components/tabs/Tabs.js.map +1 -1
  37. package/dist/components/toggle/Toggle.d.ts +1 -1
  38. package/dist/components/toggle/Toggle.js.map +1 -1
  39. package/dist/components.json +101 -29
  40. package/dist/icons/index.d.ts +8 -0
  41. package/dist/icons/index.js +11 -1
  42. package/dist/icons/index.js.map +1 -1
  43. package/dist/index.js +2 -2
  44. package/dist/llms-full.txt +48 -19
  45. package/dist/llms.txt +7 -7
  46. package/dist/opti-ui.css +380 -29
  47. package/dist/utils/media.d.ts +4 -0
  48. package/dist/utils/media.js +34 -0
  49. package/dist/utils/media.js.map +1 -0
  50. package/dist/utils/scroll-fade.d.ts +9 -0
  51. package/dist/utils/scroll-fade.js +45 -0
  52. package/dist/utils/scroll-fade.js.map +1 -0
  53. package/package.json +1 -1
@@ -1041,7 +1041,7 @@ import { CardTitle } from '@optimum-intelligence/opti-ui';
1041
1041
 
1042
1042
  component · Layout
1043
1043
 
1044
- Responsive dashboard grid.
1044
+ Responsive dashboard grid: up to `columns` equal columns, fewer when its own width cannot fit them.
1045
1045
 
1046
1046
  ```tsx
1047
1047
  import { Grid } from '@optimum-intelligence/opti-ui';
@@ -1050,7 +1050,8 @@ import { Grid } from '@optimum-intelligence/opti-ui';
1050
1050
  | Prop | Type | Default | Description |
1051
1051
  | --- | --- | --- | --- |
1052
1052
  | `ref?` | `React.Ref<HTMLDivElement>` | | Ref to the grid element. |
1053
- | `columns?` | `1 \| 2 \| 3 \| 4 \| 5 \| 6` | `3` | Columns on wide screens; collapses to 2 below 1200px (for 4+) and 1 below 900px. |
1053
+ | `columns?` | `1 \| 2 \| 3 \| 4 \| 5 \| 6` | `3` | Most columns, shown while each can be at least `minItemWidth` wide. As the grid's own width runs out it steps down to half the columns (4 → 2, 6 → 3), then to as many as fit. With the defaults a 4–6 column KPI row keeps 2 columns on a phone. |
1054
+ | `minItemWidth?` | `string` | | Narrowest a column may get before the grid drops columns: any CSS length. Defaults to `12rem`; for 4–6 columns `11rem`, or `9rem` below 640px. Same as setting `--oui-grid-min-item-width`. |
1054
1055
  | `gap?` | `'sm' \| 'md' \| 'lg'` | `'md'` | Space between grid cells. |
1055
1056
 
1056
1057
  Also accepts all props of: `React.HTMLAttributes<HTMLDivElement>`.
@@ -1274,7 +1275,7 @@ Also accepts all props of: `useRender.ComponentProps<'div', StackState>`.
1274
1275
 
1275
1276
  component · Layout
1276
1277
 
1277
- KPI tile: label, large value, optional unit and trend.
1278
+ KPI tile: label, large value, optional unit and trend. Below 640px it turns compact (smaller value, no icon) to sit two to a row.
1278
1279
 
1279
1280
  ```tsx
1280
1281
  import { StatCard } from '@optimum-intelligence/opti-ui';
@@ -1292,7 +1293,7 @@ import { StatCard } from '@optimum-intelligence/opti-ui';
1292
1293
  | `trend?` | `'up' \| 'down' \| 'flat'` | | Arrow direction shown next to `delta`. |
1293
1294
  | `tone?` | `'positive' \| 'negative' \| 'neutral'` | | Color of the delta. Defaults to positive for `up`, negative for `down`. |
1294
1295
  | `hint?` | `React.ReactNode` | | Supporting text under the value. |
1295
- | `icon?` | `React.ReactNode` | | Icon tile shown in the top-right corner. |
1296
+ | `icon?` | `React.ReactNode` | | Icon tile shown in the top-right corner. Hidden below 640px, where the tile is compact. |
1296
1297
  | `loading?` | `boolean` | | Replaces the value with a skeleton while data loads. |
1297
1298
 
1298
1299
  Also accepts all props of: `useRender.ComponentProps<'div', CardState>`.
@@ -1545,7 +1546,7 @@ import { SegmentedControl } from '@optimum-intelligence/opti-ui';
1545
1546
  | Prop | Type | Default | Description |
1546
1547
  | --- | --- | --- | --- |
1547
1548
  | `size?` | `'sm' \| 'md'` | `'md'` | Segment height. |
1548
- | `variant?` | `'segmented' \| 'outline'` | | `segmented` renders a pill track like a tab switcher; `outline` separate buttons. |
1549
+ | `variant?` | `'segmented' \| 'outline'` | | `segmented` renders a pill track like a tab switcher, kept on one line; `outline` separate buttons, which wrap onto more rows when they do not fit. |
1549
1550
  | `fullWidth?` | `boolean` | | Stretch segments to fill the width. |
1550
1551
  | `options` | `SegmentedControlOption[]` | | Segments to show. |
1551
1552
  | `value?` | `string` | | Selected option `value` (controlled). |
@@ -1583,7 +1584,7 @@ import { ToggleGroup } from '@optimum-intelligence/opti-ui';
1583
1584
  | Prop | Type | Default | Description |
1584
1585
  | --- | --- | --- | --- |
1585
1586
  | `size?` | `'sm' \| 'md'` | `'md'` | Segment height. |
1586
- | `variant?` | `'segmented' \| 'outline'` | `'segmented'` | `segmented` renders a pill track like a tab switcher; `outline` separate buttons. |
1587
+ | `variant?` | `'segmented' \| 'outline'` | `'segmented'` | `segmented` renders a pill track like a tab switcher, kept on one line; `outline` separate buttons, which wrap onto more rows when they do not fit. |
1587
1588
  | `fullWidth?` | `boolean` | | Stretch segments to fill the width. |
1588
1589
 
1589
1590
  Also accepts all props of: `BaseToggleGroup.Props`.
@@ -1816,7 +1817,8 @@ Base UI `Dialog.createHandle` re-exported unchanged. See https://base-ui.com/rea
1816
1817
  component · Overlays
1817
1818
 
1818
1819
  Side panel for inspecting or editing a record without leaving the page:
1819
- pinned header, scrolling body, optional pinned footer. For a free-form
1820
+ pinned header, scrolling body, optional pinned footer. `side="bottom"` makes
1821
+ it a bottom sheet, for filters and actions on phones. For a free-form
1820
1822
  sheet use `Dialog.Content` with `placement`.
1821
1823
 
1822
1824
  ```tsx
@@ -1836,8 +1838,8 @@ import { Drawer } from '@optimum-intelligence/opti-ui';
1836
1838
  | `description?` | `React.ReactNode` | | Supporting text under the title. |
1837
1839
  | `actions?` | `React.ReactNode` | | Header content next to the close button (edit, delete, a menu…). |
1838
1840
  | `footer?` | `React.ReactNode` | | Pinned to the bottom, for form buttons. |
1839
- | `side?` | `'right' \| 'left'` | `'right'` | Edge the drawer slides in from. |
1840
- | `size?` | `'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` | Width: sm 24rem, md 32rem (default), lg 48rem, xl 60rem. Override with `--oui-drawer-width`. |
1841
+ | `side?` | `'right' \| 'left' \| 'bottom'` | `'right'` | Edge the drawer slides in from. A `bottom` sheet is full width, as tall as its content, up to 85% of the screen. |
1842
+ | `size?` | `'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` | Width of a side drawer: sm 24rem, md 32rem (default), lg 48rem, xl 60rem. Override with `--oui-drawer-width`. Ignored by `bottom`. |
1841
1843
  | `dismissible?` | `boolean` | `true` | Set to `false` to block Esc, outside clicks and the close button, e.g. while a form inside is saving. |
1842
1844
  | `modal?` | `boolean` | `true` | `false` leaves the page behind interactive and drops the backdrop. |
1843
1845
  | `backdropBlur?` | `'none' \| 'sm' \| 'md' \| 'lg'` | `'md'` | How strongly the page behind a modal drawer is blurred. Override the radius with `--oui-backdrop-blur`. |
@@ -2127,12 +2129,17 @@ Also accepts all props of: `Omit<React.HTMLAttributes<HTMLElement>, 'onChange'>`
2127
2129
 
2128
2130
  component · Disclosure & navigation
2129
2131
 
2130
- Progress through an ordered sequence: a wizard, a checkout, a background job's phases.
2132
+ Progress through an ordered sequence: a wizard, a checkout, a background job's phases. Below 640px a
2133
+ horizontal stepper turns compact: a segmented progress bar under the current step ("2/4 · Date").
2131
2134
 
2132
2135
  ```tsx
2133
2136
  import { Stepper } from '@optimum-intelligence/opti-ui';
2134
2137
  ```
2135
2138
 
2139
+ ```tsx
2140
+ <Stepper current={1} steps={[{ label: 'Vehicle' }, { label: 'Date' }, { label: 'Route' }, { label: 'Summary' }]} />
2141
+ ```
2142
+
2136
2143
  | Prop | Type | Default | Description |
2137
2144
  | --- | --- | --- | --- |
2138
2145
  | `ref?` | `React.Ref<HTMLOListElement>` | | Ref to the `<ol>` element. |
@@ -2148,7 +2155,8 @@ Also accepts all props of: `React.OlHTMLAttributes<HTMLOListElement>`.
2148
2155
 
2149
2156
  compound · Disclosure & navigation
2150
2157
 
2151
- `Tabs.Root` › `Tabs.List` › `Tabs.Tab`, then one `Tabs.Panel` per value.
2158
+ `Tabs.Root` › `Tabs.List` › `Tabs.Tab`, then one `Tabs.Panel` per value. A list wider than its
2159
+ container scrolls sideways, with its cut-off edge faded.
2152
2160
 
2153
2161
  ```tsx
2154
2162
  import { Tabs } from '@optimum-intelligence/opti-ui';
@@ -2267,8 +2275,12 @@ uncontrolled or controlled (`search` / `filterValues` / `sort` / `page` /
2267
2275
 
2268
2276
  For another layout, create the table with `useDataTable` and compose the
2269
2277
  parts: `DataTable.Root`, `DataTable.Toolbar`, `DataTable.Search`,
2270
- `DataTable.Filters`, `DataTable.Filter`, `DataTable.Actions`,
2271
- `DataTable.Summary`, `DataTable.Content`, `DataTable.Pagination`.
2278
+ `DataTable.Filters`, `DataTable.Filter`, `DataTable.FilterSheet` (the
2279
+ phone filter button and sheet), `DataTable.Actions`, `DataTable.Summary`,
2280
+ `DataTable.Content`, `DataTable.Pagination`.
2281
+
2282
+ On phones (below 640px) columns with `priority: 'low'` are hidden, and
2283
+ `stickyFirstColumn` keeps each row's name in view while the rest scrolls.
2272
2284
 
2273
2285
  ```tsx
2274
2286
  import { DataTable } from '@optimum-intelligence/opti-ui';
@@ -2280,12 +2292,13 @@ import { DataTable } from '@optimum-intelligence/opti-ui';
2280
2292
  | `maxHeight?` | `number \| string` | | Scrolls the rows inside this height and keeps the header in view. |
2281
2293
  | `virtualized?` | `boolean \| DataTableVirtualOptions` | | Renders only the rows in view, for thousands of rows without pagination. Rows are one line high: columns fit their longest value, so mark those with long text `truncate`. Scrolls inside `maxHeight` (default `32rem`). |
2282
2294
  | `onEndReached?` | `() => void` | | Called when the rows are scrolled near their end, once per row count: load and append the next rows. Needs `maxHeight` or `virtualized`. |
2295
+ | `stickyFirstColumn?` | `boolean` | | Keeps the first column (and the selection checkboxes) in place while the table scrolls sideways, so each row stays identifiable on narrow screens. |
2283
2296
  | `empty?` | `React.ReactNode` | | Replaces the default empty state. |
2284
2297
  | `tableProps?` | `Omit<TableProps, 'children'>` | | Props for the underlying `Table` (className, wrapperProps, aria-*). |
2285
2298
  | `pageSizeOptions?` | `number[]` | | Choices in the rows-per-page select. |
2286
2299
  | `controlSize?` | `'sm' \| 'md'` | | Size of the search box and the filters. |
2287
2300
  | `toolbar?` | `React.ReactNode \| ((context: DataTableToolbarContext<T>) => React.ReactNode)` | | Extra toolbar content (add, bulk actions…). A function receives the processed rows. |
2288
- | `showToolbar?` | `boolean` | `true` | `false` drops the search, filters, summary and toolbar content: rows only, for short tables under their own heading. |
2301
+ | `showToolbar?` | `boolean` | `true` | `false` drops the search, filters, summary and toolbar content: rows only, for short tables under their own heading. Below 640px the toolbar is the search and a "Filters (n)" button, whose bottom sheet holds the filters and the `toolbar` content, over a line with the row count and export. |
2289
2302
  | `exportName?` | `string` | | Adds an export button that saves the filtered, sorted rows as `<exportName>.csv`. Columns choose their text with `exportValue`. |
2290
2303
  | `fill?` | `boolean` | `false` | Grow to fill the height of a flex column container (a page, or a `Card` whose content holds the table); only the rows scroll. `maxHeight` still caps it. |
2291
2304
  | `className?` | `string` | | Class name for the table's root element. |
@@ -2327,6 +2340,7 @@ Every filter of the table, with a clear button while any is active. Children are
2327
2340
  | Prop | Type | Default | Description |
2328
2341
  | --- | --- | --- | --- |
2329
2342
  | `size?` | `'sm' \| 'md'` | | Control height of every filter. |
2343
+ | `stacked?` | `boolean` | | One filter per row at full width, chip rows and date ranges under their name: the layout of the filter sheet on phones. Leaves out the clear button, which the sheet keeps in its footer. |
2330
2344
 
2331
2345
  Also accepts all props of: `React.HTMLAttributes<HTMLDivElement>`.
2332
2346
 
@@ -2340,6 +2354,17 @@ The control of one filter: a dropdown, a toggle chip, a row of chips or a date r
2340
2354
  | `size?` | `'sm' \| 'md'` | | Control height. |
2341
2355
  | `className?` | `string` | | Class name for the filter control. |
2342
2356
 
2357
+ ### DataTable.FilterSheet
2358
+
2359
+ The phone toolbar's "Filters (n)" button, which opens a bottom sheet holding every filter and the
2360
+ `children`. Filters apply as they change. The footer keeps a clear button (disabled while no filter
2361
+ is set, so nothing moves when one is) and a button that closes the sheet on the result count.
2362
+
2363
+ | Prop | Type | Default | Description |
2364
+ | --- | --- | --- | --- |
2365
+ | `size?` | `'sm' \| 'md'` | `'md'` | Height of the filter button; the filters in the sheet are full size. |
2366
+ | `children?` | `React.ReactNode` | | Extra content placed under the filters (add, bulk actions…). |
2367
+
2343
2368
  ### DataTable.Actions
2344
2369
 
2345
2370
  Styled `<div>` (`.oui-data-table__actions`). Accepts `className`, `style`, the `render` prop and all `<div>` attributes.
@@ -2358,6 +2383,7 @@ The table itself, with its loading, empty and error states.
2358
2383
  | `maxHeight?` | `number \| string` | | Scrolls the rows inside this height and keeps the header in view. |
2359
2384
  | `virtualized?` | `boolean \| DataTableVirtualOptions` | | Renders only the rows in view, for thousands of rows without pagination. Rows are one line high: columns fit their longest value, so mark those with long text `truncate`. Scrolls inside `maxHeight` (default `32rem`). |
2360
2385
  | `onEndReached?` | `() => void` | | Called when the rows are scrolled near their end, once per row count: load and append the next rows. Needs `maxHeight` or `virtualized`. |
2386
+ | `stickyFirstColumn?` | `boolean` | | Keeps the first column (and the selection checkboxes) in place while the table scrolls sideways, so each row stays identifiable on narrow screens. |
2361
2387
  | `empty?` | `React.ReactNode` | | Replaces the default empty state. |
2362
2388
  | `tableProps?` | `Omit<TableProps, 'children'>` | | Props for the underlying `Table` (className, wrapperProps, aria-*). |
2363
2389
 
@@ -2538,7 +2564,7 @@ Also accepts all props of: `React.HTMLAttributes<HTMLSpanElement>`.
2538
2564
 
2539
2565
  component · Feedback & data display
2540
2566
 
2541
- Styled HTML table inside a horizontally scrolling wrapper. Compose with `TableHeader`, `TableBody`,
2567
+ Styled HTML table inside a horizontally scrolling wrapper, whose cut-off edge fades. Compose with `TableHeader`, `TableBody`,
2542
2568
  `TableFooter`, `TableRow`, `TableHead`, `TableCell` and `TableCaption`. For search, filters, sorting
2543
2569
  and pagination use `DataTable` instead.
2544
2570
 
@@ -2775,7 +2801,7 @@ Small built-in stroke icon set. Every icon renders an `<svg>` that follows the f
2775
2801
  import { ArrowDownIcon } from '@optimum-intelligence/opti-ui';
2776
2802
  ```
2777
2803
 
2778
- Icons: `ArrowDownIcon`, `ArrowUpIcon`, `CalendarIcon`, `CheckIcon`, `ChevronDownIcon`, `ChevronLeftIcon`, `ChevronRightIcon`, `ChevronUpIcon`, `ChevronsLeftIcon`, `ChevronsRightIcon`, `ChevronsUpDownIcon`, `CircleCheckIcon`, `CircleIcon`, `CircleXIcon`, `ClockIcon`, `DownloadIcon`, `ExternalLinkIcon`, `EyeIcon`, `EyeOffIcon`, `FileIcon`, `InfoIcon`, `MenuIcon`, `MinusIcon`, `MoreHorizontalIcon`, `PencilIcon`, `PlusIcon`, `SearchIcon`, `TrashIcon`, `TrendingDownIcon`, `TrendingUpIcon`, `TriangleAlertIcon`, `UploadIcon`, `XIcon`
2804
+ Icons: `ArrowDownIcon`, `ArrowUpIcon`, `CalendarIcon`, `CheckIcon`, `ChevronDownIcon`, `ChevronLeftIcon`, `ChevronRightIcon`, `ChevronUpIcon`, `ChevronsLeftIcon`, `ChevronsRightIcon`, `ChevronsUpDownIcon`, `CircleCheckIcon`, `CircleIcon`, `CircleXIcon`, `ClockIcon`, `DownloadIcon`, `ExternalLinkIcon`, `EyeIcon`, `EyeOffIcon`, `FileIcon`, `FilterIcon`, `InfoIcon`, `LayersIcon`, `MenuIcon`, `MinusIcon`, `MoreHorizontalIcon`, `PencilIcon`, `PlusIcon`, `SearchIcon`, `TrashIcon`, `TrendingDownIcon`, `TrendingUpIcon`, `TriangleAlertIcon`, `UploadIcon`, `XIcon`
2779
2805
 
2780
2806
  | Prop | Type | Default | Description |
2781
2807
  | --- | --- | --- | --- |
@@ -2893,6 +2919,7 @@ strict Content-Security-Policy needs `worker-src blob:`.
2893
2919
  | `labels?` | `Partial<MapLabels>` | | Translations of the built-in texts; also passed to MapLibre's control strings. |
2894
2920
  | `controlsPosition?` | `ControlPosition \| false` | `'top-right'` | Corner of the zoom buttons, or `false` to hide them. |
2895
2921
  | `expandable?` | `boolean` | `false` | Adds a button, next to the zoom buttons, that expands the map over the whole window (not browser fullscreen) above the page, at the dialog z-index. Escape or the button returns it. |
2922
+ | `attributionCollapsed?` | `boolean` | `false` | Starts the attribution as the small info button, opened with a tap, instead of showing the full text until the map is first dragged. For small maps and phones; check the tile provider's terms first. |
2896
2923
  | `className?` | `string` | | Classes for the map container. Set its height in CSS (`--oui-map-height`, default 24rem). |
2897
2924
  | `style?` | `React.CSSProperties` | | Inline styles for the map container. |
2898
2925
  | `children?` | `React.ReactNode` | | Data parts (`Map.Routes`, `Map.Areas`, …), markers, popups and overlays. |
@@ -3016,7 +3043,7 @@ Content floating over a corner of the map: stat cards, selects, a legend or `Map
3016
3043
  | Prop | Type | Default | Description |
3017
3044
  | --- | --- | --- | --- |
3018
3045
  | `ref?` | `React.Ref<HTMLDivElement>` | | Ref to the overlay element. |
3019
- | `position?` | `'top-left' \| 'top-right' \| 'bottom-left' \| 'bottom-right'` | `'top-left'` | Corner the overlay sits in. Overlays in the same corner as the zoom buttons cover them. |
3046
+ | `position?` | `'top-left' \| 'top-right' \| 'bottom-left' \| 'bottom-right'` | `'top-left'` | Corner the overlay sits in. Its empty area lets clicks through to the map and controls under it. |
3020
3047
 
3021
3048
  Also accepts all props of: `React.HTMLAttributes<HTMLDivElement>`.
3022
3049
 
@@ -3045,18 +3072,20 @@ works outside the map; inside `Map.Root` it takes the root's labels. Put it in a
3045
3072
  | `onSelectedIdsChange?` | `(ids: string[]) => void` | | Called with the new selected ids. |
3046
3073
  | `onVisibilityChange?` | `(ids: string[], visible: boolean) => void` | | Called with the ids to show or hide. Adds an eye button to every entry. |
3047
3074
  | `showAllToggle?` | `boolean` | `false` | Adds a show all / hide all button when `onVisibilityChange` is set. |
3075
+ | `size?` | `'sm' \| 'md'` | `'md'` | `sm` packs the entries tighter, with smaller swatches and text, for small maps and phones. Either size scrolls past `--oui-map-legend-max-height` (`sm`: 10rem, `md`: none). |
3048
3076
 
3049
3077
  Also accepts all props of: `Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>`.
3050
3078
 
3051
3079
  ### Map.BaseLayerSwitch
3052
3080
 
3053
- Segmented switch between the root's `baseLayers` (e.g. streets and satellite). Put it in a `Map.Overlay`.
3081
+ Switch between the root's `baseLayers` (e.g. streets and satellite): a segmented switch, or with
3082
+ `variant="icon"` a single button that cycles them. Put it in a `Map.Overlay`.
3054
3083
 
3055
3084
  | Prop | Type | Default | Description |
3056
3085
  | --- | --- | --- | --- |
3057
3086
  | `size?` | `'sm' \| 'md'` | `'sm'` | Segment height. |
3058
- | `variant?` | `'segmented' \| 'outline'` | | `segmented` renders a pill track like a tab switcher; `outline` separate buttons. |
3059
3087
  | `fullWidth?` | `boolean` | | Stretch segments to fill the width. |
3088
+ | `variant?` | `'segmented' \| 'outline' \| 'icon'` | `'segmented'` | `segmented` (or `outline`) shows every base map by name. `icon` is one small layers button that moves to the next base map on each press, for small maps and phones; its name says which one is shown. |
3060
3089
 
3061
3090
  Also accepts all props of: `BaseToggleGroup.Props`.
3062
3091
 
package/dist/llms.txt CHANGED
@@ -86,7 +86,7 @@ so the components work in Next.js App Router.
86
86
  - `CardFooter` — Styled `<div>` (`.oui-card__footer`). Accepts `className`, `style`, the `render` prop and all `<div>` attributes. (parts: displayName)
87
87
  - `CardHeader` — Styled `<div>` (`.oui-card__header`). Accepts `className`, `style`, the `render` prop and all `<div>` attributes. (parts: displayName)
88
88
  - `CardTitle` — Styled `<h3>` (`.oui-card__title`). Accepts `className`, `style`, the `render` prop and all `<h3>` attributes. (parts: displayName)
89
- - `Grid` — Responsive dashboard grid.
89
+ - `Grid` — Responsive dashboard grid: up to `columns` equal columns, fewer when its own width cannot fit them.
90
90
  - `Navbar` — Collapsible side navigation. Use inside `AppShell`. Compose with `NavbarHeader` (`NavbarBrand`), `NavbarSection` (`NavbarSectionLabel`, `NavbarItem`) and `NavbarFooter`.
91
91
  - `NavbarBrand` — Logo, title and subtitle block for the top of a `Navbar`.
92
92
  - `NavbarFooter` — Styled `<div>` (`.oui-navbar__footer`). Accepts `className`, `style`, the `render` prop and all `<div>` attributes. (parts: displayName)
@@ -99,7 +99,7 @@ so the components work in Next.js App Router.
99
99
  - `ScrollArea` — Scroll container with slim, themed overlay scrollbars. Set a height or max-height.
100
100
  - `Separator` — Thin divider line. Set `orientation="vertical"` for a vertical rule.
101
101
  - `Stack` — Flex container that spaces its children evenly, in a column or a row.
102
- - `StatCard` — KPI tile: label, large value, optional unit and trend.
102
+ - `StatCard` — KPI tile: label, large value, optional unit and trend. Below 640px it turns compact (smaller value, no icon) to sit two to a row.
103
103
 
104
104
  ## Typography
105
105
 
@@ -126,7 +126,7 @@ so the components work in Next.js App Router.
126
126
  - `ConfirmDialog` — Asks before an action runs: title, description, cancel and confirm buttons, a pending state that keeps the dialog open, and room for the error. For other layouts compose `AlertDialog`.
127
127
  - `createToastManager` — Base UI `Toast.createToastManager` re-exported unchanged. See https://base-ui.com/react/components/toast.
128
128
  - `Dialog` — Modal dialog and side sheet. Compose: `Dialog.Root` › `Dialog.Trigger` + `Dialog.Content` › `Dialog.Header` (`Title`, `Description`), `Dialog.Body`, `Dialog.Footer`. Use `render={<Button />}` on `Dialog.Trigger` / `Dialog.Close` to style them as buttons. (parts: Root, Trigger, Content, Header, Title, Description, Body, Footer, Close, createHandle)
129
- - `Drawer` — Side panel for inspecting or editing a record without leaving the page: pinned header, scrolling body, optional pinned footer. For a free-form sheet use `Dialog.Content` with `placement`.
129
+ - `Drawer` — Side panel for inspecting or editing a record without leaving the page: pinned header, scrolling body, optional pinned footer. `side="bottom"` makes it a bottom sheet, for filters and actions on phones. For a free-form sheet use `Dialog.Content` with `placement`.
130
130
  - `Popover` — Floating panel anchored to a trigger, for small forms, filters and details. (parts: Root, Trigger, Content, Title, Description, Close)
131
131
  - `PreviewCard` — Card that appears when a link is hovered or focused, previewing what is behind it. `PreviewCard.Trigger` is the link itself. Keep the content supplementary: touch users never see it. (parts: Root, Trigger, Content)
132
132
  - `ToastProvider` — Mount once near the app root. Then call `useToast()` anywhere below, or pass a `toastManager` from `createToastManager()` to trigger toasts outside React.
@@ -141,8 +141,8 @@ so the components work in Next.js App Router.
141
141
  - `Collapsible` — A single section that shows and hides: advanced options, "show more", filter groups. (parts: Root, Trigger, Panel)
142
142
  - `getPageItems` — Page numbers to render, with `'gap'` where pages are skipped.
143
143
  - `Pagination` — Controlled page navigation with an optional rows-per-page select.
144
- - `Stepper` — Progress through an ordered sequence: a wizard, a checkout, a background job's phases.
145
- - `Tabs` — `Tabs.Root` › `Tabs.List` › `Tabs.Tab`, then one `Tabs.Panel` per value. (parts: Root, List, Tab, Panel)
144
+ - `Stepper` — Progress through an ordered sequence: a wizard, a checkout, a background job's phases. Below 640px a horizontal stepper turns compact: a segmented progress bar under the current step ("2/4 · Date").
145
+ - `Tabs` — `Tabs.Root` › `Tabs.List` › `Tabs.Tab`, then one `Tabs.Panel` per value. A list wider than its container scrolls sideways, with its cut-off edge faded. (parts: Root, List, Tab, Panel)
146
146
 
147
147
  ## Feedback & data display
148
148
 
@@ -150,7 +150,7 @@ so the components work in Next.js App Router.
150
150
  - `Avatar` — User or entity picture with initials fallback.
151
151
  - `AvatarGroup` — Overlapping row of `Avatar` children, with an optional "+N" overflow counter.
152
152
  - `Badge` — Small status label.
153
- - `DataTable` — `<DataTable data={…} columns={…} />` renders a complete table with search, filters, sorting, pagination, row selection, row actions and inline editing; columns declare what they take part in. Every piece of state works uncontrolled or controlled (`search` / `filterValues` / `sort` / `page` / `selection`), and with `mode="server"` the same state drives an API. (parts: Root, Toolbar, Search, Filters, Filter, Actions, Summary, Content, Pagination)
153
+ - `DataTable` — `<DataTable data={…} columns={…} />` renders a complete table with search, filters, sorting, pagination, row selection, row actions and inline editing; columns declare what they take part in. Every piece of state works uncontrolled or controlled (`search` / `filterValues` / `sort` / `page` / `selection`), and with `mode="server"` the same state drives an API. (parts: Root, Toolbar, Search, Filters, Filter, FilterSheet, Actions, Summary, Content, Pagination)
154
154
  - `DescriptionItem` — One label and value pair inside a `DescriptionList`.
155
155
  - `DescriptionList` — Label and value pairs, such as a record's details. Holds `DescriptionItem`s.
156
156
  - `EmptyState` — Placeholder for empty lists, searches without results and first-run screens.
@@ -159,7 +159,7 @@ so the components work in Next.js App Router.
159
159
  - `Skeleton` — Pulsing placeholder for content that is still loading.
160
160
  - `SkeletonText` — Skeleton placeholder shaped like a paragraph; the last line is shorter.
161
161
  - `Spinner` — Indeterminate loading indicator that follows `currentColor`.
162
- - `Table` — Styled HTML table inside a horizontally scrolling wrapper. Compose with `TableHeader`, `TableBody`, `TableFooter`, `TableRow`, `TableHead`, `TableCell` and `TableCaption`. For search, filters, sorting and pagination use `DataTable` instead.
162
+ - `Table` — Styled HTML table inside a horizontally scrolling wrapper, whose cut-off edge fades. Compose with `TableHeader`, `TableBody`, `TableFooter`, `TableRow`, `TableHead`, `TableCell` and `TableCaption`. For search, filters, sorting and pagination use `DataTable` instead.
163
163
  - `TableBody` — Styled `<tbody>` (`.oui-table__body`). Accepts `className`, `style`, the `render` prop and all `<tbody>` attributes. (parts: displayName)
164
164
  - `TableCaption` — Styled `<caption>` (`.oui-table__caption`). Accepts `className`, `style`, the `render` prop and all `<caption>` attributes. (parts: displayName)
165
165
  - `TableCell` — Body cell (`<td>`). `numeric` right-aligns and uses tabular figures.