@exegia/corpora-ui 0.13.0 → 0.15.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.
Files changed (39) hide show
  1. package/dist-lib/components/blocks/layout.d.ts +5 -0
  2. package/dist-lib/components/{agents → blocks/nav/sidebar}/ai-sidebar.d.ts +1 -1
  3. package/dist-lib/components/{agents → blocks/nav/sidebar}/sidebar-row.d.ts +1 -1
  4. package/dist-lib/components/blocks/shell/__tests__/shell-layout.test.d.ts +1 -0
  5. package/dist-lib/components/blocks/shell/index.d.ts +3 -1
  6. package/dist-lib/components/blocks/shell/shell-layout.d.ts +1 -1
  7. package/dist-lib/components/blocks/shell/type.d.ts +58 -15
  8. package/dist-lib/components/blocks/shell/use-shell-panels.d.ts +9 -0
  9. package/dist-lib/components/motion/animated-sidebar.d.ts +25 -25
  10. package/dist-lib/index.d.ts +3 -1
  11. package/dist-lib/index.js +1107 -1029
  12. package/dist-lib/index.js.map +1 -1
  13. package/package.json +3 -2
  14. package/src/components/blocks/layout.ts +7 -0
  15. package/src/components/{agents → blocks/nav/sidebar}/ai-sidebar.tsx +13 -17
  16. package/src/components/{agents → blocks/nav/sidebar}/marquee-label.tsx +1 -1
  17. package/src/components/{agents → blocks/nav/sidebar}/sidebar-icon.tsx +1 -1
  18. package/src/components/{agents → blocks/nav/sidebar}/sidebar-row.tsx +4 -4
  19. package/src/components/{agents → blocks/nav/sidebar}/use-ai-sidebar.ts +2 -2
  20. package/src/components/{agents → blocks/nav/sidebar}/utils.ts +1 -1
  21. package/src/components/blocks/nav/sidebar-block.tsx +15 -7
  22. package/src/components/blocks/shell/__tests__/shell-layout.test.tsx +178 -0
  23. package/src/components/blocks/shell/index.ts +5 -1
  24. package/src/components/blocks/shell/shell-layout.tsx +29 -24
  25. package/src/components/blocks/shell/type.ts +77 -35
  26. package/src/components/blocks/shell/use-shell-panels.ts +78 -0
  27. package/src/components/motion/animated-sidebar.tsx +113 -90
  28. package/src/index.css +2 -1
  29. package/src/index.ts +3 -3
  30. /package/dist-lib/components/{agents → blocks/nav/sidebar}/__tests__/ai-sidebar.test.d.ts +0 -0
  31. /package/dist-lib/components/{agents → blocks/nav/sidebar}/index.d.ts +0 -0
  32. /package/dist-lib/components/{agents → blocks/nav/sidebar}/marquee-label.d.ts +0 -0
  33. /package/dist-lib/components/{agents → blocks/nav/sidebar}/sidebar-icon.d.ts +0 -0
  34. /package/dist-lib/components/{agents → blocks/nav/sidebar}/type.d.ts +0 -0
  35. /package/dist-lib/components/{agents → blocks/nav/sidebar}/use-ai-sidebar.d.ts +0 -0
  36. /package/dist-lib/components/{agents → blocks/nav/sidebar}/utils.d.ts +0 -0
  37. /package/src/components/{agents → blocks/nav/sidebar}/__tests__/ai-sidebar.test.tsx +0 -0
  38. /package/src/components/{agents → blocks/nav/sidebar}/index.ts +0 -0
  39. /package/src/components/{agents → blocks/nav/sidebar}/type.ts +0 -0
