@multiplatform.one/components 7.79.0 → 7.80.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/dist/cjs/appShell/AppShell.cjs +432 -0
- package/dist/cjs/appShell/AppShell.native.js +499 -0
- package/dist/cjs/appShell/AppShell.native.js.map +1 -0
- package/dist/cjs/appShell/index.cjs +1 -0
- package/dist/cjs/appShell/index.native.js +1 -0
- package/dist/cjs/appShell/index.native.js.map +1 -1
- package/dist/cjs/layouts/page.cjs +3 -0
- package/dist/cjs/layouts/page.native.js +3 -0
- package/dist/cjs/layouts/page.native.js.map +1 -1
- package/dist/cjs/layouts/screenScroll.cjs +55 -0
- package/dist/cjs/layouts/screenScroll.native.js +59 -0
- package/dist/cjs/layouts/screenScroll.native.js.map +1 -1
- package/dist/cjs/layouts/sidebar.cjs +46 -9
- package/dist/cjs/layouts/sidebar.native.js +49 -9
- package/dist/cjs/layouts/sidebar.native.js.map +1 -1
- package/dist/esm/Accordion/index.native.js.map +1 -1
- package/dist/esm/AnimateHeight/index.native.js.map +1 -1
- package/dist/esm/Avatar/getInitials.native.js.map +1 -1
- package/dist/esm/Avatar/index.native.js.map +1 -1
- package/dist/esm/Badge/index.native.js.map +1 -1
- package/dist/esm/Button.native.js.map +1 -1
- package/dist/esm/Carousel/index.native.js.map +1 -1
- package/dist/esm/Chip/index.native.js.map +1 -1
- package/dist/esm/Collapsible.native.js.map +1 -1
- package/dist/esm/ContextMenu/index.native.js.map +1 -1
- package/dist/esm/CopyField/CopyMenuButton.native.js.map +1 -1
- package/dist/esm/CopyField/index.native.js.map +1 -1
- package/dist/esm/Dialog.native.js.map +1 -1
- package/dist/esm/Diff/diff.native.js.map +1 -1
- package/dist/esm/Diff/index.native.js.map +1 -1
- package/dist/esm/DotIndicator/index.native.js.map +1 -1
- package/dist/esm/DropdownMenu/index.native.js.map +1 -1
- package/dist/esm/DropdownMenu/menuSettle.native.js.map +1 -1
- package/dist/esm/ElapsedProgress/index.native.js.map +1 -1
- package/dist/esm/ErrorBoundary/index.native.js.map +1 -1
- package/dist/esm/Heading.native.js.map +1 -1
- package/dist/esm/Kbd/index.native.js.map +1 -1
- package/dist/esm/Kbd/keys.native.js.map +1 -1
- package/dist/esm/Lightbox/MediaControl.native.js.map +1 -1
- package/dist/esm/Lightbox/index.gnome.native.js.map +1 -1
- package/dist/esm/Lightbox/shared.native.js.map +1 -1
- package/dist/esm/Lightbox/useLightbox.native.js.map +1 -1
- package/dist/esm/MachineLiteral/index.native.js.map +1 -1
- package/dist/esm/Material/index.native.js.map +1 -1
- package/dist/esm/Meter/index.native.js.map +1 -1
- package/dist/esm/Meter/meter.native.js.map +1 -1
- package/dist/esm/OverflowRow/index.native.js.map +1 -1
- package/dist/esm/Pagination.native.js.map +1 -1
- package/dist/esm/Popover.native.js.map +1 -1
- package/dist/esm/ProgressSteps/index.native.js.map +1 -1
- package/dist/esm/Quote/index.native.js.map +1 -1
- package/dist/esm/SchemeToggle/index.native.js.map +1 -1
- package/dist/esm/ScrollView/revealFocusedField.native.js.map +1 -1
- package/dist/esm/Separator/index.native.js.map +1 -1
- package/dist/esm/Sheet.native.js.map +1 -1
- package/dist/esm/SheetModal/SheetHeader.native.js.map +1 -1
- package/dist/esm/SheetModal/SheetNavigation.native.js.map +1 -1
- package/dist/esm/SheetModal/detents.native.js.map +1 -1
- package/dist/esm/SheetModal/useSheetFrameFocus.native.js.map +1 -1
- package/dist/esm/Skeleton/index.native.js.map +1 -1
- package/dist/esm/SkipLink/index.native.js.map +1 -1
- package/dist/esm/SortableList/SortableHandle.native.js.map +1 -1
- package/dist/esm/SortableList/index.native.js.map +1 -1
- package/dist/esm/SortableList/useSortableRows.native.js.map +1 -1
- package/dist/esm/SortableList/useUserOrder.native.js.map +1 -1
- package/dist/esm/Tabs/index.native.js.map +1 -1
- package/dist/esm/Text.native.js.map +1 -1
- package/dist/esm/ThemePresetPicker/index.native.js.map +1 -1
- package/dist/esm/Toast/index.native.js.map +1 -1
- package/dist/esm/Toast/store.native.js.map +1 -1
- package/dist/esm/Tooltip/nativePress.native.js.map +1 -1
- package/dist/esm/Tooltip/tooltipShared.native.js.map +1 -1
- package/dist/esm/TreeSelect/index.native.js.map +1 -1
- package/dist/esm/TreeSelect/treeSelectModel.native.js.map +1 -1
- package/dist/esm/Video/PlayerChrome.native.js.map +1 -1
- package/dist/esm/Video/VideoFrame.native.js.map +1 -1
- package/dist/esm/Video/types.native.js.map +1 -1
- package/dist/esm/Wheel/index.native.js.map +1 -1
- package/dist/esm/Wizard/index.native.js.map +1 -1
- package/dist/esm/actions/ActionBar.native.js.map +1 -1
- package/dist/esm/actions/DangerSection.native.js.map +1 -1
- package/dist/esm/actions/DestructiveAction.native.js.map +1 -1
- package/dist/esm/actions/HeaderActions.native.js.map +1 -1
- package/dist/esm/actions/StandardAction.native.js.map +1 -1
- package/dist/esm/actions/devWarn.native.js.map +1 -1
- package/dist/esm/actions/index.native.js.map +1 -1
- package/dist/esm/actions/severity.native.js.map +1 -1
- package/dist/esm/appShell/AppShell.mjs +406 -0
- package/dist/esm/appShell/AppShell.mjs.map +1 -0
- package/dist/esm/appShell/AppShell.native.js +470 -0
- package/dist/esm/appShell/AppShell.native.js.map +1 -0
- package/dist/esm/appShell/Dock.native.js.map +1 -1
- package/dist/esm/appShell/MpoTabHost.native.js.map +1 -1
- package/dist/esm/appShell/ScopeMenu.native.js.map +1 -1
- package/dist/esm/appShell/SettingsSplit.native.js.map +1 -1
- package/dist/esm/appShell/Springboard.native.js.map +1 -1
- package/dist/esm/appShell/SystemBar.native.js.map +1 -1
- package/dist/esm/appShell/TabBar.native.js.map +1 -1
- package/dist/esm/appShell/appTile.native.js.map +1 -1
- package/dist/esm/appShell/bottomChrome.native.js.map +1 -1
- package/dist/esm/appShell/index.mjs +1 -0
- package/dist/esm/appShell/index.mjs.map +1 -1
- package/dist/esm/appShell/index.native.js +1 -0
- package/dist/esm/appShell/index.native.js.map +1 -1
- package/dist/esm/charts/Axis.native.js.map +1 -1
- package/dist/esm/charts/BarChart.native.js.map +1 -1
- package/dist/esm/charts/ChartDataView.native.js.map +1 -1
- package/dist/esm/charts/ChartSurface.native.js.map +1 -1
- package/dist/esm/charts/LineChart.native.js.map +1 -1
- package/dist/esm/charts/PieChart.native.js.map +1 -1
- package/dist/esm/charts/Sparkline.native.js.map +1 -1
- package/dist/esm/charts/accessibility.native.js.map +1 -1
- package/dist/esm/charts/chartHeight.native.js.map +1 -1
- package/dist/esm/charts/composeChart.native.js.map +1 -1
- package/dist/esm/charts/index.native.js.map +1 -1
- package/dist/esm/charts/math.native.js.map +1 -1
- package/dist/esm/charts/series.native.js.map +1 -1
- package/dist/esm/charts/svg.native.js.map +1 -1
- package/dist/esm/charts/types.native.js.map +1 -1
- package/dist/esm/charts/useChartTheme.native.js.map +1 -1
- package/dist/esm/code/Code/index.native.js.map +1 -1
- package/dist/esm/code/CodeBlock/index.native.js.map +1 -1
- package/dist/esm/code/HighlightedCode/index.native.js.map +1 -1
- package/dist/esm/code/Highlighter/houseSyntaxTheme.native.js.map +1 -1
- package/dist/esm/code/Highlighter/index.native.js.map +1 -1
- package/dist/esm/code/Highlighter/namedGroupMatchAll.native.js.map +1 -1
- package/dist/esm/code/Pre/index.native.js.map +1 -1
- package/dist/esm/code/index.native.js.map +1 -1
- package/dist/esm/componentColors.native.js.map +1 -1
- package/dist/esm/feedback/ConfirmDialog.native.js.map +1 -1
- package/dist/esm/feedback/NotifyHost.native.js.map +1 -1
- package/dist/esm/feedback/copy.native.js.map +1 -1
- package/dist/esm/feedback/index.native.js.map +1 -1
- package/dist/esm/feedback/notify.native.js.map +1 -1
- package/dist/esm/feedback/route.native.js.map +1 -1
- package/dist/esm/feedback/store.native.js.map +1 -1
- package/dist/esm/formLayouts/FormLayouts.native.js.map +1 -1
- package/dist/esm/formLayouts/PreferencePanel.native.js.map +1 -1
- package/dist/esm/formLayouts/index.native.js.map +1 -1
- package/dist/esm/hooks/index.native.js.map +1 -1
- package/dist/esm/hooks/useClipboard.native.js.map +1 -1
- package/dist/esm/hooks/useDocumentTitle.native.js.map +1 -1
- package/dist/esm/hooks/useHoldCue.native.js.map +1 -1
- package/dist/esm/icons/CheckRegular.native.js.map +1 -1
- package/dist/esm/icons/MinusRegular.native.js.map +1 -1
- package/dist/esm/icons/index.native.js.map +1 -1
- package/dist/esm/icons/lucide.native.js.map +1 -1
- package/dist/esm/icons/themed.native.js.map +1 -1
- package/dist/esm/images/Image/ImageFrame.native.js.map +1 -1
- package/dist/esm/images/Image/framing.native.js.map +1 -1
- package/dist/esm/images/Image/mediaRadius.native.js.map +1 -1
- package/dist/esm/images/Image/shared.native.js.map +1 -1
- package/dist/esm/images/Image/types.native.js.map +1 -1
- package/dist/esm/images/index.native.js.map +1 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/knobImmuneExports.native.js.map +1 -1
- package/dist/esm/layouts/AsyncBoundary.native.js.map +1 -1
- package/dist/esm/layouts/Debug/index.native.js.map +1 -1
- package/dist/esm/layouts/EmptyState.native.js.map +1 -1
- package/dist/esm/layouts/IdentityPlate.native.js.map +1 -1
- package/dist/esm/layouts/KeyboardAvoidingWrapper/behavior.native.js.map +1 -1
- package/dist/esm/layouts/PageTemplates.native.js.map +1 -1
- package/dist/esm/layouts/PaneScaffold.native.js.map +1 -1
- package/dist/esm/layouts/SafeAreaWrapper/insets.native.js.map +1 -1
- package/dist/esm/layouts/StatusDot.native.js.map +1 -1
- package/dist/esm/layouts/StatusGlyphStrip.native.js.map +1 -1
- package/dist/esm/layouts/ViewSwitcher.native.js.map +1 -1
- package/dist/esm/layouts/attachments.native.js.map +1 -1
- package/dist/esm/layouts/bottomAccessory.native.js.map +1 -1
- package/dist/esm/layouts/breadcrumbs.native.js.map +1 -1
- package/dist/esm/layouts/index.native.js.map +1 -1
- package/dist/esm/layouts/page.mjs +4 -2
- package/dist/esm/layouts/page.mjs.map +1 -1
- package/dist/esm/layouts/page.native.js +4 -2
- package/dist/esm/layouts/page.native.js.map +1 -1
- package/dist/esm/layouts/pageHeadingScope.native.js.map +1 -1
- package/dist/esm/layouts/screenScroll.mjs +53 -1
- package/dist/esm/layouts/screenScroll.mjs.map +1 -1
- package/dist/esm/layouts/screenScroll.native.js +57 -1
- package/dist/esm/layouts/screenScroll.native.js.map +1 -1
- package/dist/esm/layouts/shellSidebarSlot.native.js.map +1 -1
- package/dist/esm/layouts/sidebar.mjs +45 -11
- package/dist/esm/layouts/sidebar.mjs.map +1 -1
- package/dist/esm/layouts/sidebar.native.js +48 -11
- package/dist/esm/layouts/sidebar.native.js.map +1 -1
- package/dist/esm/layouts/tags.native.js.map +1 -1
- package/dist/esm/layouts/timeline.native.js.map +1 -1
- package/dist/esm/layouts/toolbar.native.js.map +1 -1
- package/dist/esm/shared/actionScan.native.js.map +1 -1
- package/dist/esm/shared/i18n.native.js.map +1 -1
- package/dist/esm/shared/restoreRetries.native.js.map +1 -1
- package/dist/esm/shared/t.native.js.map +1 -1
- package/dist/esm/shared/textRidesText.native.js.map +1 -1
- package/dist/esm/shared/useReturnFocusOnClose.native.js.map +1 -1
- package/dist/esm/surfaces.native.js.map +1 -1
- package/dist/esm/tamagui.native.js.map +1 -1
- package/dist/esm/testSetup.native.js.map +1 -1
- package/dist/esm/utils/setTinted.native.js.map +1 -1
- package/dist/esm/utils/unwrapText.native.js.map +1 -1
- package/dist/esm/views/Calendar.native.js.map +1 -1
- package/dist/esm/views/Dashboard.native.js.map +1 -1
- package/dist/esm/views/Gantt.native.js.map +1 -1
- package/dist/esm/views/GanttDateGrip.native.js.map +1 -1
- package/dist/esm/views/ImageGrid.native.js.map +1 -1
- package/dist/esm/views/List.native.js.map +1 -1
- package/dist/esm/views/ListGroup.native.js.map +1 -1
- package/dist/esm/views/ListRow.native.js.map +1 -1
- package/dist/esm/views/Matrix.native.js.map +1 -1
- package/dist/esm/views/ReportBuilder.native.js.map +1 -1
- package/dist/esm/views/ShortcutCard.native.js.map +1 -1
- package/dist/esm/views/TreeView.native.js.map +1 -1
- package/dist/esm/views/calendarMath.native.js.map +1 -1
- package/dist/esm/views/ganttIntervals.native.js.map +1 -1
- package/dist/esm/views/ganttMath.native.js.map +1 -1
- package/dist/esm/views/index.native.js.map +1 -1
- package/dist/esm/views/kanbanDnd.native.js.map +1 -1
- package/dist/esm/views/matrixMath.native.js.map +1 -1
- package/dist/esm/views/sameNameScope.native.js.map +1 -1
- package/dist/esm/views/treeViewDnd.native.js.map +1 -1
- package/dist/esm/views/treeViewLayout.native.js.map +1 -1
- package/dist/esm/views/treeViewMotion.native.js.map +1 -1
- package/dist/esm/views/treeViewReveal.native.js.map +1 -1
- package/dist/esm/views/usePageFlowLoadMore.native.js.map +1 -1
- package/dist/esm/views/widgetChrome.native.js.map +1 -1
- package/dist/jsx/appShell/AppShell.mjs +406 -0
- package/dist/jsx/appShell/AppShell.mjs.map +1 -0
- package/dist/jsx/appShell/AppShell.native.js +499 -0
- package/dist/jsx/appShell/AppShell.native.js.map +1 -0
- package/dist/jsx/appShell/index.mjs +1 -0
- package/dist/jsx/appShell/index.mjs.map +1 -1
- package/dist/jsx/appShell/index.native.js +1 -0
- package/dist/jsx/appShell/index.native.js.map +1 -1
- package/dist/jsx/feedback/NotifyHost.native.js +1 -1
- package/dist/jsx/formLayouts/PreferencePanel.native.js +1 -1
- package/dist/jsx/index.native.js +1 -1
- package/dist/jsx/layouts/AsyncBoundary.native.js +1 -1
- package/dist/jsx/layouts/AsyncBoundary.native.js.map +1 -1
- package/dist/jsx/layouts/page.mjs +4 -2
- package/dist/jsx/layouts/page.mjs.map +1 -1
- package/dist/jsx/layouts/page.native.js +3 -0
- package/dist/jsx/layouts/page.native.js.map +1 -1
- package/dist/jsx/layouts/screenScroll.mjs +53 -1
- package/dist/jsx/layouts/screenScroll.mjs.map +1 -1
- package/dist/jsx/layouts/screenScroll.native.js +59 -0
- package/dist/jsx/layouts/screenScroll.native.js.map +1 -1
- package/dist/jsx/layouts/sidebar.mjs +45 -11
- package/dist/jsx/layouts/sidebar.mjs.map +1 -1
- package/dist/jsx/layouts/sidebar.native.js +49 -9
- package/dist/jsx/layouts/sidebar.native.js.map +1 -1
- package/package.json +9 -9
- package/src/appShell/AppShell.spec.tsx +259 -0
- package/src/appShell/AppShell.stories.tsx +112 -0
- package/src/appShell/AppShell.tsx +526 -0
- package/src/appShell/index.ts +1 -0
- package/src/layouts/Sidebar.spec.tsx +31 -0
- package/src/layouts/page.tsx +8 -0
- package/src/layouts/screenScroll.tsx +71 -0
- package/src/layouts/sidebar.tsx +83 -5
- package/types/appShell/AppShell.d.ts +47 -0
- package/types/appShell/AppShell.d.ts.map +1 -0
- package/types/appShell/index.d.ts +1 -0
- package/types/appShell/index.d.ts.map +1 -1
- package/types/layouts/page.d.ts +5 -0
- package/types/layouts/page.d.ts.map +1 -1
- package/types/layouts/screenScroll.d.ts +24 -0
- package/types/layouts/screenScroll.d.ts.map +1 -1
- package/types/layouts/sidebar.d.ts +31 -1
- package/types/layouts/sidebar.d.ts.map +1 -1
package/src/layouts/page.tsx
CHANGED
|
@@ -67,6 +67,7 @@ import {
|
|
|
67
67
|
ScreenScrollScope,
|
|
68
68
|
TopBarSlot,
|
|
69
69
|
useLargeTitle,
|
|
70
|
+
useReportScreenScroll,
|
|
70
71
|
useScreenScroll,
|
|
71
72
|
useScreenScrollController,
|
|
72
73
|
useTopBarSlot,
|
|
@@ -97,6 +98,12 @@ function negateSpaceToken(token: string): `$-${string}` {
|
|
|
97
98
|
*/
|
|
98
99
|
export const CONTENT_MAX_WIDTH = layoutBreakpoints.xl;
|
|
99
100
|
|
|
101
|
+
/**
|
|
102
|
+
* The readable column an app shell centres its content in at regular width
|
|
103
|
+
* (UIKit's readableContentGuide): the two-pane budget breakpoint.
|
|
104
|
+
*/
|
|
105
|
+
export const READABLE_MAX_WIDTH = layoutBreakpoints.expanded;
|
|
106
|
+
|
|
100
107
|
export interface ScreenProps extends YStackProps {
|
|
101
108
|
/** Wrap content in a ScrollView. Default: true. */
|
|
102
109
|
scroll?: boolean;
|
|
@@ -271,6 +278,7 @@ function PageShell({
|
|
|
271
278
|
}: ScreenProps) {
|
|
272
279
|
const { knobProps } = useResolvedKnobs({ component: "Screen" });
|
|
273
280
|
const scrollState = useScreenScrollController();
|
|
281
|
+
useReportScreenScroll(scrollState.state, Boolean(topBar));
|
|
274
282
|
const [accessories] = useState(createBottomAccessoryStore);
|
|
275
283
|
const chromeInset = useBottomChromeInset();
|
|
276
284
|
const inset = noPadding ? null : (knobProps.panelPadding.padding as string);
|
|
@@ -308,6 +308,77 @@ export function useTopBarSlot(): TopBarSlotValue | null {
|
|
|
308
308
|
return useContext(TopBarSlotContext);
|
|
309
309
|
}
|
|
310
310
|
|
|
311
|
+
/**
|
|
312
|
+
* What the outermost Screen under an app shell tells the shell's nav bar
|
|
313
|
+
* (LC-157 under `AppShell`): its scroll state, and whether the page pins a
|
|
314
|
+
* top bar of its own, in which case that bar is the nav bar and the shell
|
|
315
|
+
* draws none.
|
|
316
|
+
*/
|
|
317
|
+
export interface ShellScrollReport extends ScreenScrollState {
|
|
318
|
+
ownTopBar: boolean;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
type ShellScrollReporter = (id: string, report: ShellScrollReport | null) => void;
|
|
322
|
+
|
|
323
|
+
const ShellScrollReportContext = createContext<ShellScrollReporter | null>(null);
|
|
324
|
+
|
|
325
|
+
/** The shell's half: the latest report, and the scope its content sits in. */
|
|
326
|
+
export function useShellScrollReports(): {
|
|
327
|
+
report: ShellScrollReport | null;
|
|
328
|
+
reporter: ShellScrollReporter;
|
|
329
|
+
} {
|
|
330
|
+
const [entry, setEntry] = useState<{ id: string; report: ShellScrollReport } | null>(null);
|
|
331
|
+
const reporter = useCallback<ShellScrollReporter>((id, report) => {
|
|
332
|
+
setEntry((prev) => {
|
|
333
|
+
if (!report) return prev?.id === id ? null : prev;
|
|
334
|
+
if (
|
|
335
|
+
prev?.id === id &&
|
|
336
|
+
prev.report.scrolled === report.scrolled &&
|
|
337
|
+
prev.report.collapsed === report.collapsed &&
|
|
338
|
+
prev.report.title === report.title &&
|
|
339
|
+
prev.report.ownTopBar === report.ownTopBar
|
|
340
|
+
) {
|
|
341
|
+
return prev;
|
|
342
|
+
}
|
|
343
|
+
return { id, report };
|
|
344
|
+
});
|
|
345
|
+
}, []);
|
|
346
|
+
return { report: entry?.report ?? null, reporter };
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
export function ShellScrollReportScope({
|
|
350
|
+
reporter,
|
|
351
|
+
children,
|
|
352
|
+
}: {
|
|
353
|
+
reporter: ShellScrollReporter;
|
|
354
|
+
children: ReactNode;
|
|
355
|
+
}) {
|
|
356
|
+
return (
|
|
357
|
+
<ShellScrollReportContext.Provider value={reporter}>
|
|
358
|
+
{children}
|
|
359
|
+
</ShellScrollReportContext.Provider>
|
|
360
|
+
);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* The Screen's half: the outermost Screen under a shell reports its state;
|
|
365
|
+
* a Screen nested in another stays quiet, so the page's own wins.
|
|
366
|
+
*/
|
|
367
|
+
export function useReportScreenScroll(state: ScreenScrollState, ownTopBar: boolean) {
|
|
368
|
+
const reporter = useContext(ShellScrollReportContext);
|
|
369
|
+
const nested = useContext(ScreenScrollActionsContext) !== null;
|
|
370
|
+
const id = useId();
|
|
371
|
+
const live = reporter && !nested ? reporter : null;
|
|
372
|
+
const { scrolled, collapsed, title } = state;
|
|
373
|
+
useEffect(() => {
|
|
374
|
+
live?.(id, { scrolled, collapsed, title, ownTopBar });
|
|
375
|
+
}, [live, id, scrolled, collapsed, title, ownTopBar]);
|
|
376
|
+
useEffect(() => {
|
|
377
|
+
if (!live) return;
|
|
378
|
+
return () => live(id, null);
|
|
379
|
+
}, [live, id]);
|
|
380
|
+
}
|
|
381
|
+
|
|
311
382
|
const inertTitle = () => () => undefined;
|
|
312
383
|
const inertTitleBottom = () => undefined;
|
|
313
384
|
|
package/src/layouts/sidebar.tsx
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
getGroupPosition,
|
|
6
6
|
hairline,
|
|
7
7
|
hairlineWidth,
|
|
8
|
+
normalizeToHex,
|
|
8
9
|
stackRadiusProps,
|
|
9
10
|
useResolvedKnobs,
|
|
10
11
|
wasKeyboardFocus,
|
|
@@ -12,7 +13,16 @@ import {
|
|
|
12
13
|
} from "@multiplatform.one/theme";
|
|
13
14
|
import type React from "react";
|
|
14
15
|
import { Fragment, useId, useState } from "react";
|
|
15
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
Label,
|
|
18
|
+
Separator,
|
|
19
|
+
Text as TamaguiText,
|
|
20
|
+
XStack,
|
|
21
|
+
YStack,
|
|
22
|
+
isWeb,
|
|
23
|
+
useTheme,
|
|
24
|
+
useThemeName,
|
|
25
|
+
} from "tamagui";
|
|
16
26
|
import { ScrollView } from "../ScrollView";
|
|
17
27
|
import { componentColors } from "../componentColors";
|
|
18
28
|
import { Text } from "../Text";
|
|
@@ -76,6 +86,46 @@ export interface SidebarProps {
|
|
|
76
86
|
*/
|
|
77
87
|
footer?: React.ReactNode;
|
|
78
88
|
testID?: string;
|
|
89
|
+
/** Pinned above the rows, outside their scroll (an app's name in a shell rail). */
|
|
90
|
+
header?: React.ReactNode;
|
|
91
|
+
/** Stacked under the sections inside the same scroll (a page's panel, LC-101). */
|
|
92
|
+
children?: React.ReactNode;
|
|
93
|
+
/**
|
|
94
|
+
* Paint the column in the translucent sidebar material instead of the card
|
|
95
|
+
* surface (the HIG source list): an app shell's sidebar.
|
|
96
|
+
*/
|
|
97
|
+
material?: boolean;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* The ramp step the sidebar material paints: darker than the page in light,
|
|
102
|
+
* lighter in dark, as the HIG sidebar reads against its content. The dark
|
|
103
|
+
* ramp climbs slower at its low end, so it takes one step more.
|
|
104
|
+
*/
|
|
105
|
+
export const sidebarMaterial = { light: "$color3", dark: "$color4" } as const;
|
|
106
|
+
/**
|
|
107
|
+
* How much of the page shows through the material. The shell's column sits
|
|
108
|
+
* beside its content, never over it, so the page ground is all that is
|
|
109
|
+
* behind it and a blur would paint nothing (LC-206).
|
|
110
|
+
*/
|
|
111
|
+
export const sidebarMaterialOpacity = 0.72;
|
|
112
|
+
/**
|
|
113
|
+
* A material rail's inset from its edges. Its rows are inset pills with no
|
|
114
|
+
* rule between them (the HIG source list); a header or footer lines up with
|
|
115
|
+
* the rows by it.
|
|
116
|
+
*/
|
|
117
|
+
export const sidebarRailInset = "$2";
|
|
118
|
+
|
|
119
|
+
function useSidebarMaterial(enabled: boolean) {
|
|
120
|
+
const theme = useTheme() as unknown as Record<string, { val?: unknown } | undefined>;
|
|
121
|
+
const step = useThemeName().startsWith("dark") ? sidebarMaterial.dark : sidebarMaterial.light;
|
|
122
|
+
if (!enabled) return null;
|
|
123
|
+
const base = theme[step.slice(1)]?.val;
|
|
124
|
+
const hex = typeof base === "string" ? normalizeToHex(base) : null;
|
|
125
|
+
const backgroundColor = hex
|
|
126
|
+
? `rgba(${[1, 3, 5].map((i) => parseInt(hex.slice(i, i + 2), 16)).join(", ")}, ${sidebarMaterialOpacity})`
|
|
127
|
+
: step;
|
|
128
|
+
return { backgroundColor };
|
|
79
129
|
}
|
|
80
130
|
|
|
81
131
|
export function Sidebar({
|
|
@@ -86,8 +136,12 @@ export function Sidebar({
|
|
|
86
136
|
divider = true,
|
|
87
137
|
footer,
|
|
88
138
|
testID,
|
|
139
|
+
header,
|
|
140
|
+
children,
|
|
141
|
+
material = false,
|
|
89
142
|
}: SidebarProps) {
|
|
90
143
|
const { knobProps } = useResolvedKnobs();
|
|
144
|
+
const materialProps = useSidebarMaterial(material);
|
|
91
145
|
const headingId = useId();
|
|
92
146
|
// LC-05: active row labels and metadata share the selection ink.
|
|
93
147
|
// SP-EDGE: rows own the horizontal inset (the panelPadding role via the
|
|
@@ -112,6 +166,7 @@ export function Sidebar({
|
|
|
112
166
|
// SF-CARD fill without a four-side control border (R-NONE). The end
|
|
113
167
|
// hairline is the panel divider (Axiom 15), stretched to the rail height.
|
|
114
168
|
{...knobProps.surface}
|
|
169
|
+
{...(materialProps as object)}
|
|
115
170
|
borderWidth={0}
|
|
116
171
|
borderColor="$borderColor"
|
|
117
172
|
{...(!divider
|
|
@@ -125,8 +180,21 @@ export function Sidebar({
|
|
|
125
180
|
: { borderEndWidth: hairlineWidth })}
|
|
126
181
|
testID={testID}
|
|
127
182
|
>
|
|
183
|
+
{header ? (
|
|
184
|
+
<YStack
|
|
185
|
+
flexShrink={0}
|
|
186
|
+
{...(material ? { paddingHorizontal: sidebarRailInset } : null)}
|
|
187
|
+
data-sidebar-header=""
|
|
188
|
+
>
|
|
189
|
+
{header}
|
|
190
|
+
</YStack>
|
|
191
|
+
) : null}
|
|
128
192
|
<ScrollView flex={1}>
|
|
129
|
-
<YStack
|
|
193
|
+
<YStack
|
|
194
|
+
{...knobProps.panelPadding}
|
|
195
|
+
paddingHorizontal={material ? sidebarRailInset : 0}
|
|
196
|
+
{...knobProps.gapLg}
|
|
197
|
+
>
|
|
130
198
|
{sections.map((section, sectionIdx) => {
|
|
131
199
|
const titleId = section.title ? `${headingId}-${sectionIdx}` : undefined;
|
|
132
200
|
return (
|
|
@@ -183,7 +251,9 @@ export function Sidebar({
|
|
|
183
251
|
<YStack width="100%" data-sidebar-group="">
|
|
184
252
|
{section.items.map((item, itemIdx, items) => {
|
|
185
253
|
const position = getGroupPosition(itemIdx, items.length);
|
|
186
|
-
const corners =
|
|
254
|
+
const corners = material
|
|
255
|
+
? { borderRadius: knobProps.borderRadius.borderRadius }
|
|
256
|
+
: stackRadiusProps(position, knobProps.borderRadius.borderRadius);
|
|
187
257
|
const itemKey = `${sectionIdx}:${String(item.value ?? item.label)}`;
|
|
188
258
|
const ink = item.active
|
|
189
259
|
? componentColors.selection.ink
|
|
@@ -202,7 +272,7 @@ export function Sidebar({
|
|
|
202
272
|
: null;
|
|
203
273
|
return (
|
|
204
274
|
<Fragment key={itemKey}>
|
|
205
|
-
{itemIdx > 0 ? (
|
|
275
|
+
{itemIdx > 0 && !material ? (
|
|
206
276
|
<YStack alignSelf="stretch" paddingStart={rowPad}>
|
|
207
277
|
<Separator alignSelf="stretch" {...hairline.line} />
|
|
208
278
|
</YStack>
|
|
@@ -325,10 +395,18 @@ export function Sidebar({
|
|
|
325
395
|
</YStack>
|
|
326
396
|
);
|
|
327
397
|
})}
|
|
398
|
+
{children}
|
|
328
399
|
</YStack>
|
|
329
400
|
</ScrollView>
|
|
330
401
|
{footer != null && footer !== false ? (
|
|
331
|
-
<YStack
|
|
402
|
+
<YStack
|
|
403
|
+
flexShrink={1}
|
|
404
|
+
minHeight={0}
|
|
405
|
+
maxHeight="50%"
|
|
406
|
+
width="100%"
|
|
407
|
+
{...(material ? { paddingHorizontal: sidebarRailInset } : null)}
|
|
408
|
+
data-sidebar-footer=""
|
|
409
|
+
>
|
|
332
410
|
<Separator width="100%" alignSelf="stretch" {...hairline.line} />
|
|
333
411
|
{footer}
|
|
334
412
|
</YStack>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { TabBarIcon, TabBarItem } from "./TabBar";
|
|
3
|
+
export interface AppShellDestination {
|
|
4
|
+
/** The destination's route; a path under it keeps it selected. */
|
|
5
|
+
key: string;
|
|
6
|
+
/** One short word: it is the tab caption and the back label. */
|
|
7
|
+
label: string;
|
|
8
|
+
icon: TabBarIcon;
|
|
9
|
+
/** The SF Symbol the iOS system tab bar draws for this destination. */
|
|
10
|
+
nativeIcon?: TabBarItem["nativeIcon"];
|
|
11
|
+
/**
|
|
12
|
+
* `tab` (default) sits in the phone's tab bar; `more` opens from the bar's
|
|
13
|
+
* pull-down. Every destination sits in the regular-width sidebar.
|
|
14
|
+
*/
|
|
15
|
+
placement?: "tab" | "more";
|
|
16
|
+
/** Runs instead of `onNavigate(key)`, e.g. an external link. */
|
|
17
|
+
onPress?: () => void;
|
|
18
|
+
}
|
|
19
|
+
export interface AppShellProps {
|
|
20
|
+
destinations: readonly AppShellDestination[];
|
|
21
|
+
/** The current route path. */
|
|
22
|
+
path: string;
|
|
23
|
+
onNavigate: (key: string) => void;
|
|
24
|
+
/** The app's name: the sidebar's title and the home control's label. */
|
|
25
|
+
title: string;
|
|
26
|
+
/** The app's mark, leading the bar on a phone and the name in the sidebar. */
|
|
27
|
+
logo?: ReactNode;
|
|
28
|
+
/** Pressing the name or mark. Default: the first destination. */
|
|
29
|
+
onTitlePress?: () => void;
|
|
30
|
+
/** Trailing bar actions (theme, account). */
|
|
31
|
+
actions?: ReactNode;
|
|
32
|
+
/** Shows a tinted back on a route pushed below its destination (its key). */
|
|
33
|
+
onBack?: (destinationKey: string) => void;
|
|
34
|
+
/** The phone's bottom accessory (LC-174), handed to the tab bar or pinned to the bottom edge. */
|
|
35
|
+
accessory?: ReactNode;
|
|
36
|
+
/** Route prefixes that mount their own chrome; the shell draws none there. */
|
|
37
|
+
ownChrome?: readonly string[];
|
|
38
|
+
children?: ReactNode;
|
|
39
|
+
testID?: string;
|
|
40
|
+
}
|
|
41
|
+
/** The destination that owns `path` (the longest key it sits under). */
|
|
42
|
+
export declare function appShellRoute(destinations: readonly AppShellDestination[], path: string): {
|
|
43
|
+
destination: AppShellDestination | undefined;
|
|
44
|
+
pushed: boolean;
|
|
45
|
+
};
|
|
46
|
+
export declare function AppShell({ destinations, path, onNavigate, title, logo, onTitlePress, actions, onBack, accessory, ownChrome, children, testID, }: AppShellProps): import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
//# sourceMappingURL=AppShell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../src/appShell/AppShell.tsx"],"names":[],"mappings":"AAiCA,OAAO,EAA+C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAepF,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAIvD,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,uEAAuE;IACvE,UAAU,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACtC;;;OAGG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3B,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC7C,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,6CAA6C;IAC7C,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,iGAAiG;IACjG,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAOD,wEAAwE;AACxE,wBAAgB,aAAa,CAC3B,YAAY,EAAE,SAAS,mBAAmB,EAAE,EAC5C,IAAI,EAAE,MAAM,GACX;IAAE,WAAW,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAQnE;AAiKD,wBAAgB,QAAQ,CAAC,EACvB,YAAY,EACZ,IAAI,EACJ,UAAU,EACV,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,MAAM,EACN,SAAS,EACT,SAAc,EACd,QAAQ,EACR,MAAoB,GACrB,EAAE,aAAa,2CAkPf"}
|
|
@@ -6,5 +6,6 @@ export { TabHost, type TabHostProps } from "./TabHost";
|
|
|
6
6
|
export * from "./Springboard";
|
|
7
7
|
export type { AppEntry } from "./appTile";
|
|
8
8
|
export * from "./SettingsSplit";
|
|
9
|
+
export * from "./AppShell";
|
|
9
10
|
export { useBottomChromeInset } from "./bottomChrome";
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/appShell/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,cAAc,eAAe,CAAC;AAC9B,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/appShell/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,cAAc,eAAe,CAAC;AAC9B,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/types/layouts/page.d.ts
CHANGED
|
@@ -24,6 +24,11 @@ import { type PageHeadingLevel } from "./pageHeadingScope";
|
|
|
24
24
|
* (DG-LAY-01: layout primitives consume breakpoint tokens, not raw pixels).
|
|
25
25
|
*/
|
|
26
26
|
export declare const CONTENT_MAX_WIDTH: 1280;
|
|
27
|
+
/**
|
|
28
|
+
* The readable column an app shell centres its content in at regular width
|
|
29
|
+
* (UIKit's readableContentGuide): the two-pane budget breakpoint.
|
|
30
|
+
*/
|
|
31
|
+
export declare const READABLE_MAX_WIDTH: 860;
|
|
27
32
|
export interface ScreenProps extends YStackProps {
|
|
28
33
|
/** Wrap content in a ScrollView. Default: true. */
|
|
29
34
|
scroll?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/layouts/page.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAeL,KAAK,cAAc,EAEpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAErF,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,KAAK,EAAE,eAAe,IAAI,sBAAsB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/layouts/page.tsx"],"names":[],"mappings":"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"}
|
|
@@ -112,6 +112,30 @@ export declare function TopBarSlot({ children, ...value }: TopBarSlotValue & {
|
|
|
112
112
|
}): import("react/jsx-runtime").JSX.Element;
|
|
113
113
|
/** The pinned top bar's slot, or null when a toolbar sits in the page flow. */
|
|
114
114
|
export declare function useTopBarSlot(): TopBarSlotValue | null;
|
|
115
|
+
/**
|
|
116
|
+
* What the outermost Screen under an app shell tells the shell's nav bar
|
|
117
|
+
* (LC-157 under `AppShell`): its scroll state, and whether the page pins a
|
|
118
|
+
* top bar of its own, in which case that bar is the nav bar and the shell
|
|
119
|
+
* draws none.
|
|
120
|
+
*/
|
|
121
|
+
export interface ShellScrollReport extends ScreenScrollState {
|
|
122
|
+
ownTopBar: boolean;
|
|
123
|
+
}
|
|
124
|
+
type ShellScrollReporter = (id: string, report: ShellScrollReport | null) => void;
|
|
125
|
+
/** The shell's half: the latest report, and the scope its content sits in. */
|
|
126
|
+
export declare function useShellScrollReports(): {
|
|
127
|
+
report: ShellScrollReport | null;
|
|
128
|
+
reporter: ShellScrollReporter;
|
|
129
|
+
};
|
|
130
|
+
export declare function ShellScrollReportScope({ reporter, children, }: {
|
|
131
|
+
reporter: ShellScrollReporter;
|
|
132
|
+
children: ReactNode;
|
|
133
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
134
|
+
/**
|
|
135
|
+
* The Screen's half: the outermost Screen under a shell reports its state;
|
|
136
|
+
* a Screen nested in another stays quiet, so the page's own wins.
|
|
137
|
+
*/
|
|
138
|
+
export declare function useReportScreenScroll(state: ScreenScrollState, ownTopBar: boolean): void;
|
|
115
139
|
/**
|
|
116
140
|
* A nested Screen's content scrolls in its parent's scroll view, so it reads
|
|
117
141
|
* the parent's scroll actions, but its own large title stays a heading in the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenScroll.d.ts","sourceRoot":"","sources":["../../src/layouts/screenScroll.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAclD,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,qEAAqE;IACrE,SAAS,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,UAAU,mBAAmB;IAC3B,WAAW,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAChC,+BAA+B;IAC/B,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC7B,iDAAiD;IACjD,MAAM,EAAE,MAAM,MAAM,CAAC;IACrB,uEAAuE;IACvE,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,IAAI,CAAC;IAC7C,0EAA0E;IAC1E,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAYD,UAAU,eAAe;IACvB,WAAW,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE;YAAE,CAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IACjD,MAAM,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,aAAa,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxC;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAOhE;AAED,MAAM,WAAW,sBAAsB;IACrC,yCAAyC;IACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3C,wEAAwE;IACxE,WAAW,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAChC,qEAAqE;IACrE,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC7B,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,IAAI,sBAAsB,CAmDlE;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,QAAQ,GACT,EAAE;IACD,UAAU,EAAE,sBAAsB,CAAC;IACnC,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAQA;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,IAAI,iBAAiB,CAEnD;AAyBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,UAAO;iBA+BrC,OAAO;;;;;;;EAKxC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEvE;AAOD;;;;;;;GAOG;AACH,wBAAgB,YAAY;iBAGM,OAAO;;EA6BxC;AAED,UAAU,eAAe;IACvB,uDAAuD;IACvD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAID,oDAAoD;AACpD,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAM3F;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,IAAI,eAAe,GAAG,IAAI,CAEtD;AAKD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAatE"}
|
|
1
|
+
{"version":3,"file":"screenScroll.d.ts","sourceRoot":"","sources":["../../src/layouts/screenScroll.tsx"],"names":[],"mappings":"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"}
|
|
@@ -56,6 +56,36 @@ export interface SidebarProps {
|
|
|
56
56
|
*/
|
|
57
57
|
footer?: React.ReactNode;
|
|
58
58
|
testID?: string;
|
|
59
|
+
/** Pinned above the rows, outside their scroll (an app's name in a shell rail). */
|
|
60
|
+
header?: React.ReactNode;
|
|
61
|
+
/** Stacked under the sections inside the same scroll (a page's panel, LC-101). */
|
|
62
|
+
children?: React.ReactNode;
|
|
63
|
+
/**
|
|
64
|
+
* Paint the column in the translucent sidebar material instead of the card
|
|
65
|
+
* surface (the HIG source list): an app shell's sidebar.
|
|
66
|
+
*/
|
|
67
|
+
material?: boolean;
|
|
59
68
|
}
|
|
60
|
-
|
|
69
|
+
/**
|
|
70
|
+
* The ramp step the sidebar material paints: darker than the page in light,
|
|
71
|
+
* lighter in dark, as the HIG sidebar reads against its content. The dark
|
|
72
|
+
* ramp climbs slower at its low end, so it takes one step more.
|
|
73
|
+
*/
|
|
74
|
+
export declare const sidebarMaterial: {
|
|
75
|
+
readonly light: "$color3";
|
|
76
|
+
readonly dark: "$color4";
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* How much of the page shows through the material. The shell's column sits
|
|
80
|
+
* beside its content, never over it, so the page ground is all that is
|
|
81
|
+
* behind it and a blur would paint nothing (LC-206).
|
|
82
|
+
*/
|
|
83
|
+
export declare const sidebarMaterialOpacity = 0.72;
|
|
84
|
+
/**
|
|
85
|
+
* A material rail's inset from its edges. Its rows are inset pills with no
|
|
86
|
+
* rule between them (the HIG source list); a header or footer lines up with
|
|
87
|
+
* the rows by it.
|
|
88
|
+
*/
|
|
89
|
+
export declare const sidebarRailInset = "$2";
|
|
90
|
+
export declare function Sidebar({ sections, width, "aria-label": ariaLabel, role, divider, footer, testID, header, children, material, }: SidebarProps): import("react/jsx-runtime").JSX.Element;
|
|
61
91
|
//# sourceMappingURL=sidebar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../src/layouts/sidebar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../src/layouts/sidebar.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAgB/B,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,8DAA8D;IAC9D,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,IAAI,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC;IACtC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;CAAiD,CAAC;AAC9E;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAcrC,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,KAAW,EACX,YAAY,EAAE,SAAqB,EACnC,IAAmB,EACnB,OAAc,EACd,MAAM,EACN,MAAM,EACN,MAAM,EACN,QAAQ,EACR,QAAgB,GACjB,EAAE,YAAY,2CAkRd"}
|