@onnechat/ui 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -383,10 +383,18 @@ declare const Sidebar: typeof SidebarRoot & {
383
383
  * `AppShell.Navbar`. `AppShell.Header` automatically renders one toggle per
384
384
  * enabled side (left before the title, right after the actions), so any
385
385
  * sidebar combination — none, left only, right only, both — gets exactly
386
- * the toggles that apply. `AppShell.LeftSidebarTrigger` and
387
- * `AppShell.RightSidebarTrigger` exist for custom placements (both accept a
388
- * custom `icon`), and `useLeftSidebarToggle`/`useRightSidebarToggle` expose
389
- * just the toggle function for fully custom elements.
386
+ * the toggles that apply; its `leftSidebarTrigger`/`rightSidebarTrigger`
387
+ * slots replace that default (pass a node) or remove it (pass `null`).
388
+ * `AppShell.LeftSidebarTrigger` and `AppShell.RightSidebarTrigger` exist for
389
+ * custom placements (both accept a custom `icon`), and
390
+ * `useLeftSidebarToggle`/`useRightSidebarToggle` expose just the toggle
391
+ * function for fully custom elements.
392
+ *
393
+ * `AppShell.Inset` additionally takes pinned `top`/`bottom` slots
394
+ * (`<AppShell.Inset top={…} bottom={…}>`): rows fixed on screen above/below
395
+ * the rounded panel, on the shell background (Linear-style), while the page
396
+ * scrolls the panel between them — the sticky Header docks right below the
397
+ * `top` row.
390
398
  */
391
399
  declare function AppShellRoot({ leftSidebar, rightSidebar, className, children, ...props }: React$1.ComponentProps<'div'> & {
392
400
  /**
@@ -499,7 +507,7 @@ declare function AppShellSidebarItem({ index, isDropdownChild, level, ...item }:
499
507
  declare function AppShellCommandButton({ className, children, ...props }: React$1.ComponentProps<'button'>): react_jsx_runtime.JSX.Element;
500
508
  declare function AppShellSidebarFooter({ className, children, ...props }: React$1.ComponentProps<typeof Sidebar.Footer>): react_jsx_runtime.JSX.Element;
501
509
  declare function AppShellCopyright({ className, children, ...props }: React$1.ComponentProps<'span'>): react_jsx_runtime.JSX.Element;
502
- declare function AppShellHeader({ className, logo, title, actions, user, leftSidebarToggleLabel, rightSidebarToggleLabel, mobileActionsClassName, ...props }: Omit<React$1.ComponentProps<'div'>, 'title'> & {
510
+ declare function AppShellHeader({ className, logo, title, actions, user, leftSidebarTrigger, rightSidebarTrigger, leftSidebarToggleLabel, rightSidebarToggleLabel, mobileActionsClassName, ...props }: Omit<React$1.ComponentProps<'div'>, 'title'> & {
503
511
  /** Mobile-only logo slot (top-left). */
504
512
  logo?: React$1.ReactNode;
505
513
  /** Page title area (both breakpoints). */
@@ -508,6 +516,20 @@ declare function AppShellHeader({ className, logo, title, actions, user, leftSid
508
516
  actions?: React$1.ReactNode;
509
517
  /** Mobile-only user slot (top-right, e.g. avatar). */
510
518
  user?: React$1.ReactNode;
519
+ /**
520
+ * Left sidebar toggle slot (desktop header only — mobile has no sidebars).
521
+ * Omit for the automatic trigger (shown while `leftSidebar` is enabled on
522
+ * AppShell), pass a node to replace it (e.g.
523
+ * `<AppShell.LeftSidebarTrigger icon="…" />`), or `null` to render none.
524
+ */
525
+ leftSidebarTrigger?: React$1.ReactNode;
526
+ /**
527
+ * Right sidebar toggle slot (desktop header only — mobile has no
528
+ * sidebars). Omit for the automatic trigger (shown while `rightSidebar`
529
+ * is enabled on AppShell), pass a node to replace it, or `null` to render
530
+ * none.
531
+ */
532
+ rightSidebarTrigger?: React$1.ReactNode;
511
533
  /** Tooltip label of the auto-rendered left sidebar toggle. */
512
534
  leftSidebarToggleLabel?: string;
513
535
  /** Tooltip label of the auto-rendered right sidebar toggle. */
@@ -520,7 +542,7 @@ declare function AppShellNavbarItem({ className, icon, active, href, children, .
520
542
  active?: boolean;
521
543
  children?: React$1.ReactNode;
522
544
  }): react_jsx_runtime.JSX.Element;
523
- declare function AppShellInset({ className, style, children, loading, spacing, ...props }: React$1.ComponentProps<'div'> & {
545
+ declare function AppShellInset({ className, style, children, loading, spacing, top, bottom, ...props }: React$1.ComponentProps<'div'> & {
524
546
  /**
525
547
  * Shows a blocking loading overlay while keeping the shell (sidebar,
526
548
  * navbar) interactive. Content stays mounted but hidden.
@@ -528,6 +550,21 @@ declare function AppShellInset({ className, style, children, loading, spacing, .
528
550
  loading?: boolean;
529
551
  /** Spacing scale unit for `--calculated-spacing` (bottom paddings, widget offsets). */
530
552
  spacing?: number;
553
+ /**
554
+ * Pinned row rendered above the inset panel, on the shell background.
555
+ * The page keeps its normal document scroll — the row stays fixed on
556
+ * screen (below the announcement banner) while the panel slides beneath
557
+ * it, and the sticky Header docks right under it.
558
+ */
559
+ top?: React$1.ReactNode;
560
+ /**
561
+ * Pinned row rendered below the inset panel, on the shell background
562
+ * (Linear-style). The page keeps its normal document scroll — the row
563
+ * stays fixed at the bottom of the screen while the panel slides beneath
564
+ * it. Below `lg`, the row hides automatically whenever an
565
+ * `AppShell.Navbar` is mounted (the floating navbar owns that space).
566
+ */
567
+ bottom?: React$1.ReactNode;
531
568
  }): react_jsx_runtime.JSX.Element;
532
569
  declare function AppShellLoading({ className, ...props }: React$1.ComponentProps<'div'>): react_jsx_runtime.JSX.Element;
533
570
  declare const AppShell: typeof AppShellRoot & {
@@ -1970,4 +2007,4 @@ declare const ScrollArea: React$1.ForwardRefExoticComponent<Omit<Omit<_base_ui_r
1970
2007
  ScrollBar: React$1.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.ScrollAreaScrollbarProps, "ref"> & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
1971
2008
  };
1972
2009
 
1973
- export { ANNOUNCEMENT_TYPES, Accordion, ActionGroup, Alert, AnnouncementBanner, type AnnouncementBannerProps, type AnnouncementType, AppShell, type AppShellSidebarItemData, AreaChart, Avatar, type BackgroundVariant, Badge, type BadgeProps, BarChart, BrandDomainInput, type BrandIconName, Breadcrumb, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonVariants, Calendar, Card, CardContent, CardFooter, CardHeader, CardSlider, ChartBackground, ChartBrush, type ChartBrushProps, type ChartBrushRange, type ChartBrushVariant, type ChartConfig, ChartContainer, ChartDot, ChartLegend, ChartLegendContent, type ChartLegendVariant, ChartStyle, ChartTooltip, ChartTooltipContent, ChatPreview, Checkbox, type CheckboxProps, Collapsible, CollapsibleContent, Command, type Country, type Currency, CurrencyInput, type CurrencyInputProps, type CustomIconName, DATA_CUSTOM_TABLE_VARIANTS, DEFAULT_DATA_CUSTOM_TABLE_VARIANT, DataCustomTable, type DataCustomTableVariant, DataTable, DataTableColumnHeader, DataTablePagination, DataTableToolbar, DataTableViewOptions, Devices, Dialog$1 as Dialog, DialogStack, type DotVariant, Drawer, DropdownMenu, type DuoIconName, EmojiPicker, EmptyState, type FillIconName, HoverCard, type HoverCardContentProps, Icon, type IconProps, type IconSharedProps, type IconType, type IconVariant, ImageUpload, type ImageUploadProps, Input, InputGroup, type InputProps, InputTime, InputTimePicker, type InputTimePickerProps, type InputTimeProps, type InputTimeType, InputTimeUnit, type InputTimeUnitProps, Kbd, type KbdKey, type KbdProps, Label, LanguageSwitch, LineChart, Loader, LoadingIndicator, Marquee, MarqueeContent, type MarqueeContentProps, MarqueeFade, type MarqueeFadeProps, MarqueeItem, type MarqueeItemProps, type MarqueeProps, NetworkStatus, OnneLogo, OnnebookLogo, PhoneInput, type PhoneInputProps, PieChart, Popover, Progress, RadioGroup, SIDEBAR_WIDTH, ScrollArea, Select, SelectInfiniteScroll, type SelectInfiniteScrollProps, SelectMulti, type SelectMultiProps, Separator, Sheet, Sidebar, Skeleton, Slider, type SocialIconName, TIME_UNITS, Table, Tabs, Text, TextShimmer, type TextShimmerProps, Textarea, type ThemeIcon, type TimeUnit, type TimeUnitLabel, type TimeUnitOption, Toaster, type TooltipRoundness, type TooltipVariant, TrackerChart, type TrackerChartBlockProps, VideoPlayer, VideoPlayerContent, type VideoPlayerContentProps, VideoPlayerControlBar, type VideoPlayerControlBarProps, VideoPlayerMuteButton, type VideoPlayerMuteButtonProps, VideoPlayerPlayButton, type VideoPlayerPlayButtonProps, type VideoPlayerProps, VideoPlayerSeekBackwardButton, type VideoPlayerSeekBackwardButtonProps, VideoPlayerSeekForwardButton, type VideoPlayerSeekForwardButtonProps, VideoPlayerTimeDisplay, type VideoPlayerTimeDisplayProps, VideoPlayerTimeRange, type VideoPlayerTimeRangeProps, VideoPlayerVolumeRange, type VideoPlayerVolumeRangeProps, axisValueToPercentFormatter, badgeVariants, buttonGroupVariants, buttonVariants, collapsibleContentVariants, collapsibleRootVariants, collapsibleTriggerSettingsOverlayVariants, getColorsCount, getLoadingData, getPayloadConfigFromPayload, resolveThemeIcon, useAppShellLeftSidebar, useAppShellRightSidebar, useChart, useChartBrush, useCollapsibleOpen, useDialog, useDialogStack, useLeftSidebarToggle, useOptionalCollapsibleContext, useRightSidebarToggle, useSidebar };
2010
+ export { ANNOUNCEMENT_TYPES, Accordion, ActionGroup, Alert, AnnouncementBanner, type AnnouncementBannerProps, type AnnouncementType, AppShell, type AppShellSidebarItemData, AreaChart, Avatar, type BackgroundVariant, Badge, type BadgeProps, BarChart, BrandDomainInput, type BrandIconName, Breadcrumb, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonVariants, Calendar, Card, CardContent, CardFooter, CardHeader, CardSlider, ChartBackground, ChartBrush, type ChartBrushProps, type ChartBrushRange, type ChartBrushVariant, type ChartConfig, ChartContainer, ChartDot, ChartLegend, ChartLegendContent, type ChartLegendVariant, ChartStyle, ChartTooltip, ChartTooltipContent, ChatPreview, Checkbox, type CheckboxProps, Collapsible, CollapsibleContent, Command, type Country, type Currency, CurrencyInput, type CurrencyInputProps, type CustomIconName, DATA_CUSTOM_TABLE_VARIANTS, DEFAULT_DATA_CUSTOM_TABLE_VARIANT, DataCustomTable, type DataCustomTableVariant, DataTable, DataTableColumnHeader, DataTablePagination, DataTableToolbar, DataTableViewOptions, Devices, Dialog$1 as Dialog, DialogStack, type DotVariant, Drawer, DropdownMenu, type DuoIconName, EmojiPicker, EmptyState, type FillIconName, HoverCard, type HoverCardContentProps, Icon, type IconProps, type IconSharedProps, type IconType, type IconVariant, ImageUpload, type ImageUploadProps, Input, InputGroup, type InputProps, InputTime, InputTimePicker, type InputTimePickerProps, type InputTimeProps, type InputTimeType, InputTimeUnit, type InputTimeUnitProps, Kbd, type KbdKey, type KbdProps, Label, LanguageSwitch, LineChart, Loader, LoadingIndicator, Marquee, MarqueeContent, type MarqueeContentProps, MarqueeFade, type MarqueeFadeProps, MarqueeItem, type MarqueeItemProps, type MarqueeProps, NetworkStatus, OnneLogo, OnnebookLogo, PhoneInput, type PhoneInputProps, PieChart, Popover, Progress, RadioGroup, SIDEBAR_WIDTH, ScrollArea, Select, SelectInfiniteScroll, type SelectInfiniteScrollProps, SelectMulti, type SelectMultiProps, Separator, Sheet, Sidebar, Skeleton, Slider, type SocialIconName, TIME_UNITS, Table, Tabs, Text, TextShimmer, type TextShimmerProps, Textarea, type ThemeIcon, type TimeUnit, type TimeUnitLabel, type TimeUnitOption, Toaster, Tooltip, type TooltipRoundness, type TooltipVariant, TrackerChart, type TrackerChartBlockProps, VideoPlayer, VideoPlayerContent, type VideoPlayerContentProps, VideoPlayerControlBar, type VideoPlayerControlBarProps, VideoPlayerMuteButton, type VideoPlayerMuteButtonProps, VideoPlayerPlayButton, type VideoPlayerPlayButtonProps, type VideoPlayerProps, VideoPlayerSeekBackwardButton, type VideoPlayerSeekBackwardButtonProps, VideoPlayerSeekForwardButton, type VideoPlayerSeekForwardButtonProps, VideoPlayerTimeDisplay, type VideoPlayerTimeDisplayProps, VideoPlayerTimeRange, type VideoPlayerTimeRangeProps, VideoPlayerVolumeRange, type VideoPlayerVolumeRangeProps, axisValueToPercentFormatter, badgeVariants, buttonGroupVariants, buttonVariants, collapsibleContentVariants, collapsibleRootVariants, collapsibleTriggerSettingsOverlayVariants, getColorsCount, getLoadingData, getPayloadConfigFromPayload, resolveThemeIcon, useAppShellLeftSidebar, useAppShellRightSidebar, useChart, useChartBrush, useCollapsibleOpen, useDialog, useDialogStack, useLeftSidebarToggle, useOptionalCollapsibleContext, useRightSidebarToggle, useSidebar };
package/dist/index.d.ts CHANGED
@@ -383,10 +383,18 @@ declare const Sidebar: typeof SidebarRoot & {
383
383
  * `AppShell.Navbar`. `AppShell.Header` automatically renders one toggle per
384
384
  * enabled side (left before the title, right after the actions), so any
385
385
  * sidebar combination — none, left only, right only, both — gets exactly
386
- * the toggles that apply. `AppShell.LeftSidebarTrigger` and
387
- * `AppShell.RightSidebarTrigger` exist for custom placements (both accept a
388
- * custom `icon`), and `useLeftSidebarToggle`/`useRightSidebarToggle` expose
389
- * just the toggle function for fully custom elements.
386
+ * the toggles that apply; its `leftSidebarTrigger`/`rightSidebarTrigger`
387
+ * slots replace that default (pass a node) or remove it (pass `null`).
388
+ * `AppShell.LeftSidebarTrigger` and `AppShell.RightSidebarTrigger` exist for
389
+ * custom placements (both accept a custom `icon`), and
390
+ * `useLeftSidebarToggle`/`useRightSidebarToggle` expose just the toggle
391
+ * function for fully custom elements.
392
+ *
393
+ * `AppShell.Inset` additionally takes pinned `top`/`bottom` slots
394
+ * (`<AppShell.Inset top={…} bottom={…}>`): rows fixed on screen above/below
395
+ * the rounded panel, on the shell background (Linear-style), while the page
396
+ * scrolls the panel between them — the sticky Header docks right below the
397
+ * `top` row.
390
398
  */
391
399
  declare function AppShellRoot({ leftSidebar, rightSidebar, className, children, ...props }: React$1.ComponentProps<'div'> & {
392
400
  /**
@@ -499,7 +507,7 @@ declare function AppShellSidebarItem({ index, isDropdownChild, level, ...item }:
499
507
  declare function AppShellCommandButton({ className, children, ...props }: React$1.ComponentProps<'button'>): react_jsx_runtime.JSX.Element;
500
508
  declare function AppShellSidebarFooter({ className, children, ...props }: React$1.ComponentProps<typeof Sidebar.Footer>): react_jsx_runtime.JSX.Element;
501
509
  declare function AppShellCopyright({ className, children, ...props }: React$1.ComponentProps<'span'>): react_jsx_runtime.JSX.Element;
502
- declare function AppShellHeader({ className, logo, title, actions, user, leftSidebarToggleLabel, rightSidebarToggleLabel, mobileActionsClassName, ...props }: Omit<React$1.ComponentProps<'div'>, 'title'> & {
510
+ declare function AppShellHeader({ className, logo, title, actions, user, leftSidebarTrigger, rightSidebarTrigger, leftSidebarToggleLabel, rightSidebarToggleLabel, mobileActionsClassName, ...props }: Omit<React$1.ComponentProps<'div'>, 'title'> & {
503
511
  /** Mobile-only logo slot (top-left). */
504
512
  logo?: React$1.ReactNode;
505
513
  /** Page title area (both breakpoints). */
@@ -508,6 +516,20 @@ declare function AppShellHeader({ className, logo, title, actions, user, leftSid
508
516
  actions?: React$1.ReactNode;
509
517
  /** Mobile-only user slot (top-right, e.g. avatar). */
510
518
  user?: React$1.ReactNode;
519
+ /**
520
+ * Left sidebar toggle slot (desktop header only — mobile has no sidebars).
521
+ * Omit for the automatic trigger (shown while `leftSidebar` is enabled on
522
+ * AppShell), pass a node to replace it (e.g.
523
+ * `<AppShell.LeftSidebarTrigger icon="…" />`), or `null` to render none.
524
+ */
525
+ leftSidebarTrigger?: React$1.ReactNode;
526
+ /**
527
+ * Right sidebar toggle slot (desktop header only — mobile has no
528
+ * sidebars). Omit for the automatic trigger (shown while `rightSidebar`
529
+ * is enabled on AppShell), pass a node to replace it, or `null` to render
530
+ * none.
531
+ */
532
+ rightSidebarTrigger?: React$1.ReactNode;
511
533
  /** Tooltip label of the auto-rendered left sidebar toggle. */
512
534
  leftSidebarToggleLabel?: string;
513
535
  /** Tooltip label of the auto-rendered right sidebar toggle. */
@@ -520,7 +542,7 @@ declare function AppShellNavbarItem({ className, icon, active, href, children, .
520
542
  active?: boolean;
521
543
  children?: React$1.ReactNode;
522
544
  }): react_jsx_runtime.JSX.Element;
523
- declare function AppShellInset({ className, style, children, loading, spacing, ...props }: React$1.ComponentProps<'div'> & {
545
+ declare function AppShellInset({ className, style, children, loading, spacing, top, bottom, ...props }: React$1.ComponentProps<'div'> & {
524
546
  /**
525
547
  * Shows a blocking loading overlay while keeping the shell (sidebar,
526
548
  * navbar) interactive. Content stays mounted but hidden.
@@ -528,6 +550,21 @@ declare function AppShellInset({ className, style, children, loading, spacing, .
528
550
  loading?: boolean;
529
551
  /** Spacing scale unit for `--calculated-spacing` (bottom paddings, widget offsets). */
530
552
  spacing?: number;
553
+ /**
554
+ * Pinned row rendered above the inset panel, on the shell background.
555
+ * The page keeps its normal document scroll — the row stays fixed on
556
+ * screen (below the announcement banner) while the panel slides beneath
557
+ * it, and the sticky Header docks right under it.
558
+ */
559
+ top?: React$1.ReactNode;
560
+ /**
561
+ * Pinned row rendered below the inset panel, on the shell background
562
+ * (Linear-style). The page keeps its normal document scroll — the row
563
+ * stays fixed at the bottom of the screen while the panel slides beneath
564
+ * it. Below `lg`, the row hides automatically whenever an
565
+ * `AppShell.Navbar` is mounted (the floating navbar owns that space).
566
+ */
567
+ bottom?: React$1.ReactNode;
531
568
  }): react_jsx_runtime.JSX.Element;
532
569
  declare function AppShellLoading({ className, ...props }: React$1.ComponentProps<'div'>): react_jsx_runtime.JSX.Element;
533
570
  declare const AppShell: typeof AppShellRoot & {
@@ -1970,4 +2007,4 @@ declare const ScrollArea: React$1.ForwardRefExoticComponent<Omit<Omit<_base_ui_r
1970
2007
  ScrollBar: React$1.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.ScrollAreaScrollbarProps, "ref"> & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
1971
2008
  };
1972
2009
 
1973
- export { ANNOUNCEMENT_TYPES, Accordion, ActionGroup, Alert, AnnouncementBanner, type AnnouncementBannerProps, type AnnouncementType, AppShell, type AppShellSidebarItemData, AreaChart, Avatar, type BackgroundVariant, Badge, type BadgeProps, BarChart, BrandDomainInput, type BrandIconName, Breadcrumb, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonVariants, Calendar, Card, CardContent, CardFooter, CardHeader, CardSlider, ChartBackground, ChartBrush, type ChartBrushProps, type ChartBrushRange, type ChartBrushVariant, type ChartConfig, ChartContainer, ChartDot, ChartLegend, ChartLegendContent, type ChartLegendVariant, ChartStyle, ChartTooltip, ChartTooltipContent, ChatPreview, Checkbox, type CheckboxProps, Collapsible, CollapsibleContent, Command, type Country, type Currency, CurrencyInput, type CurrencyInputProps, type CustomIconName, DATA_CUSTOM_TABLE_VARIANTS, DEFAULT_DATA_CUSTOM_TABLE_VARIANT, DataCustomTable, type DataCustomTableVariant, DataTable, DataTableColumnHeader, DataTablePagination, DataTableToolbar, DataTableViewOptions, Devices, Dialog$1 as Dialog, DialogStack, type DotVariant, Drawer, DropdownMenu, type DuoIconName, EmojiPicker, EmptyState, type FillIconName, HoverCard, type HoverCardContentProps, Icon, type IconProps, type IconSharedProps, type IconType, type IconVariant, ImageUpload, type ImageUploadProps, Input, InputGroup, type InputProps, InputTime, InputTimePicker, type InputTimePickerProps, type InputTimeProps, type InputTimeType, InputTimeUnit, type InputTimeUnitProps, Kbd, type KbdKey, type KbdProps, Label, LanguageSwitch, LineChart, Loader, LoadingIndicator, Marquee, MarqueeContent, type MarqueeContentProps, MarqueeFade, type MarqueeFadeProps, MarqueeItem, type MarqueeItemProps, type MarqueeProps, NetworkStatus, OnneLogo, OnnebookLogo, PhoneInput, type PhoneInputProps, PieChart, Popover, Progress, RadioGroup, SIDEBAR_WIDTH, ScrollArea, Select, SelectInfiniteScroll, type SelectInfiniteScrollProps, SelectMulti, type SelectMultiProps, Separator, Sheet, Sidebar, Skeleton, Slider, type SocialIconName, TIME_UNITS, Table, Tabs, Text, TextShimmer, type TextShimmerProps, Textarea, type ThemeIcon, type TimeUnit, type TimeUnitLabel, type TimeUnitOption, Toaster, type TooltipRoundness, type TooltipVariant, TrackerChart, type TrackerChartBlockProps, VideoPlayer, VideoPlayerContent, type VideoPlayerContentProps, VideoPlayerControlBar, type VideoPlayerControlBarProps, VideoPlayerMuteButton, type VideoPlayerMuteButtonProps, VideoPlayerPlayButton, type VideoPlayerPlayButtonProps, type VideoPlayerProps, VideoPlayerSeekBackwardButton, type VideoPlayerSeekBackwardButtonProps, VideoPlayerSeekForwardButton, type VideoPlayerSeekForwardButtonProps, VideoPlayerTimeDisplay, type VideoPlayerTimeDisplayProps, VideoPlayerTimeRange, type VideoPlayerTimeRangeProps, VideoPlayerVolumeRange, type VideoPlayerVolumeRangeProps, axisValueToPercentFormatter, badgeVariants, buttonGroupVariants, buttonVariants, collapsibleContentVariants, collapsibleRootVariants, collapsibleTriggerSettingsOverlayVariants, getColorsCount, getLoadingData, getPayloadConfigFromPayload, resolveThemeIcon, useAppShellLeftSidebar, useAppShellRightSidebar, useChart, useChartBrush, useCollapsibleOpen, useDialog, useDialogStack, useLeftSidebarToggle, useOptionalCollapsibleContext, useRightSidebarToggle, useSidebar };
2010
+ export { ANNOUNCEMENT_TYPES, Accordion, ActionGroup, Alert, AnnouncementBanner, type AnnouncementBannerProps, type AnnouncementType, AppShell, type AppShellSidebarItemData, AreaChart, Avatar, type BackgroundVariant, Badge, type BadgeProps, BarChart, BrandDomainInput, type BrandIconName, Breadcrumb, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonVariants, Calendar, Card, CardContent, CardFooter, CardHeader, CardSlider, ChartBackground, ChartBrush, type ChartBrushProps, type ChartBrushRange, type ChartBrushVariant, type ChartConfig, ChartContainer, ChartDot, ChartLegend, ChartLegendContent, type ChartLegendVariant, ChartStyle, ChartTooltip, ChartTooltipContent, ChatPreview, Checkbox, type CheckboxProps, Collapsible, CollapsibleContent, Command, type Country, type Currency, CurrencyInput, type CurrencyInputProps, type CustomIconName, DATA_CUSTOM_TABLE_VARIANTS, DEFAULT_DATA_CUSTOM_TABLE_VARIANT, DataCustomTable, type DataCustomTableVariant, DataTable, DataTableColumnHeader, DataTablePagination, DataTableToolbar, DataTableViewOptions, Devices, Dialog$1 as Dialog, DialogStack, type DotVariant, Drawer, DropdownMenu, type DuoIconName, EmojiPicker, EmptyState, type FillIconName, HoverCard, type HoverCardContentProps, Icon, type IconProps, type IconSharedProps, type IconType, type IconVariant, ImageUpload, type ImageUploadProps, Input, InputGroup, type InputProps, InputTime, InputTimePicker, type InputTimePickerProps, type InputTimeProps, type InputTimeType, InputTimeUnit, type InputTimeUnitProps, Kbd, type KbdKey, type KbdProps, Label, LanguageSwitch, LineChart, Loader, LoadingIndicator, Marquee, MarqueeContent, type MarqueeContentProps, MarqueeFade, type MarqueeFadeProps, MarqueeItem, type MarqueeItemProps, type MarqueeProps, NetworkStatus, OnneLogo, OnnebookLogo, PhoneInput, type PhoneInputProps, PieChart, Popover, Progress, RadioGroup, SIDEBAR_WIDTH, ScrollArea, Select, SelectInfiniteScroll, type SelectInfiniteScrollProps, SelectMulti, type SelectMultiProps, Separator, Sheet, Sidebar, Skeleton, Slider, type SocialIconName, TIME_UNITS, Table, Tabs, Text, TextShimmer, type TextShimmerProps, Textarea, type ThemeIcon, type TimeUnit, type TimeUnitLabel, type TimeUnitOption, Toaster, Tooltip, type TooltipRoundness, type TooltipVariant, TrackerChart, type TrackerChartBlockProps, VideoPlayer, VideoPlayerContent, type VideoPlayerContentProps, VideoPlayerControlBar, type VideoPlayerControlBarProps, VideoPlayerMuteButton, type VideoPlayerMuteButtonProps, VideoPlayerPlayButton, type VideoPlayerPlayButtonProps, type VideoPlayerProps, VideoPlayerSeekBackwardButton, type VideoPlayerSeekBackwardButtonProps, VideoPlayerSeekForwardButton, type VideoPlayerSeekForwardButtonProps, VideoPlayerTimeDisplay, type VideoPlayerTimeDisplayProps, VideoPlayerTimeRange, type VideoPlayerTimeRangeProps, VideoPlayerVolumeRange, type VideoPlayerVolumeRangeProps, axisValueToPercentFormatter, badgeVariants, buttonGroupVariants, buttonVariants, collapsibleContentVariants, collapsibleRootVariants, collapsibleTriggerSettingsOverlayVariants, getColorsCount, getLoadingData, getPayloadConfigFromPayload, resolveThemeIcon, useAppShellLeftSidebar, useAppShellRightSidebar, useChart, useChartBrush, useCollapsibleOpen, useDialog, useDialogStack, useLeftSidebarToggle, useOptionalCollapsibleContext, useRightSidebarToggle, useSidebar };
package/dist/index.js CHANGED
@@ -125,6 +125,7 @@ __export(index_exports, {
125
125
  TextShimmer: () => TextShimmer,
126
126
  Textarea: () => Textarea,
127
127
  Toaster: () => Toaster,
128
+ Tooltip: () => Tooltip,
128
129
  TrackerChart: () => TrackerChart,
129
130
  VideoPlayer: () => VideoPlayer,
130
131
  VideoPlayerContent: () => VideoPlayerContent,
@@ -2071,6 +2072,7 @@ var MIN_SIDEBAR_WIDTH = 16 * 16;
2071
2072
  var MAX_SIDEBAR_WIDTH = 20 * 16;
2072
2073
  var COLLAPSE_THRESHOLD = MIN_SIDEBAR_WIDTH / 2;
2073
2074
  var SIDEBAR_COOKIE_TTL_DAYS = 365;
2075
+ var SIDEBAR_ANIMATION_DURATION = "duration-300";
2074
2076
  var SIDEBAR_SIDE_CONFIG = {
2075
2077
  left: {
2076
2078
  defaultWidth: SIDEBAR_WIDTH,
@@ -2394,7 +2396,8 @@ function SidebarSidePanel({
2394
2396
  "aria-hidden": true,
2395
2397
  "data-slot": config.gapSlot,
2396
2398
  className: cn(
2397
- "relative shrink-0 bg-transparent transition-[width] duration-300",
2399
+ "relative shrink-0 bg-transparent transition-[width]",
2400
+ SIDEBAR_ANIMATION_DURATION,
2398
2401
  state === "expanded" ? side === "left" ? "w-(--left-sidebar-width)" : "w-(--right-sidebar-width)" : "w-0"
2399
2402
  )
2400
2403
  }
@@ -2404,7 +2407,8 @@ function SidebarSidePanel({
2404
2407
  {
2405
2408
  "data-slot": config.containerSlot,
2406
2409
  className: cn(
2407
- "fixed z-10 hidden overflow-clip bg-sidebar transition-[width] duration-300 lg:flex",
2410
+ "fixed z-10 hidden overflow-clip bg-sidebar transition-[width] lg:flex",
2411
+ SIDEBAR_ANIMATION_DURATION,
2408
2412
  side === "left" ? "left-0 w-(--left-sidebar-width) group-data-[collapsible=offcanvas]:w-0 justify-end" : "right-0 w-(--right-sidebar-width) group-data-[collapsible=offcanvas]:w-0"
2409
2413
  ),
2410
2414
  style: {
@@ -2444,7 +2448,8 @@ function SidebarSidePanel({
2444
2448
  "after:absolute after:inset-y-0 after:w-1 after:rounded-full after:transition-transform",
2445
2449
  "hover:after:translate-x-0 hover:after:bg-sidebar-border",
2446
2450
  "outline-none focus-visible:ring-ring focus-visible:ring-2 focus-visible:border-ring bg-transparent!",
2447
- side === "left" ? "left-(--left-sidebar-width) group-data-[collapsible=offcanvas]:left-0 -translate-x-1/2 after:left-1/2 after:-translate-x-1/2 transition-[left,transform] duration-300" : "right-(--right-sidebar-width) group-data-[collapsible=offcanvas]:right-0 translate-x-1/2 after:right-1/2 after:translate-x-1/2 transition-[right,transform] duration-300",
2451
+ side === "left" ? "left-(--left-sidebar-width) group-data-[collapsible=offcanvas]:left-0 -translate-x-1/2 after:left-1/2 after:-translate-x-1/2 transition-[left,transform]" : "right-(--right-sidebar-width) group-data-[collapsible=offcanvas]:right-0 translate-x-1/2 after:right-1/2 after:translate-x-1/2 transition-[right,transform]",
2452
+ SIDEBAR_ANIMATION_DURATION,
2448
2453
  isDragging && "after:translate-x-0 after:bg-sidebar-border"
2449
2454
  )
2450
2455
  }
@@ -2904,6 +2909,8 @@ function AppShellHeader({
2904
2909
  title,
2905
2910
  actions,
2906
2911
  user,
2912
+ leftSidebarTrigger,
2913
+ rightSidebarTrigger,
2907
2914
  leftSidebarToggleLabel = "Toggle left sidebar",
2908
2915
  rightSidebarToggleLabel = "Toggle right sidebar",
2909
2916
  mobileActionsClassName,
@@ -2911,8 +2918,10 @@ function AppShellHeader({
2911
2918
  }) {
2912
2919
  const leftSidebar = React9.useContext(AppShellLeftSidebarContext);
2913
2920
  const rightSidebar = React9.useContext(AppShellRightSidebarContext);
2921
+ const resolvedLeftTrigger = leftSidebarTrigger === void 0 ? leftSidebar && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(AppShellLeftSidebarTrigger, { label: leftSidebarToggleLabel }) : leftSidebarTrigger;
2922
+ const resolvedRightTrigger = rightSidebarTrigger === void 0 ? rightSidebar && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(AppShellRightSidebarTrigger, { label: rightSidebarToggleLabel }) : rightSidebarTrigger;
2914
2923
  return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { "data-slot": "app-shell-header", className: cn("contents", className), ...props, children: [
2915
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "lg:hidden flex items-center justify-between gap-2 md:gap-4 p-4 min-h-16 h-full max-h-16 glass-dashboard-header max-lg:sticky top-(--announcement-height,0px) z-50 transition-all max-lg:border-b max-lg:border-border/70", children: [
2924
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "lg:hidden flex items-center justify-between gap-2 md:gap-4 p-4 min-h-16 h-full max-h-16 glass-dashboard-header max-lg:sticky top-[calc(var(--announcement-height,0px)_+_var(--inset-top-height,0px))] z-50 transition-colors max-lg:border-b max-lg:border-border/70", children: [
2916
2925
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex min-w-0 flex-1 items-center gap-4", children: [
2917
2926
  logo && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "shrink-0 active:scale-99", children: logo }),
2918
2927
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex min-h-7 min-w-0 flex-1 items-center overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex min-w-0 flex-1 items-center", children: title }) })
@@ -2920,11 +2929,11 @@ function AppShellHeader({
2920
2929
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: cn("flex gap-2 empty:hidden", mobileActionsClassName), children: actions }),
2921
2930
  user
2922
2931
  ] }),
2923
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "max-lg:hidden sticky top-(--announcement-height,0px) z-50 w-full flex min-w-0 items-center gap-2 md:gap-4 p-4 min-h-16 h-full max-h-16 border-b glass-dashboard-header border-border/70 transition-colors lg:rounded-t-2xl", children: [
2924
- leftSidebar && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(AppShellLeftSidebarTrigger, { label: leftSidebarToggleLabel }),
2932
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "max-lg:hidden sticky top-[calc(var(--announcement-height,0px)_+_var(--inset-top-height,0px))] z-50 w-full flex min-w-0 items-center gap-2 md:gap-4 p-4 min-h-16 h-full max-h-16 border-b glass-dashboard-header border-border/70 transition-colors lg:rounded-t-2xl", children: [
2933
+ resolvedLeftTrigger,
2925
2934
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex min-h-7 min-w-0 flex-1 items-center overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex min-w-0 flex-1 items-center", children: title }) }),
2926
2935
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "relative z-1 grid grid-flow-col shrink-0 ml-auto gap-2 md:gap-4", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "min-w-0 flex items-center gap-2 empty:hidden", children: actions }) }),
2927
- rightSidebar && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(AppShellRightSidebarTrigger, { label: rightSidebarToggleLabel })
2936
+ resolvedRightTrigger
2928
2937
  ] })
2929
2938
  ] });
2930
2939
  }
@@ -2986,49 +2995,136 @@ function AppShellInset({
2986
2995
  children,
2987
2996
  loading = false,
2988
2997
  spacing = 24,
2998
+ top,
2999
+ bottom,
2989
3000
  ...props
2990
3001
  }) {
2991
3002
  const leftSidebar = React9.useContext(AppShellLeftSidebarContext);
2992
3003
  const rightSidebar = React9.useContext(AppShellRightSidebarContext);
2993
3004
  const hasSidebar = Boolean(leftSidebar || rightSidebar);
2994
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
2995
- "div",
2996
- {
2997
- "data-slot": "app-shell-inset",
2998
- style: {
2999
- "--sidebar-spacing": spacing,
3000
- ...style
3001
- },
3002
- className: cn(
3003
- "relative flex w-full min-h-full flex-1 flex-col transition-[margin] duration-300",
3004
- // The inset chrome (margins + rounding) only exists when at least one
3005
- // sidebar provider frames the page; each margin collapses against the
3006
- // side whose sidebar is expanded.
3007
- hasSidebar && "lg:m-2 lg:rounded-2xl",
3008
- leftSidebar?.state === "expanded" && "lg:ml-0",
3009
- rightSidebar?.state === "expanded" && "lg:mr-0",
3010
- loading && "min-h-0 overflow-hidden",
3011
- "max-lg:bg-dashboard-background! bg-dashboard-background",
3012
- "[--calculated-spacing:--spacing(var(--sidebar-spacing))]",
3013
- // `isolate` keeps composited children (e.g. the glass header's
3014
- // backdrop-filter) inside the rounded overflow clip on all engines.
3015
- "w-full min-w-0 lg:overflow-clip isolate",
3016
- "max-lg:pb-(--calculated-spacing)",
3017
- className
3018
- ),
3019
- ...props,
3020
- children: [
3021
- loading && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(AppShellLoading, {}),
3022
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
3023
- "div",
3024
- {
3025
- "aria-hidden": loading || void 0,
3026
- className: cn(loading ? "hidden" : "contents"),
3027
- children
3028
- }
3029
- )
3030
- ]
3005
+ const columnRef = React9.useRef(null);
3006
+ const topRef = React9.useRef(null);
3007
+ React9.useLayoutEffect(() => {
3008
+ const column = columnRef.current;
3009
+ if (!column) return;
3010
+ const el = topRef.current;
3011
+ if (!top || !el) {
3012
+ column.style.setProperty("--inset-top-height", "0px");
3013
+ return;
3031
3014
  }
3015
+ const update = () => {
3016
+ column.style.setProperty(
3017
+ "--inset-top-height",
3018
+ `${el.getBoundingClientRect().height}px`
3019
+ );
3020
+ };
3021
+ update();
3022
+ if (typeof ResizeObserver === "undefined") return;
3023
+ const ro = new ResizeObserver(update);
3024
+ ro.observe(el);
3025
+ return () => {
3026
+ ro.disconnect();
3027
+ column.style.setProperty("--inset-top-height", "0px");
3028
+ };
3029
+ }, [top]);
3030
+ const pinnedRowBackground = cn(
3031
+ "bg-dashboard-background",
3032
+ hasSidebar && "lg:bg-sidebar"
3033
+ );
3034
+ return (
3035
+ // Transparent column that owns the inset's flex cell so pinned rows can
3036
+ // live outside the rounded panel, over the shell background. The page
3037
+ // keeps its document scroll: the sticky rows hold their screen position
3038
+ // while the panel in between slides normally.
3039
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
3040
+ "div",
3041
+ {
3042
+ ref: columnRef,
3043
+ "data-slot": "app-shell-inset-column",
3044
+ className: "relative flex w-full min-w-0 min-h-full flex-1 flex-col",
3045
+ children: [
3046
+ top ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
3047
+ "div",
3048
+ {
3049
+ ref: topRef,
3050
+ "data-slot": "app-shell-inset-top",
3051
+ className: cn(
3052
+ "sticky top-(--announcement-height,0px) z-40 shrink-0",
3053
+ // On mobile the row and the panel share the same background —
3054
+ // without a divider, scrolling content is chopped at an
3055
+ // invisible line. Desktop gets a tonal boundary from bg-sidebar.
3056
+ "max-lg:border-b max-lg:border-border/70",
3057
+ pinnedRowBackground
3058
+ ),
3059
+ children: top
3060
+ }
3061
+ ) : null,
3062
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
3063
+ "div",
3064
+ {
3065
+ "data-slot": "app-shell-inset",
3066
+ style: {
3067
+ "--sidebar-spacing": spacing,
3068
+ ...style
3069
+ },
3070
+ className: cn(
3071
+ // No `w-full` here: the column's cross-axis stretch sizes the panel
3072
+ // to its width MINUS the side margins below — `w-full` + `mr-2`
3073
+ // would overflow the column by the margin, gluing the panel to the
3074
+ // viewport edge (and clipping its rounded corner) whenever the
3075
+ // right sidebar is collapsed.
3076
+ "relative flex flex-1 flex-col transition-[margin]",
3077
+ SIDEBAR_ANIMATION_DURATION,
3078
+ // The inset chrome (margins + rounding) only exists when at least one
3079
+ // sidebar provider frames the page; each margin collapses against the
3080
+ // side whose sidebar is expanded.
3081
+ hasSidebar && "lg:m-2 lg:rounded-2xl",
3082
+ leftSidebar?.state === "expanded" && "lg:ml-0",
3083
+ rightSidebar?.state === "expanded" && "lg:mr-0",
3084
+ loading && "min-h-0 overflow-hidden",
3085
+ "max-lg:bg-dashboard-background! bg-dashboard-background",
3086
+ "[--calculated-spacing:--spacing(var(--sidebar-spacing))]",
3087
+ // `isolate` keeps composited children (e.g. the glass header's
3088
+ // backdrop-filter) inside the rounded overflow clip on all engines.
3089
+ "min-w-0 isolate lg:overflow-clip",
3090
+ "max-lg:pb-(--calculated-spacing)",
3091
+ className
3092
+ ),
3093
+ ...props,
3094
+ children: [
3095
+ loading && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(AppShellLoading, {}),
3096
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
3097
+ "div",
3098
+ {
3099
+ "aria-hidden": loading || void 0,
3100
+ className: cn(loading ? "hidden" : "contents"),
3101
+ children
3102
+ }
3103
+ )
3104
+ ]
3105
+ }
3106
+ ),
3107
+ bottom ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
3108
+ "div",
3109
+ {
3110
+ "data-slot": "app-shell-inset-bottom",
3111
+ className: cn(
3112
+ "sticky bottom-0 z-40 shrink-0",
3113
+ // Divider against the same-background panel on mobile (mirrors
3114
+ // the mobile Header's border-b).
3115
+ "max-lg:border-t max-lg:border-border/70",
3116
+ // The floating mobile Navbar (fixed bottom, z-50, ~100px tall)
3117
+ // would bury and cover this row — when a Navbar is mounted in
3118
+ // the shell, the row yields to it below `lg`.
3119
+ "max-lg:[[data-slot=app-shell]:has([data-slot=app-shell-navbar])_&]:hidden",
3120
+ pinnedRowBackground
3121
+ ),
3122
+ children: bottom
3123
+ }
3124
+ ) : null
3125
+ ]
3126
+ }
3127
+ )
3032
3128
  );
3033
3129
  }
3034
3130
  function AppShellLoading({ className, ...props }) {
@@ -15098,6 +15194,7 @@ var ScrollArea = Object.assign(ScrollAreaRoot, { ScrollBar });
15098
15194
  TextShimmer,
15099
15195
  Textarea,
15100
15196
  Toaster,
15197
+ Tooltip,
15101
15198
  TrackerChart,
15102
15199
  VideoPlayer,
15103
15200
  VideoPlayerContent,