@nocoo/basalt 2.1.8 → 2.2.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 (146) hide show
  1. package/ai/INTEGRATION.md +64 -28
  2. package/ai/RECIPES.md +46 -1
  3. package/ai/USAGE.md +2 -2
  4. package/ai/registry.json +56 -14
  5. package/dist/assets/brand-mark.js.map +1 -1
  6. package/dist/charts/area.js.map +1 -1
  7. package/dist/charts/bar.js.map +1 -1
  8. package/dist/charts/bullet.js.map +1 -1
  9. package/dist/charts/charts.js.map +1 -1
  10. package/dist/charts/config.js.map +1 -1
  11. package/dist/charts/custom-chart.js.map +1 -1
  12. package/dist/charts/date-navigation.js.map +1 -1
  13. package/dist/charts/donut.js.map +1 -1
  14. package/dist/charts/frame.js.map +1 -1
  15. package/dist/charts/funnel.js.map +1 -1
  16. package/dist/charts/gauge.js.map +1 -1
  17. package/dist/charts/grouped-bar.js.map +1 -1
  18. package/dist/charts/heatmap-calendar.js.map +1 -1
  19. package/dist/charts/heatmap-matrix.js.map +1 -1
  20. package/dist/charts/item-list.js.map +1 -1
  21. package/dist/charts/legend.js.map +1 -1
  22. package/dist/charts/line.js.map +1 -1
  23. package/dist/charts/palette.js.map +1 -1
  24. package/dist/charts/radar.js.map +1 -1
  25. package/dist/charts/sample.js.map +1 -1
  26. package/dist/charts/sankey.js.map +1 -1
  27. package/dist/charts/series.js.map +1 -1
  28. package/dist/charts/slot-bar.js.map +1 -1
  29. package/dist/charts/sparkline.js.map +1 -1
  30. package/dist/charts/stacked-bar.js.map +1 -1
  31. package/dist/charts/stat-card.js.map +1 -1
  32. package/dist/charts/timeline.js.map +1 -1
  33. package/dist/charts/timeseries.js.map +1 -1
  34. package/dist/charts/tooltip.js.map +1 -1
  35. package/dist/components/accordion.js.map +1 -1
  36. package/dist/components/alert-dialog.js.map +1 -1
  37. package/dist/components/app-header.d.ts +5 -1
  38. package/dist/components/app-header.js +12 -4
  39. package/dist/components/app-header.js.map +1 -1
  40. package/dist/components/app-shell.d.ts +4 -1
  41. package/dist/components/app-shell.js +7 -4
  42. package/dist/components/app-shell.js.map +1 -1
  43. package/dist/components/autocomplete.js.map +1 -1
  44. package/dist/components/avatar.js.map +1 -1
  45. package/dist/components/badge.js.map +1 -1
  46. package/dist/components/banner.js.map +1 -1
  47. package/dist/components/basalt-mark.js.map +1 -1
  48. package/dist/components/battery-meter.js.map +1 -1
  49. package/dist/components/breadcrumbs.js.map +1 -1
  50. package/dist/components/button.js.map +1 -1
  51. package/dist/components/chat-bubble.js.map +1 -1
  52. package/dist/components/chat-composer.js.map +1 -1
  53. package/dist/components/chat-header.js.map +1 -1
  54. package/dist/components/chat-inbox.js.map +1 -1
  55. package/dist/components/checkbox.js.map +1 -1
  56. package/dist/components/clipboard-text.js.map +1 -1
  57. package/dist/components/code.js.map +1 -1
  58. package/dist/components/collapsible.js.map +1 -1
  59. package/dist/components/combobox.js.map +1 -1
  60. package/dist/components/command-palette.js.map +1 -1
  61. package/dist/components/confirm-dialog.d.ts +4 -1
  62. package/dist/components/confirm-dialog.js +20 -18
  63. package/dist/components/confirm-dialog.js.map +1 -1
  64. package/dist/components/context-menu.js.map +1 -1
  65. package/dist/components/data-table.js.map +1 -1
  66. package/dist/components/date-picker.js.map +1 -1
  67. package/dist/components/delete-resource.js.map +1 -1
  68. package/dist/components/description-list.js.map +1 -1
  69. package/dist/components/dialog.js.map +1 -1
  70. package/dist/components/dock.js.map +1 -1
  71. package/dist/components/dropdown-menu.js.map +1 -1
  72. package/dist/components/editable-nav-item.js.map +1 -1
  73. package/dist/components/empty.js.map +1 -1
  74. package/dist/components/fab.js.map +1 -1
  75. package/dist/components/field.js.map +1 -1
  76. package/dist/components/file-dropzone.js.map +1 -1
  77. package/dist/components/filter-bar.js.map +1 -1
  78. package/dist/components/flow.js.map +1 -1
  79. package/dist/components/grid.js.map +1 -1
  80. package/dist/components/hover-card.js.map +1 -1
  81. package/dist/components/icon-picker.js.map +1 -1
  82. package/dist/components/inline-editable.js.map +1 -1
  83. package/dist/components/input-area.js.map +1 -1
  84. package/dist/components/input-group.js.map +1 -1
  85. package/dist/components/input.js.map +1 -1
  86. package/dist/components/label.js.map +1 -1
  87. package/dist/components/layer-card.js.map +1 -1
  88. package/dist/components/link.js.map +1 -1
  89. package/dist/components/loader.js.map +1 -1
  90. package/dist/components/loading-screen.js.map +1 -1
  91. package/dist/components/menu-bar.js.map +1 -1
  92. package/dist/components/meter.js.map +1 -1
  93. package/dist/components/multi-select.js.map +1 -1
  94. package/dist/components/navigation-menu.js.map +1 -1
  95. package/dist/components/overlay.js.map +1 -1
  96. package/dist/components/page-header.js.map +1 -1
  97. package/dist/components/pagination.js.map +1 -1
  98. package/dist/components/popover.js.map +1 -1
  99. package/dist/components/radio.js.map +1 -1
  100. package/dist/components/resource-list.js.map +1 -1
  101. package/dist/components/responsive-master-detail.js +5 -5
  102. package/dist/components/responsive-master-detail.js.map +1 -1
  103. package/dist/components/scroll-area.js.map +1 -1
  104. package/dist/components/section-rule.js.map +1 -1
  105. package/dist/components/segment-control.js.map +1 -1
  106. package/dist/components/select.js.map +1 -1
  107. package/dist/components/sensitive-input.js.map +1 -1
  108. package/dist/components/separator.js.map +1 -1
  109. package/dist/components/sheet.js +1 -0
  110. package/dist/components/sheet.js.map +1 -1
  111. package/dist/components/sidebar.d.ts +3 -1
  112. package/dist/components/sidebar.js +8 -5
  113. package/dist/components/sidebar.js.map +1 -1
  114. package/dist/components/skeleton-line.js.map +1 -1
  115. package/dist/components/slider.js.map +1 -1
  116. package/dist/components/stat-strip.js.map +1 -1
  117. package/dist/components/switch.js.map +1 -1
  118. package/dist/components/table-of-contents.js.map +1 -1
  119. package/dist/components/table-pager.js.map +1 -1
  120. package/dist/components/table.js.map +1 -1
  121. package/dist/components/tabs.js.map +1 -1
  122. package/dist/components/tag-badge.js.map +1 -1
  123. package/dist/components/tag-color-picker.js.map +1 -1
  124. package/dist/components/text.js.map +1 -1
  125. package/dist/components/theme-toggle.js.map +1 -1
  126. package/dist/components/toast.js.map +1 -1
  127. package/dist/components/toggle-group.js.map +1 -1
  128. package/dist/components/toggle.js.map +1 -1
  129. package/dist/components/toolbar.js.map +1 -1
  130. package/dist/components/tooltip.js.map +1 -1
  131. package/dist/components/typeahead-field.js.map +1 -1
  132. package/dist/components/upload-queue.js.map +1 -1
  133. package/dist/providers/accent.js +1 -1
  134. package/dist/providers/accent.js.map +1 -1
  135. package/dist/providers/link.js.map +1 -1
  136. package/dist/providers/theme.js +1 -1
  137. package/dist/providers/theme.js.map +1 -1
  138. package/dist/styles/base.css +116 -0
  139. package/dist/styles/standalone.css +124 -3
  140. package/dist/utils/cn.js.map +1 -1
  141. package/dist/utils/control-surface.js.map +1 -1
  142. package/dist/utils/preference-store.js +1 -1
  143. package/dist/utils/preference-store.js.map +1 -1
  144. package/dist/utils/selection-indicator.js.map +1 -1
  145. package/dist/utils/use-checkable-group.js.map +1 -1
  146. package/package.json +1 -1
