@arcfusionz/arc-primitive-ui 0.2.1 → 0.2.3

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.
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512">
3
+ <defs>
4
+ <style>
5
+ .cls-1 {
6
+ fill: none;
7
+ }
8
+
9
+ .cls-1, .cls-2, .cls-3, .cls-4 {
10
+ stroke-width: 0px;
11
+ }
12
+
13
+ .cls-2 {
14
+ fill: url(#linear-gradient);
15
+ }
16
+
17
+ .cls-3 {
18
+ fill: url(#linear-gradient-2);
19
+ }
20
+
21
+ .cls-4 {
22
+ fill: url(#linear-gradient-3);
23
+ }
24
+ </style>
25
+ <linearGradient id="linear-gradient" x1="280.09" y1="63.53" x2="368.57" y2="361.89" gradientUnits="userSpaceOnUse">
26
+ <stop offset="0" stop-color="#040067"/>
27
+ <stop offset=".46" stop-color="#001598"/>
28
+ <stop offset=".59" stop-color="#001ca7"/>
29
+ <stop offset=".99" stop-color="#0038d4" stop-opacity="0"/>
30
+ </linearGradient>
31
+ <linearGradient id="linear-gradient-2" x1="534.92" y1="386.82" x2="-48.47" y2="386.82" xlink:href="#linear-gradient"/>
32
+ <linearGradient id="linear-gradient-3" x1="139.15" y1="394.16" x2="249.19" y2="-38.06" xlink:href="#linear-gradient"/>
33
+ </defs>
34
+ <g id="Layer_1-2">
35
+ <g>
36
+ <rect class="cls-1" width="512" height="512"/>
37
+ <g>
38
+ <path class="cls-2" d="M417,314.23L309.67,43.97l-54.73,145.74,23.95,74.66c58.81,7.59,105.55,29.45,138.1,49.86Z"/>
39
+ <path class="cls-3" d="M241.57,412.83c70.69,0,105.93,53.27,105.93,53.27,0,0,142.25-.12,142.14,0-12.81-36.21-35.92-69.15-68.05-96.18-17.56-14.77-37.14-27.13-58.16-36.91-37.11-17.26-78.75-26.44-121.86-26.44-8.92,0-17.76.42-26.52,1.19-2.92.38-5.83.82-8.75,1.29-35.05,5.66-69.61,18.14-101.64,37.07-2.12,1.25-4.19,2.55-6.27,3.84-12.83,8.01-24.88,16.87-36.1,26.46l-32.59,90.66,68.98-.98c47.53,0,80.41-53.27,142.88-53.27Z"/>
40
+ <path class="cls-4" d="M104.66,346.11c32.03-18.93,66.6-31.41,101.64-37.07,1.36-.22,2.72-.43,4.09-.64L309.67,43.97h-60.19c-41.38,0-78.3,25.97-92.3,64.9L62.3,376.41c11.22-9.59,23.26-18.45,36.09-26.46,2.08-1.3,4.15-2.59,6.27-3.84Z"/>
41
+ </g>
42
+ </g>
43
+ </g>
44
+ </svg>
@@ -0,0 +1,9 @@
1
+ declare module "*.png" {
2
+ const src: string;
3
+ export default src;
4
+ }
5
+
6
+ declare module "*.svg" {
7
+ const src: string;
8
+ export default src;
9
+ }
@@ -1,6 +1,6 @@
1
1
  import { cn } from "../../lib/cn.js";
2
2
  import { forwardRef, useId } from "react";
3
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
4
4
  import { useRender } from "@base-ui/react/use-render";
5
5
  //#region src/components/AILoader/AILoader.tsx
6
6
  const rootClasses = "relative inline-flex shrink-0 items-center justify-center align-middle select-none";
@@ -58,7 +58,7 @@ const AILoader = forwardRef(({ state = "default", size = "md", tone = "brand", t
58
58
  role: processing ? "status" : "img",
59
59
  "aria-label": processing ? hasText ? label : void 0 : accessibleLabel,
60
60
  className: cn(rootClasses, toneClasses[tone], hasText && gapClasses[size], className),
61
- children: /* @__PURE__ */ jsxs(Fragment, { children: [
61
+ children: /* @__PURE__ */ jsxs(Fragment$1, { children: [
62
62
  /* @__PURE__ */ jsxs("svg", {
63
63
  viewBox: "0 0 24 24",
64
64
  fill: "none",
@@ -1,6 +1,6 @@
1
1
  import { cn } from "../../lib/cn.js";
2
2
  import { Children, createContext, forwardRef, useContext, useMemo } from "react";
3
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
4
4
  import { useRender } from "@base-ui/react/use-render";
5
5
  import { Avatar } from "@base-ui/react/avatar";
6
6
  //#region src/components/Avatar/Avatar.tsx
@@ -110,7 +110,7 @@ const Avatar$1 = forwardRef(({ size, shape, src, alt, name, fallback, fallbackDe
110
110
  shape: resolvedShape
111
111
  }), group != null && "ring-2 ring-background", className),
112
112
  ...rest,
113
- children: [useShorthand && /* @__PURE__ */ jsxs(Fragment, { children: [src != null && /* @__PURE__ */ jsx(AvatarImage, {
113
+ children: [useShorthand && /* @__PURE__ */ jsxs(Fragment$1, { children: [src != null && /* @__PURE__ */ jsx(AvatarImage, {
114
114
  src,
115
115
  alt: alt ?? ""
116
116
  }), /* @__PURE__ */ jsx(AvatarFallback, {
@@ -165,7 +165,7 @@ const AvatarBadge = forwardRef(({ label, render, className, children, ...rest },
165
165
  ref,
166
166
  props: {
167
167
  className: cn("absolute end-0 bottom-0 block rounded-full bg-success ring-2 ring-background", badgeSizeClasses[size], className),
168
- children: /* @__PURE__ */ jsxs(Fragment, { children: [label != null && /* @__PURE__ */ jsx("span", {
168
+ children: /* @__PURE__ */ jsxs(Fragment$1, { children: [label != null && /* @__PURE__ */ jsx("span", {
169
169
  className: "sr-only",
170
170
  children: label
171
171
  }), children] }),
@@ -202,7 +202,7 @@ const AvatarGroup = forwardRef(({ size = "md", shape = "circle", max, total, ren
202
202
  ref,
203
203
  props: {
204
204
  className: cn("flex items-center", groupSpacingClasses[size], className),
205
- children: /* @__PURE__ */ jsxs(Fragment, { children: [visible, surplus > 0 && /* @__PURE__ */ jsx(Avatar$1, { children: `+${surplus}` })] }),
205
+ children: /* @__PURE__ */ jsxs(Fragment$1, { children: [visible, surplus > 0 && /* @__PURE__ */ jsx(Avatar$1, { children: `+${surplus}` })] }),
206
206
  ...rest
207
207
  }
208
208
  });
@@ -1,6 +1,6 @@
1
1
  import { cn } from "../../lib/cn.js";
2
2
  import { forwardRef } from "react";
3
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
4
4
  import { useRender } from "@base-ui/react/use-render";
5
5
  import { Button } from "@base-ui/react/button";
6
6
  //#region src/components/Badge/Badge.tsx
@@ -88,7 +88,7 @@ const Badge = forwardRef(({ variant = "neutral", appearance = "soft", size = "md
88
88
  size,
89
89
  pill
90
90
  }), className),
91
- children: /* @__PURE__ */ jsxs(Fragment, { children: [
91
+ children: /* @__PURE__ */ jsxs(Fragment$1, { children: [
92
92
  dot && /* @__PURE__ */ jsx("span", {
93
93
  "aria-hidden": "true",
94
94
  className: "size-1.5 shrink-0 rounded-full bg-current"
@@ -1,6 +1,6 @@
1
1
  import { cn } from "../../lib/cn.js";
2
2
  import { forwardRef, useRef } from "react";
3
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
4
4
  import { Button } from "@base-ui/react/button";
5
5
  //#region src/components/Button/Button.tsx
6
6
  const baseClasses = "relative inline-flex items-center justify-center whitespace-nowrap select-none rounded-md font-sans font-semibold transition-colors duration-150 cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50";
@@ -128,7 +128,7 @@ const Button$1 = forwardRef(({ variant = "primary", size = "md", fullWidth = fal
128
128
  if (event.detail === 0 && rippleContainerRef.current && !prefersReducedMotion()) spawnRipple(rippleContainerRef.current);
129
129
  onClick?.(event);
130
130
  };
131
- const content = /* @__PURE__ */ jsxs(Fragment, { children: [
131
+ const content = /* @__PURE__ */ jsxs(Fragment$1, { children: [
132
132
  startIcon != null && /* @__PURE__ */ jsx("span", {
133
133
  "aria-hidden": "true",
134
134
  className: "inline-flex items-center",
@@ -160,7 +160,7 @@ const Button$1 = forwardRef(({ variant = "primary", size = "md", fullWidth = fal
160
160
  ref: rippleContainerRef,
161
161
  "aria-hidden": "true",
162
162
  className: "pointer-events-none absolute inset-0 overflow-hidden rounded-[inherit] [contain:strict]"
163
- }), loading ? loadingText != null ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Spinner, {}), loadingText] }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("span", {
163
+ }), loading ? loadingText != null ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Spinner, {}), loadingText] }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("span", {
164
164
  className: "absolute inset-0 flex items-center justify-center",
165
165
  children: [/* @__PURE__ */ jsx(Spinner, {}), /* @__PURE__ */ jsx("span", {
166
166
  className: "sr-only",
@@ -1,6 +1,6 @@
1
1
  import { cn } from "../../lib/cn.js";
2
2
  import { forwardRef, useEffect, useMemo, useRef, useState } from "react";
3
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
4
4
  import { useRender } from "@base-ui/react/use-render";
5
5
  import { mergeProps } from "@base-ui/react/merge-props";
6
6
  //#region src/components/Calendar/Calendar.tsx
@@ -441,7 +441,7 @@ const Calendar = forwardRef((props, forwardedRef) => {
441
441
  role: "group",
442
442
  "aria-label": ariaLabel,
443
443
  className: cn("inline-flex flex-col p-3 font-sans", className),
444
- children: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
444
+ children: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
445
445
  role: "status",
446
446
  className: "sr-only",
447
447
  children: announcement
@@ -1,7 +1,7 @@
1
1
  import { cn } from "../../lib/cn.js";
2
2
  import { FieldContext } from "./FieldContext.js";
3
3
  import { forwardRef, useContext, useMemo } from "react";
4
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
5
5
  import { Field } from "@base-ui/react/field";
6
6
  import { useController, useFormContext } from "react-hook-form";
7
7
  //#region src/components/Field/Field.tsx
@@ -212,7 +212,7 @@ const FieldError = forwardRef(({ className, children, match, ...rest }, ref) =>
212
212
  match: resolvedMatch,
213
213
  className: cn(errorClasses, className),
214
214
  ...rest,
215
- children: content != null ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(ErrorIcon, {}), /* @__PURE__ */ jsx("span", {
215
+ children: content != null ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(ErrorIcon, {}), /* @__PURE__ */ jsx("span", {
216
216
  className: "min-w-0",
217
217
  children: content
218
218
  })] }) : void 0
@@ -0,0 +1,232 @@
1
+ import { BadgeVariant } from "../Badge/Badge.js";
2
+ import "../Badge/index.js";
3
+ import { ComponentPropsWithoutRef, ReactNode } from "react";
4
+ //#region src/components/Shell/Shell.d.ts
5
+ /**
6
+ * An entry either navigates (`href`, rendered as a real link so open-in-new-
7
+ * tab and copy-link work) or acts (`action`, rendered as a button press) —
8
+ * never both, so a single press can never fire twice.
9
+ */
10
+ type ShellNavTarget = {
11
+ href?: string;
12
+ action?: never;
13
+ } | {
14
+ action?: () => void;
15
+ href?: never;
16
+ };
17
+ /**
18
+ * Shared Shell UI state for custom triggers — e.g. an "Ask AI" entry point
19
+ * inside page content that opens the same right panel as the Topbar button.
20
+ * Outside a `Shell` it returns inert state (closed, no-op setter).
21
+ */
22
+ declare function useShell(): {
23
+ rightPanelOpen: boolean;
24
+ setRightPanelOpen: (open: boolean) => void;
25
+ };
26
+ interface ShellProps extends Omit<ComponentPropsWithoutRef<"div">, "className"> {
27
+ /** Sidebar region (usually `ShellSidebar`). The Shell reserves the collapsed rail width; expansion overlays the rest of the layout without moving it. */
28
+ sidebar?: ReactNode;
29
+ /** Topbar region (usually `ShellTopbar`), pinned above the scrollable content. */
30
+ topbar?: ReactNode;
31
+ /** Optional tab row (usually `ShellTabbar`) directly below the Topbar. When omitted, no space is reserved. */
32
+ tabbar?: ReactNode;
33
+ /** Optional right panel content (usually `ShellRightPanel`). Mounted only while the panel is open: docked at full Shell height beside the topbar/tabbar/main column on `lg`+ viewports, overlaying it below. */
34
+ rightPanel?: ReactNode;
35
+ /** Page content — usually a `ShellMain`, which owns the primary scroll region. */
36
+ children: ReactNode;
37
+ /** Controlled right-panel state; pair with `onRightPanelOpenChange`. */
38
+ rightPanelOpen?: boolean;
39
+ /** Initial right-panel state when uncontrolled. */
40
+ defaultRightPanelOpen?: boolean;
41
+ /** Called with the requested state whenever the Ask AI button, the panel's close control, or Escape toggles the panel. */
42
+ onRightPanelOpenChange?: (open: boolean) => void;
43
+ /** Additional classes merged after the shell recipe — e.g. `h-full` to fill a parent instead of the viewport. */
44
+ className?: string;
45
+ }
46
+ /**
47
+ * Application frame that positions the sidebar rail, topbar, optional
48
+ * tabbar, main content, and the optional right panel, and owns the shared
49
+ * panel state. It fills the viewport (`h-dvh`) by default — pass
50
+ * `className="h-full"` to fill a parent instead — and creates no
51
+ * document-level overflow: `ShellMain` is the primary scroll region. The
52
+ * collapsed rail width stays reserved while sidebar expansion overlays the
53
+ * layout, so page content never shifts. Popups portal to `document.body`;
54
+ * the root is isolated, but consumer apps should still set
55
+ * `isolation: isolate` on their app root so no page stacking context
56
+ * outbids them.
57
+ */
58
+ declare const Shell: import("react").ForwardRefExoticComponent<ShellProps & import("react").RefAttributes<HTMLDivElement>>;
59
+ interface SidebarMenuItemBadge {
60
+ /** Count shown in the badge; values past 99 render as `99+`. */
61
+ count: number;
62
+ /** Semantic tone, mapped onto the Badge variants. */
63
+ tone?: BadgeVariant;
64
+ /** Accessible text announced with the item, e.g. `4 unread tasks`. Defaults to the count. */
65
+ ariaLabel?: string;
66
+ }
67
+ type SidebarMenuItem = {
68
+ /** Unique id, matched against `activeItemId`. */
69
+ id: string;
70
+ /** Page name: the expanded label, the collapsed tooltip, and the accessible name. */
71
+ name: string;
72
+ /** Decorative icon, visible in both states. Sized to 20px unless it carries its own `size-*` class. */
73
+ icon: ReactNode;
74
+ /** Count badge: a dot on the icon while collapsed, a count pill when expanded. */
75
+ badge?: SidebarMenuItemBadge;
76
+ /** Show the item but keep it inert. */
77
+ disabled?: boolean;
78
+ } & ShellNavTarget;
79
+ interface SidebarMenuGroup {
80
+ /** Unique group id. */
81
+ id: string;
82
+ /** Group heading. Visible when expanded; replaced by a divider (same-height container, no layout shift) when collapsed. */
83
+ groupTitle: string;
84
+ /** Items in the group. */
85
+ pages: SidebarMenuItem[];
86
+ }
87
+ interface ShellSidebarProps extends Omit<ComponentPropsWithoutRef<"div">, "className"> {
88
+ /** Replacement brand mark. Defaults to the ArcFusion logo. */
89
+ brandLogo?: ReactNode;
90
+ /** Replacement brand name shown next to the logo while expanded. Defaults to `ArcFusion`. */
91
+ brandName?: ReactNode;
92
+ /** Navigation groups rendered in order. */
93
+ groups: SidebarMenuGroup[];
94
+ /** Id of the current page's item; it renders with `aria-current="page"`. Route awareness stays with the app — pass the id in. */
95
+ activeItemId?: string;
96
+ /** Controlled expansion; pair with `onExpandedChange`. Internal triggers then only request changes. */
97
+ expanded?: boolean;
98
+ /** Initial expansion when uncontrolled. The sidebar starts collapsed by default. */
99
+ defaultExpanded?: boolean;
100
+ /** Called with the requested state on every expand/collapse intent (hover timers, keyboard focus, the brand toggle). */
101
+ onExpandedChange?: (expanded: boolean) => void;
102
+ /** Milliseconds the pointer must rest inside the collapsed rail before it expands. Defaults to 175. */
103
+ expandDelay?: number;
104
+ /** Milliseconds after the pointer leaves before the sidebar collapses. Defaults to 175. */
105
+ collapseDelay?: number;
106
+ /** Accessible name of the `nav` landmark. */
107
+ navLabel?: string;
108
+ /** Accessible name of the brand toggle button (its state is exposed via `aria-expanded`). */
109
+ toggleLabel?: string;
110
+ /** Additional classes merged after the sidebar recipe. */
111
+ className?: string;
112
+ }
113
+ /**
114
+ * Collapsible navigation rail. Collapsed it shows the brand mark, item
115
+ * icons, on-icon badge dots, and group dividers; hovering it for
116
+ * `expandDelay` (or focusing it with the keyboard, immediately) expands it
117
+ * over the layout — never pushing it — revealing the brand name, group
118
+ * titles, labels, and count badges in the same geometry, so nothing jumps.
119
+ * It collapses `collapseDelay` after pointer and focus have both left,
120
+ * unless it is pinned (the brand button, which is also the touch toggle),
121
+ * controlled expanded, or a popup inside it is open. Items are real links
122
+ * (`href`) or buttons (`action`) inside a labelled `nav`; the active item
123
+ * carries `aria-current="page"`, and collapsed items show their name in a
124
+ * tooltip.
125
+ */
126
+ declare const ShellSidebar: import("react").ForwardRefExoticComponent<ShellSidebarProps & import("react").RefAttributes<HTMLDivElement>>;
127
+ type ShellBreadcrumbItem = {
128
+ /** Unique crumb id. */
129
+ id: string;
130
+ /** Crumb text. */
131
+ label: ReactNode;
132
+ } & ShellNavTarget;
133
+ type ShellGlobalMenuItem = {
134
+ /** Unique entry id. */
135
+ id: string;
136
+ /** Entry label. */
137
+ menuName: string;
138
+ /** Decorative leading icon. */
139
+ menuIcon?: ReactNode;
140
+ /** Show the entry but keep it inert. */
141
+ disabled?: boolean;
142
+ } & ShellNavTarget;
143
+ interface ShellTopbarProps extends Omit<ComponentPropsWithoutRef<"header">, "className" | "title"> {
144
+ /** Page title, rendered as the page's `h1`. Ignored when `breadcrumbs` are provided. */
145
+ title?: ReactNode;
146
+ /** Breadcrumb trail; the last item is the current page. Takes the place of `title`. */
147
+ breadcrumbs?: ShellBreadcrumbItem[];
148
+ /** Page-owned actions (e.g. a "New task" Button), rendered before the Ask AI and global menu controls. */
149
+ pageActions?: ReactNode;
150
+ /** Show the Ask AI button, which toggles the Shell's right panel. */
151
+ showAskAi?: boolean;
152
+ /** Ask AI button label. */
153
+ askAiLabel?: string;
154
+ /** Global application menu entries, opened from a LayoutGrid icon button. The trigger is hidden while empty. */
155
+ globalMenuItems?: ShellGlobalMenuItem[];
156
+ /** Accessible name of the global menu trigger. */
157
+ globalMenuLabel?: string;
158
+ /** Additional classes merged after the topbar recipe. */
159
+ className?: string;
160
+ }
161
+ /**
162
+ * Page header row: a title (or breadcrumb trail) on the left; page-owned
163
+ * actions, the optional Ask AI toggle, and the global application menu on
164
+ * the right. The Ask AI button only flips the Shell's panel state
165
+ * (`aria-expanded` reflects it) — the panel itself belongs to Shell layout.
166
+ * The global menu renders through the Menu primitive, so arrow keys,
167
+ * typeahead, and Escape come built in.
168
+ */
169
+ declare const ShellTopbar: import("react").ForwardRefExoticComponent<ShellTopbarProps & import("react").RefAttributes<HTMLElement>>;
170
+ interface ShellTabItem {
171
+ /** Unique tab id, emitted through `onTabChange`. */
172
+ id: string;
173
+ /** Tab label. */
174
+ label: ReactNode;
175
+ /** Count badge after the label; values past 99 render as `99+`. */
176
+ badge?: number;
177
+ /** Show the tab but keep it inert. */
178
+ disabled?: boolean;
179
+ }
180
+ interface ShellTabbarProps extends Omit<ComponentPropsWithoutRef<"div">, "className"> {
181
+ /** Tabs rendered in order through the Tabs primitive. */
182
+ tabs: ShellTabItem[];
183
+ /** Id of the selected tab. */
184
+ activeTabId: string;
185
+ /** Called with the newly selected tab id. Data and filter state stay page-owned. */
186
+ onTabChange: (tabId: string) => void;
187
+ /** Page-owned filter controls (Selects, date pickers, filter buttons) on the trailing side. */
188
+ filters?: ReactNode;
189
+ /** Additional classes merged after the tabbar recipe. */
190
+ className?: string;
191
+ }
192
+ /**
193
+ * Optional row under the Topbar: page-view tabs on the left (the Tabs
194
+ * primitive, so arrow-key navigation comes built in) and page-owned filter
195
+ * controls on the right. It only emits `onTabChange` — it never touches page
196
+ * data. When the tabs and filters can't share a row, the filters drop to
197
+ * their own row below and stay right-aligned; if the tabs alone still
198
+ * overflow, they scroll horizontally.
199
+ */
200
+ declare const ShellTabbar: import("react").ForwardRefExoticComponent<ShellTabbarProps & import("react").RefAttributes<HTMLDivElement>>;
201
+ interface ShellMainProps extends Omit<ComponentPropsWithoutRef<"main">, "className"> {
202
+ /** Apply the default content padding. Disable for edge-to-edge pages (tables, canvases, maps). */
203
+ padded?: boolean;
204
+ /** Additional classes merged after the main recipe. */
205
+ className?: string;
206
+ }
207
+ /**
208
+ * The page content region and the Shell's primary scroll area — a `main`
209
+ * landmark that fills the remaining space. Content is free-form; it carries
210
+ * no page logic.
211
+ */
212
+ declare const ShellMain: import("react").ForwardRefExoticComponent<ShellMainProps & import("react").RefAttributes<HTMLElement>>;
213
+ interface ShellRightPanelProps extends Omit<ComponentPropsWithoutRef<"aside">, "className" | "title"> {
214
+ /** Visible panel heading; also names the panel for assistive technology. Without it (or an explicit `aria-label`), the panel is named `Ask AI`. */
215
+ title?: ReactNode;
216
+ /** Accessible name of the close control. */
217
+ closeLabel?: string;
218
+ /** Additional classes merged after the panel recipe. */
219
+ className?: string;
220
+ }
221
+ /**
222
+ * Right-side panel chrome — the Shell mounts it while the panel is open,
223
+ * docked at full Shell height beside the topbar/tabbar/main column on `lg`+
224
+ * viewports (the column narrows) and overlaying it below. A labelled
225
+ * `aside` with its own scroll area and a close control;
226
+ * Escape from inside also closes it, returning focus to the Ask AI trigger.
227
+ * It is not modal and traps no focus. Content is a free slot — Ask AI
228
+ * functionality lives with the app, not here.
229
+ */
230
+ declare const ShellRightPanel: import("react").ForwardRefExoticComponent<ShellRightPanelProps & import("react").RefAttributes<HTMLElement>>;
231
+ //#endregion
232
+ export { Shell, ShellBreadcrumbItem, ShellGlobalMenuItem, ShellMain, ShellMainProps, ShellNavTarget, ShellProps, ShellRightPanel, ShellRightPanelProps, ShellSidebar, ShellSidebarProps, ShellTabItem, ShellTabbar, ShellTabbarProps, ShellTopbar, ShellTopbarProps, SidebarMenuGroup, SidebarMenuItem, SidebarMenuItemBadge, useShell };