@oxy.so/bloom 4.3.1 → 4.5.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.
- package/docs/ai-chat.mdx +4 -0
- package/docs/chart-cards.mdx +13 -0
- package/docs/layout.mdx +36 -0
- package/docs/page-header.mdx +16 -0
- package/docs/sidebar.mdx +16 -0
- package/lib/commonjs/ai-chat/AiChatContainer.js +16 -13
- package/lib/commonjs/ai-chat/AiChatContainer.js.map +1 -1
- package/lib/commonjs/chart-cards/sparkline.js +13 -0
- package/lib/commonjs/chart-cards/sparkline.js.map +1 -0
- package/lib/commonjs/index.js +21 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +21 -0
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/layout/StickySection.js +106 -0
- package/lib/commonjs/layout/StickySection.js.map +1 -0
- package/lib/commonjs/layout/header-dock.js +61 -0
- package/lib/commonjs/layout/header-dock.js.map +1 -0
- package/lib/commonjs/layout/index.js +20 -0
- package/lib/commonjs/layout/index.js.map +1 -1
- package/lib/commonjs/page-header/PageHeader.js +38 -14
- package/lib/commonjs/page-header/PageHeader.js.map +1 -1
- package/lib/commonjs/sidebar/Sidebar.js +129 -103
- package/lib/commonjs/sidebar/Sidebar.js.map +1 -1
- package/lib/commonjs/sidebar/SidebarFolder.js +109 -85
- package/lib/commonjs/sidebar/SidebarFolder.js.map +1 -1
- package/lib/commonjs/sidebar/SidebarRail.js +70 -48
- package/lib/commonjs/sidebar/SidebarRail.js.map +1 -1
- package/lib/commonjs/styles/web-view-style.js +6 -0
- package/lib/commonjs/styles/web-view-style.js.map +1 -1
- package/lib/module/ai-chat/AiChatContainer.js +17 -14
- package/lib/module/ai-chat/AiChatContainer.js.map +1 -1
- package/lib/module/chart-cards/sparkline.js +5 -0
- package/lib/module/chart-cards/sparkline.js.map +1 -0
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +1 -1
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/layout/StickySection.js +101 -0
- package/lib/module/layout/StickySection.js.map +1 -0
- package/lib/module/layout/header-dock.js +54 -0
- package/lib/module/layout/header-dock.js.map +1 -0
- package/lib/module/layout/index.js +2 -0
- package/lib/module/layout/index.js.map +1 -1
- package/lib/module/page-header/PageHeader.js +38 -14
- package/lib/module/page-header/PageHeader.js.map +1 -1
- package/lib/module/sidebar/Sidebar.js +129 -103
- package/lib/module/sidebar/Sidebar.js.map +1 -1
- package/lib/module/sidebar/SidebarFolder.js +109 -85
- package/lib/module/sidebar/SidebarFolder.js.map +1 -1
- package/lib/module/sidebar/SidebarRail.js +70 -48
- package/lib/module/sidebar/SidebarRail.js.map +1 -1
- package/lib/module/styles/web-view-style.js +5 -0
- package/lib/module/styles/web-view-style.js.map +1 -1
- package/lib/typescript/commonjs/ai-chat/AiChatContainer.d.ts +1 -1
- package/lib/typescript/commonjs/ai-chat/AiChatContainer.d.ts.map +1 -1
- package/lib/typescript/commonjs/ai-chat/types.d.ts +2 -0
- package/lib/typescript/commonjs/ai-chat/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/chart-cards/sparkline.d.ts +4 -0
- package/lib/typescript/commonjs/chart-cards/sparkline.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +2 -1
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.web.d.ts +2 -1
- package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/layout/StickySection.d.ts +8 -0
- package/lib/typescript/commonjs/layout/StickySection.d.ts.map +1 -0
- package/lib/typescript/commonjs/layout/header-dock.d.ts +21 -0
- package/lib/typescript/commonjs/layout/header-dock.d.ts.map +1 -0
- package/lib/typescript/commonjs/layout/index.d.ts +3 -0
- package/lib/typescript/commonjs/layout/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/page-header/PageHeader.d.ts.map +1 -1
- package/lib/typescript/commonjs/page-header/types.d.ts +10 -6
- package/lib/typescript/commonjs/page-header/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/sidebar/Sidebar.d.ts.map +1 -1
- package/lib/typescript/commonjs/sidebar/SidebarFolder.d.ts.map +1 -1
- package/lib/typescript/commonjs/sidebar/SidebarRail.d.ts +1 -1
- package/lib/typescript/commonjs/sidebar/SidebarRail.d.ts.map +1 -1
- package/lib/typescript/commonjs/sidebar/types.d.ts +16 -0
- package/lib/typescript/commonjs/sidebar/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/styles/web-view-style.d.ts +2 -0
- package/lib/typescript/commonjs/styles/web-view-style.d.ts.map +1 -1
- package/lib/typescript/module/ai-chat/AiChatContainer.d.ts +1 -1
- package/lib/typescript/module/ai-chat/AiChatContainer.d.ts.map +1 -1
- package/lib/typescript/module/ai-chat/types.d.ts +2 -0
- package/lib/typescript/module/ai-chat/types.d.ts.map +1 -1
- package/lib/typescript/module/chart-cards/sparkline.d.ts +4 -0
- package/lib/typescript/module/chart-cards/sparkline.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +2 -1
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/index.web.d.ts +2 -1
- package/lib/typescript/module/index.web.d.ts.map +1 -1
- package/lib/typescript/module/layout/StickySection.d.ts +8 -0
- package/lib/typescript/module/layout/StickySection.d.ts.map +1 -0
- package/lib/typescript/module/layout/header-dock.d.ts +21 -0
- package/lib/typescript/module/layout/header-dock.d.ts.map +1 -0
- package/lib/typescript/module/layout/index.d.ts +3 -0
- package/lib/typescript/module/layout/index.d.ts.map +1 -1
- package/lib/typescript/module/page-header/PageHeader.d.ts.map +1 -1
- package/lib/typescript/module/page-header/types.d.ts +10 -6
- package/lib/typescript/module/page-header/types.d.ts.map +1 -1
- package/lib/typescript/module/sidebar/Sidebar.d.ts.map +1 -1
- package/lib/typescript/module/sidebar/SidebarFolder.d.ts.map +1 -1
- package/lib/typescript/module/sidebar/SidebarRail.d.ts +1 -1
- package/lib/typescript/module/sidebar/SidebarRail.d.ts.map +1 -1
- package/lib/typescript/module/sidebar/types.d.ts +16 -0
- package/lib/typescript/module/sidebar/types.d.ts.map +1 -1
- package/lib/typescript/module/styles/web-view-style.d.ts +2 -0
- package/lib/typescript/module/styles/web-view-style.d.ts.map +1 -1
- package/package.json +18 -1
- package/src/ai-chat/AiChatContainer.tsx +4 -1
- package/src/ai-chat/types.ts +2 -0
- package/src/chart-cards/sparkline.ts +3 -0
- package/src/index.ts +4 -0
- package/src/index.web.ts +4 -0
- package/src/layout/StickySection.tsx +75 -0
- package/src/layout/header-dock.tsx +42 -0
- package/src/layout/index.ts +4 -0
- package/src/page-header/PageHeader.tsx +26 -12
- package/src/page-header/types.ts +10 -6
- package/src/sidebar/Sidebar.tsx +10 -2
- package/src/sidebar/SidebarFolder.tsx +18 -4
- package/src/sidebar/SidebarRail.tsx +6 -1
- package/src/sidebar/types.ts +16 -0
- package/src/styles/web-view-style.ts +5 -0
- package/src/__tests__/support/adoption-matrix.ts +0 -703
- package/src/__tests__/support/collision-fixture-barrel.ts +0 -20
- package/src/__tests__/support/commerce-harness.tsx +0 -97
- package/src/__tests__/support/composite.ts +0 -68
- package/src/__tests__/support/constructed-style-sheets.ts +0 -68
- package/src/__tests__/support/press-host.ts +0 -30
- package/src/__tests__/support/rendered-style.ts +0 -99
- package/src/__tests__/support/unread-hook-fixture.ts +0 -33
- package/src/theme/__tests__/__fixtures__/golden-resolved-tokens.json +0 -9346
- package/src/theme/__tests__/__fixtures__/tonal-glass-primary-failures.json +0 -69
- package/src/theme/__tests__/fixtures/color-engine-golden.json +0 -1
|
@@ -27,11 +27,14 @@ export type PageHeaderPresentation = 'floating' | 'bar';
|
|
|
27
27
|
* at the top of the container and scrolls under the islands. The header then
|
|
28
28
|
* CLAIMS its measured height on `layout/top-edge`, and the content reads it
|
|
29
29
|
* with `useTopEdgeInset()` so its first item is not born underneath. This is
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
30
|
+
* placement the floating presentation was designed for.
|
|
31
|
+
*
|
|
32
|
+
* `overlap` keeps document stickiness while allowing the following hero to
|
|
33
|
+
* start behind the measured header; native places it before the list.
|
|
34
|
+
* Placement and presentation remain independent: a floating header above a
|
|
35
|
+
* fixed panel is also a supported arrangement.
|
|
33
36
|
*/
|
|
34
|
-
export type PageHeaderPlacement = 'inline' | 'overlay';
|
|
37
|
+
export type PageHeaderPlacement = 'inline' | 'overlay' | 'overlap';
|
|
35
38
|
/**
|
|
36
39
|
* The bottom separator: `auto` fades it in once the page has scrolled past
|
|
37
40
|
* `scrollThreshold`, `always` draws it at rest, `none` never draws it.
|
|
@@ -54,13 +57,14 @@ export type PageHeaderScrim = 'auto' | 'always' | 'none';
|
|
|
54
57
|
*
|
|
55
58
|
* `always` (default) is the ordinary screen header. `onScroll` holds the title
|
|
56
59
|
* back and fades it in with the scrim — the shape a header over a hero photo
|
|
57
|
-
* wants, where the photo already names the screen.
|
|
60
|
+
* wants, where the photo already names the screen. `onDock` uses the paired
|
|
61
|
+
* StickySection arrival instead, inside HeaderDockProvider.
|
|
58
62
|
*
|
|
59
63
|
* It is a prop of its own rather than a side effect of the background, because
|
|
60
64
|
* the two are different questions and conflating them is how every header that
|
|
61
65
|
* turned transparent also lost its title.
|
|
62
66
|
*/
|
|
63
|
-
export type PageHeaderTitleReveal = 'always' | 'onScroll';
|
|
67
|
+
export type PageHeaderTitleReveal = 'always' | 'onScroll' | 'onDock';
|
|
64
68
|
export interface PageHeaderProps {
|
|
65
69
|
/** A string renders as the heading; a node renders as-is (and owns its own semantics). */
|
|
66
70
|
title?: ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/page-header/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,0EAA0E;AAC1E,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,KAAK,CAAC;AAExD
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/page-header/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,0EAA0E;AAC1E,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,KAAK,CAAC;AAExD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,0FAA0F;IAC1F,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,uBAAuB;IACvB,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,4CAA4C;IAC5C,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,wBAAwB;IACxB,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,uGAAuG;IACvG,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,0BAA0B;IAC1B,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,wBAAwB;IACxB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAEhC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB,iDAAiD;IACjD,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sDAAsD;IACtD,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;;;;;;;;;;;;;OAcG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,sFAAsF;IACtF,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/Sidebar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkE,MAAM,OAAO,CAAC;AA2CvF,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/Sidebar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkE,MAAM,OAAO,CAAC;AA2CvF,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,SAAS,CAAC;AAqsB5D,eAAO,MAAM,OAAO,0CAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarFolder.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/SidebarFolder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAoB5D,OAAO,KAAK,EAAE,kBAAkB,EAAsC,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"SidebarFolder.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/SidebarFolder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAoB5D,OAAO,KAAK,EAAE,kBAAkB,EAAsC,MAAM,SAAS,CAAC;AA4GtF;;;;;;;;;;;;;GAaG;AACH,iBAAS,sBAAsB,CAAC,EAC9B,MAAM,EACN,IAAI,EACJ,YAAY,EACZ,SAAiB,EACjB,YAAY,EACZ,WAAW,EACX,KAAK,EACL,MAAM,GACP,EAAE,kBAAkB,2CA2FpB;AAED,eAAO,MAAM,aAAa,0DAA+B,CAAC"}
|
|
@@ -13,5 +13,5 @@ export declare const SIDEBAR_RAIL_WIDTH = 80;
|
|
|
13
13
|
* The rail carries navigation and the logo's mark only: account, team, plan, tree, quick search and
|
|
14
14
|
* the theme toggle belong to the panel variant and are not rendered here.
|
|
15
15
|
*/
|
|
16
|
-
export declare function SidebarRail({ logo, items, primaryAction, footer, secondaryItems, selected, onNavigate, style, testID, }: SidebarProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export declare function SidebarRail({ logo, items, primaryAction, contentAlignment, footer, secondaryItems, selected, onNavigate, style, testID, }: SidebarProps): import("react/jsx-runtime").JSX.Element;
|
|
17
17
|
//# sourceMappingURL=SidebarRail.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarRail.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/SidebarRail.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5D,8BAA8B;AAC9B,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,KAAU,EACV,aAAa,EACb,MAAM,EACN,cAAmB,EACnB,QAAQ,EACR,UAAU,EACV,KAAK,EACL,MAAM,GACP,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"SidebarRail.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/SidebarRail.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5D,8BAA8B;AAC9B,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,KAAU,EACV,aAAa,EACb,gBAA0B,EAC1B,MAAM,EACN,cAAmB,EACnB,QAAQ,EACR,UAAU,EACV,KAAK,EACL,MAAM,GACP,EAAE,YAAY,2CA2Fd"}
|
|
@@ -214,6 +214,8 @@ export interface SidebarUserMenuProps {
|
|
|
214
214
|
testID?: string;
|
|
215
215
|
}
|
|
216
216
|
export interface SidebarProps {
|
|
217
|
+
/** Center the main navigation group in space above the persistent footer. */
|
|
218
|
+
contentAlignment?: 'start' | 'center';
|
|
217
219
|
/** App-owned destination content after the built-in rows/tree, inside the same
|
|
218
220
|
* scroll viewport. Hidden and noninteractive while collapsed; remains mounted
|
|
219
221
|
* so pagination and disclosure state survive. Not rendered in variant="rail".
|
|
@@ -279,6 +281,9 @@ export interface SidebarProps {
|
|
|
279
281
|
showThemeToggle?: boolean;
|
|
280
282
|
/** Quick search over the rows. Defaults to true. */
|
|
281
283
|
showSearch?: boolean;
|
|
284
|
+
/** Controlled quick-search text; also lets app-owned content filter the same query. */
|
|
285
|
+
searchQuery?: string;
|
|
286
|
+
onSearchQueryChange?: (query: string) => void;
|
|
282
287
|
/** Shortcut hint on the quick-search button. Defaults to "⌘L". */
|
|
283
288
|
searchShortcutLabel?: string;
|
|
284
289
|
/** Binds ⌘L / Ctrl+L on web. Defaults to true. */
|
|
@@ -311,6 +316,11 @@ export interface SidebarProps {
|
|
|
311
316
|
}
|
|
312
317
|
/** A row under a tree folder. */
|
|
313
318
|
export interface SidebarTreeItem {
|
|
319
|
+
/** Secondary controls beside the row, never nested inside its press target. */
|
|
320
|
+
actions?: ReactNode;
|
|
321
|
+
/** Warm navigation data on hover/touch and before selection. */
|
|
322
|
+
onPrefetch?: () => void;
|
|
323
|
+
onLongPress?: () => void;
|
|
314
324
|
key: string;
|
|
315
325
|
label: string;
|
|
316
326
|
/** A short chip on the right, e.g. a relative time (`34m`, `now`). */
|
|
@@ -319,6 +329,10 @@ export interface SidebarTreeItem {
|
|
|
319
329
|
href?: string;
|
|
320
330
|
}
|
|
321
331
|
export interface SidebarTreeFolder {
|
|
332
|
+
/** Secondary controls beside the disclosure, such as edit/create menus. */
|
|
333
|
+
actions?: ReactNode;
|
|
334
|
+
open?: boolean;
|
|
335
|
+
onOpenChange?: (open: boolean) => void;
|
|
322
336
|
key: string;
|
|
323
337
|
label: string;
|
|
324
338
|
items: ReadonlyArray<SidebarTreeItem>;
|
|
@@ -326,6 +340,8 @@ export interface SidebarTreeFolder {
|
|
|
326
340
|
defaultOpen?: boolean;
|
|
327
341
|
}
|
|
328
342
|
export interface SidebarTree {
|
|
343
|
+
/** Collection actions, e.g. create a project, beside the section label. */
|
|
344
|
+
actions?: ReactNode;
|
|
329
345
|
/** The section label, e.g. `Repositories`. */
|
|
330
346
|
label: string;
|
|
331
347
|
folders: ReadonlyArray<SidebarTreeFolder>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -110,4 +110,6 @@ export interface WebCssStyle extends ViewStyle {
|
|
|
110
110
|
*/
|
|
111
111
|
[customProperty: `--${string}`]: string | undefined;
|
|
112
112
|
}
|
|
113
|
+
/** Position a secondary sticky row below measured chrome, retaining panel inset. */
|
|
114
|
+
export declare function webSurfaceStickyTopPlus(px: number): ViewStyle['top'];
|
|
113
115
|
//# sourceMappingURL=web-view-style.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-view-style.d.ts","sourceRoot":"","sources":["../../../../src/styles/web-view-style.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,kBAAkB,EAAc,SAAS,CAAC,UAAU,CAAC,CAAC;AAEnE;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAe,SAAS,CAAC,UAAU,CAAC,CAAC;AAErE,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,EAA2C,SAAS,CAAC,KAAK,CAAC,CAAC;AAE/F;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,EAAe,SAAS,CAAC,QAAQ,CAAC,CAAC;AACnE,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAEtE;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAa,SAAS,CAAC,UAAU,CAAC,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IACjD,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;IAC1D;;;;;;;;;OASG;IACH,CAAC,cAAc,EAAE,KAAK,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;CACrD"}
|
|
1
|
+
{"version":3,"file":"web-view-style.d.ts","sourceRoot":"","sources":["../../../../src/styles/web-view-style.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,kBAAkB,EAAc,SAAS,CAAC,UAAU,CAAC,CAAC;AAEnE;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAe,SAAS,CAAC,UAAU,CAAC,CAAC;AAErE,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,EAA2C,SAAS,CAAC,KAAK,CAAC,CAAC;AAE/F;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,EAAe,SAAS,CAAC,QAAQ,CAAC,CAAC;AACnE,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAEtE;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAa,SAAS,CAAC,UAAU,CAAC,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IACjD,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;IAC1D;;;;;;;;;OASG;IACH,CAAC,cAAc,EAAE,KAAK,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;CACrD;AAED,oFAAoF;AACpF,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAEpE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oxy.so/bloom",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.5.0",
|
|
4
4
|
"packageManager": "bun@1.3.14",
|
|
5
5
|
"description": "Bloom UI — Oxy ecosystem component library for React Native + Expo + Web",
|
|
6
6
|
"main": "lib/commonjs/index.js",
|
|
@@ -539,6 +539,20 @@
|
|
|
539
539
|
"default": "./lib/commonjs/chart-cards/index.js"
|
|
540
540
|
}
|
|
541
541
|
},
|
|
542
|
+
"./chart-cards/sparkline": {
|
|
543
|
+
"react-native": {
|
|
544
|
+
"types": "./lib/typescript/module/chart-cards/sparkline.d.ts",
|
|
545
|
+
"default": "./src/chart-cards/sparkline.ts"
|
|
546
|
+
},
|
|
547
|
+
"import": {
|
|
548
|
+
"types": "./lib/typescript/module/chart-cards/sparkline.d.ts",
|
|
549
|
+
"default": "./lib/module/chart-cards/sparkline.js"
|
|
550
|
+
},
|
|
551
|
+
"require": {
|
|
552
|
+
"types": "./lib/typescript/commonjs/chart-cards/sparkline.d.ts",
|
|
553
|
+
"default": "./lib/commonjs/chart-cards/sparkline.js"
|
|
554
|
+
}
|
|
555
|
+
},
|
|
542
556
|
"./calendar": {
|
|
543
557
|
"react-native": {
|
|
544
558
|
"types": "./lib/typescript/module/calendar/index.d.ts",
|
|
@@ -3511,6 +3525,9 @@
|
|
|
3511
3525
|
"chart-cards": [
|
|
3512
3526
|
"./lib/typescript/module/chart-cards/index.d.ts"
|
|
3513
3527
|
],
|
|
3528
|
+
"chart-cards/sparkline": [
|
|
3529
|
+
"./lib/typescript/module/chart-cards/sparkline.d.ts"
|
|
3530
|
+
],
|
|
3514
3531
|
"calendar": [
|
|
3515
3532
|
"./lib/typescript/module/calendar/index.d.ts"
|
|
3516
3533
|
],
|
|
@@ -47,6 +47,7 @@ export function AiChatContainer({
|
|
|
47
47
|
onProjectPress,
|
|
48
48
|
onShare,
|
|
49
49
|
onMore,
|
|
50
|
+
actions,
|
|
50
51
|
header,
|
|
51
52
|
children,
|
|
52
53
|
composer,
|
|
@@ -82,7 +83,7 @@ export function AiChatContainer({
|
|
|
82
83
|
</View>
|
|
83
84
|
) : null}
|
|
84
85
|
{header}
|
|
85
|
-
{title != null || project != null || onShare || onMore ? <View
|
|
86
|
+
{title != null || project != null || onShare || onMore || actions != null ? <View
|
|
86
87
|
style={{
|
|
87
88
|
width: '100%',
|
|
88
89
|
flexDirection: 'row',
|
|
@@ -104,8 +105,10 @@ export function AiChatContainer({
|
|
|
104
105
|
</Breadcrumb> : null}
|
|
105
106
|
</View>
|
|
106
107
|
<View style={{ flexShrink: 0, flexDirection: 'row', alignItems: 'center', gap: 8 }}>
|
|
108
|
+
{actions ?? <>
|
|
107
109
|
{onShare ? <GlyphAction icon={RiShare2Line} label={l.share} onPress={onShare} palette={palette} /> : null}
|
|
108
110
|
{onMore ? <GlyphAction icon={RiMoreFill} label={l.more} onPress={onMore} palette={palette} /> : null}
|
|
111
|
+
</>}
|
|
109
112
|
</View>
|
|
110
113
|
</View> : null}
|
|
111
114
|
|
package/src/ai-chat/types.ts
CHANGED
|
@@ -290,6 +290,8 @@ export interface AiChatContainerProps {
|
|
|
290
290
|
onProjectPress?: () => void;
|
|
291
291
|
onShare?: () => void;
|
|
292
292
|
onMore?: () => void;
|
|
293
|
+
/** Custom breadcrumb actions, replacing the default share/more controls. */
|
|
294
|
+
actions?: ReactNode;
|
|
293
295
|
/** Rendered above the breadcrumb — the shell's `AiChatMobileHeader`. */
|
|
294
296
|
header?: ReactNode;
|
|
295
297
|
/** The thread — usually an `AiChatThread`. */
|
package/src/index.ts
CHANGED
|
@@ -167,7 +167,11 @@ export {
|
|
|
167
167
|
ScrollOffsetProvider,
|
|
168
168
|
useScrollOffset,
|
|
169
169
|
ScreenScope,
|
|
170
|
+
HeaderDockProvider,
|
|
171
|
+
useHeaderDockInset,
|
|
172
|
+
StickySection,
|
|
170
173
|
} from './layout';
|
|
174
|
+
export type { StickySectionProps } from './layout';
|
|
171
175
|
export { Fab } from './fab';
|
|
172
176
|
export type { FabProps, FabVariant, FabSize, FabPlacement, FabMinimizeBehavior } from './fab';
|
|
173
177
|
export { FrostedIconButton } from './frosted-icon-button';
|
package/src/index.web.ts
CHANGED
|
@@ -172,7 +172,11 @@ export {
|
|
|
172
172
|
ScrollOffsetProvider,
|
|
173
173
|
useScrollOffset,
|
|
174
174
|
ScreenScope,
|
|
175
|
+
HeaderDockProvider,
|
|
176
|
+
useHeaderDockInset,
|
|
177
|
+
StickySection,
|
|
175
178
|
} from './layout';
|
|
179
|
+
export type { StickySectionProps } from './layout';
|
|
176
180
|
export { Fab } from './fab/index.web';
|
|
177
181
|
export type { FabProps, FabVariant, FabSize, FabPlacement, FabMinimizeBehavior } from './fab/index.web';
|
|
178
182
|
export { FrostedIconButton } from './frosted-icon-button/index.web';
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import React, { useCallback, useEffect, useRef } from 'react';
|
|
2
|
+
import { Platform, View, type ViewProps } from 'react-native';
|
|
3
|
+
import { useSurfaceFill } from '../styles/surface-levels';
|
|
4
|
+
import { Z_INDEX } from '../styles/z-index';
|
|
5
|
+
import { WEB_POSITION_STICKY, webSurfaceStickyTopPlus, type WebCssStyle } from '../styles/web-view-style';
|
|
6
|
+
import { useHeaderDockContext } from './header-dock';
|
|
7
|
+
import { useTopEdgeInset } from './top-edge';
|
|
8
|
+
|
|
9
|
+
export interface StickySectionProps extends ViewProps {
|
|
10
|
+
/** Native: this sticky child's Y in the list content, measured by its owner. */
|
|
11
|
+
offset?: number;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** One docking section. Native lists retain ownership of stickyHeaderIndices. */
|
|
15
|
+
export function StickySection({children, offset, style, onLayout, ...props}: StickySectionProps) {
|
|
16
|
+
const dock = useHeaderDockContext();
|
|
17
|
+
const top = useTopEdgeInset();
|
|
18
|
+
const fill = useSurfaceFill();
|
|
19
|
+
const marker = useRef<View>(null);
|
|
20
|
+
const section = useRef<View>(null);
|
|
21
|
+
const owner = useRef({});
|
|
22
|
+
const measure = useCallback(() => {
|
|
23
|
+
if (!dock) return;
|
|
24
|
+
if (Platform.OS !== 'web') {
|
|
25
|
+
if (offset !== undefined) {
|
|
26
|
+
dock.targets.current.set(owner.current, offset);
|
|
27
|
+
dock.sectionOffset.value = offset;
|
|
28
|
+
}
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const anchor = marker.current as unknown as HTMLElement | null;
|
|
32
|
+
const sticky = section.current as unknown as HTMLElement | null;
|
|
33
|
+
if (!anchor?.getBoundingClientRect || !sticky) return;
|
|
34
|
+
// The zero-height marker remains in normal flow while the section sticks.
|
|
35
|
+
// Its coordinate is measured against the actual scrolling viewport.
|
|
36
|
+
let viewportTop = 0;
|
|
37
|
+
for (let parent = anchor.parentElement; parent; parent = parent.parentElement) {
|
|
38
|
+
if (/(auto|scroll)/.test(getComputedStyle(parent).overflowY)) {
|
|
39
|
+
viewportTop = parent.getBoundingClientRect().top + parent.clientTop;
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const stickyTop = Number.parseFloat(getComputedStyle(sticky).top) || top;
|
|
44
|
+
const measuredOffset = anchor.getBoundingClientRect().top - viewportTop + dock.scrollY.value - stickyTop + top;
|
|
45
|
+
dock.targets.current.set(owner.current, measuredOffset);
|
|
46
|
+
dock.sectionOffset.value = measuredOffset;
|
|
47
|
+
}, [dock, offset, top]);
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
measure();
|
|
50
|
+
if (Platform.OS !== 'web') return;
|
|
51
|
+
const anchor = marker.current as unknown as HTMLElement | null;
|
|
52
|
+
const observer = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(measure);
|
|
53
|
+
// Ancestor size changes cover delayed hero images/fonts without a scroll listener.
|
|
54
|
+
for (let element = anchor?.parentElement; element; element = element.parentElement) observer?.observe(element);
|
|
55
|
+
window.addEventListener('resize', measure);
|
|
56
|
+
return () => { observer?.disconnect(); window.removeEventListener('resize', measure); };
|
|
57
|
+
}, [measure]);
|
|
58
|
+
useEffect(() => () => {
|
|
59
|
+
if (!dock) return;
|
|
60
|
+
dock.targets.current.delete(owner.current);
|
|
61
|
+
// Virtualized lists may mount a sticky clone alongside the original cell.
|
|
62
|
+
// Removing that clone must restore the still-mounted original's target.
|
|
63
|
+
let remaining = Number.POSITIVE_INFINITY;
|
|
64
|
+
for (const target of dock.targets.current.values()) remaining = target;
|
|
65
|
+
dock.sectionOffset.value = remaining;
|
|
66
|
+
}, [dock]);
|
|
67
|
+
const stickyStyle: WebCssStyle = Platform.OS === 'web'
|
|
68
|
+
? {position:WEB_POSITION_STICKY, top:webSurfaceStickyTopPlus(top), zIndex:Z_INDEX.raised}
|
|
69
|
+
: {zIndex:Z_INDEX.raised};
|
|
70
|
+
return <>
|
|
71
|
+
{Platform.OS === 'web' && <View ref={marker} pointerEvents="none" style={{height:0}} />}
|
|
72
|
+
<View {...props} ref={section} onLayout={event => {measure(); onLayout?.(event);}}
|
|
73
|
+
style={[stickyStyle, {backgroundColor:fill}, style]}>{children}</View>
|
|
74
|
+
</>;
|
|
75
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React, { createContext, useContext, useMemo, useRef, useState, type PropsWithChildren } from 'react';
|
|
2
|
+
import { Platform } from 'react-native';
|
|
3
|
+
import { useDerivedValue, useSharedValue, type SharedValue } from 'react-native-reanimated';
|
|
4
|
+
import { useScreenContext } from '../screen/context';
|
|
5
|
+
import { useScrollOffset } from './scroll-offset';
|
|
6
|
+
import { TopEdgeProvider, useTopEdgeInset } from './top-edge';
|
|
7
|
+
|
|
8
|
+
interface HeaderDockState {
|
|
9
|
+
scrollY: SharedValue<number>;
|
|
10
|
+
headerHeight: SharedValue<number>;
|
|
11
|
+
overlay: SharedValue<boolean>;
|
|
12
|
+
overlaps: boolean;
|
|
13
|
+
setOverlaps: React.Dispatch<React.SetStateAction<boolean>>;
|
|
14
|
+
sectionOffset: SharedValue<number>;
|
|
15
|
+
progress: SharedValue<number>;
|
|
16
|
+
targets: React.MutableRefObject<Map<object, number>>;
|
|
17
|
+
}
|
|
18
|
+
const HeaderDockContext = createContext<HeaderDockState | null>(null);
|
|
19
|
+
export function useHeaderDockContext() { return useContext(HeaderDockContext); }
|
|
20
|
+
|
|
21
|
+
/** Native lists already below an inline header need no additional clearance. */
|
|
22
|
+
export function useHeaderDockInset(): number {
|
|
23
|
+
const dock = useHeaderDockContext();
|
|
24
|
+
const height = useTopEdgeInset();
|
|
25
|
+
return Platform.OS === 'web' || dock?.overlaps ? height : 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Pairs one header and its docking section without rendering on scroll frames. */
|
|
29
|
+
export function HeaderDockProvider({ children, scrollY: supplied }: PropsWithChildren<{ scrollY?: SharedValue<number> }>) {
|
|
30
|
+
const screen = useScreenContext();
|
|
31
|
+
const contextual = useScrollOffset();
|
|
32
|
+
const rest = useSharedValue(0);
|
|
33
|
+
const scrollY = supplied ?? screen?.scrollY ?? contextual ?? rest;
|
|
34
|
+
const headerHeight = useSharedValue(0);
|
|
35
|
+
const overlay = useSharedValue(false);
|
|
36
|
+
const [overlaps, setOverlaps] = useState(false);
|
|
37
|
+
const sectionOffset = useSharedValue(Number.POSITIVE_INFINITY);
|
|
38
|
+
const targets = useRef(new Map<object, number>());
|
|
39
|
+
const progress = useDerivedValue(() => Math.min(1, Math.max(0, (scrollY.value - sectionOffset.value + (Platform.OS === 'web' || overlay.value ? headerHeight.value : 0) + 12) / 12)), [scrollY, sectionOffset, headerHeight, overlay]);
|
|
40
|
+
const value = useMemo(() => ({scrollY,headerHeight,sectionOffset,progress,targets,overlay,overlaps,setOverlaps}), [scrollY,headerHeight,sectionOffset,progress,overlay,overlaps]);
|
|
41
|
+
return <TopEdgeProvider><HeaderDockContext.Provider value={value}>{children}</HeaderDockContext.Provider></TopEdgeProvider>;
|
|
42
|
+
}
|
package/src/layout/index.ts
CHANGED
|
@@ -14,3 +14,7 @@ export { BottomEdgeProvider, useBottomEdgeInset, useClaimBottomEdge } from './bo
|
|
|
14
14
|
export { TopEdgeProvider, useClaimTopEdge, useTopEdgeInset } from './top-edge';
|
|
15
15
|
export { ScrollOffsetProvider, useScrollOffset } from './scroll-offset';
|
|
16
16
|
export { ScreenScope } from './screen-scope';
|
|
17
|
+
|
|
18
|
+
export { HeaderDockProvider, useHeaderDockInset } from './header-dock';
|
|
19
|
+
export { StickySection } from './StickySection';
|
|
20
|
+
export type { StickySectionProps } from './StickySection';
|
|
@@ -16,6 +16,7 @@ import Animated, {
|
|
|
16
16
|
} from 'react-native-reanimated';
|
|
17
17
|
import { SafeAreaInsetsContext } from 'react-native-safe-area-context';
|
|
18
18
|
|
|
19
|
+
import { useHeaderDockContext } from '../layout/header-dock';
|
|
19
20
|
import { useSurfaceFill } from '../styles/surface-levels';
|
|
20
21
|
import { useScreenContext } from '../screen/context';
|
|
21
22
|
import { Button } from '../button';
|
|
@@ -161,7 +162,16 @@ function PageHeaderComponent({
|
|
|
161
162
|
// the content reads it back. Measured rather than computed: a second title
|
|
162
163
|
// line, an enlarged font or a notch all move it, and every one of those is a
|
|
163
164
|
// case a constant was written to survive and does not.
|
|
164
|
-
|
|
165
|
+
const dock = useHeaderDockContext();
|
|
166
|
+
const dockProgress = dock?.progress;
|
|
167
|
+
useClaimTopEdge(overlay || placement === 'overlap' || dock ? height : 0);
|
|
168
|
+
useEffect(() => {
|
|
169
|
+
if (!dock) return;
|
|
170
|
+
dock.headerHeight.value = height;
|
|
171
|
+
dock.overlay.value = overlay || placement === 'overlap';
|
|
172
|
+
dock.setOverlaps(overlay || placement === 'overlap');
|
|
173
|
+
return () => { dock.headerHeight.value = 0; };
|
|
174
|
+
}, [dock, height, overlay, placement]);
|
|
165
175
|
|
|
166
176
|
const paint = useMemo(() => {
|
|
167
177
|
return {
|
|
@@ -181,8 +191,8 @@ function PageHeaderComponent({
|
|
|
181
191
|
const screen = useScreenContext();
|
|
182
192
|
const contextScrollY = useScrollOffset();
|
|
183
193
|
const internalScrollY = useSharedValue(0);
|
|
184
|
-
const scrollY = externalScrollY ?? screen?.scrollY ?? contextScrollY ?? internalScrollY;
|
|
185
|
-
const followsWindow = !externalScrollY && !screen && !contextScrollY;
|
|
194
|
+
const scrollY = externalScrollY ?? dock?.scrollY ?? screen?.scrollY ?? contextScrollY ?? internalScrollY;
|
|
195
|
+
const followsWindow = !externalScrollY && !dock && !screen && !contextScrollY;
|
|
186
196
|
|
|
187
197
|
useEffect(() => {
|
|
188
198
|
if (!isWeb || !followsWindow || typeof window === 'undefined') return undefined;
|
|
@@ -196,12 +206,12 @@ function PageHeaderComponent({
|
|
|
196
206
|
|
|
197
207
|
const threshold = Math.max(1, Number.isFinite(scrollThreshold) ? scrollThreshold : DEFAULT_THRESHOLD);
|
|
198
208
|
const revealOffset = Math.max(0, Number.isFinite(titleRevealOffset) ? titleRevealOffset : 0);
|
|
199
|
-
const [titleHidden, setTitleHidden] = useState(() => titleReveal === 'onScroll' && scrollY.value <= revealOffset);
|
|
200
|
-
useEffect(() => { setTitleHidden(titleReveal === 'onScroll' && scrollY.value <= revealOffset); }, [titleReveal, scrollY, revealOffset]);
|
|
209
|
+
const [titleHidden, setTitleHidden] = useState(() => (titleReveal === 'onDock' ? (dockProgress?.value ?? 0) <= 0 : titleReveal === 'onScroll' && scrollY.value <= revealOffset));
|
|
210
|
+
useEffect(() => { setTitleHidden((titleReveal === 'onDock' ? (dockProgress?.value ?? 0) <= 0 : titleReveal === 'onScroll' && scrollY.value <= revealOffset)); }, [titleReveal, scrollY, revealOffset, dockProgress]);
|
|
201
211
|
useAnimatedReaction(
|
|
202
|
-
() => titleReveal === 'onScroll' && scrollY.value <= revealOffset,
|
|
212
|
+
() => (titleReveal === 'onDock' ? (dockProgress?.value ?? 0) <= 0 : titleReveal === 'onScroll' && scrollY.value <= revealOffset),
|
|
203
213
|
(hidden, previous) => { if (hidden !== previous) runOnJS(setTitleHidden)(hidden); },
|
|
204
|
-
[titleReveal, scrollY, revealOffset, setTitleHidden],
|
|
214
|
+
[titleReveal, scrollY, revealOffset, setTitleHidden, dockProgress],
|
|
205
215
|
);
|
|
206
216
|
|
|
207
217
|
const shadowStyle = useAnimatedStyle(() => ({
|
|
@@ -215,13 +225,13 @@ function PageHeaderComponent({
|
|
|
215
225
|
}), [scrollY, threshold, transparent]);
|
|
216
226
|
|
|
217
227
|
const scrimStyle = useAnimatedStyle(() => ({
|
|
218
|
-
opacity:
|
|
228
|
+
opacity: (1 - (dockProgress?.value ?? 0)) * (
|
|
219
229
|
scrim === 'always'
|
|
220
230
|
? 1
|
|
221
231
|
: scrim === 'none'
|
|
222
232
|
? 0
|
|
223
|
-
: interpolate(scrollY.value, [0, threshold], [0, 1], Extrapolation.CLAMP),
|
|
224
|
-
}), [scrollY, threshold, scrim]);
|
|
233
|
+
: interpolate(scrollY.value, [0, threshold], [0, 1], Extrapolation.CLAMP)),
|
|
234
|
+
}), [scrollY, threshold, scrim, dockProgress]);
|
|
225
235
|
|
|
226
236
|
// Separate from the background's: a header can be transparent and still name
|
|
227
237
|
// its screen, and one over a hero photo can do the opposite.
|
|
@@ -229,8 +239,8 @@ function PageHeaderComponent({
|
|
|
229
239
|
opacity:
|
|
230
240
|
titleReveal === 'always'
|
|
231
241
|
? 1
|
|
232
|
-
: Math.min(1, Math.max(0, (scrollY.value - revealOffset) / threshold)),
|
|
233
|
-
}), [scrollY, threshold, titleReveal, revealOffset]);
|
|
242
|
+
: titleReveal === 'onDock' ? (dockProgress?.value ?? 0) : Math.min(1, Math.max(0, (scrollY.value - revealOffset) / threshold)),
|
|
243
|
+
}), [scrollY, threshold, titleReveal, revealOffset, dockProgress]);
|
|
234
244
|
|
|
235
245
|
const borderStyle = useAnimatedStyle(() => ({
|
|
236
246
|
opacity:
|
|
@@ -342,6 +352,7 @@ function PageHeaderComponent({
|
|
|
342
352
|
transitionProperty: 'top', transitionDuration: 'var(--bloom-panel-inset-duration, 0ms)', transitionTimingFunction: 'ease-in-out' }
|
|
343
353
|
: null;
|
|
344
354
|
|
|
355
|
+
const dockFillStyle = useAnimatedStyle(() => ({ opacity: dockProgress?.value ?? 0 }), [dockProgress]);
|
|
345
356
|
const chrome = floating ? (
|
|
346
357
|
<Animated.View
|
|
347
358
|
// A PROP: react-native-web resolves `none` from the prop path only, and
|
|
@@ -407,10 +418,13 @@ function PageHeaderComponent({
|
|
|
407
418
|
{ paddingTop: padTop },
|
|
408
419
|
overlay ? [styles.overlay, { zIndex: Z_INDEX.floating }] : null,
|
|
409
420
|
containerWeb,
|
|
421
|
+
placement === 'overlap' ? { marginBottom: -height, zIndex: Z_INDEX.floating } : null,
|
|
410
422
|
style,
|
|
411
423
|
]}
|
|
412
424
|
>
|
|
413
425
|
{chrome}
|
|
426
|
+
{floating && dock ? <Animated.View pointerEvents="none" testID={testID ? `${testID}-docked-fill` : undefined}
|
|
427
|
+
style={[StyleSheet.absoluteFill, {backgroundColor: surfaceFill}, dockFillStyle]} /> : null}
|
|
414
428
|
<View
|
|
415
429
|
style={[styles.bar, { paddingLeft: sideInset, paddingRight: sideInset }]}
|
|
416
430
|
pointerEvents={floating ? 'box-none' : undefined}
|
package/src/page-header/types.ts
CHANGED
|
@@ -30,11 +30,14 @@ export type PageHeaderPresentation = 'floating' | 'bar';
|
|
|
30
30
|
* at the top of the container and scrolls under the islands. The header then
|
|
31
31
|
* CLAIMS its measured height on `layout/top-edge`, and the content reads it
|
|
32
32
|
* with `useTopEdgeInset()` so its first item is not born underneath. This is
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
33
|
+
* placement the floating presentation was designed for.
|
|
34
|
+
*
|
|
35
|
+
* `overlap` keeps document stickiness while allowing the following hero to
|
|
36
|
+
* start behind the measured header; native places it before the list.
|
|
37
|
+
* Placement and presentation remain independent: a floating header above a
|
|
38
|
+
* fixed panel is also a supported arrangement.
|
|
36
39
|
*/
|
|
37
|
-
export type PageHeaderPlacement = 'inline' | 'overlay';
|
|
40
|
+
export type PageHeaderPlacement = 'inline' | 'overlay' | 'overlap';
|
|
38
41
|
|
|
39
42
|
/**
|
|
40
43
|
* The bottom separator: `auto` fades it in once the page has scrolled past
|
|
@@ -60,13 +63,14 @@ export type PageHeaderScrim = 'auto' | 'always' | 'none';
|
|
|
60
63
|
*
|
|
61
64
|
* `always` (default) is the ordinary screen header. `onScroll` holds the title
|
|
62
65
|
* back and fades it in with the scrim — the shape a header over a hero photo
|
|
63
|
-
* wants, where the photo already names the screen.
|
|
66
|
+
* wants, where the photo already names the screen. `onDock` uses the paired
|
|
67
|
+
* StickySection arrival instead, inside HeaderDockProvider.
|
|
64
68
|
*
|
|
65
69
|
* It is a prop of its own rather than a side effect of the background, because
|
|
66
70
|
* the two are different questions and conflating them is how every header that
|
|
67
71
|
* turned transparent also lost its title.
|
|
68
72
|
*/
|
|
69
|
-
export type PageHeaderTitleReveal = 'always' | 'onScroll';
|
|
73
|
+
export type PageHeaderTitleReveal = 'always' | 'onScroll' | 'onDock';
|
|
70
74
|
|
|
71
75
|
export interface PageHeaderProps {
|
|
72
76
|
/** A string renders as the heading; a node renders as-is (and owns its own semantics). */
|
package/src/sidebar/Sidebar.tsx
CHANGED
|
@@ -141,6 +141,7 @@ function SearchField({
|
|
|
141
141
|
const SidebarPanel: React.FC<SidebarProps> = ({
|
|
142
142
|
items = [],
|
|
143
143
|
primaryAction,
|
|
144
|
+
contentAlignment = 'start',
|
|
144
145
|
content,
|
|
145
146
|
onScroll,
|
|
146
147
|
footer,
|
|
@@ -163,6 +164,8 @@ const SidebarPanel: React.FC<SidebarProps> = ({
|
|
|
163
164
|
showSearch = true,
|
|
164
165
|
searchShortcutLabel = '⌘L',
|
|
165
166
|
searchShortcut = true,
|
|
167
|
+
searchQuery,
|
|
168
|
+
onSearchQueryChange,
|
|
166
169
|
searchLabel = 'Quick Search',
|
|
167
170
|
searchPlaceholder,
|
|
168
171
|
noResultsLabel = 'No results',
|
|
@@ -193,7 +196,7 @@ const SidebarPanel: React.FC<SidebarProps> = ({
|
|
|
193
196
|
|
|
194
197
|
const [searchActive, setSearchActive] = useState(false);
|
|
195
198
|
const [headerOverlap, setHeaderOverlap] = useState(10);
|
|
196
|
-
const [query, setQuery] =
|
|
199
|
+
const [query, setQuery] = useControllableState<string>({ value: searchQuery, defaultValue: '', onChange: onSearchQueryChange });
|
|
197
200
|
const [suppressUserHover, setSuppressUserHover] = useState(false);
|
|
198
201
|
const searchFieldRef = useRef<View>(null);
|
|
199
202
|
const searchTriggerRef = useRef<View>(null);
|
|
@@ -632,6 +635,7 @@ const SidebarPanel: React.FC<SidebarProps> = ({
|
|
|
632
635
|
style,
|
|
633
636
|
]}
|
|
634
637
|
>
|
|
638
|
+
<View testID={`${testID ?? 'sidebar'}-main-region`} style={{ width: '100%', minHeight: 0, flexShrink: 1, ...(contentAlignment === 'center' ? { flex: 1, justifyContent: 'center' as const } : {}) }}>
|
|
635
639
|
<View style={{ width: '100%', minHeight: 0, flexShrink: 1 }}>
|
|
636
640
|
{/* Fixed chrome shares the panel's morph, never the destination scroll.
|
|
637
641
|
The viewport reaches half a control behind it, so rows dissolve
|
|
@@ -666,7 +670,10 @@ const SidebarPanel: React.FC<SidebarProps> = ({
|
|
|
666
670
|
) : null}
|
|
667
671
|
{tree && !collapsed && shownFolders.length > 0 ? (
|
|
668
672
|
<View style={{ width: '100%', gap: 10 }}>
|
|
669
|
-
<
|
|
673
|
+
<View style={{ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between' }}>
|
|
674
|
+
<Text variant="body-medium" style={{ color: palette.textSecondary }}>{tree.label}</Text>
|
|
675
|
+
{tree.actions}
|
|
676
|
+
</View>
|
|
670
677
|
<View role="navigation" accessibilityLabel={tree.label} style={{ width: '100%', gap: 4 }}>
|
|
671
678
|
{shownFolders.map((folder) => (
|
|
672
679
|
<SidebarFolder key={folder.key} folder={folder} forceOpen={normalized.length > 0}
|
|
@@ -692,6 +699,7 @@ const SidebarPanel: React.FC<SidebarProps> = ({
|
|
|
692
699
|
</SidebarScrollArea>
|
|
693
700
|
{primaryAction ? <SidebarPrimaryAction action={primaryAction} collapsed={collapsed} testID={testID ? `${testID}-primary-action` : undefined} /> : null}
|
|
694
701
|
</View>
|
|
702
|
+
</View>
|
|
695
703
|
|
|
696
704
|
<View style={{ width: '100%', flexShrink: 0, gap: 12, paddingTop: hasTree ? 12 : 0 }}>
|
|
697
705
|
{showThemeToggle ? (
|