package/ai/INTEGRATION.md CHANGED
@@ -51,7 +51,7 @@ AppShell ← dashboard and catalog routes
51
51
  └── LayerCard… ← all later product UI
52
52
  ```
53
53
 
54
- `AppHeader.title` is the current page in the top bar (`h1`, `text-sm`). `PageHeader.title` is the content heading (`h1`, `text-2xl`). They may use the same words. They are different roles. Do not put an icon + page name above `PageHeader` — that duplicates the bar.
54
+ `AppHeader.title` is the current page in the top bar (`h1`, `text-sm`). `PageHeader.title` is the content heading (`h1`, `text-2xl`). They may use the same words in regular workspaces. Mobile immersive layouts instead use one compact AppHeader and a desktop-only PageHeader wrapper; see §6. They are different roles. Do not put an icon + page name above `PageHeader` — that duplicates the bar.
55
55
 
56
56
  The landing page and its prerendered HTML share `LandingContent`. Load the site stylesheet from `index.html` so it also works without JavaScript. Scope marketing CSS to `.landing` and crawl summaries to `[data-crawl-page]`; do not set global `header`, `main`, or `footer` dimensions. Keep document scrolling available on `html`, `body`, and `#root`. `AppShell` contains the dashboard viewport, and `ContentIsland` owns its independent scroll. Give both a positioning context (`relative`) so absolutely positioned content, including screen-reader labels, stays inside the correct scroll boundary.
57
57
 
@@ -365,25 +365,49 @@ Icons: `lucide-react`, `strokeWidth={1.5}`, nav size `h-4 w-4 shrink-0`.
365
365
  <a id="root-geometry"></a>
366
366
  ## 6. Root geometry
367
367
 
368
- `AppShell` is a full-viewport flex row: `h-screen w-full overflow-hidden bg-basalt-background`.
368
+ `AppShell` owns the viewport and safe area; `AppMain` and `ContentIsland` derive their scroll behavior from it. Choose deliberately:
369
369
 
370
- ```
371
- AppShell ← flex row, h-screen, overflow hidden
372
- ├── AppSkipLink ← first child
373
- ├── Sidebar ← the rail (in-flow, not fixed)
374
- └── AppMain ← flex-1 min-w-0 column, overflow hidden
375
- ├── AppHeader ← h-14
376
- └── island wrap ← flex-1 min-h-0, px-2 pb-2 md:px-3 md:pb-3
377
- └── ContentIsland ← page outlet
378
- ```
370
+ | `layout` | Below 768px | 768px and above |
371
+ | --- | --- | --- |
372
+ | `workspace` (default) | Bounded panes | Bounded panes |
373
+ | `responsive` | Natural document scrolling | Bounded panes |
374
+ | `document` | Natural document scrolling | Natural document scrolling |
375
+
376
+ Bounded shells use border-box `height/max-height: 100dvh`. Document shells use `min-height: 100dvh`, automatic height, visible overflow and ordinary root scrolling. Main and island release their height/overflow constraints together; no UA detection, innerHeight workaround, fixed reader viewport or nested mobile scroller is needed. Desktop workspaces keep the island as the vertical scroll owner.
379
377
 
380
378
  ### AppShell, AppMain, AppSkipLink API & Contracts
381
379
 
382
- - **`AppShell`**: Viewport root container. Inherits standard `HTMLAttributes<HTMLDivElement>`. Renders a full-viewport flex row (`h-screen w-full overflow-hidden bg-basalt-background`). Does not forward ref.
383
- - **`AppMain`**: Primary content container. Inherits standard `HTMLAttributes<HTMLElement>`. Defaults `id="main-content"` as the skip-link landmark target, which can be overridden by props via `{...props}`. Recommended to keep `"main-content"` matching `AppSkipLink`. Renders a vertical column with `h-full min-w-0 flex-1 flex-col overflow-hidden`. Does not forward ref.
384
- - **`AppSkipLink`**: Accessibility skip target. Inherits standard `AnchorHTMLAttributes<HTMLAnchorElement>`. Defaults `href="#main-content"`. Renders screen-reader-only element that transitions into absolute focus overlay on keyboard navigation (`sr-only focus:not-sr-only focus:absolute ...`). Does not forward ref.
380
+ - **`AppShell`** accepts `layout?: "workspace" | "responsive" | "document"` and native div attributes. It is the sole safe-area owner of the normal document tree: CSS `env(safe-area-inset-*)` padding is included in its border-box. In document mode bottom padding is trailing content, never a fixed reserved strip. Do not subtract these insets again from main/island height.
381
+ - **`AppMain`** renders the main landmark with `id="main-content"` and `tabIndex={-1}` by default. Native main attributes may override these. It has `min-width: 0` and a flexible column layout; its height and overflow follow the shell.
382
+ - **`AppSkipLink`** points to `#main-content` unless `href` is supplied. Provide visible link text; keep it first in the shell.
383
+ - **`ContentIsland`** (from `components/sidebar`) accepts `mobileSurface?: "inset" | "edge-to-edge"` (default `inset`). Both are L1 surface roots. Edge-to-edge removes mobile padding, radius, ring and shadow; desktop padding/radius remain. The application supplies readable inner content padding, not another painted card.
384
+ - All four accept native attributes and `className`; they do not forward refs. Avoid overriding their height/overflow contract. Put specialized bounded desktop panes inside the island with `md:` constraints only.
385
+
386
+ ```tsx excerpt:responsive-shell
387
+ <AppShell layout="responsive">
388
+ <AppSkipLink>Skip to content</AppSkipLink>
389
+ <AppMain>
390
+ <AppHeader title="Field notes" actions={actions} />
391
+ <div className="flex min-h-0 min-w-0 flex-1 flex-col md:px-3 md:pb-3">
392
+ <ContentIsland mobileSurface="edge-to-edge">
393
+ <div className="mx-auto max-w-prose px-4 py-3 md:p-0">{content}</div>
394
+ </ContentIsland>
395
+ </div>
396
+ </AppMain>
397
+ </AppShell>
398
+ ```
399
+
400
+ The wrapper intentionally has **no mobile `px-2` / `pb-2`**. ContentIsland cannot remove spacing owned by its parent. Remove consumer `h-screen`, `h-full`, `overflow-hidden`, fixed heights and body scroll locks from the document path; all intermediate wrappers must be natural-height columns. Do not target private descendants to undo the library.
401
+
402
+ The consumer owns `viewport` metadata: `width=device-width, initial-scale=1, viewport-fit=cover`. Do not disable zoom. The library never edits document metadata or body styles for layout. Floating modal navigation has a separate portal tree: `Sheet` or overlay `Sidebar` owns modal scroll locking/focus; the Sidebar within it remains bounded and applies that portal's safe-area padding once. Do not add a manual body overflow effect.
403
+
404
+ A desktop Sidebar stays bounded even beside a document: its own navigation may scroll, but the long main content belongs to the document. Hide the desktop rail on mobile and use the same navigation inside an expanded Sidebar in a Sheet. Do not mount duplicate focusable navigation. Single-column reading needs no Sidebar at all.
405
+
406
+ `AppHeader` adds `sticky?: boolean` (default false) and `density?: "comfortable" | "compact"` (default comfortable). Compact is 52px, with at least 44px controls inside the leading/actions slots (not breadcrumb/title links); comfortable remains 56px. `sticky` uses the current scroll owner and an opaque L1 background. Place it directly inside AppMain or as the first child of ContentIsland; do not put it in a short wrapper that limits its sticky travel. The shell exposes `--basalt-safe-top` and resolves `--basalt-sticky-top` to that inset for document scrolling, or zero for bounded panes. The sticky row offsets below the notch and paints the gap with a pseudo-element. Initial inset is still paid only once by the shell, not added again to header height. Do not add safe-area padding to the header. A bounded header outside the island is already stationary and does not need `sticky`.
385
407
 