@@ -0,0 +1,5 @@
1
+ import { default as ShellLayout } from './shell';
2
+ declare const Layout: {
3
+ Main: typeof ShellLayout;
4
+ };
5
+ export default Layout;
@@ -1,2 +1,2 @@
1
- import { AISidebarProps } from './type.ts';
1
+ import { AISidebarProps } from './type';
2
2
  export declare function AISidebar({ renderIcon, renderMenu, renderActionsTrigger, ariaLabel, className, ...options }: AISidebarProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
- import { ResourceRowProps } from './type.ts';
1
+ import { ResourceRowProps } from './type';
2
2
  export declare function ResourceRow({ row, active, expanded, focused, draggingId, dropTarget, menuOpen, renaming, onDragEnd, onDragOver, onDragStart, onDrop, onFocus, onKeyDown, onMenuOpenChange, onRenameCancel, onRenameCommit, onRenameStart, onSelect, onToggle, hoverActive, hoverPill, hoverLayoutId, onHoverChange, renderIcon, renderMenu, renderActionsTrigger, setRef, }: ResourceRowProps): import("react").JSX.Element;
@@ -1,3 +1,5 @@
1
- export * from './shell-layout';
1
+ import { ShellLayout } from './shell-layout';
2
2
  export type * from './type';
3
+ export * from './use-shell-panels';
3
4
  export * from './utils';
5
+ export { ShellLayout as default };
@@ -1,3 +1,3 @@
1
1
  import { ShellLayoutProps } from './type';
2
2
  import * as React from "react";
3
- export declare function ShellLayout({ children, open, defaultOpen, onOpenChange, rightDrawer, rightOpen, defaultRightOpen, onRightOpenChange, variant, className, }: ShellLayoutProps): React.ReactElement;
3
+ export declare function ShellLayout({ children, variant, panels, className, defaultOpen, ...panelControlProps }: ShellLayoutProps): React.ReactElement;
@@ -1,26 +1,69 @@
1
+ import { ReactNode } from 'react';
2
+ import { AnimatedSidebarProviderProps, SidebarSide } from '../../motion/animated-sidebar';
1
3
  export interface ShellAction {
2
4
  id: string;
3
5
  label: string;
4
- icon: React.ReactNode;
5
- badge?: React.ReactNode;
6
+ icon: ReactNode;
7
+ badge?: ReactNode;
6
8
  onSelect?: () => void;
7
9
  }
8
10
  export interface ShellWorkspace {
9
11
  name: string;
10
- logo?: React.ReactNode;
11
- meta?: React.ReactNode;
12
+ logo?: ReactNode;
13
+ meta?: ReactNode;
12
14
  }
13
- export interface ShellLayoutProps {
14
- children?: React.ReactNode;
15
- open?: boolean;
15
+ export interface IPanel {
16
+ id: string;
17
+ name: string;
18
+ component: ReactNode;
19
+ open: boolean;
16
20
  defaultOpen?: boolean;
17
- onOpenChange?: (open: boolean) => void;
18
- /** Content of the right drawer. It has no icon rail — it is either fully
19
- * shown or fully hidden. */
20
- rightDrawer?: React.ReactNode;
21
- rightOpen?: boolean;
22
- defaultRightOpen?: boolean;
23
- onRightOpenChange?: (open: boolean) => void;
21
+ side: "left" | "bottom" | "right" | "sidebar";
22
+ }
23
+ /** The side a panel docks to, as a value union (`IPanel["side"]`).
24
+ * `Pick<IPanel, "side">` would be the object type `{ side: ... }`, which can
25
+ * neither key a Record nor travel as a plain callback argument. */
26
+ export type TPanelSide = IPanel["side"];
27
+ /** Panel content keyed by the side it docks to. `Side` narrows the map to
28
+ * the sides a surface actually renders (the shell renders left and right).
29
+ * Entries are optional — a shell with no bottom dock simply has no `bottom`
30
+ * key. Where an entry's own `side` field disagrees with its key, the key
31
+ * wins. */
32
+ export type TPanelMap<Side extends TPanelSide = TPanelSide> = Partial<Record<Side, IPanel>>;
33
+ /** The open/close surface of the shell's panels, lifted straight from
34
+ * AnimatedSidebarProvider — every prop is keyed by side, there are no
35
+ * explicit per-side props. `useShellPanels` produces the controlled subset
36
+ * of these as `providerProps`. */
37
+ export type ShellPanelControlProps = Pick<AnimatedSidebarProviderProps, "open" | "defaultOpen" | "onOpenChange" | "openMobile" | "defaultOpenMobile" | "onOpenMobileChange">;
38
+ export interface UseShellPanelsOptions {
39
+ /** Initial desktop open state per side, merged over
40
+ * `{ left: true, right: false }`. */
41
+ defaultOpen?: AnimatedSidebarProviderProps["defaultOpen"];
42
+ /** Initial mobile overlay state per side — every side starts closed. */
43
+ defaultOpenMobile?: AnimatedSidebarProviderProps["defaultOpenMobile"];
44
+ /** Panel change event returning both the next open state and the side of
45
+ * the panel the change comes from. Mobile overlay changes report the same
46
+ * side as their desktop counterpart. */
47
+ onPanelChange?: (open: boolean, side: TPanelSide) => void;
48
+ }
49
+ export interface ShellPanelControls {
50
+ /** Live desktop open state, keyed by side. */
51
+ open: Record<SidebarSide, boolean>;
52
+ /** Live mobile overlay state, keyed by side. */
53
+ openMobile: Record<SidebarSide, boolean>;
54
+ setOpen: (open: boolean, side: SidebarSide) => void;
55
+ setOpenMobile: (open: boolean, side: SidebarSide) => void;
56
+ /** Desktop-only convenience — the in-shell triggers already pick the
57
+ * mobile state themselves when the viewport is narrow. */
58
+ toggle: (side: SidebarSide) => void;
59
+ /** Spread onto ShellLayout (or AnimatedSidebarProvider directly). */
60
+ providerProps: ShellPanelControlProps;
61
+ }
62
+ export interface ShellLayoutProps extends ShellPanelControlProps {
63
+ children?: ReactNode;
64
+ /** Content for the shell's panels, keyed by the side. The shell renders
65
+ * the `left` rail and the `right` drawer; other sides are reserved. */
66
+ panels?: TPanelMap;
24
67
  className?: string;
25
- variant: 'web' | 'desktop';
68
+ variant?: "web" | "desktop";
26
69
  }
@@ -0,0 +1,9 @@
1
+ import { ShellPanelControls, UseShellPanelsOptions } from './type';
2
+ /**
3
+ * Owns the open/close state of the shell's panels, keyed by side, and
4
+ * reports every change through a single `onPanelChange(open, side)`
5
+ * callback. Spread the returned `providerProps` onto ShellLayout; the
6
+ * setters and `toggle` are for UI that lives outside the shell (title-bar
7
+ * buttons, command palette, shortcuts).
8
+ */
9
+ export declare function useShellPanels({ defaultOpen, defaultOpenMobile, onPanelChange, }?: UseShellPanelsOptions): ShellPanelControls;
@@ -1,26 +1,24 @@
1
1
  import { HTMLMotionProps } from 'motion/react';
2
2
  import { ButtonHTMLAttributes, CSSProperties, HTMLAttributes, ReactNode } from 'react';
3
- type SidebarState = "expanded" | "collapsed";
4
- type SidebarSide = "left" | "right";
3
+ export type SidebarSide = "left" | "right";
4
+ /** Open flags keyed by side. Sides left out stay uncontrolled / at their
5
+ * default — there is no per-side prop, the record IS the API. */
6
+ export type SidebarOpenState = Partial<Record<SidebarSide, boolean>>;
5
7
  type SidebarVariant = "sidebar" | "floating" | "inset";
6
8
  type SidebarCollapsible = "offcanvas" | "icon" | "none";
7
9
  interface AnimatedSidebarContextValue {
8
10
  isMobile: boolean;
9
11
  layoutId: string;
10
- open: boolean;
11
- openMobile: boolean;
12
- /** The right panel is a single hidden/shown state — no icon rail, no
13
- * separate mobile state. */
14
- openRight: boolean;
12
+ /** Desktop open state, keyed by side. */
13
+ open: Record<SidebarSide, boolean>;
14
+ /** Mobile overlay open state, keyed by side. */
15
+ openMobile: Record<SidebarSide, boolean>;
15
16
  reduce: boolean;
16
- setOpen: (open: boolean) => void;
17
- setOpenMobile: (open: boolean) => void;
18
- setOpenRight: (open: boolean) => void;
19
- state: SidebarState;
20
- toggleSidebar: () => void;
21
- toggleRightSidebar: () => void;
22
- triggerRef: React.RefObject<HTMLButtonElement | null>;
23
- rightTriggerRef: React.RefObject<HTMLButtonElement | null>;
17
+ setOpen: (open: boolean, side: SidebarSide) => void;
18
+ setOpenMobile: (open: boolean, side: SidebarSide) => void;
19
+ /** Mobile-aware: toggles the overlay below md, the docked panel above. */
20
+ toggleSidebar: (side: SidebarSide) => void;
21
+ triggerRefs: Record<SidebarSide, React.RefObject<HTMLButtonElement | null>>;
24
22
  }
25
23
  export declare function useAnimatedSidebar(): AnimatedSidebarContextValue;
26
24
  type SidebarProviderStyle = CSSProperties & {
@@ -29,18 +27,20 @@ type SidebarProviderStyle = CSSProperties & {
29
27
  "--sidebar-width-mobile"?: string;
30
28
  };
31
29
  export interface AnimatedSidebarProviderProps extends HTMLAttributes<HTMLDivElement> {
32
- open?: boolean;
33
- defaultOpen?: boolean;
34
- onOpenChange?: (open: boolean) => void;
35
- openMobile?: boolean;
36
- defaultOpenMobile?: boolean;
37
- onOpenMobileChange?: (open: boolean) => void;
38
- openRight?: boolean;
39
- defaultOpenRight?: boolean;
40
- onOpenRightChange?: (open: boolean) => void;
30
+ /** Controlled desktop open state, keyed by side. A side left undefined
31
+ * stays uncontrolled. */
32
+ open?: SidebarOpenState;
33
+ /** Initial desktop open state, merged over `{ left: true, right: false }`. */
34
+ defaultOpen?: SidebarOpenState;
35
+ onOpenChange?: (open: boolean, side: SidebarSide) => void;
36
+ /** Controlled mobile overlay state, keyed by side. */
37
+ openMobile?: SidebarOpenState;
38
+ /** Initial mobile overlay state — every side starts closed. */
39
+ defaultOpenMobile?: SidebarOpenState;
40
+ onOpenMobileChange?: (open: boolean, side: SidebarSide) => void;
41
41
  style?: SidebarProviderStyle;
42
42
  }
43
- export declare function AnimatedSidebarProvider({ children, open, defaultOpen, onOpenChange, openMobile, defaultOpenMobile, onOpenMobileChange, openRight, defaultOpenRight, onOpenRightChange, className, style, ...props }: AnimatedSidebarProviderProps): import("react").JSX.Element;
43
+ export declare function AnimatedSidebarProvider({ children, open, defaultOpen, onOpenChange, openMobile, defaultOpenMobile, onOpenMobileChange, className, style, ...props }: AnimatedSidebarProviderProps): import("react").JSX.Element;
44
44
  export interface AnimatedSidebarProps extends Omit<HTMLMotionProps<"aside">, "children"> {
45
45
  children?: ReactNode;
46
46
  side?: SidebarSide;
@@ -34,9 +34,11 @@ export * from './components/blocks/auth/passkey-sign-in-block';
34
34
  export * from './components/blocks/auth/signup-block';
35
35
  export * from './components/blocks/auth/update-password-block';
36
36
  export * from './components/blocks/nav/sidebar-block';
37
+ export * from './components/blocks/nav/sidebar';
37
38
  export * from './components/blocks/shell';
39
+ export { default as ShellLayout } from './components/blocks/shell';
40
+ export { default as Layout } from './components/blocks/layout';
38
41
  export * from './components/blocks/profile/profile-card-block';
39
- export * from './components/agents';
40
42
  export * from './components/motion/animated-sidebar';
41
43
  export * from './components/motion/shared-layout-bg';
42
44
  export * from './lib/auth-accent';