@oxy.so/bloom 5.3.0 → 5.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/adoption-matrix.mdx +7 -7
- package/docs/ai-chat.mdx +4 -0
- package/docs/app-shell.mdx +17 -0
- package/docs/mail-list.mdx +22 -22
- package/docs/settings-modal.mdx +1 -1
- package/lib/commonjs/ai-chat/AiChatShell.js +230 -206
- package/lib/commonjs/ai-chat/AiChatShell.js.map +1 -1
- package/lib/commonjs/app-shell/AppShellSplit.js +48 -22
- package/lib/commonjs/app-shell/AppShellSplit.js.map +1 -1
- package/lib/commonjs/app-shell/index.js +7 -0
- package/lib/commonjs/app-shell/index.js.map +1 -1
- package/lib/commonjs/app-shell/index.web.js +7 -0
- package/lib/commonjs/app-shell/index.web.js.map +1 -1
- package/lib/commonjs/icons/remix/RiFormatClear.js +12 -0
- package/lib/commonjs/icons/remix/RiFormatClear.js.map +1 -0
- package/lib/commonjs/icons/remix/RiListOrdered.js +12 -0
- package/lib/commonjs/icons/remix/RiListOrdered.js.map +1 -0
- package/lib/commonjs/icons/remix/RiStrikethrough.js +12 -0
- package/lib/commonjs/icons/remix/RiStrikethrough.js.map +1 -0
- package/lib/commonjs/icons/remix/RiUnderline.js +12 -0
- package/lib/commonjs/icons/remix/RiUnderline.js.map +1 -0
- package/lib/commonjs/icons/remix/index.js +28 -0
- package/lib/commonjs/icons/remix/index.js.map +1 -1
- package/lib/commonjs/mail-list/MailList.js +2 -0
- package/lib/commonjs/mail-list/MailList.js.map +1 -1
- package/lib/commonjs/mail-list/MailRow.js +26 -29
- package/lib/commonjs/mail-list/MailRow.js.map +1 -1
- package/lib/commonjs/mail-list/shared.js +26 -10
- package/lib/commonjs/mail-list/shared.js.map +1 -1
- package/lib/commonjs/provider/BloomProvider.js +13 -10
- package/lib/commonjs/provider/BloomProvider.js.map +1 -1
- package/lib/commonjs/settings-modal/SettingsModal.js +12 -18
- package/lib/commonjs/settings-modal/SettingsModal.js.map +1 -1
- package/lib/module/ai-chat/AiChatShell.js +231 -207
- package/lib/module/ai-chat/AiChatShell.js.map +1 -1
- package/lib/module/app-shell/AppShellSplit.js +49 -21
- package/lib/module/app-shell/AppShellSplit.js.map +1 -1
- package/lib/module/app-shell/index.js +1 -0
- package/lib/module/app-shell/index.js.map +1 -1
- package/lib/module/app-shell/index.web.js +1 -0
- package/lib/module/app-shell/index.web.js.map +1 -1
- package/lib/module/icons/remix/RiFormatClear.js +9 -0
- package/lib/module/icons/remix/RiFormatClear.js.map +1 -0
- package/lib/module/icons/remix/RiListOrdered.js +9 -0
- package/lib/module/icons/remix/RiListOrdered.js.map +1 -0
- package/lib/module/icons/remix/RiStrikethrough.js +9 -0
- package/lib/module/icons/remix/RiStrikethrough.js.map +1 -0
- package/lib/module/icons/remix/RiUnderline.js +9 -0
- package/lib/module/icons/remix/RiUnderline.js.map +1 -0
- package/lib/module/icons/remix/index.js +4 -0
- package/lib/module/icons/remix/index.js.map +1 -1
- package/lib/module/mail-list/MailList.js +2 -0
- package/lib/module/mail-list/MailList.js.map +1 -1
- package/lib/module/mail-list/MailRow.js +26 -29
- package/lib/module/mail-list/MailRow.js.map +1 -1
- package/lib/module/mail-list/shared.js +26 -10
- package/lib/module/mail-list/shared.js.map +1 -1
- package/lib/module/provider/BloomProvider.js +13 -10
- package/lib/module/provider/BloomProvider.js.map +1 -1
- package/lib/module/settings-modal/SettingsModal.js +12 -18
- package/lib/module/settings-modal/SettingsModal.js.map +1 -1
- package/lib/typescript/commonjs/ai-chat/AiChatShell.d.ts +1 -1
- package/lib/typescript/commonjs/ai-chat/AiChatShell.d.ts.map +1 -1
- package/lib/typescript/commonjs/ai-chat/types.d.ts +7 -0
- package/lib/typescript/commonjs/ai-chat/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/app-shell/AppShellSplit.d.ts +1 -20
- package/lib/typescript/commonjs/app-shell/AppShellSplit.d.ts.map +1 -1
- package/lib/typescript/commonjs/app-shell/index.d.ts +2 -0
- package/lib/typescript/commonjs/app-shell/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/app-shell/index.web.d.ts +2 -0
- package/lib/typescript/commonjs/app-shell/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/app-shell/types.d.ts +28 -0
- package/lib/typescript/commonjs/app-shell/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/icons/remix/RiFormatClear.d.ts +8 -0
- package/lib/typescript/commonjs/icons/remix/RiFormatClear.d.ts.map +1 -0
- package/lib/typescript/commonjs/icons/remix/RiListOrdered.d.ts +8 -0
- package/lib/typescript/commonjs/icons/remix/RiListOrdered.d.ts.map +1 -0
- package/lib/typescript/commonjs/icons/remix/RiStrikethrough.d.ts +8 -0
- package/lib/typescript/commonjs/icons/remix/RiStrikethrough.d.ts.map +1 -0
- package/lib/typescript/commonjs/icons/remix/RiUnderline.d.ts +8 -0
- package/lib/typescript/commonjs/icons/remix/RiUnderline.d.ts.map +1 -0
- package/lib/typescript/commonjs/icons/remix/index.d.ts +4 -0
- package/lib/typescript/commonjs/icons/remix/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/mail-list/MailList.d.ts +1 -1
- package/lib/typescript/commonjs/mail-list/MailList.d.ts.map +1 -1
- package/lib/typescript/commonjs/mail-list/MailRow.d.ts +5 -20
- package/lib/typescript/commonjs/mail-list/MailRow.d.ts.map +1 -1
- package/lib/typescript/commonjs/mail-list/shared.d.ts +2 -9
- package/lib/typescript/commonjs/mail-list/shared.d.ts.map +1 -1
- package/lib/typescript/commonjs/mail-list/types.d.ts +8 -6
- package/lib/typescript/commonjs/mail-list/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/provider/BloomProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/settings-modal/SettingsModal.d.ts.map +1 -1
- package/lib/typescript/module/ai-chat/AiChatShell.d.ts +1 -1
- package/lib/typescript/module/ai-chat/AiChatShell.d.ts.map +1 -1
- package/lib/typescript/module/ai-chat/types.d.ts +7 -0
- package/lib/typescript/module/ai-chat/types.d.ts.map +1 -1
- package/lib/typescript/module/app-shell/AppShellSplit.d.ts +1 -20
- package/lib/typescript/module/app-shell/AppShellSplit.d.ts.map +1 -1
- package/lib/typescript/module/app-shell/index.d.ts +2 -0
- package/lib/typescript/module/app-shell/index.d.ts.map +1 -1
- package/lib/typescript/module/app-shell/index.web.d.ts +2 -0
- package/lib/typescript/module/app-shell/index.web.d.ts.map +1 -1
- package/lib/typescript/module/app-shell/types.d.ts +28 -0
- package/lib/typescript/module/app-shell/types.d.ts.map +1 -1
- package/lib/typescript/module/icons/remix/RiFormatClear.d.ts +8 -0
- package/lib/typescript/module/icons/remix/RiFormatClear.d.ts.map +1 -0
- package/lib/typescript/module/icons/remix/RiListOrdered.d.ts +8 -0
- package/lib/typescript/module/icons/remix/RiListOrdered.d.ts.map +1 -0
- package/lib/typescript/module/icons/remix/RiStrikethrough.d.ts +8 -0
- package/lib/typescript/module/icons/remix/RiStrikethrough.d.ts.map +1 -0
- package/lib/typescript/module/icons/remix/RiUnderline.d.ts +8 -0
- package/lib/typescript/module/icons/remix/RiUnderline.d.ts.map +1 -0
- package/lib/typescript/module/icons/remix/index.d.ts +4 -0
- package/lib/typescript/module/icons/remix/index.d.ts.map +1 -1
- package/lib/typescript/module/mail-list/MailList.d.ts +1 -1
- package/lib/typescript/module/mail-list/MailList.d.ts.map +1 -1
- package/lib/typescript/module/mail-list/MailRow.d.ts +5 -20
- package/lib/typescript/module/mail-list/MailRow.d.ts.map +1 -1
- package/lib/typescript/module/mail-list/shared.d.ts +2 -9
- package/lib/typescript/module/mail-list/shared.d.ts.map +1 -1
- package/lib/typescript/module/mail-list/types.d.ts +8 -6
- package/lib/typescript/module/mail-list/types.d.ts.map +1 -1
- package/lib/typescript/module/provider/BloomProvider.d.ts.map +1 -1
- package/lib/typescript/module/settings-modal/SettingsModal.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/ai-chat/AiChatShell.tsx +23 -4
- package/src/ai-chat/types.ts +7 -0
- package/src/app-shell/AppShellSplit.tsx +37 -41
- package/src/app-shell/index.ts +3 -0
- package/src/app-shell/index.web.ts +3 -0
- package/src/app-shell/types.ts +30 -0
- package/src/icons/remix/RiFormatClear.tsx +6 -0
- package/src/icons/remix/RiListOrdered.tsx +6 -0
- package/src/icons/remix/RiStrikethrough.tsx +6 -0
- package/src/icons/remix/RiUnderline.tsx +6 -0
- package/src/icons/remix/index.ts +4 -0
- package/src/mail-list/MailList.tsx +2 -0
- package/src/mail-list/MailRow.tsx +24 -33
- package/src/mail-list/shared.ts +27 -10
- package/src/mail-list/types.ts +8 -6
- package/src/provider/BloomProvider.tsx +41 -36
- package/src/settings-modal/SettingsModal.tsx +12 -15
package/docs/adoption-matrix.mdx
CHANGED
|
@@ -187,7 +187,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
187
187
|
| `field` | `@oxy.so/bloom/field` + barrel | universal | `field.mdx` | yes | 10 | reads | | | |
|
|
188
188
|
| `file-upload` | `@oxy.so/bloom/file-upload` + barrel | universal | `file-upload.mdx` | yes | 4 | reads | | | |
|
|
189
189
|
| `fill` | `@oxy.so/bloom/fill` + barrel | universal | `fill.mdx` | yes | 1 | | | | |
|
|
190
|
-
| `floating` | internal | universal | — | — |
|
|
190
|
+
| `floating` | internal | universal | — | — | 18 | n/a¹ | | reads | reads |
|
|
191
191
|
| `fonts` | `@oxy.so/bloom/fonts` + barrel | web fork | `fonts.mdx` | yes | 2 | | | | |
|
|
192
192
|
| `frosted-icon-button` | `@oxy.so/bloom/frosted-icon-button` + barrel | web fork | `frosted-icon-button.mdx` | yes | 4 | | | | |
|
|
193
193
|
| `glass` | internal | universal | `glass.mdx` | — | 2 | | reads | | |
|
|
@@ -196,7 +196,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
196
196
|
| `hooks` | `@oxy.so/bloom/hooks` + barrel | universal | `hooks.mdx` | yes | 12 | | | | reads |
|
|
197
197
|
| `hover-card` | `@oxy.so/bloom/hover-card` + barrel | web fork | `hover-card.mdx` | yes | 4 | | | reads | reads |
|
|
198
198
|
| `icon-circle` | `@oxy.so/bloom/icon-circle` + barrel | universal | `icon-circle.mdx` | yes | 1 | | | | |
|
|
199
|
-
| `icons` | `@oxy.so/bloom/icons` + barrel | universal | `icons.mdx` | yes |
|
|
199
|
+
| `icons` | `@oxy.so/bloom/icons` + barrel | universal | `icons.mdx` | yes | 59 | | | | |
|
|
200
200
|
| `image-aspect-ratio-cache` | `@oxy.so/bloom/image-aspect-ratio-cache` + barrel | universal | `image-aspect-ratio-cache.mdx` | yes | 1 | | | | |
|
|
201
201
|
| `image-resolver` | `@oxy.so/bloom/image-resolver` + barrel | universal | `image-resolver.mdx` | yes | 8 | | | | |
|
|
202
202
|
| `important-alerts-card` | `@oxy.so/bloom/important-alerts-card` + barrel | universal | `important-alerts-card.mdx` | yes | 1 | | | | |
|
|
@@ -206,7 +206,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
206
206
|
| `job-board` | `@oxy.so/bloom/job-board` + barrel | universal | `job-board.mdx` | yes | 2 | n/a¹ | | | reads |
|
|
207
207
|
| `kbd` | `@oxy.so/bloom/kbd` + barrel | universal | `kbd.mdx` | yes | 1 | | | | |
|
|
208
208
|
| `label` | `@oxy.so/bloom/label` + barrel | universal | `label.mdx` | yes | 2 | | | | |
|
|
209
|
-
| `layout` | `@oxy.so/bloom/layout` + barrel | universal | `layout.mdx` | yes |
|
|
209
|
+
| `layout` | `@oxy.so/bloom/layout` + barrel | universal | `layout.mdx` | yes | 9 | | | | |
|
|
210
210
|
| `lead-score` | `@oxy.so/bloom/lead-score` + barrel | universal | `lead-score.mdx` | yes | 1 | | | | |
|
|
211
211
|
| `link-preview` | `@oxy.so/bloom/link-preview` + barrel | universal | `link-preview.mdx` | yes | 3 | | | | |
|
|
212
212
|
| `list` | `@oxy.so/bloom/list` + barrel | web fork | `list.mdx` | yes | 2 | | | | |
|
|
@@ -246,7 +246,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
246
246
|
| `order-confirmation` | `@oxy.so/bloom/order-confirmation` + barrel | universal | `order-confirmation.mdx` | yes | 1 | | | | |
|
|
247
247
|
| `order-status` | `@oxy.so/bloom/order-status` + barrel | universal | `order-status.mdx` | yes | 1 | | | | |
|
|
248
248
|
| `outline-nav` | `@oxy.so/bloom/outline-nav` + barrel | universal | `outline-nav.mdx` | yes | 2 | | | | |
|
|
249
|
-
| `overlay` | `@oxy.so/bloom/overlay` + barrel | universal | `overlay.mdx` | yes |
|
|
249
|
+
| `overlay` | `@oxy.so/bloom/overlay` + barrel | universal | `overlay.mdx` | yes | 15 | | | | |
|
|
250
250
|
| `page-header` | `@oxy.so/bloom/page-header` + barrel | universal | `page-header.mdx` | yes | 4 | | reads | | |
|
|
251
251
|
| `pagination` | `@oxy.so/bloom/pagination` + barrel | universal | `pagination.mdx` | yes | 2 | | | | |
|
|
252
252
|
| `patient-info-card` | `@oxy.so/bloom/patient-info-card` + barrel | universal | `patient-info-card.mdx` | yes | 1 | | | | |
|
|
@@ -265,7 +265,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
265
265
|
| `progressive-blur` | `@oxy.so/bloom/progressive-blur` + barrel | web fork | `progressive-blur.mdx` | yes | 1 | | | | |
|
|
266
266
|
| `proof-of-delivery` | `@oxy.so/bloom/proof-of-delivery` + barrel | universal | `proof-of-delivery.mdx` | yes | 1 | | | | reads |
|
|
267
267
|
| `property-insights` | `@oxy.so/bloom/property-insights` + barrel | universal | `property-insights.mdx` | yes | 5 | | | | reads |
|
|
268
|
-
| `provider` | `@oxy.so/bloom/provider` | universal | `provider.mdx` | yes |
|
|
268
|
+
| `provider` | `@oxy.so/bloom/provider` | universal | `provider.mdx` | yes | 3 | | | | |
|
|
269
269
|
| `questionnaire` | `@oxy.so/bloom/questionnaire` + barrel | universal | `questionnaire.mdx` | yes | 1 | **adaptation** | | | **adaptation** |
|
|
270
270
|
| `queue-panel` | `@oxy.so/bloom/queue-panel` + barrel | universal | `queue-panel.mdx` | yes | 3 | | | | **adaptation** |
|
|
271
271
|
| `radio` | `@oxy.so/bloom/radio` + barrel | universal | `radio.mdx` | yes | 3 | reads | | | |
|
|
@@ -280,7 +280,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
280
280
|
| `segmented-control` | `@oxy.so/bloom/segmented-control` + barrel | universal | `segmented-control.mdx` | yes | 4 | reads | | | |
|
|
281
281
|
| `select` | `@oxy.so/bloom/select` + barrel | web fork | `select.mdx` | yes | 9 | reads | | reads | |
|
|
282
282
|
| `settings-list` | `@oxy.so/bloom/settings-list` + barrel | universal | `settings-list.mdx` | yes | 5 | | | | |
|
|
283
|
-
| `settings-modal` | `@oxy.so/bloom/settings-modal` + barrel | universal | `settings-modal.mdx` | yes |
|
|
283
|
+
| `settings-modal` | `@oxy.so/bloom/settings-modal` + barrel | universal | `settings-modal.mdx` | yes | 10 | | | | reads |
|
|
284
284
|
| `shapes` | `@oxy.so/bloom/shapes` + barrel | universal | `shapes.mdx` | yes | 4 | | | | |
|
|
285
285
|
| `shipment-request` | `@oxy.so/bloom/shipment-request` + barrel | universal | `shipment-request.mdx` | yes | 1 | **adaptation** | | | |
|
|
286
286
|
| `sidebar` | `@oxy.so/bloom/sidebar` + barrel | universal | `sidebar.mdx` | yes | 10 | n/a¹ | | | reads |
|
|
@@ -308,7 +308,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
308
308
|
| `tenancy` | `@oxy.so/bloom/tenancy` + barrel | universal | `tenancy.mdx` | yes | 5 | | n/a¹ | | |
|
|
309
309
|
| `text-field` | `@oxy.so/bloom/text-field` + barrel | universal | `text-field.mdx` | yes | 16 | reads | reads | | |
|
|
310
310
|
| `textarea` | `@oxy.so/bloom/textarea` + barrel | universal | `textarea.mdx` | yes | 4 | reads | reads | | n/a¹ |
|
|
311
|
-
| `theme` | `@oxy.so/bloom/theme` + barrel | web fork | `theme.mdx` | yes |
|
|
311
|
+
| `theme` | `@oxy.so/bloom/theme` + barrel | web fork | `theme.mdx` | yes | 343 | | | n/a¹ | reads |
|
|
312
312
|
| `theme-toggle` | `@oxy.so/bloom/theme-toggle` + barrel | universal | `theme-toggle.mdx` | yes | 2 | n/a¹ | | | |
|
|
313
313
|
| `toast` | `@oxy.so/bloom/toast` + barrel | universal | `toast.mdx` | yes | 17 | | | | |
|
|
314
314
|
| `tooltip` | `@oxy.so/bloom/tooltip` + barrel | web fork | `tooltip.mdx` | yes | 1 | | | | |
|
package/docs/ai-chat.mdx
CHANGED
|
@@ -69,6 +69,8 @@ Give the shell a sized parent — it fills it.
|
|
|
69
69
|
- **A collapsible rail** — `sidebarCollapsed` publishes the state while the sidebar owns its width and transition. `sidebarWidth` and `collapsedSidebarWidth` are explicit column overrides only; omit them for a Bloom `Sidebar` so its FAB, insets and collapse animation determine the actual width. The shell does not clip that sidebar into a fixed 56px lane.
|
|
70
70
|
- **`background` and `surface`** — `background` is any node, drawn above the shell's own background-full and below the sidebar, workspace and drawers; it is never interactive. The workspace paints background-full too, so pass `surface={false}` with it (that drops both) or the layer is covered exactly where the chat sits. When the layer belongs to the chat rather than the page, put it on `AiChatContainer` instead, which is the nearer slot and needs no opt-out.
|
|
71
71
|
- **`scroll`** — what scrolls the page, `AppShell`'s contract. `container` (the default) fills the parent and the conversation scrolls inside the card. **`document`** (web) grows the page and lets the browser scroll it — the page's scrollbar, scroll restoration, the mobile address bar collapsing and `window.scrollTo` behave as on any page. See [Document scroll](#document-scroll). Native has no document and treats it as `container`.
|
|
72
|
+
- **Native safe area** — Opt in with `<AiChatShell safeArea>` to add all four device insets to the shell frame and drawer content. The default remains off, and web geometry is unchanged. Inner `PageHeader` components use `safeArea={false}`; `BottomBar` automatically excludes the bottom inset already supplied by the shell. Device insets remain available to portaled dialogs. Screens do not need their own safe-area padding.
|
|
73
|
+
|
|
72
74
|
- **What the shell publishes** — `useAiChatShell()` returns the shell's state to any descendant: `compact`, `navCollapsed`, `sidebarCollapsed`, `hasNav` / `hasPanel`, `documentScroll`, `openNav` / `closeNav` / `openPanel`, and **`navPresented`**.
|
|
73
75
|
|
|
74
76
|
Below `lg` a closed drawer stays **mounted** — it is translated offscreen, not removed. The shell takes it out of reach itself: while closed, the nav drawer and the panel drawer are `aria-hidden` and `pointerEvents="none"`, `inert` on web (so their controls leave the tab order too) and hidden from VoiceOver/TalkBack on native. The veil over the workspace is inside the same gate, and it is never a Tab stop — react-native-web's `Pressable` writes `tabIndex` 0 over `focusable={false}`, so the veil takes `tabIndex={-1}`. A host does not wrap `mobileSidebar` in a gate of its own; `navPresented` is there for anything else that has to know whether the nav is on screen.
|
|
@@ -81,6 +83,8 @@ Radius 24 on background-secondary: the breadcrumb header (px 16 / pt 16, share a
|
|
|
81
83
|
|
|
82
84
|
`project` is **optional**: a chat that belongs to nothing draws its own crumb alone, with no folder glyph and no empty crumb.
|
|
83
85
|
|
|
86
|
+
The container publishes its painted surface through Bloom’s surface context, so nested sheet composers and sticky controls follow the panel fill. A transparent container inherits its parent’s fill.
|
|
87
|
+
|
|
84
88
|
`background` is a layer filling the container, drawn **above its own surface and below every turn, header and composer**, clipped to the radius and never interactive — a host's wallpaper, gradient or animated field goes here rather than behind the container, and nothing has to reach into it. An opaque node needs nothing else; add `surface={false}` when the node is translucent and should show what the container is sitting on instead of background-secondary.
|
|
85
89
|
|
|
86
90
|
The thread scrolls with a thin scrollbar, px 16 / pt 16, turns 12 apart, and is **bottom-anchored**: a short exchange sits just above the composer. It follows the newest content with a smooth scroll whenever it grows — that is the default, and every prop below is off unless asked for.
|
package/docs/app-shell.mdx
CHANGED
|
@@ -648,3 +648,20 @@ through the shared edge registry; document/container content receives no duplica
|
|
|
648
648
|
`scroll="fixed"` always leaves scrolling and clearance to the child navigator or list.
|
|
649
649
|
|
|
650
650
|
ProOfferCard retains its animated complementary host and decorative artwork, with shared SurfacePaint beneath it and contextual backing published for descendant controls. Explicit background overrides remain supported.
|
|
651
|
+
|
|
652
|
+
### Split panes inside another Bloom shell
|
|
653
|
+
|
|
654
|
+
`AppShellSplitPanes` is also exported from `@oxy.so/bloom/app-shell` and the root barrel. It owns only the bounded pane layout and divider, not navigation, surfaces or a second shell context. Compose it inside `AiChatShell` + `AiChatContainer` to use that template's reveal navigation and surfaces.
|
|
655
|
+
|
|
656
|
+
```tsx
|
|
657
|
+
<AppShellSplitPanes
|
|
658
|
+
list={<MailboxList />}
|
|
659
|
+
showList={desktop}
|
|
660
|
+
detail={<Slot />}
|
|
661
|
+
paneScroll={false}
|
|
662
|
+
/>
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
The detail remains mounted while `showList` changes; hiding a pane explicitly unmounts that pane. Defaults match AppShell's split layout: list width 360 (range 280–520), info width 320, scrolling and resizing enabled. `showDetail` defaults to true; list/info visibility follows the supplied content. Set `paneScroll={false}` when routes or virtualized lists own their scrolling. The surrounding Bloom container must provide a bounded height.
|
|
666
|
+
|
|
667
|
+
Use `variant="separated"` when each pane supplies its own `AiChatContainer`. Bloom inserts 12px transparent gutters and centers the existing resize handle in the list gutter; there is no extra surface around the panels. A single visible pane has no gutter. The default `joined` variant retains hairline dividers for panes inside one shared surface.
|
package/docs/mail-list.mdx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Mail List
|
|
3
|
-
description: The inbox — one row at
|
|
3
|
+
description: The inbox — one row at three densities, day sections, the markers a message carries, and the bulk-selection bar the list mounts itself.
|
|
4
4
|
order: 64
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -26,34 +26,30 @@ import { MailList, groupMailByDay } from '@oxy.so/bloom';
|
|
|
26
26
|
/>;
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
##
|
|
29
|
+
## Three densities, one component
|
|
30
30
|
|
|
31
|
-
| | `comfortable` | `
|
|
32
|
-
| --- | --- | --- |
|
|
33
|
-
| height |
|
|
34
|
-
| padding
|
|
35
|
-
| avatar |
|
|
36
|
-
| lines |
|
|
31
|
+
| | `compact` | `comfortable` | `cozy` |
|
|
32
|
+
| --- | --- | --- | --- |
|
|
33
|
+
| height | 40, exact | 64 (a floor) | 80 (a floor) |
|
|
34
|
+
| padding (horizontal / vertical) | 12 / 0 | 14 / 12 | 16 / 16 |
|
|
35
|
+
| avatar | 24 | 40 | 48 |
|
|
36
|
+
| lines | one | sender, then subject + snippet | sender, then subject + snippet |
|
|
37
37
|
|
|
38
|
-
`comfortable`
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
`comfortable` remains the default. `cozy` gives the same two-line layout more
|
|
39
|
+
space without changing content, actions, theme colours or accessibility names.
|
|
40
|
+
`compact` uses a sender column with a 180px basis, an 88px floor and a 34% width
|
|
41
|
+
ceiling, leaving room for the subject in a narrow pane.
|
|
41
42
|
|
|
42
|
-
The
|
|
43
|
-
|
|
44
|
-
an inbox standing 16px taller per row than the messages screen reads as a
|
|
45
|
-
different library. Two lines is what pays for it: the sender and the time share
|
|
46
|
-
the first, the subject and the snippet the second, and everything that used to
|
|
47
|
-
need a third line is either a mark or is said only in the row's name.
|
|
43
|
+
The shared geometry table drives rows, skeletons and the selection bar; use the
|
|
44
|
+
same `density` on all three when composing a virtualized list yourself.
|
|
48
45
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
drifts, and the two then disagree about what a starred draft looks like.
|
|
46
|
+
Set `showAvatar={false}` on `MailRow` or `MailList` to hide sender avatars.
|
|
47
|
+
Selection checkboxes remain available; each `MailSummary` can override the list
|
|
48
|
+
setting. The text uses the freed space instead of leaving an empty avatar slot.
|
|
53
49
|
|
|
54
50
|
## The subject and the snippet are one `Text`
|
|
55
51
|
|
|
56
|
-
At
|
|
52
|
+
At all densities the subject and the snippet are a single string with a nested
|
|
57
53
|
span, not two flex children. Two neighbouring flex children each want to be as
|
|
58
54
|
wide as their content, and with a long one the result is either a row that
|
|
59
55
|
pushes the list sideways or a subject clipped to nothing while the snippet keeps
|
|
@@ -225,3 +221,7 @@ The open row is `aria-current` on web and `accessibilityState.selected` on
|
|
|
225
221
|
native — `aria-selected` belongs to a tab or an option, and a message row is
|
|
226
222
|
neither. While `loading` the region is `aria-busy` and the placeholders are
|
|
227
223
|
hidden, so "loading" is announced once rather than eight times.
|
|
224
|
+
|
|
225
|
+
## Pointer targets
|
|
226
|
+
|
|
227
|
+
The row link is an absolute sibling below the foreground content. Layout wrappers use `pointerEvents="box-none"`, and inert text/marks use `pointerEvents="none"`; controls retain their own targets. A synthetic `element.click()` bypasses those layers, so run `scripts/verify-mail-row-pointer.mjs` against the Pointer Targets story to validate actual browser hit testing.
|
package/docs/settings-modal.mdx
CHANGED
|
@@ -83,7 +83,7 @@ Every layout uses `PageHeader` with its floating islands. A `ButtonGroupItem` su
|
|
|
83
83
|
|
|
84
84
|
This shell differs from `Dialog`'s centered card in every load-bearing way: black 70% backdrop with no blur, 24px radius on `background/full`, a fixed 871×614 size, a fade + scale-from-0.85 + 4px blur on `cubic-bezier(0.32, 0.72, 0, 1)`, and a **Saved toast that straddles the panel's bottom edge** — outside the panel's clip, which `Dialog`'s card owns. So the shell is built from the same authorities `Dialog` uses — `Portal`, `OverlayRoot` (the one stacking rank) and `Backdrop` (the pointer-events contract) — and accepts `Dialog`'s `control`.
|
|
85
85
|
|
|
86
|
-
Menus, selects, tooltips and the date popover opened inside a page stack above it through the overlay stack. **Escape closes the innermost surface first:**
|
|
86
|
+
Menus, selects, tooltips and the date popover opened inside a page stack above it through the overlay stack. **Escape closes the innermost surface first:** shared `ModalKeyboard` checks overlay and floating-surface ownership before claiming the key. Its capture/deferred handling also hears Escape from React Native Web text fields. Focus moves into the panel on open, Tab remains inside, and closing restores the opener.
|
|
87
87
|
|
|
88
88
|
## The saved toast
|
|
89
89
|
|