386
- The island wrap is the only extra layout div in the main column. Pages render **inside** `ContentIsland`. Pages do not set `h-screen`, side padding, or a second card around the island.
408
+ **Single-header immersion is an explicit application layout.** On mobile, use one compact `AppHeader` with title, back/navigation and essential actions; omit the duplicated `PageHeader` (or put it in a `hidden md:block` wrapper). Keep the normal desktop PageHeader hierarchy for workspaces. Content section headings still belong in the document. Use existing DropdownMenu/Popover for secondary actions and 44px minimum touch targets; never invent reader-specific routing or actions in the library.
409
+
410
+ Copyable complete recipes: [mobile layouts](packages/basalt/ai/RECIPES.md#mobile-layouts). Live full-page examples: `/examples/reader`, `/examples/list-detail`, `/examples/workspace`. Desktop bounded panes, mobile root scrolling, form focus and modal restoration are separate checks. Automated WebKit checks CSS, scrolling and focus, **not physical iPhone Safari toolbar collapse or the software keyboard**; verify those manually on device.
387
411
 
388
412
  ---
389
413
 
@@ -391,7 +415,7 @@ The island wrap is the only extra layout div in the main column. Pages render **
391
415
 
392
416
  `Sidebar` **is** the column. It already has:
393
417
 
394
- - `h-screen`, `flex-col`, `shrink-0`, `sticky top-0`
418
+ - shell-derived bounded height (standalone `100dvh`), `flex-col`, `shrink-0`, sticky positioning at the shell-owned safe top
395
419
  - expanded width **260px** (inline `width`)
396
420
  - collapsed width **68px**
397
421
  - collapse animation `transition-all duration-300 ease-in-out`
@@ -403,7 +427,7 @@ Do not wrap those regions in another full-viewport column. Do not set `h-screen`
403
427
  ### Expanded tree
404
428
 
405
429
  ```
406
- Sidebar ← collapsed={false}; owns 260px and h-screen
430
+ Sidebar ← collapsed={false}; owns 260px and bounded height
407
431
  ├── SidebarHeader ← h-14 px-3 already
408
432
  │ └── brand row ← flex, items-center, justify-between, w-full
409
433
  │ (no extra horizontal padding)
@@ -579,9 +603,9 @@ Breakpoint: `768px`. Below that, the in-flow rail is omitted. The same sidebar c
579
603
  </Sheet>
580
604
  ```
581
605
 
582
- `SheetContent` is already `h-full`. `Sidebar` still owns the 260px column inside it. Close the sheet on pathname change. While open, set `document.body.style.overflow = "hidden"` and clear it on close.
606
+ `SheetContent` bounds its Sidebar to the available height. Sidebar owns the 260px column and the portal safe area. Close the sheet on pathname change. Radix Sheet owns modal scroll locking and focus restoration; do not set body overflow separately.
583
607
 
584
- `AppHeader` `leading` is the menu button on mobile only (`Button variant="ghost" size="icon" className="h-8 w-8"`).
608
+ `AppHeader` `leading` is the menu button on mobile only. Use `density="compact"` with `Button variant="ghost" size="icon"`; compact header controls have a 44px minimum target.
585
609
 
586
610
  Header actions use a stable hand cursor and compact 12px `TooltipContent`. `Button`, `LinkButton`, `Toggle`, and `ToggleGroupItem` keep their full rectangular pointer target with a transparent `::before`, including rounded corners. Wrap the actual button or link in `TooltipTrigger asChild` so the trigger retains one focusable hit target. `Toggle` and `ToggleGroupItem` selection styling follows `aria-pressed` / `aria-checked`, independently of the tooltip's `data-state`. Icon-only links must include a screen-reader label inside the link as well as an accessible name.
587
611
 
@@ -621,12 +645,6 @@ export function AppFrame() {
621
645
  setMobileOpen(false);
622
646
  }, [location.pathname]);
623
647
 
624
- useEffect(() => {
625
- document.body.style.overflow = mobileOpen ? "hidden" : "";
626
- return () => {
627
- document.body.style.overflow = "";
628
- };
629
- }, [mobileOpen]);
630
648
 
