@kismet-ux/constellation 1.11.1 → 1.13.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/form/Checkbox/checkbox.js +56 -4
- package/dist/form/Checkbox/checkbox.js.map +1 -1
- package/dist/form/DatePicker/date-picker.js +55 -4
- package/dist/form/DatePicker/date-picker.js.map +1 -1
- package/dist/form/Input/input.css +9 -0
- package/dist/form.d.ts +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/use-keyboard-inset.d.ts +38 -0
- package/dist/hooks/use-keyboard-inset.d.ts.map +1 -0
- package/dist/hooks/use-keyboard-inset.js +76 -0
- package/dist/hooks/use-keyboard-inset.js.map +1 -0
- package/dist/index-B0d2advx.d.ts +354 -0
- package/dist/index-BaTZEId2.d.ts +354 -0
- package/dist/index-BgAs5Dmg.d.ts +354 -0
- package/dist/index-BhyLuP25.d.ts +354 -0
- package/dist/index-BnhsWXrb.d.ts +354 -0
- package/dist/index-CLUKMTTu.d.ts +354 -0
- package/dist/index-CVEb-8MV.d.ts +566 -0
- package/dist/index-CcD4F6q1.d.ts +633 -0
- package/dist/index-ClPGArR0.d.ts +633 -0
- package/dist/index-D2L-7_nr.d.ts +354 -0
- package/dist/index-D81GIX01.d.ts +566 -0
- package/dist/index-DHbG5cYq.d.ts +633 -0
- package/dist/index-DOKRFZ3I.d.ts +354 -0
- package/dist/index-DiR9pLJe.d.ts +566 -0
- package/dist/index-DxbOGj5Y.d.ts +354 -0
- package/dist/index-bK5ZOxgI.d.ts +633 -0
- package/dist/index-p7kVnzRy.d.ts +633 -0
- package/dist/index-xQq5cJnf.d.ts +633 -0
- package/dist/index.css +88 -0
- package/dist/index.d.ts +45 -7
- package/dist/index.js +32 -30
- package/dist/index.js.map +1 -1
- package/dist/layout/AppContentFooter/app-content-footer.css +18 -1
- package/dist/layout/AppContentMain/app-content-main.css +9 -0
- package/dist/layout/AppShell/app-shell.d.ts.map +1 -1
- package/dist/layout/AppShell/app-shell.js +10 -0
- package/dist/layout/AppShell/app-shell.js.map +1 -1
- package/dist/layout/AppSidebarHeader/app-sidebar-header.css +14 -1
- package/dist/layout/AppSidebarHeader/app-sidebar-header.js +30 -1
- package/dist/layout/AppSidebarHeader/app-sidebar-header.js.map +1 -1
- package/dist/layout/Sidebar/sidebar.css +32 -0
- package/dist/layout.d.ts +2 -2
- package/dist/navigation/NavUser/nav-user.js +2 -2
- package/dist/navigation/Sheet/sheet.css +20 -0
- package/dist/navigation/Sheet/sheet.js +29 -3
- package/dist/navigation/Sheet/sheet.js.map +1 -1
- package/dist/navigation.d.ts +1 -1
- package/dist/settings/AppearanceTabs/appearance-tabs.js +27 -1
- package/dist/settings/AppearanceTabs/appearance-tabs.js.map +1 -1
- package/dist/tokens.css +30 -0
- package/dist/tooltip-CZ7BC0g3.d.ts +46 -0
- package/dist/tooltip-Cf_wdeef.d.ts +46 -0
- package/dist/tooltip-D1Wex2bz.d.ts +46 -0
- package/dist/tooltip-X3uiRSnA.d.ts +46 -0
- package/dist/tooltip-zSCQCLLI.d.ts +46 -0
- package/dist/typography/Typography/typography.css +14 -14
- package/dist/ui/ChipSelect/chip-select.css +63 -0
- package/dist/ui/ChipSelect/chip-select.d.ts +69 -0
- package/dist/ui/ChipSelect/chip-select.d.ts.map +1 -0
- package/dist/ui/ChipSelect/chip-select.js +209 -0
- package/dist/ui/ChipSelect/chip-select.js.map +1 -0
- package/dist/ui/ChipSelect/chip-select.module.scss.js +6 -0
- package/dist/ui/ChipSelect/chip-select.module.scss.js.map +1 -0
- package/dist/ui/ChipSelect/index.d.ts +3 -0
- package/dist/ui/ChipSelect/index.d.ts.map +1 -0
- package/dist/ui/index.d.ts +1 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui.d.ts +2 -2
- package/dist/ui.js +1 -0
- package/dist/ui.js.map +1 -1
- package/package.json +1 -1
package/dist/index.css
CHANGED
|
@@ -428,6 +428,36 @@ svg {
|
|
|
428
428
|
*/
|
|
429
429
|
--size-0-5: 0.25rem;
|
|
430
430
|
--size-1-5: 0.75rem;
|
|
431
|
+
/*
|
|
432
|
+
* ── Type steps ─────────────────────────────────────────────────────────
|
|
433
|
+
*
|
|
434
|
+
* The sizes `Typography` sets per variant, exposed so an app can align its
|
|
435
|
+
* OWN rules to the same scale instead of copying the numbers into a
|
|
436
|
+
* stylesheet where they immediately start to drift.
|
|
437
|
+
*
|
|
438
|
+
* A component should still reach for the variant — `<Typography
|
|
439
|
+
* variant={'caption'}>` says what the text IS, where a raw size only says
|
|
440
|
+
* how big. These are for the CSS an app cannot express as a component:
|
|
441
|
+
* a badge's label, a table cell, a chip's count.
|
|
442
|
+
*
|
|
443
|
+
* ⚠️ `caption` is the FLOOR, and deliberately: 12px is about as small as
|
|
444
|
+
* sustained UI text can be and still be read at arm's length on a phone.
|
|
445
|
+
* The scale does not offer anything below it, and an app that wants
|
|
446
|
+
* something smaller is telling you its density is wrong.
|
|
447
|
+
*
|
|
448
|
+
* Headings keep their responsive overrides in the component — those are a
|
|
449
|
+
* breakpoint's business rather than the scale's.
|
|
450
|
+
*/
|
|
451
|
+
--font-size-caption: 0.75rem;
|
|
452
|
+
--font-size-body2: 0.875rem;
|
|
453
|
+
--font-size-body1: 1rem;
|
|
454
|
+
--font-size-subtitle1: 1.0625rem;
|
|
455
|
+
--font-size-h6: 1.35rem;
|
|
456
|
+
--font-size-h5: 1.5rem;
|
|
457
|
+
--font-size-h4: 1.65rem;
|
|
458
|
+
--font-size-h3: 1.85rem;
|
|
459
|
+
--font-size-h2: 2.25rem;
|
|
460
|
+
--font-size-h1: 2.75rem;
|
|
431
461
|
/*
|
|
432
462
|
* ── Measure ────────────────────────────────────────────────────────────
|
|
433
463
|
*
|
|
@@ -705,6 +735,27 @@ main.no-padding {
|
|
|
705
735
|
padding: 0;
|
|
706
736
|
}
|
|
707
737
|
|
|
738
|
+
/*
|
|
739
|
+
* ── Text and flex helpers ─────────────────────────────────────────────────
|
|
740
|
+
*
|
|
741
|
+
* The two that consumers kept writing for themselves. `--font-mono` is a token
|
|
742
|
+
* this library owns, so the utility that applies it belongs here rather than
|
|
743
|
+
* in every app that wants a figure to line up in a column; `Typography` still
|
|
744
|
+
* takes `mono` as a prop, and that is the better answer wherever the element
|
|
745
|
+
* is already a `Typography`. This is for the spans and cells that are not.
|
|
746
|
+
*
|
|
747
|
+
* `.grow` is `flex: 1` — the other half of `Column`'s `flex` prop, for a child
|
|
748
|
+
* that is not one of the layout primitives (a `Button` sharing a row, say).
|
|
749
|
+
*/
|
|
750
|
+
.mono {
|
|
751
|
+
font-family: var(--font-mono);
|
|
752
|
+
font-variant-numeric: tabular-nums;
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
.grow {
|
|
756
|
+
flex: 1;
|
|
757
|
+
}
|
|
758
|
+
|
|
708
759
|
.srOnly {
|
|
709
760
|
border: 0;
|
|
710
761
|
clip: rect(0, 0, 0, 0);
|
|
@@ -900,6 +951,43 @@ img {
|
|
|
900
951
|
animation: pulse 1.5s ease-in-out infinite;
|
|
901
952
|
}
|
|
902
953
|
|
|
954
|
+
/*
|
|
955
|
+
* Two more of the arrive family, both lifted out of an app that had written
|
|
956
|
+
* them itself. They differ from `fade-in` only in axis and distance, which is
|
|
957
|
+
* the whole vocabulary: a row slides in from the lead edge, a flash drops in.
|
|
958
|
+
*
|
|
959
|
+
* ⚠️ Shorter than `fade-in` on purpose. These play on things that arrive in
|
|
960
|
+
* NUMBERS — a list re-ordering, a count changing — where 280ms each reads as
|
|
961
|
+
* the page lurching rather than as a row appearing.
|
|
962
|
+
*/
|
|
963
|
+
.row-in {
|
|
964
|
+
animation: row-in 180ms var(--easing-default) both;
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
@keyframes row-in {
|
|
968
|
+
from {
|
|
969
|
+
opacity: 0;
|
|
970
|
+
transform: translateX(-4px);
|
|
971
|
+
}
|
|
972
|
+
to {
|
|
973
|
+
opacity: 1;
|
|
974
|
+
transform: none;
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
.pulse-in {
|
|
978
|
+
animation: pulse-in 220ms var(--easing-default);
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
@keyframes pulse-in {
|
|
982
|
+
from {
|
|
983
|
+
opacity: 0;
|
|
984
|
+
transform: translateY(-3px);
|
|
985
|
+
}
|
|
986
|
+
to {
|
|
987
|
+
opacity: 1;
|
|
988
|
+
transform: none;
|
|
989
|
+
}
|
|
990
|
+
}
|
|
903
991
|
/**
|
|
904
992
|
* Chrome has a bug with transitions on load since 2012!
|
|
905
993
|
*
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export { Logo, LogoProps } from './brand.js';
|
|
2
|
-
export { C as Checkbox, a as CheckboxProps, b as Combobox, c as ComboboxOption, d as ComboboxProps, D as DatePicker, e as DatePickerProps, F as FormTheme, L as Label, f as LabelProps, S as Select, g as SelectAlign, h as SelectContent, i as SelectContentProps, j as SelectField, k as SelectFieldProps, l as SelectGroup, m as SelectItem, n as SelectPosition, o as SelectProps, p as SelectSeparator, q as SelectSide, r as SelectTrigger, s as SelectValue, t as __Surface } from './index-
|
|
2
|
+
export { C as Checkbox, a as CheckboxProps, b as Combobox, c as ComboboxOption, d as ComboboxProps, D as DatePicker, e as DatePickerProps, F as FormTheme, L as Label, f as LabelProps, S as Select, g as SelectAlign, h as SelectContent, i as SelectContentProps, j as SelectField, k as SelectFieldProps, l as SelectGroup, m as SelectItem, n as SelectPosition, o as SelectProps, p as SelectSeparator, q as SelectSide, r as SelectTrigger, s as SelectValue, t as __Surface } from './index-DhS2nQjt.js';
|
|
3
3
|
export { I as Input, a as InputBaseProps } from './input-Cp5LET5i.js';
|
|
4
4
|
import * as React from 'react';
|
|
5
|
-
import { S as SidebarContextValue } from './index-
|
|
6
|
-
export { A as AppContent, a as AppContentFooter, b as AppContentFooterProps, c as AppContentMain, d as AppContentMainProps, e as AppFooter, f as AppFooterProps, g as AppShell, h as AppShellProps, i as AppSidebar, j as AppSidebarHeader, k as AppSidebarHeaderProps, l as AppSidebarProps, C as Collapse, m as CollapseProps, n as Column, o as ColumnProps, p as Container, q as ContainerProps, G as Grid, r as GridColumns, s as GridProps, R as Row, t as Sidebar, u as SidebarContent, v as SidebarFooter, w as SidebarGroup, x as SidebarGroupAction, y as SidebarGroupContent, z as SidebarGroupLabel, B as SidebarHeader, D as SidebarInput, E as SidebarInset, F as SidebarMenu, H as SidebarMenuAction, I as SidebarMenuBadge, J as SidebarMenuButton, K as SidebarMenuItem, L as SidebarMenuSkeleton, M as SidebarMenuSub, N as SidebarMenuSubButton, O as SidebarMenuSubItem, P as SidebarProvider, Q as SidebarRail, T as SidebarTrigger, U as SidebarVariant, V as Skeleton } from './index-
|
|
7
|
-
import { A as AlertContextValue, S as SortState } from './index-
|
|
8
|
-
export { a as Alert, b as AlertBanner, c as AlertBannerProps, d as AlertDescription, e as AlertMessage, f as AlertProps, g as AlertProvider, h as AlertTheme, i as AlertTitle, j as Avatar, k as AvatarFallback, l as AvatarFallbackProps, m as AvatarImage, n as AvatarImageProps, o as AvatarProps, C as Chip, p as ChipProps, q as
|
|
5
|
+
import { S as SidebarContextValue } from './index-DxbOGj5Y.js';
|
|
6
|
+
export { A as AppContent, a as AppContentFooter, b as AppContentFooterProps, c as AppContentMain, d as AppContentMainProps, e as AppFooter, f as AppFooterProps, g as AppShell, h as AppShellProps, i as AppSidebar, j as AppSidebarHeader, k as AppSidebarHeaderProps, l as AppSidebarProps, C as Collapse, m as CollapseProps, n as Column, o as ColumnProps, p as Container, q as ContainerProps, G as Grid, r as GridColumns, s as GridProps, R as Row, t as Sidebar, u as SidebarContent, v as SidebarFooter, w as SidebarGroup, x as SidebarGroupAction, y as SidebarGroupContent, z as SidebarGroupLabel, B as SidebarHeader, D as SidebarInput, E as SidebarInset, F as SidebarMenu, H as SidebarMenuAction, I as SidebarMenuBadge, J as SidebarMenuButton, K as SidebarMenuItem, L as SidebarMenuSkeleton, M as SidebarMenuSub, N as SidebarMenuSubButton, O as SidebarMenuSubItem, P as SidebarProvider, Q as SidebarRail, T as SidebarTrigger, U as SidebarVariant, V as Skeleton } from './index-DxbOGj5Y.js';
|
|
7
|
+
import { A as AlertContextValue, S as SortState } from './index-p7kVnzRy.js';
|
|
8
|
+
export { a as Alert, b as AlertBanner, c as AlertBannerProps, d as AlertDescription, e as AlertMessage, f as AlertProps, g as AlertProvider, h as AlertTheme, i as AlertTitle, j as Avatar, k as AvatarFallback, l as AvatarFallbackProps, m as AvatarImage, n as AvatarImageProps, o as AvatarProps, C as Chip, p as ChipProps, q as ChipSelect, r as ChipSelectOption, s as ChipSelectProps, t as CodeBlock, u as CodeBlockProps, D as DevIndicator, v as DevIndicatorProps, w as Dialog, x as DialogClose, y as DialogCloseProps, z as DialogContent, B as DialogContentProps, E as DialogDescription, F as DialogFooter, G as DialogHeader, H as DialogOverlay, I as DialogPortal, J as DialogProps, K as DialogTitle, L as DialogTrigger, M as DialogTriggerProps, N as EmptyState, O as EmptyStateProps, P as Icon, Q as IconProps, R as List, T as ListItem, U as ListItemProps, V as ListProps, W as Pagination, X as PaginationProps, Y as ProgressBar, Z as ProgressBarProps, _ as PushAlertInput, $ as Separator, a0 as SeparatorProps, a1 as SortContextValue, a2 as SortDirection, a3 as StatCard, a4 as StatCardDirection, a5 as StatCardProps, a6 as StatCardSize, a7 as StatCardTheme, a8 as StatCardVariant, a9 as StatusDot, aa as StatusDotProps, ab as Step, ac as StepProgress, ad as StepProgressProps, ae as Switch, af as SwitchProps, ag as Table, ah as TableActionCell, ai as TableActionCellProps, aj as TableActionItem, ak as TableBody, al as TableBodyProps, am as TableCard, an as TableCell, ao as TableFooter, ap as TableHead, aq as TableHeader, ar as TableRow, as as TableSortableHeader, at as TableSortableHeaderProps, au as TableToolbar, av as TableToolbarProps, aw as Toggle, ax as ToggleGroup, ay as ToggleGroupProps, az as ToggleProps, aA as TrendDirection, aB as persistAlert, aC as statusDotVariants } from './index-p7kVnzRy.js';
|
|
9
9
|
export { R as RowProps } from './row-CuhTBQhK.js';
|
|
10
10
|
export { Breadcrumbs, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, DropdownMenuItemProps, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuProps, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, DropdownMenuTriggerProps, Link, LinkProps, RouterAdapter, RouterProvider, Sheet, SheetBody, SheetClose, SheetCloseProps, SheetContent, SheetContentProps, SheetDescription, SheetFooter, SheetHeader, SheetProps, SheetTitle, SheetTrigger, SheetTriggerProps, useRouterAdapter } from './navigation.js';
|
|
11
11
|
export { B as BreadcrumbItemData, N as NavGroup, a as NavItem, b as NavUser, c as NavUserProps, S as SidebarNavItem, d as SidebarSection } from './nav-user-CilmWvtr.js';
|
|
@@ -13,7 +13,7 @@ export { AppearanceTabs, AppearanceToggleDropdown } from './settings.js';
|
|
|
13
13
|
export { a as User, b as UserMenuContent, U as UserMenuContentProps, c as UserMenuItem } from './user-menu-content-D0Ldzigm.js';
|
|
14
14
|
export { Heading, TruncatedText, TruncatedTextProps } from './typography.js';
|
|
15
15
|
export { T as Typography, a as TypographyAlign, b as TypographyProps, c as TypographySize, d as TypographyTheme, e as TypographyTransform, f as TypographyVariant, g as TypographyWeight } from './typography-CTGVc_Gg.js';
|
|
16
|
-
export { B as Button, a as ButtonProps, T as Tooltip, b as TooltipContent, c as TooltipContentProps, d as TooltipProps, e as TooltipProvider, f as TooltipTrigger, g as TooltipTriggerProps } from './tooltip-
|
|
16
|
+
export { B as Button, a as ButtonProps, T as Tooltip, b as TooltipContent, c as TooltipContentProps, d as TooltipProps, e as TooltipProvider, f as TooltipTrigger, g as TooltipTriggerProps } from './tooltip-DXoSckt9.js';
|
|
17
17
|
export { UserInfo } from './user.js';
|
|
18
18
|
export { CONSTELLATION_PORTAL_SELECTOR, getCsrfToken, isInConstellationPortal } from './utils.js';
|
|
19
19
|
import 'class-variance-authority';
|
|
@@ -81,6 +81,44 @@ declare function useAppearance(): {
|
|
|
81
81
|
|
|
82
82
|
declare function useInitials(): (fullName: string) => string;
|
|
83
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Publishes how far an on-screen keyboard reaches up the screen as `--kb`, on
|
|
86
|
+
* the document element. 0 whenever the keyboard is down.
|
|
87
|
+
*
|
|
88
|
+
* ⚠️ THERE IS NO CSS ANSWER TO THIS ON AN IPHONE, and that is why a hook
|
|
89
|
+
* exists for it rather than a stylesheet rule:
|
|
90
|
+
*
|
|
91
|
+
* · `interactive-widget=resizes-content` in the viewport meta is the proper
|
|
92
|
+
* fix — it shrinks the LAYOUT viewport with the keyboard, which keeps a
|
|
93
|
+
* docked band above it with no JavaScript at all. Chrome 108+ and Firefox
|
|
94
|
+
* 132+ implement it; **Safari does not, on any version through iOS 27.1**
|
|
95
|
+
* (checked 2026-09-15). Declare it anyway; it costs nothing where it works.
|
|
96
|
+
* · `env(keyboard-inset-height)` belongs to the VirtualKeyboard API, which is
|
|
97
|
+
* Chromium-only and needs an explicit opt-in.
|
|
98
|
+
*
|
|
99
|
+
* What Safari does instead: the layout viewport keeps its full height and only
|
|
100
|
+
* the VISUAL viewport shrinks. Everything pinned to the bottom therefore stays
|
|
101
|
+
* pinned to a bottom that is now behind the keyboard. So the overlap is
|
|
102
|
+
* measured here, and `AppContentFooter` and `AppContentMain` consume it.
|
|
103
|
+
*
|
|
104
|
+
* --kb = layout height − (what can be seen + how far it has been scrolled)
|
|
105
|
+
*
|
|
106
|
+
* ⚠️ `offsetTop` is in the formula on purpose. iOS scrolls the visual viewport
|
|
107
|
+
* to reveal a focused field, and without that term a band lifts by the whole
|
|
108
|
+
* keyboard while the page has already lifted part of the way — it overshoots on
|
|
109
|
+
* the way in and lands late on the way out.
|
|
110
|
+
*
|
|
111
|
+
* ⚠️ Rounded, and compared before writing. `visualViewport` fires `resize` and
|
|
112
|
+
* `scroll` continuously through the keyboard animation — roughly 60 events a
|
|
113
|
+
* second — and writing the variable on each one re-styles every consumer of it
|
|
114
|
+
* for differences of a fraction of a pixel.
|
|
115
|
+
*
|
|
116
|
+
* `AppShell` calls this once, so an app gets the behaviour by mounting the
|
|
117
|
+
* shell. Calling it again is harmless — the second instance writes the same
|
|
118
|
+
* number — but there is no reason to.
|
|
119
|
+
*/
|
|
120
|
+
declare function useKeyboardInset(): void;
|
|
121
|
+
|
|
84
122
|
declare function useBreakpoint(): {
|
|
85
123
|
width: number | undefined;
|
|
86
124
|
isBelow: (value?: number) => boolean;
|
|
@@ -117,5 +155,5 @@ declare function useReducedMotion(): boolean;
|
|
|
117
155
|
/** For the non-React paths — animation helpers that run outside a component. */
|
|
118
156
|
declare function prefersReducedMotion(): boolean;
|
|
119
157
|
|
|
120
|
-
export { AlertContextValue, SidebarContextValue, SortState, initializeMotion, initializeTheme, prefersReducedMotion, useAlerts, useAppearance, useBreakpoint, useFlip, useInitials, useIsMobile, useMotion, useReducedMotion, useSidebar, useTableSorting };
|
|
158
|
+
export { AlertContextValue, SidebarContextValue, SortState, initializeMotion, initializeTheme, prefersReducedMotion, useAlerts, useAppearance, useBreakpoint, useFlip, useInitials, useIsMobile, useKeyboardInset, useMotion, useReducedMotion, useSidebar, useTableSorting };
|
|
121
159
|
export type { Appearance, DragDropRef, Motion, ResolvedAppearance, UseFlipOptions };
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
|
+
export { Logo } from './brand/Logo/logo.js';
|
|
2
|
+
export { Checkbox } from './form/Checkbox/checkbox.js';
|
|
3
|
+
export { Combobox } from './form/Combobox/combobox.js';
|
|
4
|
+
export { DatePicker } from './form/DatePicker/date-picker.js';
|
|
5
|
+
export { Input } from './form/Input/input.js';
|
|
6
|
+
export { Label } from './form/Label/label.js';
|
|
7
|
+
export { Select, SelectContent, SelectField, SelectGroup, SelectItem, SelectSeparator, SelectTrigger, SelectValue, __Surface } from './form/Select/select.js';
|
|
1
8
|
export { useFlip } from './hooks/layout/use-flip.js';
|
|
2
9
|
export { useSidebar } from './hooks/layout/use-sidebar.js';
|
|
3
10
|
export { useAlerts } from './hooks/ui/use-alerts.js';
|
|
4
11
|
export { useTableSorting } from './hooks/ui/use-table-sorting.js';
|
|
5
12
|
export { initializeTheme, useAppearance } from './hooks/use-appearance.js';
|
|
6
13
|
export { useInitials } from './hooks/use-initials.js';
|
|
14
|
+
export { useKeyboardInset } from './hooks/use-keyboard-inset.js';
|
|
7
15
|
export { useBreakpoint, useIsMobile } from './hooks/use-mobile.js';
|
|
8
16
|
export { initializeMotion, prefersReducedMotion, useMotion, useReducedMotion } from './hooks/use-motion.js';
|
|
9
|
-
import './index.css';
|
|
10
|
-
export { Alert, AlertBanner, AlertDescription, AlertTitle } from './ui/Alert/alert.js';
|
|
11
|
-
export { AlertProvider } from './ui/Alert/alert-provider.js';
|
|
12
17
|
export { AppContent } from './layout/AppContent/app-content.js';
|
|
13
18
|
export { AppContentFooter } from './layout/AppContentFooter/app-content-footer.js';
|
|
14
19
|
export { AppContentMain } from './layout/AppContentMain/app-content-main.js';
|
|
@@ -16,44 +21,44 @@ export { AppFooter } from './layout/AppFooter/app-footer.js';
|
|
|
16
21
|
export { AppShell } from './layout/AppShell/app-shell.js';
|
|
17
22
|
export { AppSidebar } from './layout/AppSidebar/app-sidebar.js';
|
|
18
23
|
export { AppSidebarHeader } from './layout/AppSidebarHeader/app-sidebar-header.js';
|
|
19
|
-
export {
|
|
24
|
+
export { Collapse } from './layout/Collapse/collapse.js';
|
|
25
|
+
export { Column } from './layout/Column/column.js';
|
|
26
|
+
export { Container } from './layout/Container/container.js';
|
|
27
|
+
export { Grid } from './layout/Grid/grid.js';
|
|
28
|
+
export { Row } from './layout/Row/row.js';
|
|
29
|
+
export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarTrigger } from './layout/Sidebar/sidebar.js';
|
|
30
|
+
export { Skeleton } from './layout/Skeleton/skeleton.js';
|
|
31
|
+
export { Breadcrumbs } from './navigation/Breadcrumbs/breadcrumbs.js';
|
|
32
|
+
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './navigation/DropdownMenu/dropdown-menu.js';
|
|
33
|
+
export { Link } from './navigation/Link/link.js';
|
|
34
|
+
export { NavUser } from './navigation/NavUser/nav-user.js';
|
|
35
|
+
export { RouterProvider, useRouterAdapter } from './navigation/Router/router-context.js';
|
|
36
|
+
export { Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from './navigation/Sheet/sheet.js';
|
|
20
37
|
export { AppearanceToggleDropdown } from './settings/AppearanceDropdown/appearance-dropdown.js';
|
|
38
|
+
export { AppearanceTabs } from './settings/AppearanceTabs/appearance-tabs.js';
|
|
39
|
+
import './index.css';
|
|
40
|
+
export { Heading } from './typography/Heading/heading.js';
|
|
41
|
+
export { TruncatedText } from './typography/TruncatedText/truncated-text.js';
|
|
42
|
+
export { Typography } from './typography/Typography/typography.js';
|
|
43
|
+
export { Alert, AlertBanner, AlertDescription, AlertTitle } from './ui/Alert/alert.js';
|
|
44
|
+
export { persistAlert } from './ui/Alert/alert-persist.js';
|
|
45
|
+
export { AlertProvider } from './ui/Alert/alert-provider.js';
|
|
21
46
|
export { Avatar, AvatarFallback, AvatarImage } from './ui/Avatar/avatar.js';
|
|
22
|
-
export { Breadcrumbs } from './navigation/Breadcrumbs/breadcrumbs.js';
|
|
23
47
|
export { Button } from './ui/Button/button.js';
|
|
24
|
-
export { CONSTELLATION_PORTAL_SELECTOR, isInConstellationPortal } from './utils/portal.js';
|
|
25
|
-
export { Checkbox } from './form/Checkbox/checkbox.js';
|
|
26
48
|
export { Chip } from './ui/Chip/chip.js';
|
|
49
|
+
export { ChipSelect } from './ui/ChipSelect/chip-select.js';
|
|
27
50
|
export { CodeBlock } from './ui/CodeBlock/code-block.js';
|
|
28
|
-
export { Collapse } from './layout/Collapse/collapse.js';
|
|
29
|
-
export { Column } from './layout/Column/column.js';
|
|
30
|
-
export { Combobox } from './form/Combobox/combobox.js';
|
|
31
|
-
export { Container } from './layout/Container/container.js';
|
|
32
|
-
export { DatePicker } from './form/DatePicker/date-picker.js';
|
|
33
51
|
export { DevIndicator } from './ui/DevIndicator/dev-indicator.js';
|
|
34
52
|
export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from './ui/Dialog/dialog.js';
|
|
35
|
-
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './navigation/DropdownMenu/dropdown-menu.js';
|
|
36
53
|
export { EmptyState } from './ui/EmptyState/empty-state.js';
|
|
37
|
-
export { Grid } from './layout/Grid/grid.js';
|
|
38
|
-
export { Heading } from './typography/Heading/heading.js';
|
|
39
54
|
export { Icon } from './ui/Icon/icon.js';
|
|
40
|
-
export { Input } from './form/Input/input.js';
|
|
41
|
-
export { Label } from './form/Label/label.js';
|
|
42
|
-
export { Link } from './navigation/Link/link.js';
|
|
43
55
|
export { List, ListItem } from './ui/List/list.js';
|
|
44
|
-
export { Logo } from './brand/Logo/logo.js';
|
|
45
|
-
export { NavUser } from './navigation/NavUser/nav-user.js';
|
|
46
56
|
export { Pagination } from './ui/Pagination/pagination.js';
|
|
47
57
|
export { ProgressBar } from './ui/ProgressBar/progress-bar.js';
|
|
48
|
-
export { RouterProvider, useRouterAdapter } from './navigation/Router/router-context.js';
|
|
49
|
-
export { Row } from './layout/Row/row.js';
|
|
50
|
-
export { Select, SelectContent, SelectField, SelectGroup, SelectItem, SelectSeparator, SelectTrigger, SelectValue, __Surface } from './form/Select/select.js';
|
|
51
58
|
export { Separator } from './ui/Separator/separator.js';
|
|
52
|
-
export { Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from './navigation/Sheet/sheet.js';
|
|
53
|
-
export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarTrigger } from './layout/Sidebar/sidebar.js';
|
|
54
|
-
export { Skeleton } from './layout/Skeleton/skeleton.js';
|
|
55
59
|
export { StatCard } from './ui/StatCard/stat-card.js';
|
|
56
60
|
export { StatusDot } from './ui/StatusDot/status-dot.js';
|
|
61
|
+
export { statusDotVariants } from './ui/StatusDot/status-dot-variants.js';
|
|
57
62
|
export { StepProgress } from './ui/StepProgress/step-progress.js';
|
|
58
63
|
export { Switch } from './ui/Switch/switch.js';
|
|
59
64
|
export { Table, TableBody, TableCard, TableCell, TableFooter, TableHead, TableHeader, TableRow, TableSortableHeader } from './ui/Table/table.js';
|
|
@@ -62,11 +67,8 @@ export { TableToolbar } from './ui/TableToolbar/table-toolbar.js';
|
|
|
62
67
|
export { Toggle } from './ui/Toggle/toggle.js';
|
|
63
68
|
export { ToggleGroup } from './ui/ToggleGroup/toggle-group.js';
|
|
64
69
|
export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './ui/Tooltip/tooltip.js';
|
|
65
|
-
export { TruncatedText } from './typography/TruncatedText/truncated-text.js';
|
|
66
|
-
export { Typography } from './typography/Typography/typography.js';
|
|
67
70
|
export { UserInfo } from './user/UserInfo/user-info.js';
|
|
68
71
|
export { UserMenuContent } from './user/UserMenuContent/user-menu-content.js';
|
|
69
72
|
export { getCsrfToken } from './utils/csrf.js';
|
|
70
|
-
export {
|
|
71
|
-
export { statusDotVariants } from './ui/StatusDot/status-dot-variants.js';
|
|
73
|
+
export { CONSTELLATION_PORTAL_SELECTOR, isInConstellationPortal } from './utils/portal.js';
|
|
72
74
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,9 +1,26 @@
|
|
|
1
|
+
@charset "UTF-8";
|
|
1
2
|
.app-content-footer-module_app-content-footer__B1kjp {
|
|
2
3
|
backdrop-filter: blur(12px);
|
|
3
4
|
background-color: color-mix(in srgb, var(--background-default) 88%, transparent);
|
|
4
5
|
border-top: 1px solid var(--divider);
|
|
5
6
|
flex: 0 0 auto;
|
|
6
7
|
margin-top: auto;
|
|
7
|
-
|
|
8
|
+
/*
|
|
9
|
+
* Clear of the home indicator, and clear of the keyboard.
|
|
10
|
+
*
|
|
11
|
+
* `--kb` is how far an on-screen keyboard reaches up the screen, published
|
|
12
|
+
* by `useKeyboardInset` (mounted by `AppShell`, so every app gets it). It is
|
|
13
|
+
* 0 whenever the keyboard is down.
|
|
14
|
+
*
|
|
15
|
+
* ⚠️ `max()`, never a sum: while the keyboard is up it covers the home
|
|
16
|
+
* indicator, so the two insets describe the same strip of screen and adding
|
|
17
|
+
* them lifts the band a thumb's width too high.
|
|
18
|
+
*
|
|
19
|
+
* The band grows UPWARD as this grows — it is the last row of a column whose
|
|
20
|
+
* middle row takes the slack — so its contents come to rest exactly on top
|
|
21
|
+
* of the keyboard and the scrolling band keeps what is left.
|
|
22
|
+
*/
|
|
23
|
+
padding-bottom: max(env(safe-area-inset-bottom), var(--kb, 0px));
|
|
24
|
+
transition: padding-bottom 180ms ease-out;
|
|
8
25
|
z-index: var(--z-sticky);
|
|
9
26
|
}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
|
+
@charset "UTF-8";
|
|
1
2
|
.app-content-main-module_app-content-main__5IeB4 {
|
|
2
3
|
flex: 1 1 auto;
|
|
3
4
|
min-height: 0;
|
|
4
5
|
overflow-x: hidden;
|
|
5
6
|
overflow-y: auto;
|
|
7
|
+
/*
|
|
8
|
+
* Room at the foot of the scroll for whatever the keyboard is covering.
|
|
9
|
+
* A browser scrolls a focused field into view against the LAYOUT viewport,
|
|
10
|
+
* which on iOS does not shrink for the keyboard — so a field low in a long
|
|
11
|
+
* page is scrolled to a position that is behind it. `--kb` is 0 with the
|
|
12
|
+
* keyboard down, which makes this a no-op on a desktop.
|
|
13
|
+
*/
|
|
14
|
+
scroll-padding-bottom: var(--kb, 0px);
|
|
6
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../src/layout/AppShell/app-shell.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../src/layout/AppShell/app-shell.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,kBAAyB,EAAE,EAAE,aAAa,qBAgB9E"}
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useKeyboardInset } from '../../hooks/use-keyboard-inset.js';
|
|
2
3
|
import { SidebarProvider } from '../Sidebar/sidebar.js';
|
|
3
4
|
|
|
4
5
|
function AppShell({ children, defaultSidebarOpen = true }) {
|
|
6
|
+
/*
|
|
7
|
+
* Publishes `--kb` — how far an on-screen keyboard reaches up the screen —
|
|
8
|
+
* so the footer band can sit on top of it and the scrolling band can leave
|
|
9
|
+
* room for it. Mounted here because the shell is the one component every app
|
|
10
|
+
* renders exactly once, and because a phone keyboard is a fact about the
|
|
11
|
+
* platform rather than a decision an app should have to re-make. It is inert
|
|
12
|
+
* where `visualViewport` does not exist, which includes the server.
|
|
13
|
+
*/
|
|
14
|
+
useKeyboardInset();
|
|
5
15
|
return (jsx(SidebarProvider, { "data-slot": 'app-shell', defaultOpen: defaultSidebarOpen, children: children }));
|
|
6
16
|
}
|
|
7
17
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-shell.js","sources":["../../../src/layout/AppShell/app-shell.tsx"],"sourcesContent":["import * as React from 'react';\nimport { SidebarProvider } from '../Sidebar';\n\nexport interface AppShellProps {\n children: React.ReactNode;\n /**\n * Initial sidebar state. Persist this server-side (cookie, session) or in\n * localStorage and pass it in, so the sidebar doesn't flash open on load.\n */\n defaultSidebarOpen?: boolean;\n}\n\nexport function AppShell({ children, defaultSidebarOpen = true }: AppShellProps) {\n return (\n <SidebarProvider data-slot={'app-shell'} defaultOpen={defaultSidebarOpen}>\n {children}\n </SidebarProvider>\n );\n}\n"],"names":["_jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"app-shell.js","sources":["../../../src/layout/AppShell/app-shell.tsx"],"sourcesContent":["import { useKeyboardInset } from '@constellation/hooks/use-keyboard-inset';\nimport * as React from 'react';\nimport { SidebarProvider } from '../Sidebar';\n\nexport interface AppShellProps {\n children: React.ReactNode;\n /**\n * Initial sidebar state. Persist this server-side (cookie, session) or in\n * localStorage and pass it in, so the sidebar doesn't flash open on load.\n */\n defaultSidebarOpen?: boolean;\n}\n\nexport function AppShell({ children, defaultSidebarOpen = true }: AppShellProps) {\n /*\n * Publishes `--kb` — how far an on-screen keyboard reaches up the screen —\n * so the footer band can sit on top of it and the scrolling band can leave\n * room for it. Mounted here because the shell is the one component every app\n * renders exactly once, and because a phone keyboard is a fact about the\n * platform rather than a decision an app should have to re-make. It is inert\n * where `visualViewport` does not exist, which includes the server.\n */\n useKeyboardInset();\n\n return (\n <SidebarProvider data-slot={'app-shell'} defaultOpen={defaultSidebarOpen}>\n {children}\n </SidebarProvider>\n );\n}\n"],"names":["_jsx"],"mappings":";;;;AAaM,SAAU,QAAQ,CAAC,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,EAAiB,EAAA;AAC7E;;;;;;;AAOG;AACH,IAAA,gBAAgB,EAAE;AAElB,IAAA,QACEA,GAAA,CAAC,eAAe,EAAA,EAAA,WAAA,EAAY,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAA,QAAA,EACrE,QAAQ,EAAA,CACO;AAEtB;;"}
|
|
@@ -1,12 +1,25 @@
|
|
|
1
|
+
@charset "UTF-8";
|
|
1
2
|
.app-sidebar-header-module_app-sidebar-header__h-3UU {
|
|
2
3
|
border-bottom: 1px solid var(--sidebar-border);
|
|
3
4
|
flex-shrink: 0;
|
|
4
5
|
padding: 0 var(--size-0-5);
|
|
6
|
+
/*
|
|
7
|
+
* THE TOP BAND MEETS THE NOTCH, SO THE TOP BAND PAYS FOR IT.
|
|
8
|
+
*
|
|
9
|
+
* On a phone with `viewport-fit=cover` — which an installed web app needs,
|
|
10
|
+
* or every inset reads 0 and iOS letterboxes it in landscape — the page owns
|
|
11
|
+
* the strip behind the status bar. Padding rather than a margin so the
|
|
12
|
+
* header's ground runs up behind the clock the way a native navigation bar
|
|
13
|
+
* does, while its CONTENT clears it. Zero everywhere there is no inset.
|
|
14
|
+
*/
|
|
15
|
+
padding-top: env(safe-area-inset-top);
|
|
5
16
|
transition: all var(--sidebar-transition-duration) var(--sidebar-transition-ease);
|
|
6
17
|
}
|
|
7
18
|
@media (min-width: 769px) {
|
|
8
19
|
.app-sidebar-header-module_app-sidebar-header__h-3UU {
|
|
9
|
-
padding
|
|
20
|
+
/* ⚠️ Inline only. The shorthand here used to reset `padding-top` to 0 and
|
|
21
|
+
take the safe-area inset with it. */
|
|
22
|
+
padding-inline: var(--size-1);
|
|
10
23
|
}
|
|
11
24
|
}
|
|
12
25
|
.app-sidebar-header-module_app-sidebar-header__h-3UU {
|
|
@@ -7,9 +7,38 @@ import { Row } from '../Row/row.js';
|
|
|
7
7
|
import { SidebarTrigger } from '../Sidebar/sidebar.js';
|
|
8
8
|
import { Breadcrumbs } from '../../navigation/Breadcrumbs/breadcrumbs.js';
|
|
9
9
|
import { NavUser } from '../../navigation/NavUser/nav-user.js';
|
|
10
|
+
import { AppearanceToggleDropdown } from '../../settings/AppearanceDropdown/appearance-dropdown.js';
|
|
11
|
+
import '../../ui/Alert/alert.js';
|
|
12
|
+
import 'react-dom';
|
|
13
|
+
import '../../ui/Alert/alert.css';
|
|
14
|
+
import '../../ui/Avatar/avatar.js';
|
|
15
|
+
import '../../ui/Button/button.js';
|
|
16
|
+
import '../../ui/Chip/chip.js';
|
|
17
|
+
import '../../ui/ChipSelect/chip-select.js';
|
|
18
|
+
import '../../ui/CodeBlock/code-block.js';
|
|
10
19
|
import cn from 'clsx';
|
|
20
|
+
import '../../ui/DevIndicator/dev-indicator.css';
|
|
21
|
+
import '../../ui/Dialog/dialog.js';
|
|
22
|
+
import '../../ui/EmptyState/empty-state.js';
|
|
23
|
+
import '../../ui/Icon/icon.js';
|
|
24
|
+
import '../../ui/List/list.js';
|
|
25
|
+
import '../../ui/Pagination/pagination.js';
|
|
26
|
+
import '../../ui/ProgressBar/progress-bar.js';
|
|
27
|
+
import '../../ui/Separator/separator.js';
|
|
28
|
+
import '../../ui/StatCard/stat-card.js';
|
|
29
|
+
import '../../ui/StatusDot/status-dot.js';
|
|
30
|
+
import '../../ui/StatusDot/status-dot-variants.js';
|
|
31
|
+
import '../../ui/StepProgress/step-progress.js';
|
|
32
|
+
import '../../ui/Switch/switch.js';
|
|
33
|
+
import '../../ui/Table/table.js';
|
|
34
|
+
import '../../ui/TableActionCell/table-action-cell.js';
|
|
35
|
+
import '../../ui/TableToolbar/table-toolbar.js';
|
|
36
|
+
import '../../ui/Toggle/toggle.js';
|
|
37
|
+
import '../../ui/ToggleGroup/toggle-group.js';
|
|
38
|
+
import '../../ui/Tooltip/tooltip.js';
|
|
39
|
+
import 'lucide-react';
|
|
40
|
+
import '../../settings/AppearanceTabs/appearance-tabs.css';
|
|
11
41
|
import s from './app-sidebar-header.module.scss.js';
|
|
12
|
-
import { AppearanceToggleDropdown } from '../../settings/AppearanceDropdown/appearance-dropdown.js';
|
|
13
42
|
|
|
14
43
|
/**
|
|
15
44
|
* The header band of a content area.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-sidebar-header.js","sources":["../../../src/layout/AppSidebarHeader/app-sidebar-header.tsx"],"sourcesContent":["import { useSidebar } from '@constellation/hooks';\nimport { Row } from '@constellation/layout/Row';\nimport { SidebarTrigger } from '@constellation/layout/Sidebar';\nimport { Breadcrumbs } from '@constellation/navigation/Breadcrumbs';\nimport { NavUser, type NavUserProps } from '@constellation/navigation/NavUser';\nimport { AppearanceToggleDropdown } from '@constellation/settings';\nimport { type BreadcrumbItemData } from '@constellation/types';\nimport cn from 'clsx';\nimport * as React from 'react';\nimport s from './app-sidebar-header.module.scss';\n\nexport interface AppSidebarHeaderProps extends React.HTMLAttributes<HTMLElement> {\n breadcrumbs?: BreadcrumbItemData[];\n /** Omit to hide the account menu (e.g. on signed-out chrome). */\n user?: NavUserProps['user'];\n userMenu?: Omit<NavUserProps, 'user'>;\n /** Extra controls between the appearance toggle and the account menu. */\n actions?: React.ReactNode;\n}\n\n/**\n * The header band of a content area.\n *\n * `className` and any other DOM props reach the `header` element. They used to\n * be dropped on the floor — the component took four named props and spread\n * nothing — so a caller passing `className` got no error and no class, and\n * spent the difference looking at its own stylesheet.\n */\nexport function AppSidebarHeader({\n breadcrumbs = [],\n user,\n userMenu,\n actions,\n className,\n ...props\n}: AppSidebarHeaderProps) {\n const { state } = useSidebar();\n\n return (\n <Row\n data-slot={'app-sidebar-header'}\n el={'header'}\n align={'center'}\n gap={1}\n justify={'space-between'}\n className={cn(\n s['app-sidebar-header'],\n state === 'collapsed' && s['sidebar-header-collapsed'],\n className,\n )}\n {...props}\n >\n <Row gap={1}>\n <SidebarTrigger />\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n </Row>\n <Row gap={1} align={'center'}>\n {actions}\n <AppearanceToggleDropdown />\n {user && <NavUser user={user} {...userMenu} />}\n </Row>\n </Row>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"app-sidebar-header.js","sources":["../../../src/layout/AppSidebarHeader/app-sidebar-header.tsx"],"sourcesContent":["import { useSidebar } from '@constellation/hooks';\nimport { Row } from '@constellation/layout/Row';\nimport { SidebarTrigger } from '@constellation/layout/Sidebar';\nimport { Breadcrumbs } from '@constellation/navigation/Breadcrumbs';\nimport { NavUser, type NavUserProps } from '@constellation/navigation/NavUser';\nimport { AppearanceToggleDropdown } from '@constellation/settings';\nimport { type BreadcrumbItemData } from '@constellation/types';\nimport cn from 'clsx';\nimport * as React from 'react';\nimport s from './app-sidebar-header.module.scss';\n\nexport interface AppSidebarHeaderProps extends React.HTMLAttributes<HTMLElement> {\n breadcrumbs?: BreadcrumbItemData[];\n /** Omit to hide the account menu (e.g. on signed-out chrome). */\n user?: NavUserProps['user'];\n userMenu?: Omit<NavUserProps, 'user'>;\n /** Extra controls between the appearance toggle and the account menu. */\n actions?: React.ReactNode;\n}\n\n/**\n * The header band of a content area.\n *\n * `className` and any other DOM props reach the `header` element. They used to\n * be dropped on the floor — the component took four named props and spread\n * nothing — so a caller passing `className` got no error and no class, and\n * spent the difference looking at its own stylesheet.\n */\nexport function AppSidebarHeader({\n breadcrumbs = [],\n user,\n userMenu,\n actions,\n className,\n ...props\n}: AppSidebarHeaderProps) {\n const { state } = useSidebar();\n\n return (\n <Row\n data-slot={'app-sidebar-header'}\n el={'header'}\n align={'center'}\n gap={1}\n justify={'space-between'}\n className={cn(\n s['app-sidebar-header'],\n state === 'collapsed' && s['sidebar-header-collapsed'],\n className,\n )}\n {...props}\n >\n <Row gap={1}>\n <SidebarTrigger />\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n </Row>\n <Row gap={1} align={'center'}>\n {actions}\n <AppearanceToggleDropdown />\n {user && <NavUser user={user} {...userMenu} />}\n </Row>\n </Row>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA;;;;;;;AAOG;SACa,gBAAgB,CAAC,EAC/B,WAAW,GAAG,EAAE,EAChB,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,GAAG,KAAK,EACc,EAAA;AACtB,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE;IAE9B,QACEA,KAAC,GAAG,EAAA,EAAA,WAAA,EACS,oBAAoB,EAC/B,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,EAAE,CACX,CAAC,CAAC,oBAAoB,CAAC,EACvB,KAAK,KAAK,WAAW,IAAI,CAAC,CAAC,0BAA0B,CAAC,EACtD,SAAS,CACV,EAAA,GACG,KAAK,EAAA,QAAA,EAAA,CAETA,IAAA,CAAC,GAAG,EAAA,EAAC,GAAG,EAAE,CAAC,aACTC,GAAA,CAAC,cAAc,KAAG,EAClBA,GAAA,CAAC,WAAW,EAAA,EAAC,WAAW,EAAE,WAAW,EAAA,CAAI,IACrC,EACND,IAAA,CAAC,GAAG,EAAA,EAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAA,QAAA,EAAA,CACzB,OAAO,EACRC,GAAA,CAAC,wBAAwB,EAAA,EAAA,CAAG,EAC3B,IAAI,IAAIA,GAAA,CAAC,OAAO,EAAA,EAAC,IAAI,EAAE,IAAI,EAAA,GAAM,QAAQ,EAAA,CAAI,CAAA,EAAA,CAC1C,CAAA,EAAA,CACF;AAEV;;"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
@charset "UTF-8";
|
|
1
2
|
:root {
|
|
2
3
|
--sidebar-collapsed-gap: 0.5rem;
|
|
3
4
|
--sidebar-transition-duration: 200ms;
|
|
@@ -8,6 +9,28 @@
|
|
|
8
9
|
display: flex;
|
|
9
10
|
min-height: 100svh;
|
|
10
11
|
width: 100%;
|
|
12
|
+
/*
|
|
13
|
+
* INSTALLED, THE SHELL IS PINNED RATHER THAN SIZED.
|
|
14
|
+
*
|
|
15
|
+
* WebKit in iOS 26 undercounts `100dvh`, `innerHeight` and
|
|
16
|
+
* `visualViewport.height` by exactly the top safe-area inset when a site is
|
|
17
|
+
* running as a home-screen app — so a shell sized in viewport units comes up
|
|
18
|
+
* 47-59px short and everything anchored to the bottom (a docked search band,
|
|
19
|
+
* a toolbar) sits above the real edge of the screen. A box pinned by both
|
|
20
|
+
* edges has no height to get wrong.
|
|
21
|
+
*
|
|
22
|
+
* Scoped to `display-mode` on purpose. In a browser tab the shell stays in
|
|
23
|
+
* normal flow, because a consumer may well have page chrome above or below
|
|
24
|
+
* it and `position: fixed` would take the whole document out from under
|
|
25
|
+
* them; installed, there is nothing else on the screen by definition.
|
|
26
|
+
*/
|
|
27
|
+
}
|
|
28
|
+
@media (display-mode: standalone), (display-mode: fullscreen) {
|
|
29
|
+
.sidebar-module_sidebar-wrapper__vmUud {
|
|
30
|
+
inset: 0;
|
|
31
|
+
min-height: 0;
|
|
32
|
+
position: fixed;
|
|
33
|
+
}
|
|
11
34
|
}
|
|
12
35
|
.sidebar-module_sidebar-wrapper__vmUud.sidebar-module_inset__I909E {
|
|
13
36
|
background: var(--sidebar);
|
|
@@ -99,6 +122,15 @@
|
|
|
99
122
|
flex: 1 1 auto;
|
|
100
123
|
flex-direction: column;
|
|
101
124
|
height: 100svh;
|
|
125
|
+
/* Fills the pinned wrapper above rather than measuring the viewport a second
|
|
126
|
+
time — `100svh` is the measurement iOS 26 gets wrong. */
|
|
127
|
+
}
|
|
128
|
+
@media (display-mode: standalone), (display-mode: fullscreen) {
|
|
129
|
+
.sidebar-module_sidebar-inset__DVzuf {
|
|
130
|
+
height: 100%;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
.sidebar-module_sidebar-inset__DVzuf {
|
|
102
134
|
max-width: 100%;
|
|
103
135
|
min-width: 0;
|
|
104
136
|
position: relative;
|
package/dist/layout.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { A as AppContent, a as AppContentFooter, b as AppContentFooterProps, c as AppContentMain, d as AppContentMainProps, e as AppFooter, f as AppFooterProps, g as AppShell, h as AppShellProps, i as AppSidebar, j as AppSidebarHeader, k as AppSidebarHeaderProps, l as AppSidebarProps, C as Collapse, m as CollapseProps, n as Column, o as ColumnProps, p as Container, G as Grid, R as Row, t as Sidebar, u as SidebarContent, v as SidebarFooter, w as SidebarGroup, x as SidebarGroupAction, y as SidebarGroupContent, z as SidebarGroupLabel, B as SidebarHeader, D as SidebarInput, E as SidebarInset, F as SidebarMenu, H as SidebarMenuAction, I as SidebarMenuBadge, J as SidebarMenuButton, K as SidebarMenuItem, L as SidebarMenuSkeleton, M as SidebarMenuSub, N as SidebarMenuSubButton, O as SidebarMenuSubItem, P as SidebarProvider, Q as SidebarRail, T as SidebarTrigger, V as Skeleton } from './index-
|
|
1
|
+
export { A as AppContent, a as AppContentFooter, b as AppContentFooterProps, c as AppContentMain, d as AppContentMainProps, e as AppFooter, f as AppFooterProps, g as AppShell, h as AppShellProps, i as AppSidebar, j as AppSidebarHeader, k as AppSidebarHeaderProps, l as AppSidebarProps, C as Collapse, m as CollapseProps, n as Column, o as ColumnProps, p as Container, G as Grid, R as Row, t as Sidebar, u as SidebarContent, v as SidebarFooter, w as SidebarGroup, x as SidebarGroupAction, y as SidebarGroupContent, z as SidebarGroupLabel, B as SidebarHeader, D as SidebarInput, E as SidebarInset, F as SidebarMenu, H as SidebarMenuAction, I as SidebarMenuBadge, J as SidebarMenuButton, K as SidebarMenuItem, L as SidebarMenuSkeleton, M as SidebarMenuSub, N as SidebarMenuSubButton, O as SidebarMenuSubItem, P as SidebarProvider, Q as SidebarRail, T as SidebarTrigger, V as Skeleton } from './index-DxbOGj5Y.js';
|
|
2
2
|
export { R as RowProps } from './row-CuhTBQhK.js';
|
|
3
3
|
import 'react';
|
|
4
4
|
import './nav-user-CilmWvtr.js';
|
|
5
5
|
import 'lucide-react';
|
|
6
6
|
import './user-menu-content-D0Ldzigm.js';
|
|
7
7
|
import './input-Cp5LET5i.js';
|
|
8
|
-
import './tooltip-
|
|
8
|
+
import './tooltip-DXoSckt9.js';
|
|
9
9
|
import 'class-variance-authority';
|
|
10
10
|
import 'class-variance-authority/types';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { SidebarMenuButton } from '../../layout/Sidebar/sidebar.js';
|
|
3
3
|
import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent } from '../DropdownMenu/dropdown-menu.js';
|
|
4
|
-
import { ChevronsUpDownIcon } from 'lucide-react';
|
|
5
|
-
import s from './nav-user.module.scss.js';
|
|
6
4
|
import { UserInfo } from '../../user/UserInfo/user-info.js';
|
|
7
5
|
import { UserMenuContent } from '../../user/UserMenuContent/user-menu-content.js';
|
|
6
|
+
import { ChevronsUpDownIcon } from 'lucide-react';
|
|
7
|
+
import s from './nav-user.module.scss.js';
|
|
8
8
|
|
|
9
9
|
/** Sidebar footer control: the signed-in user plus their account menu. */
|
|
10
10
|
function NavUser({ user, ...menuProps }) {
|
|
@@ -128,6 +128,17 @@
|
|
|
128
128
|
display: flex;
|
|
129
129
|
flex-direction: column;
|
|
130
130
|
overflow: hidden;
|
|
131
|
+
/*
|
|
132
|
+
* A sheet is its own layer over the whole page, pinned edge to edge, so it
|
|
133
|
+
* meets the notch and the home indicator itself — nothing above it in the
|
|
134
|
+
* tree can pay for them on its behalf. Without this the title of a
|
|
135
|
+
* full-height sheet sits under the status bar on a phone.
|
|
136
|
+
*
|
|
137
|
+
* Padding, so the sheet's ground still runs all the way to the edge of the
|
|
138
|
+
* screen. Zero everywhere there is no inset, which is every desktop.
|
|
139
|
+
*/
|
|
140
|
+
padding-bottom: env(safe-area-inset-bottom);
|
|
141
|
+
padding-top: env(safe-area-inset-top);
|
|
131
142
|
position: fixed;
|
|
132
143
|
z-index: var(--z-modal);
|
|
133
144
|
}
|
|
@@ -137,6 +148,15 @@
|
|
|
137
148
|
min-height: 0;
|
|
138
149
|
overflow-y: auto;
|
|
139
150
|
padding: 0 1rem 1rem;
|
|
151
|
+
/*
|
|
152
|
+
* Room for the keyboard, for the same reason `AppContentMain` has it: a
|
|
153
|
+
* browser scrolls a focused field into view against the LAYOUT viewport,
|
|
154
|
+
* which on iOS does not shrink for the keyboard — so a field low in a long
|
|
155
|
+
* sheet is scrolled to a position behind it. `--kb` is 0 with the keyboard
|
|
156
|
+
* down, so this is a no-op on a desktop.
|
|
157
|
+
*/
|
|
158
|
+
padding-bottom: calc(1rem + var(--kb, 0px));
|
|
159
|
+
scroll-padding-bottom: var(--kb, 0px);
|
|
140
160
|
}
|
|
141
161
|
|
|
142
162
|
.sheet-module_content-right__pLrfN {
|