631
649
  return (
632
650
  <AppShell>
@@ -676,7 +694,7 @@ export function AppFrame() {
676
694
 
677
695
  <a id="appheader-and-breadcrumbs"></a>
678
696
 
679
- `AppHeader` is `h-14`, matching `SidebarHeader`.
697
+ `AppHeader` defaults to `h-14`, matching `SidebarHeader`; `density="compact"` uses a 52px row with 44px minimum targets. `sticky` keeps it visible within the current scroll owner; see §6 for safe-area positioning.
680
698
 
681
699
  ### AppHeader API & Contracts
682
700
 
@@ -777,7 +795,7 @@ Boot and route gates use `LoadingScreen` — a centered mark and a 6rem shimmer
777
795
 
778
796
  ## 13. First page
779
797
 
780
- When skip link, rail (260 / 68, 300ms), header `h-14`, and island are in place, add routes as `Outlet` pages. Application pages inside the island start with `PageHeader`. The shell file does not grow with page UI.
798
+ When skip link, rail (260 / 68, 300ms), header `h-14`, and island are in place, add routes as `Outlet` pages. Regular application pages inside the island start with `PageHeader`. Mobile immersive layouts may use a single `AppHeader` instead, with `PageHeader` shown only on desktop; see the root geometry contract. The shell file does not grow with page UI.
781
799
 
782
800
  Standalone login, loading, error, and landing pages use their own first-screen structure: `/login` preserves the visitor-badge composition, `/loading` is a named loading status, and `/404` and `/static-page` have independent headings. Library reference pages use their document heading and section navigation. These are deliberate layout exceptions, not alternate application-page templates.
783
801
 
@@ -984,7 +1002,7 @@ import { LayerCard } from "@nocoo/basalt/components/layer-card";
984
1002
 
985
1003
  ## 15. PageHeader and SectionRule
986
1004
 
987
- `PageHeader` and `SectionRule` are the only page-level chrome inside the island. Import them from granular paths. They are not on the root barrel. Do not wrap the title in an island.
1005
+ `PageHeader` and `SectionRule` provide regular page-level chrome inside the island. A mobile immersive composition may use a single sticky AppHeader inside the island instead (§6). Import them from granular paths. They are not on the root barrel. Do not wrap the title in an island.
988
1006
 
989
1007
  ### PageHeader
990
1008
 
@@ -1776,3 +1794,21 @@ export function UserPreferencesForm() {
1776
1794
  );
1777
1795
  }
1778
1796
  ```
1797
+
1798
+ ### Confirmation focus after responsive replacement
1799
+
1800
+ `ConfirmDialog.onCloseAutoFocus` receives the same cancelable event as `AlertDialogContent.onCloseAutoFocus`. It runs after the close focus trap releases. Call `event.preventDefault()` and focus the currently mounted action when a responsive layout replaced the original opener. Without prevention, ConfirmDialog restores the connected explicit trigger or captured opener as usual. Do not race that lifecycle with a close-state effect or timeout.
1801
+
1802
+ ```tsx excerpt:confirmation-focus-replacement
1803
+ <ConfirmDialog
1804
+ open={confirmOpen}
1805
+ onOpenChange={setConfirmOpen}
1806
+ title="Remove item?"
1807
+ description="This action cannot be undone."
1808
+ onConfirm={removeItem}
1809
+ onCloseAutoFocus={(event) => {
1810
+ event.preventDefault();
1811
+ currentActionRef.current?.focus();
1812
+ }}
1813
+ />
1814
+ ```
package/ai/RECIPES.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Application recipes
2
2
 
3
- These complete modules, included in v2.1.0, use only public Basalt imports and React.
3
+ These complete modules use only public Basalt imports and React. AppFrame, Login and Resources are available since v2.1.0; MobileLayout requires v2.2.0.
4
4
 
5
5
  Load exactly one CSS mode at the application entry: import `@nocoo/basalt/styles/standalone` for a build without Tailwind, or configure the Tailwind source scan and import `@nocoo/basalt/styles/tailwind` as described in INTEGRATION.md. In Next, import CSS in the root layout and import these modules through a `use client` boundary. Mount ThemeProvider once per application; the standalone recipes include their own root provider. Root pages should set body margin to zero.
6
6
 
@@ -159,3 +159,48 @@ export default function ResourcesRecipe() {
159
159
  </main></ThemeProvider>;
160
160
  }
161
161
  ```
162
+
163
+ ## Mobile layouts
164
+
165
+ Use `responsive` for mobile root scrolling and desktop island scrolling; `document` keeps root scrolling at every width, while `workspace` remains bounded everywhere. Select this per layout, not by user-agent. Place the compact sticky header inside the edge-to-edge island for a single immersive row. Keep a normal PageHeader in a desktop-only wrapper when it adds context. The outer wrapper must not retain mobile `px-2 pb-2`; the island cannot remove its parent's spacing.
166
+
167
+ This complete recipe compiles from the installed package. Supply content and actions from the application; there are no routing, article, account or network assumptions. The consumer owns a zero-margin body and viewport metadata (`width=device-width, initial-scale=1, viewport-fit=cover`). Do not lock body scrolling or add height/overflow constraints to intermediate wrappers. The shell handles safe areas; the sticky header paints the notch gap without charging the initial top inset twice. Bottom safe area follows the last content, not a fixed footer strip.
168
+
169
+ ```tsx compile:recipe-mobile-layout
170
+ import { AppHeader } from "@nocoo/basalt/components/app-header";
171
+ import { AppMain, AppShell, AppSkipLink } from "@nocoo/basalt/components/app-shell";
172
+ import { Button } from "@nocoo/basalt/components/button";
173
+ import { Popover, PopoverContent, PopoverTrigger } from "@nocoo/basalt/components/popover";
174
+ import { ContentIsland } from "@nocoo/basalt/components/sidebar";
175
+ import { ThemeProvider } from "@nocoo/basalt/providers/theme";
176
+
177
+ export default function MobileLayoutRecipe() {
178
+ return <ThemeProvider><AppShell layout="responsive">
179
+ <AppSkipLink>Skip to content</AppSkipLink>
180
+ <AppMain>
181
+ <ContentIsland mobileSurface="edge-to-edge">
182
+ <AppHeader sticky density="compact" title="Field notes" actions={
183
+ <Popover><PopoverTrigger asChild><Button variant="ghost">Options</Button></PopoverTrigger>
184
+ <PopoverContent aria-label="Options"><p>Application-owned reading preferences.</p></PopoverContent>
185
+ </Popover>
186
+ } />
187
+ <article style={{ maxWidth: "65ch", marginInline: "auto", padding: "1rem", lineHeight: 1.7 }}>
188
+ {Array.from({ length: 24 }, (_, index) => <section key={index}>
189
+ <h2>Observation {index + 1}</h2>
190
+ <p>The shell leaves the document in charge on a narrow screen. Content grows naturally, the header stays reachable, and the final paragraph remains above the trailing safe area.</p>
191
+ </section>)}
192
+ <p>End of notes.</p>
193
+ </article>
194
+ </ContentIsland>
195
+ </AppMain>
196
+ </AppShell></ThemeProvider>;
197
+ }
198
+ ```
199
+
200
+ ### List/detail and form boundaries
201
+
202
+ - Full-page examples: [reader](https://basaltui.com/examples/reader), [list/detail](https://basaltui.com/examples/list-detail), [workspace/form](https://basaltui.com/examples/workspace). Open them outside another AppShell; do not nest viewport shells.
203
+ - Use `ResponsiveMasterDetail` inside a `ContentIsland` with `className="md:overflow-hidden"`, and give the composition `className="md:h-full"`. Its desktop panes scroll independently; below 768px only the visible pane participates in document layout. The application owns selection. Built-in back navigation restores focus to the opening item, with a region fallback if it no longer exists.
204
+ - Keep `mobileSurface="inset"` for regular forms. Use native labels, appropriate input types and at least 44px controls; 16px input text avoids the common small-text zoom problem without disabling user zoom. Browser scrolling brings focused fields into view; never reposition the viewport with innerHeight.
205
+ - Modal `Sheet`/overlay `Sidebar` owns focus trapping, Escape, focus restoration and background scroll locking. Do not add a second manual body lock. An expanded Sidebar inside a Sheet stays bounded and owns the portal's safe-area padding once.
206
+ - Automated Chromium/WebKit evidence covers geometry, document/pane scroll owners, resize, focus and overlays. Real iPhone Safari toolbar collapse, notch behavior during toolbar transitions, and software keyboard reachability require a physical-device check; desktop WebKit is not that proof.
package/ai/USAGE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Basalt AI & Machine Usage Guide
2
2
 
3
- This document describes how AI code assistants, automated agents, and developers can consume `@nocoo/basalt` (v2.1.8).
3
+ This document describes how AI code assistants, automated agents, and developers can consume `@nocoo/basalt` (v2.2.0).
4
4
 
5
5
  ---
6
6
 
@@ -94,6 +94,6 @@ export function App() {
94
94
 
95
95
  ## 6. Application recipes and palette preferences
96
96
 
97
- Read [RECIPES.md](RECIPES.md) for complete AppFrame, Login, and Resources modules. Each module is compiled and exercised from the installed tarball in standalone, Tailwind, and Next.js consumers. These recipes keep authentication, routing, data and network requests in the application.
97
+ Read [RECIPES.md](RECIPES.md) for complete AppFrame, Login, Resources, and MobileLayout modules. Each module is compiled and exercised from the installed tarball in standalone, Tailwind, and Next.js consumers. These recipes keep authentication, routing, data and network requests in the application.
98
98
 
99
99
  Read [INTEGRATION.md#accent-provider](INTEGRATION.md#accent-provider) for the twelve control accents, optional `paletteOverrides`, and the fixed five-color chart cycle matching the classic candy swatches with its existing gray retained. Check [COMPATIBILITY.md](COMPATIBILITY.md) before migrating old color indices or stored IDs. The catalog at https://basaltui.com/palette provides an application-owned editor with localStorage persistence.
package/ai/registry.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "packageName": "@nocoo/basalt",
3
- "packageVersion": "2.1.8",
3
+ "packageVersion": "2.2.0",
4
4
  "totalModules": 122,
5
5
  "totalSymbols": 741,
6
6
  "totalValues": 395,
@@ -7070,7 +7070,7 @@
7070
7070
  "importPath": "@nocoo/basalt/components/app-header",
7071
7071
  "subpath": "./components/app-header",
7072
7072
  "sourceFile": "packages/basalt/src/components/app-header.tsx",
7073
- "sourceHash": "80acd367d8bdc9bf",
7073
+ "sourceHash": "e03e115cf4b8f4a1",
7074
7074
  "rootAvailable": false,
7075
7075
  "maturity": "ready",
7076
7076
  "kind": "framework-chrome",
@@ -7096,7 +7096,7 @@
7096
7096
  "importPath": "@nocoo/basalt/components/app-shell",
7097
7097
  "subpath": "./components/app-shell",
7098
7098
  "sourceFile": "packages/basalt/src/components/app-shell.tsx",
7099
- "sourceHash": "f581b2af0175670b",
7099
+ "sourceHash": "360ded256b2b5947",
7100
7100
  "rootAvailable": false,
7101
7101
  "maturity": "ready",
7102
7102
  "kind": "framework-chrome",
@@ -10360,7 +10360,7 @@
10360
10360
  "importPath": "@nocoo/basalt/components/confirm-dialog",
10361
10361
  "subpath": "./components/confirm-dialog",
10362
10362
  "sourceFile": "packages/basalt/src/components/confirm-dialog.tsx",
10363
- "sourceHash": "b184b69c8d5ee916",
10363
+ "sourceHash": "cafdd27c6800d3cd",
10364
10364
  "rootAvailable": true,
10365
10365
  "maturity": "ready",
10366
10366
  "kind": "catalog-component",
@@ -10443,6 +10443,12 @@
10443
10443
  "required": true,
10444
10444
  "description": "Called when the dialog requests to open or close."
10445
10445
  },
10446
+ {
10447
+ "name": "onCloseAutoFocus",
10448
+ "type": "(event: Event) => void",
10449
+ "required": false,
10450
+ "description": "Runs after the close focus trap releases. Prevent default to focus a replacement control."
10451
+ },
10446
10452
  {
10447
10453
  "name": "onConfirm",
10448
10454
  "type": "() => void | Promise<void>",
@@ -10551,6 +10557,12 @@
10551
10557
  "required": true,
10552
10558
  "description": "Called when the dialog requests to open or close."
10553
10559
  },
10560
+ {
10561
+ "name": "onCloseAutoFocus",
10562
+ "type": "(event: Event) => void",
10563
+ "required": false,
10564
+ "description": "Runs after the close focus trap releases. Prevent default to focus a replacement control."
10565
+ },
10554
10566
  {
10555
10567
  "name": "onConfirm",
10556
10568
  "type": "() => void | Promise<void>",
@@ -20358,7 +20370,7 @@
20358
20370
  "importPath": "@nocoo/basalt/components/responsive-master-detail",
20359
20371
  "subpath": "./components/responsive-master-detail",
20360
20372
  "sourceFile": "packages/basalt/src/components/responsive-master-detail.tsx",
20361
- "sourceHash": "c7e06934d2c2e706",
20373
+ "sourceHash": "43d5629efcdfbbbf",
20362
20374
  "rootAvailable": false,
20363
20375
  "maturity": "ready",
20364
20376
  "kind": "catalog-component",
@@ -21476,7 +21488,7 @@
21476
21488
  "importPath": "@nocoo/basalt/components/sheet",
21477
21489
  "subpath": "./components/sheet",
21478
21490
  "sourceFile": "packages/basalt/src/components/sheet.tsx",
21479
- "sourceHash": "1fd48fe8aa7559fa",
21491
+ "sourceHash": "49cf6f015335f773",
21480
21492
  "rootAvailable": true,
21481
21493
  "maturity": "ready",
21482
21494
  "kind": "catalog-component",
@@ -21940,7 +21952,7 @@
21940
21952
  "importPath": "@nocoo/basalt/components/sidebar",
21941
21953
  "subpath": "./components/sidebar",
21942
21954
  "sourceFile": "packages/basalt/src/components/sidebar.tsx",
21943
- "sourceHash": "5ee61278f01f173c",
21955
+ "sourceHash": "89fb8df61f17524a",
21944
21956
  "rootAvailable": true,
21945
21957
  "maturity": "ready",
21946
21958
  "kind": "catalog-component",
@@ -22366,7 +22378,15 @@
22366
22378
  },
22367
22379
  {
22368
22380
  "name": "ContentIsland",
22369
- "props": []
22381
+ "props": [
22382
+ {
22383
+ "name": "mobileSurface",
22384
+ "type": "\"edge-to-edge\" | \"inset\"",
22385
+ "required": false,
22386
+ "default": "\"inset\"",
22387
+ "description": "Mobile surface treatment; desktop remains an inset L1 island."
22388
+ }
22389
+ ]
22370
22390
  },
22371
22391
  {
22372
22392
  "name": "useSidebar()",
@@ -22633,7 +22653,15 @@
22633
22653
  },
22634
22654
  {
22635
22655
  "name": "ContentIsland",
22636
- "props": []
22656
+ "props": [
22657
+ {
22658
+ "name": "mobileSurface",
22659
+ "type": "\"edge-to-edge\" | \"inset\"",
22660
+ "required": false,
22661
+ "default": "\"inset\"",
22662
+ "description": "Mobile surface treatment; desktop remains an inset L1 island."
22663
+ }
22664
+ ]
22637
22665
  },
22638
22666
  {
22639
22667
  "name": "useSidebar()",
@@ -31228,7 +31256,7 @@
31228
31256
  "exportName": "ConfirmDialog",
31229
31257
  "importPath": "@nocoo/basalt/components/confirm-dialog",
31230
31258
  "sourceFile": "packages/basalt/src/components/confirm-dialog.tsx",
31231
- "sourceHash": "b184b69c8d5ee916",
31259
+ "sourceHash": "cafdd27c6800d3cd",
31232
31260
  "rootAvailable": true,
31233
31261
  "maturity": "ready",
31234
31262
  "packageDoc": "ai/registry.json#confirm-dialog",
@@ -31248,6 +31276,12 @@
31248
31276
  "required": true,
31249
31277
  "description": "Called when the dialog requests to open or close."
31250
31278
  },
31279
+ {
31280
+ "name": "onCloseAutoFocus",
31281
+ "type": "(event: Event) => void",
31282
+ "required": false,
31283
+ "description": "Runs after the close focus trap releases. Prevent default to focus a replacement control."
31284
+ },
31251
31285
  {
31252
31286
  "name": "onConfirm",
31253
31287
  "type": "() => void | Promise<void>",
@@ -32374,7 +32408,7 @@
32374
32408
  "exportName": "Sheet",
32375
32409
  "importPath": "@nocoo/basalt/components/sheet",
32376
32410
  "sourceFile": "packages/basalt/src/components/sheet.tsx",
32377
- "sourceHash": "1fd48fe8aa7559fa",
32411
+ "sourceHash": "49cf6f015335f773",
32378
32412
  "rootAvailable": true,
32379
32413
  "maturity": "ready",
32380
32414
  "packageDoc": "ai/registry.json#sheet",
@@ -33904,7 +33938,7 @@
33904
33938
  "exportName": "Sidebar",
33905
33939
  "importPath": "@nocoo/basalt/components/sidebar",
33906
33940
  "sourceFile": "packages/basalt/src/components/sidebar.tsx",
33907
- "sourceHash": "5ee61278f01f173c",
33941
+ "sourceHash": "89fb8df61f17524a",
33908
33942
  "rootAvailable": true,
33909
33943
  "maturity": "ready",
33910
33944
  "packageDoc": "ai/registry.json#sidebar",
@@ -34099,7 +34133,15 @@
34099
34133
  },
34100
34134
  {
34101
34135
  "name": "ContentIsland",
34102
- "props": []
34136
+ "props": [
34137
+ {
34138
+ "name": "mobileSurface",
34139
+ "type": "\"edge-to-edge\" | \"inset\"",
34140
+ "required": false,
34141
+ "default": "\"inset\"",
34142
+ "description": "Mobile surface treatment; desktop remains an inset L1 island."
34143
+ }
34144
+ ]
34103
34145
  },
34104
34146
  {
34105
34147
  "name": "useSidebar()",
@@ -35821,7 +35863,7 @@
35821
35863
  "exportName": "ResponsiveMasterDetail",
35822
35864
  "importPath": "@nocoo/basalt/components/responsive-master-detail",
35823
35865
  "sourceFile": "packages/basalt/src/components/responsive-master-detail.tsx",
35824
- "sourceHash": "c7e06934d2c2e706",
35866
+ "sourceHash": "43d5629efcdfbbbf",
35825
35867
  "rootAvailable": false,
35826
35868
  "maturity": "ready",
35827
35869
  "packageDoc": "ai/registry.json#responsive-master-detail",
@@ -1 +1 @@
1
- {"version":3,"file":"brand-mark.js","names":[],"sources":["../../src/assets/brand-mark.ts"],"sourcesContent":["export const basaltMarkPng =\n\t\"data:image/png;base64,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\";\n"],"mappings":";;AAAA,IAAa,IACZ"}
1
+ {"version":3,"file":"brand-mark.js","names":["basaltMarkPng"],"sources":["../../src/assets/brand-mark.ts"],"sourcesContent":["export const basaltMarkPng =\n\t\"data:image/png;base64,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\";\n"],"mappings":";;AAAA,IAAaA,IACZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"area.js","names":[],"sources":["../../src/charts/area.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Area, CartesianGrid, AreaChart as RechartsArea, Tooltip, XAxis, YAxis } from \"recharts\";\nimport {\n\tANIMATION_PROPS,\n\tCHART_PLOT_MARGIN,\n\tCHART_PLOT_MARGIN_BARE,\n\tCHART_TYPE,\n\tcartesianAxisProps,\n\tchartTooltipProps,\n\tGRID_PROPS,\n\tseriesColor,\n} from \"./config\";\nimport { ChartShell } from \"./frame\";\nimport { ChartLegend } from \"./legend\";\nimport type {\n\tLineChartAxisDomain,\n\tLineChartLegendRenderer,\n\tLineChartNumericKeys,\n\tLineChartTooltipRenderer,\n} from \"./line\";\nimport {\n\ttype ChartSeriesDescriptor,\n\tresolveChartSeries,\n\ttype XYPoint,\n\txyFallbackKeys,\n} from \"./series\";\n\nexport type AreaChartProps<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n> = {\n\t/**\n\t * Dataset array where each record requires an `x` category or time coordinate.\n\t * Any remaining fields with numeric, nullable, or optional number values are inferred as valid series keys.\n\t */\n\tdata: TData[];\n\t/**\n\t * Series descriptors identifying which numeric keys to plot.\n\t * Inferred strictly from numeric keys of `TData` (rejects non-numeric fields, `x`, and typos).\n\t */\n\tseries?: Array<ChartSeriesDescriptor<NoInfer<K>>>;\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowAxes?: boolean;\n\tshowLegend?: boolean;\n\tstacked?: boolean;\n\t/**\n\t * Stacking offset algorithm (e.g. \"expand\" for 100% normalized percentage area stacks).\n\t */\n\tstackOffset?: \"none\" | \"expand\" | \"wiggle\" | \"silhouette\";\n\t/**\n\t * Value formatter for Y-axis tick values and fallback tooltip values.\n\t */\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Formatter for X-axis category or time tick labels.\n\t */\n\txValueFormatter?: (value: string | number) => string;\n\t/**\n\t * Custom numerical or keyword bounds for the Y-axis.\n\t */\n\tyDomain?: LineChartAxisDomain;\n\t/**\n\t * Custom legend slot or render function receiving resolved series descriptors.\n\t */\n\tlegend?: ReactNode | LineChartLegendRenderer<K>;\n\t/**\n\t * Custom tooltip content renderer receiving Recharts payload, active status, and coordinate label.\n\t */\n\tcustomTooltip?: LineChartTooltipRenderer;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function AreaChart<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n>({\n\tdata,\n\tseries,\n\tariaLabel = \"Area chart\",\n\tclassName,\n\tshowAxes = false,\n\tshowLegend = false,\n\tstacked = false,\n\tstackOffset,\n\tvalueFormatter,\n\txValueFormatter,\n\tyDomain,\n\tlegend,\n\tcustomTooltip,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer,\n}: AreaChartProps<TData, K>) {\n\tconst areas = resolveChartSeries(\n\t\tseries,\n\t\txyFallbackKeys(data as unknown as Array<{ y2?: number; y3?: number }>) as K[],\n\t);\n\tconst stackId = stacked || stackOffset ? \"stack\" : undefined;\n\tconst resolvedLegend =\n\t\tlegend !== undefined ? (\n\t\t\ttypeof legend === \"function\" ? (\n\t\t\t\tlegend({ items: areas })\n\t\t\t) : (\n\t\t\t\tlegend\n\t\t\t)\n\t\t) : showLegend ? (\n\t\t\t<ChartLegend items={areas} shape=\"area\" />\n\t\t) : undefined;\n\n\treturn (\n\t\t<ChartShell\n\t\t\tariaLabel={ariaLabel}\n\t\t\tclassName={className}\n\t\t\tlegend={resolvedLegend}\n\t\t\tsummary={summary}\n\t\t\tdataAlternative={dataAlternative}\n\t\t\taccessibilityLayer={accessibilityLayer}\n\t\t>\n\t\t\t<RechartsArea\n\t\t\t\tdata={data}\n\t\t\t\tmargin={showAxes ? CHART_PLOT_MARGIN : CHART_PLOT_MARGIN_BARE}\n\t\t\t\tstackOffset={stackOffset}\n\t\t\t>\n\t\t\t\t{showAxes ? <CartesianGrid {...GRID_PROPS} /> : null}\n\t\t\t\t<XAxis dataKey=\"x\" {...cartesianAxisProps(!showAxes)} tickFormatter={xValueFormatter} />\n\t\t\t\t<YAxis\n\t\t\t\t\t{...cartesianAxisProps(!showAxes)}\n\t\t\t\t\ttickFormatter={valueFormatter}\n\t\t\t\t\t{...(yDomain ? { domain: yDomain as [number, number] } : {})}\n\t\t\t\t/>\n\t\t\t\t<Tooltip\n\t\t\t\t\t{...chartTooltipProps({\n\t\t\t\t\t\tformatter: valueFormatter,\n\t\t\t\t\t\tcursor: \"line\",\n\t\t\t\t\t\tcustomTooltip,\n\t\t\t\t\t})}\n\t\t\t\t/>\n\t\t\t\t{areas.map((item, index) => {\n\t\t\t\t\tconst fill = seriesColor(item, index);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Area\n\t\t\t\t\t\t\tkey={item.key}\n\t\t\t\t\t\t\tdataKey={item.key}\n\t\t\t\t\t\t\tname={item.label ?? item.key}\n\t\t\t\t\t\t\tstackId={stackId}\n\t\t\t\t\t\t\tstroke={fill}\n\t\t\t\t\t\t\tstrokeWidth={CHART_TYPE.strokeWidth}\n\t\t\t\t\t\t\tfill={fill}\n\t\t\t\t\t\t\tfillOpacity={CHART_TYPE.areaFillAlpha}\n\t\t\t\t\t\t\t{...ANIMATION_PROPS}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</RechartsArea>\n\t\t</ChartShell>\n\t);\n}\n"],"mappings":";;;;;;;;AAwFA,SAAgB,EAGd,EACD,SACA,WACA,eAAY,cACZ,cACA,cAAW,IACX,gBAAa,IACb,aAAU,IACV,gBACA,mBACA,oBACA,YACA,WACA,kBACA,YACA,oBACA,yBAC4B;CAC5B,IAAM,IAAQ,EACb,GACA,EAAe,CAAsD,CACtE,GACM,IAAU,KAAW,IAAc,UAAU,KAAA,GAC7C,IACL,MAAW,KAAA,IAMP,IACH,kBAAC,GAAD;EAAa,OAAO;EAAO,OAAM;CAAQ,CAAA,IACtC,KAAA,IAPH,OAAO,KAAW,aACjB,EAAO,EAAE,OAAO,EAAM,CAAC,IAEvB;CAMH,OACC,kBAAC,GAAD;EACY;EACA;EACX,QAAQ;EACC;EACQ;EACG;EAEpB,UAAA,kBAAC,GAAD;GACO;GACN,QAAQ,IAAW,IAAoB;GAC1B;GAHd,UAAA;IAKE,IAAW,kBAAC,GAAD,EAAe,GAAI,EAAa,CAAA,IAAI;IAChD,kBAAC,GAAD;KAAO,SAAQ;KAAI,GAAI,EAAmB,CAAC,CAAQ;KAAG,eAAe;IAAkB,CAAA;IACvF,kBAAC,GAAD;KACC,GAAI,EAAmB,CAAC,CAAQ;KAChC,eAAe;KACf,GAAK,IAAU,EAAE,QAAQ,EAA4B,IAAI,CAAC;IAC1D,CAAA;IACD,kBAAC,GAAD,EACC,GAAI,EAAkB;KACrB,WAAW;KACX,QAAQ;KACR;IACD,CAAC,EACD,CAAA;IACA,EAAM,KAAK,GAAM,MAAU;KAC3B,IAAM,IAAO,EAAY,GAAM,CAAK;KACpC,OACC,kBAAC,GAAD;MAEC,SAAS,EAAK;MACd,MAAM,EAAK,SAAS,EAAK;MAChB;MACT,QAAQ;MACR,aAAa,EAAW;MAClB;MACN,aAAa,EAAW;MACxB,GAAI;KACJ,GATK,EAAK,GASV;IAEH,CAAC;GACY;;CACH,CAAA;AAEd"}
1
+ {"version":3,"file":"area.js","names":["RechartsArea","AreaChart$1","AreaChart","areas","resolveChartSeries","series","xyFallbackKeys","data","stackId","stacked","stackOffset","resolvedLegend","legend","showLegend","ChartLegend","ChartShell","showAxes","CHART_PLOT_MARGIN","CHART_PLOT_MARGIN_BARE","CartesianGrid","GRID_PROPS","XAxis","cartesianAxisProps","xValueFormatter","YAxis","valueFormatter","yDomain","Tooltip","chartTooltipProps","fill","seriesColor","item","index","Area","CHART_TYPE","ANIMATION_PROPS"],"sources":["../../src/charts/area.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Area, CartesianGrid, AreaChart as RechartsArea, Tooltip, XAxis, YAxis } from \"recharts\";\nimport {\n\tANIMATION_PROPS,\n\tCHART_PLOT_MARGIN,\n\tCHART_PLOT_MARGIN_BARE,\n\tCHART_TYPE,\n\tcartesianAxisProps,\n\tchartTooltipProps,\n\tGRID_PROPS,\n\tseriesColor,\n} from \"./config\";\nimport { ChartShell } from \"./frame\";\nimport { ChartLegend } from \"./legend\";\nimport type {\n\tLineChartAxisDomain,\n\tLineChartLegendRenderer,\n\tLineChartNumericKeys,\n\tLineChartTooltipRenderer,\n} from \"./line\";\nimport {\n\ttype ChartSeriesDescriptor,\n\tresolveChartSeries,\n\ttype XYPoint,\n\txyFallbackKeys,\n} from \"./series\";\n\nexport type AreaChartProps<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n> = {\n\t/**\n\t * Dataset array where each record requires an `x` category or time coordinate.\n\t * Any remaining fields with numeric, nullable, or optional number values are inferred as valid series keys.\n\t */\n\tdata: TData[];\n\t/**\n\t * Series descriptors identifying which numeric keys to plot.\n\t * Inferred strictly from numeric keys of `TData` (rejects non-numeric fields, `x`, and typos).\n\t */\n\tseries?: Array<ChartSeriesDescriptor<NoInfer<K>>>;\n\tariaLabel?: string;\n\tclassName?: string;\n\tshowAxes?: boolean;\n\tshowLegend?: boolean;\n\tstacked?: boolean;\n\t/**\n\t * Stacking offset algorithm (e.g. \"expand\" for 100% normalized percentage area stacks).\n\t */\n\tstackOffset?: \"none\" | \"expand\" | \"wiggle\" | \"silhouette\";\n\t/**\n\t * Value formatter for Y-axis tick values and fallback tooltip values.\n\t */\n\tvalueFormatter?: (value: number) => string;\n\t/**\n\t * Formatter for X-axis category or time tick labels.\n\t */\n\txValueFormatter?: (value: string | number) => string;\n\t/**\n\t * Custom numerical or keyword bounds for the Y-axis.\n\t */\n\tyDomain?: LineChartAxisDomain;\n\t/**\n\t * Custom legend slot or render function receiving resolved series descriptors.\n\t */\n\tlegend?: ReactNode | LineChartLegendRenderer<K>;\n\t/**\n\t * Custom tooltip content renderer receiving Recharts payload, active status, and coordinate label.\n\t */\n\tcustomTooltip?: LineChartTooltipRenderer;\n\t/**\n\t * Textual summary describing key insights, highs, lows, and keyboard exploration instructions.\n\t * Associated with the chart via useId and aria-describedby.\n\t */\n\tsummary?: ReactNode;\n\t/**\n\t * Accessible tabular or structured data alternative rendered outside the plot area.\n\t */\n\tdataAlternative?: ReactNode;\n\t/**\n\t * Whether the interactive accessibility layer is enabled on the underlying Recharts graphic.\n\t * Enables keyboard exploration with Tab and arrow keys where supported by the underlying chart type.\n\t * Non-interactive compact or decorative charts without tooltip navigation should provide summary or dataAlternative.\n\t * @default true\n\t */\n\taccessibilityLayer?: boolean;\n};\n\nexport function AreaChart<\n\tTData extends { x: string | number } = XYPoint,\n\tK extends LineChartNumericKeys<TData> & string = LineChartNumericKeys<TData> & string,\n>({\n\tdata,\n\tseries,\n\tariaLabel = \"Area chart\",\n\tclassName,\n\tshowAxes = false,\n\tshowLegend = false,\n\tstacked = false,\n\tstackOffset,\n\tvalueFormatter,\n\txValueFormatter,\n\tyDomain,\n\tlegend,\n\tcustomTooltip,\n\tsummary,\n\tdataAlternative,\n\taccessibilityLayer,\n}: AreaChartProps<TData, K>) {\n\tconst areas = resolveChartSeries(\n\t\tseries,\n\t\txyFallbackKeys(data as unknown as Array<{ y2?: number; y3?: number }>) as K[],\n\t);\n\tconst stackId = stacked || stackOffset ? \"stack\" : undefined;\n\tconst resolvedLegend =\n\t\tlegend !== undefined ? (\n\t\t\ttypeof legend === \"function\" ? (\n\t\t\t\tlegend({ items: areas })\n\t\t\t) : (\n\t\t\t\tlegend\n\t\t\t)\n\t\t) : showLegend ? (\n\t\t\t<ChartLegend items={areas} shape=\"area\" />\n\t\t) : undefined;\n\n\treturn (\n\t\t<ChartShell\n\t\t\tariaLabel={ariaLabel}\n\t\t\tclassName={className}\n\t\t\tlegend={resolvedLegend}\n\t\t\tsummary={summary}\n\t\t\tdataAlternative={dataAlternative}\n\t\t\taccessibilityLayer={accessibilityLayer}\n\t\t>\n\t\t\t<RechartsArea\n\t\t\t\tdata={data}\n\t\t\t\tmargin={showAxes ? CHART_PLOT_MARGIN : CHART_PLOT_MARGIN_BARE}\n\t\t\t\tstackOffset={stackOffset}\n\t\t\t>\n\t\t\t\t{showAxes ? <CartesianGrid {...GRID_PROPS} /> : null}\n\t\t\t\t<XAxis dataKey=\"x\" {...cartesianAxisProps(!showAxes)} tickFormatter={xValueFormatter} />\n\t\t\t\t<YAxis\n\t\t\t\t\t{...cartesianAxisProps(!showAxes)}\n\t\t\t\t\ttickFormatter={valueFormatter}\n\t\t\t\t\t{...(yDomain ? { domain: yDomain as [number, number] } : {})}\n\t\t\t\t/>\n\t\t\t\t<Tooltip\n\t\t\t\t\t{...chartTooltipProps({\n\t\t\t\t\t\tformatter: valueFormatter,\n\t\t\t\t\t\tcursor: \"line\",\n\t\t\t\t\t\tcustomTooltip,\n\t\t\t\t\t})}\n\t\t\t\t/>\n\t\t\t\t{areas.map((item, index) => {\n\t\t\t\t\tconst fill = seriesColor(item, index);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Area\n\t\t\t\t\t\t\tkey={item.key}\n\t\t\t\t\t\t\tdataKey={item.key}\n\t\t\t\t\t\t\tname={item.label ?? item.key}\n\t\t\t\t\t\t\tstackId={stackId}\n\t\t\t\t\t\t\tstroke={fill}\n\t\t\t\t\t\t\tstrokeWidth={CHART_TYPE.strokeWidth}\n\t\t\t\t\t\t\tfill={fill}\n\t\t\t\t\t\t\tfillOpacity={CHART_TYPE.areaFillAlpha}\n\t\t\t\t\t\t\t{...ANIMATION_PROPS}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</RechartsArea>\n\t\t</ChartShell>\n\t);\n}\n"],"mappings":";;;;;;;;AAwFA,SAAgBE,EAGd,EACD,SACA,WACA,eAAY,cACZ,cACA,cAAW,IACX,gBAAa,IACb,aAAU,IACV,gBACA,mBACA,oBACA,YACA,WACA,kBACA,YACA,oBACA,yBAC4B;CAC5B,IAAMC,IAAQC,EACbC,GACAC,EAAeC,CAAsD,CACtE,GACMC,IAAUC,KAAWC,IAAc,UAAU,KAAA,GAC7CC,IACLC,MAAW,KAAA,IAMPC,IACH,kBAACC,GAAD;EAAa,OAAOX;EAAO,OAAM;CAAQ,CAAA,IACtC,KAAA,IAPH,OAAOS,KAAW,aACjBA,EAAO,EAAE,OAAOT,EAAM,CAAC,IAEvBS;CAMH,OACC,kBAACG,GAAD;EACY;EACA;EACX,QAAQJ;EACC;EACQ;EACG;EAEpB,UAAA,kBAACX,GAAD;GACO;GACN,QAAQgB,IAAWC,IAAoBC;GAC1B;GAHd,UAAA;IAKEF,IAAW,kBAACG,GAAD,EAAe,GAAIC,EAAa,CAAA,IAAI;IAChD,kBAACC,GAAD;KAAO,SAAQ;KAAI,GAAIC,EAAmB,CAACN,CAAQ;KAAG,eAAeO;IAAkB,CAAA;IACvF,kBAACC,GAAD;KACC,GAAIF,EAAmB,CAACN,CAAQ;KAChC,eAAeS;KACf,GAAKC,IAAU,EAAE,QAAQA,EAA4B,IAAI,CAAC;IAC1D,CAAA;IACD,kBAACC,GAAD,EACC,GAAIC,EAAkB;KACrB,WAAWH;KACX,QAAQ;KACR;IACD,CAAC,EACD,CAAA;IACAtB,EAAM,KAAK,GAAM,MAAU;KAC3B,IAAM0B,IAAOC,EAAYC,GAAMC,CAAK;KACpC,OACC,kBAACC,GAAD;MAEC,SAASF,EAAK;MACd,MAAMA,EAAK,SAASA,EAAK;MAChB;MACT,QAAQF;MACR,aAAaK,EAAW;MAClB;MACN,aAAaA,EAAW;MACxB,GAAIC;KACJ,GATKJ,EAAK,GASV;IAEH,CAAC;GACY;;CACH,CAAA;AAEd"}