@mithrl/design-system 0.2.0 → 0.3.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.
@@ -10,6 +10,8 @@ export type ButtonSize = NonNullable<VariantProps<typeof buttonVariants>["size"]
10
10
  export type ButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children"> & VariantProps<typeof buttonVariants> & {
11
11
  children: ReactNode;
12
12
  loading?: boolean;
13
+ /** Keeps async-action focus while guarding repeat activation with aria-disabled. */
14
+ preserveFocusWhileLoading?: boolean;
13
15
  leadingIcon?: ReactNode;
14
16
  trailingIcon?: ReactNode;
15
17
  };
@@ -23,6 +25,8 @@ export declare const Button: import("react").ForwardRefExoticComponent<Omit<Butt
23
25
  } & import("class-variance-authority/types").ClassProp) | undefined) => string> & {
24
26
  children: ReactNode;
25
27
  loading?: boolean;
28
+ /** Keeps async-action focus while guarding repeat activation with aria-disabled. */
29
+ preserveFocusWhileLoading?: boolean;
26
30
  leadingIcon?: ReactNode;
27
31
  trailingIcon?: ReactNode;
28
32
  } & import("react").RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1,48 @@
1
+ import { type HTMLAttributes, type ReactNode } from "react";
2
+
3
+ type NativeComposerAttachmentViewProps = Omit<HTMLAttributes<HTMLElement>, "children" | "title">;
4
+ export type ComposerAttachmentViewProps = NativeComposerAttachmentViewProps & {
5
+ /** Accessible and visible view heading. */
6
+ heading?: ReactNode;
7
+ /** Short file-acquisition instruction below the heading. */
8
+ description?: ReactNode;
9
+ /** Product-owned browse-file and browse-folder controls. */
10
+ acquisitionActions: ReactNode;
11
+ /** Product-owned selection or drop status. */
12
+ acquisitionStatus?: ReactNode;
13
+ /** Product-owned selected resources, queue, progress, or empty state. */
14
+ children: ReactNode;
15
+ /** Product-owned Clear, Upload, retry, or equivalent actions. */
16
+ footerActions: ReactNode;
17
+ /** Reports the explicit request to return to the Composer. */
18
+ onClose: () => void;
19
+ /** Accessible name for the close action. */
20
+ closeLabel?: string;
21
+ /** Applies the approved active drop surface without owning drag events. */
22
+ dragging?: boolean;
23
+ };
24
+ /**
25
+ * Controlled visual shell for the Composer attachment view. File selection,
26
+ * queues, transport, retries, and persistence remain product-owned slots.
27
+ */
28
+ export declare const ComposerAttachmentView: import("react").ForwardRefExoticComponent<NativeComposerAttachmentViewProps & {
29
+ /** Accessible and visible view heading. */
30
+ heading?: ReactNode;
31
+ /** Short file-acquisition instruction below the heading. */
32
+ description?: ReactNode;
33
+ /** Product-owned browse-file and browse-folder controls. */
34
+ acquisitionActions: ReactNode;
35
+ /** Product-owned selection or drop status. */
36
+ acquisitionStatus?: ReactNode;
37
+ /** Product-owned selected resources, queue, progress, or empty state. */
38
+ children: ReactNode;
39
+ /** Product-owned Clear, Upload, retry, or equivalent actions. */
40
+ footerActions: ReactNode;
41
+ /** Reports the explicit request to return to the Composer. */
42
+ onClose: () => void;
43
+ /** Accessible name for the close action. */
44
+ closeLabel?: string;
45
+ /** Applies the approved active drop surface without owning drag events. */
46
+ dragging?: boolean;
47
+ } & import("react").RefAttributes<HTMLElement>>;
48
+ export {};
@@ -0,0 +1,99 @@
1
+ import { type HTMLAttributes, type MouseEvent, type MouseEventHandler, type ReactNode } from "react";
2
+
3
+ export type ExplorerUploadFileType = "data" | "structured-data" | "document" | "code" | "notebook" | "image" | "scientific-data" | "archive" | "generic";
4
+ export type ExplorerScientificOutputType = "dataset" | "report" | "figure" | "plot" | "code" | "generic";
5
+ type ExplorerResourceBase = {
6
+ /** Stable owner-defined identity. IDs are unique across the whole Explorer. */
7
+ id: string;
8
+ /** Visible single-line resource name. */
9
+ name: string;
10
+ /** Native destination. When omitted, the matching activation callback may own selection. */
11
+ href?: string;
12
+ };
13
+ export type ExplorerUploadFile = ExplorerResourceBase & {
14
+ type: "file";
15
+ fileType: ExplorerUploadFileType;
16
+ };
17
+ export type ExplorerUploadFolder = ExplorerResourceBase & {
18
+ type: "folder";
19
+ children: readonly ExplorerUploadNode[];
20
+ };
21
+ export type ExplorerUploadNode = ExplorerUploadFile | ExplorerUploadFolder;
22
+ export type ExplorerScientificOutput = ExplorerResourceBase & {
23
+ type: "output";
24
+ outputType: ExplorerScientificOutputType;
25
+ };
26
+ export type ExplorerScientificOutputFolder = ExplorerResourceBase & {
27
+ type: "folder";
28
+ children: readonly ExplorerScientificOutputNode[];
29
+ };
30
+ export type ExplorerScientificOutputNode = ExplorerScientificOutput | ExplorerScientificOutputFolder;
31
+ export type ExplorerQuestion = {
32
+ id: string;
33
+ name: string;
34
+ children: readonly ExplorerScientificOutputNode[];
35
+ };
36
+ export type ExplorerLabels = {
37
+ panel: string;
38
+ tab: string;
39
+ panelActions: string;
40
+ uploads: string;
41
+ uploadsCount: (count: number) => string;
42
+ noUploadsTitle: ReactNode;
43
+ noUploadsDescription: ReactNode;
44
+ scientificOutputs: string;
45
+ questionsCount: (count: number) => string;
46
+ noScientificOutputsTitle: ReactNode;
47
+ noScientificOutputsDescription: ReactNode;
48
+ download: (name: string) => string;
49
+ };
50
+ type ResourceClick = MouseEvent<HTMLAnchorElement | HTMLButtonElement>;
51
+ export type ExplorerProps = Omit<HTMLAttributes<HTMLElement>, "children" | "onSelect"> & {
52
+ uploads?: readonly ExplorerUploadNode[];
53
+ questions?: readonly ExplorerQuestion[];
54
+ /** Controlled expanded folder and Question identities. */
55
+ expandedIds?: readonly string[];
56
+ /** Initial expanded identities for uncontrolled use. */
57
+ defaultExpandedIds?: readonly string[];
58
+ onExpandedIdsChange?: (ids: readonly string[]) => void;
59
+ onUploadActivate?: (upload: ExplorerUploadFile, event: ResourceClick) => void;
60
+ onScientificOutputActivate?: (output: ExplorerScientificOutput, event: ResourceClick) => void;
61
+ /** Independent download action revealed on hover or keyboard focus. */
62
+ onUploadDownload?: (upload: ExplorerUploadFile, event: MouseEvent<HTMLButtonElement>) => void;
63
+ /** Independent download action revealed on hover or keyboard focus. */
64
+ onScientificOutputDownload?: (output: ExplorerScientificOutput, event: MouseEvent<HTMLButtonElement>) => void;
65
+ onPanelAction?: MouseEventHandler<HTMLButtonElement>;
66
+ /**
67
+ * Renders Explorer's standalone Panel Tab header. Set false when the owning
68
+ * SecondaryPanel supplies the shared tab collection and panel actions.
69
+ */
70
+ showHeader?: boolean;
71
+ labels?: Partial<ExplorerLabels>;
72
+ };
73
+ /**
74
+ * Secondary Workspace panel for uploaded files and generated scientific
75
+ * outputs. Product code owns loading, navigation, previews, and persistence.
76
+ */
77
+ export declare const Explorer: import("react").ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLElement>, "children" | "onSelect"> & {
78
+ uploads?: readonly ExplorerUploadNode[];
79
+ questions?: readonly ExplorerQuestion[];
80
+ /** Controlled expanded folder and Question identities. */
81
+ expandedIds?: readonly string[];
82
+ /** Initial expanded identities for uncontrolled use. */
83
+ defaultExpandedIds?: readonly string[];
84
+ onExpandedIdsChange?: (ids: readonly string[]) => void;
85
+ onUploadActivate?: (upload: ExplorerUploadFile, event: ResourceClick) => void;
86
+ onScientificOutputActivate?: (output: ExplorerScientificOutput, event: ResourceClick) => void;
87
+ /** Independent download action revealed on hover or keyboard focus. */
88
+ onUploadDownload?: (upload: ExplorerUploadFile, event: MouseEvent<HTMLButtonElement>) => void;
89
+ /** Independent download action revealed on hover or keyboard focus. */
90
+ onScientificOutputDownload?: (output: ExplorerScientificOutput, event: MouseEvent<HTMLButtonElement>) => void;
91
+ onPanelAction?: MouseEventHandler<HTMLButtonElement>;
92
+ /**
93
+ * Renders Explorer's standalone Panel Tab header. Set false when the owning
94
+ * SecondaryPanel supplies the shared tab collection and panel actions.
95
+ */
96
+ showHeader?: boolean;
97
+ labels?: Partial<ExplorerLabels>;
98
+ } & import("react").RefAttributes<HTMLElement>>;
99
+ export {};
@@ -18,6 +18,8 @@ type NavigationItemCommonProps = (LeadingIcon | LeadingQuestion) & {
18
18
  label: string;
19
19
  /** Controlled current/selected state supplied by the owning navigation. */
20
20
  selected?: boolean;
21
+ /** Controlled active-panel state. It may coexist across multiple Questions. */
22
+ active?: boolean;
21
23
  /** Shows the approved text shimmer and trailing Progress Indicator. */
22
24
  loading?: boolean;
23
25
  /** Adds the question-row overflow action as a sibling interactive control. */
@@ -16,6 +16,8 @@ export type PanelTabItem = {
16
16
  panelId?: string;
17
17
  /** Optional explicit tab ID used by the associated panel. */
18
18
  id?: string;
19
+ /** Uses the Design System Tooltip when the visible presentation is icon-only. */
20
+ tooltip?: boolean;
19
21
  };
20
22
  export type PanelTabsProps = Omit<HTMLAttributes<HTMLDivElement>, "children" | "defaultValue" | "onChange"> & {
21
23
  items: readonly PanelTabItem[];
@@ -22,6 +22,14 @@ export type ResizablePanelGroupProps = Omit<HTMLAttributes<HTMLDivElement>, "chi
22
22
  onValueChange?: (value: number) => void;
23
23
  /** Reports the final pointer value or each committed keyboard step. */
24
24
  onValueCommit?: (value: number) => void;
25
+ /** Controlled Secondary width in pixels. Use instead of `value`. */
26
+ secondarySize?: number;
27
+ /** Initial Secondary width in pixels for uncontrolled pixel persistence. */
28
+ defaultSecondarySize?: number;
29
+ /** Reports every pointer or keyboard resize in Secondary pixels. */
30
+ onSecondarySizeChange?: (size: number) => void;
31
+ /** Reports the final pointer value or each keyboard step in pixels. */
32
+ onSecondarySizeCommit?: (size: number) => void;
25
33
  /** Exactly Primary Panel, Handle, and Secondary Panel in that order. */
26
34
  children: ReactNode;
27
35
  };
@@ -58,6 +66,14 @@ export declare const ResizablePanelGroup: import("react").ForwardRefExoticCompon
58
66
  onValueChange?: (value: number) => void;
59
67
  /** Reports the final pointer value or each committed keyboard step. */
60
68
  onValueCommit?: (value: number) => void;
69
+ /** Controlled Secondary width in pixels. Use instead of `value`. */
70
+ secondarySize?: number;
71
+ /** Initial Secondary width in pixels for uncontrolled pixel persistence. */
72
+ defaultSecondarySize?: number;
73
+ /** Reports every pointer or keyboard resize in Secondary pixels. */
74
+ onSecondarySizeChange?: (size: number) => void;
75
+ /** Reports the final pointer value or each keyboard step in pixels. */
76
+ onSecondarySizeCommit?: (size: number) => void;
61
77
  /** Exactly Primary Panel, Handle, and Secondary Panel in that order. */
62
78
  children: ReactNode;
63
79
  } & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,69 @@
1
+ import { type HTMLAttributes, type ReactNode } from "react";
2
+ import { type PanelTabItem } from "../panel-tabs/PanelTabs";
3
+
4
+ export declare const MITHRL_QUESTION_DRAG_TYPE = "application/x-mithrl-question-id";
5
+ export type SecondaryPanelTabKind = "explorer" | "question" | "resource" | "tool";
6
+ export type SecondaryPanelTab = Omit<PanelTabItem, "closable" | "tooltip"> & {
7
+ /** Controls the approved icon-led or text-only tab identity. */
8
+ kind: SecondaryPanelTabKind;
9
+ /** Explorer is persistent; all other destinations may be owner-closeable. */
10
+ closable?: boolean;
11
+ };
12
+ export type SecondaryPanelDropTarget = "secondary";
13
+ export type SecondaryPanelProps = Omit<HTMLAttributes<HTMLElement>, "children" | "onDragEnter" | "onDragLeave" | "onDragOver" | "onDrop"> & {
14
+ /** Ordered, controlled panel destinations. Explorer must remain first. */
15
+ tabs: readonly SecondaryPanelTab[];
16
+ /** Controlled active destination identity. */
17
+ activeTabId: string;
18
+ /** Product-owned content for the active destination. */
19
+ children: ReactNode;
20
+ /** Optional product-owned panel actions rendered after the tab viewport. */
21
+ headerActions?: ReactNode;
22
+ /** Shows the approved trailing-edge overflow cue over the tab viewport. */
23
+ overflowFeedback?: boolean;
24
+ /** Uses the temporary compact full-screen header presentation. */
25
+ compactMode?: boolean;
26
+ /** Visible and accessible label for the compact dismissal action. */
27
+ compactCloseLabel?: string;
28
+ /** Reports controlled tab selection. */
29
+ onTabSelect: (tabId: string) => void;
30
+ /** Reports a close request and the fallback that keeps selection aligned with focus. */
31
+ onTabClose?: (tabId: string, fallbackTabId: string) => void;
32
+ /** Enables native Question drops from Workspace Navigation. */
33
+ onQuestionDrop?: (questionId: string, target: SecondaryPanelDropTarget) => void;
34
+ /** Reports compact Secondary dismissal without unmounting owner state. */
35
+ onSecondaryOpenChange: (open: boolean) => void;
36
+ /** Visible drop feedback. Defaults to the approved action copy. */
37
+ dropFeedbackLabel?: ReactNode;
38
+ };
39
+ /**
40
+ * Controlled Secondary Workspace surface. It composes Panel Tabs, compact
41
+ * presentation, and Question drop feedback while product code retains tab,
42
+ * placement, visibility, width, content, and persistence ownership.
43
+ */
44
+ export declare const SecondaryPanel: import("react").ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLElement>, "children" | "onDragEnter" | "onDragLeave" | "onDragOver" | "onDrop"> & {
45
+ /** Ordered, controlled panel destinations. Explorer must remain first. */
46
+ tabs: readonly SecondaryPanelTab[];
47
+ /** Controlled active destination identity. */
48
+ activeTabId: string;
49
+ /** Product-owned content for the active destination. */
50
+ children: ReactNode;
51
+ /** Optional product-owned panel actions rendered after the tab viewport. */
52
+ headerActions?: ReactNode;
53
+ /** Shows the approved trailing-edge overflow cue over the tab viewport. */
54
+ overflowFeedback?: boolean;
55
+ /** Uses the temporary compact full-screen header presentation. */
56
+ compactMode?: boolean;
57
+ /** Visible and accessible label for the compact dismissal action. */
58
+ compactCloseLabel?: string;
59
+ /** Reports controlled tab selection. */
60
+ onTabSelect: (tabId: string) => void;
61
+ /** Reports a close request and the fallback that keeps selection aligned with focus. */
62
+ onTabClose?: (tabId: string, fallbackTabId: string) => void;
63
+ /** Enables native Question drops from Workspace Navigation. */
64
+ onQuestionDrop?: (questionId: string, target: SecondaryPanelDropTarget) => void;
65
+ /** Reports compact Secondary dismissal without unmounting owner state. */
66
+ onSecondaryOpenChange: (open: boolean) => void;
67
+ /** Visible drop feedback. Defaults to the approved action copy. */
68
+ dropFeedbackLabel?: ReactNode;
69
+ } & import("react").RefAttributes<HTMLElement>>;
@@ -1,5 +1,5 @@
1
1
  import { type VariantProps } from "class-variance-authority";
2
- import { type HTMLAttributes, type MouseEvent, type MouseEventHandler } from "react";
2
+ import { type DragEvent, type HTMLAttributes, type MouseEvent, type MouseEventHandler } from "react";
3
3
  import { type IconButtonProps } from "../icon-button/IconButton";
4
4
 
5
5
  export declare const workspaceNavigationVariants: (props?: ({
@@ -15,9 +15,14 @@ export type WorkspaceNavigationQuestion = {
15
15
  href?: string;
16
16
  /** Uses the approved text shimmer and Progress Indicator. */
17
17
  loading?: boolean;
18
+ /** Enables opening this unopened Question through native drag. */
19
+ draggable?: boolean;
20
+ /** Optional explicit name for the product-owned overflow action. */
21
+ menuActionLabel?: string;
18
22
  };
19
23
  type NavigationClick = MouseEvent<HTMLAnchorElement | HTMLButtonElement>;
20
24
  type MenuClick = MouseEvent<HTMLButtonElement>;
25
+ type QuestionDrag = DragEvent<HTMLAnchorElement | HTMLButtonElement>;
21
26
  export type WorkspaceNavigationProps = Omit<HTMLAttributes<HTMLElement>, "children" | "onSelect"> & VariantProps<typeof workspaceNavigationVariants> & {
22
27
  /** Accessible name for the navigation landmark. */
23
28
  "aria-label"?: string;
@@ -27,16 +32,24 @@ export type WorkspaceNavigationProps = Omit<HTMLAttributes<HTMLElement>, "childr
27
32
  allProjectsLabel?: string;
28
33
  /** Visible label for the creation action. */
29
34
  newQuestionLabel?: string;
35
+ /** Stable identity for a controlled New Question dialog trigger. */
36
+ newQuestionTriggerId?: string;
30
37
  /** Visible heading for the question destination region. */
31
38
  questionsLabel?: string;
32
39
  /** Controlled question destinations in display order. */
33
40
  questions: readonly WorkspaceNavigationQuestion[];
34
41
  /** Controlled current question identity. */
35
42
  selectedQuestionId?: string;
43
+ /** Controlled Questions currently active in Primary or Secondary panels. */
44
+ activeQuestionIds?: readonly string[];
36
45
  /** Selects a question without prescribing router ownership. */
37
46
  onQuestionSelect?: (question: WorkspaceNavigationQuestion, event: NavigationClick) => void;
38
47
  /** Opens the product-owned menu for one question. */
39
48
  onQuestionMenuAction?: (question: WorkspaceNavigationQuestion, event: MenuClick) => void;
49
+ /** Reports the beginning of an enabled Question drag. */
50
+ onQuestionDragStart?: (question: WorkspaceNavigationQuestion, event: QuestionDrag) => void;
51
+ /** Reports the end of an enabled Question drag. */
52
+ onQuestionDragEnd?: (question: WorkspaceNavigationQuestion, event: QuestionDrag) => void;
40
53
  /** Starts a new question. */
41
54
  onNewQuestion: MouseEventHandler<HTMLButtonElement>;
42
55
  /** Reports activation of the All Projects destination. */
@@ -60,16 +73,24 @@ export declare const WorkspaceNavigation: import("react").ForwardRefExoticCompon
60
73
  allProjectsLabel?: string;
61
74
  /** Visible label for the creation action. */
62
75
  newQuestionLabel?: string;
76
+ /** Stable identity for a controlled New Question dialog trigger. */
77
+ newQuestionTriggerId?: string;
63
78
  /** Visible heading for the question destination region. */
64
79
  questionsLabel?: string;
65
80
  /** Controlled question destinations in display order. */
66
81
  questions: readonly WorkspaceNavigationQuestion[];
67
82
  /** Controlled current question identity. */
68
83
  selectedQuestionId?: string;
84
+ /** Controlled Questions currently active in Primary or Secondary panels. */
85
+ activeQuestionIds?: readonly string[];
69
86
  /** Selects a question without prescribing router ownership. */
70
87
  onQuestionSelect?: (question: WorkspaceNavigationQuestion, event: NavigationClick) => void;
71
88
  /** Opens the product-owned menu for one question. */
72
89
  onQuestionMenuAction?: (question: WorkspaceNavigationQuestion, event: MenuClick) => void;
90
+ /** Reports the beginning of an enabled Question drag. */
91
+ onQuestionDragStart?: (question: WorkspaceNavigationQuestion, event: QuestionDrag) => void;
92
+ /** Reports the end of an enabled Question drag. */
93
+ onQuestionDragEnd?: (question: WorkspaceNavigationQuestion, event: QuestionDrag) => void;
73
94
  /** Starts a new question. */
74
95
  onNewQuestion: MouseEventHandler<HTMLButtonElement>;
75
96
  /** Reports activation of the All Projects destination. */
package/dist/index.d.ts CHANGED
@@ -13,6 +13,8 @@ export { SegmentedTabs, segmentedTabsVariants, } from "./components/segmented-ta
13
13
  export type { SegmentedTabItem, SegmentedTabsActivationMode, SegmentedTabsProps, SegmentedTabsSize, } from "./components/segmented-tabs/SegmentedTabs";
14
14
  export { PanelTabs } from "./components/panel-tabs/PanelTabs";
15
15
  export type { PanelTabItem, PanelTabsProps, } from "./components/panel-tabs/PanelTabs";
16
+ export { MITHRL_QUESTION_DRAG_TYPE, SecondaryPanel, } from "./components/secondary-panel/SecondaryPanel";
17
+ export type { SecondaryPanelDropTarget, SecondaryPanelProps, SecondaryPanelTab, SecondaryPanelTabKind, } from "./components/secondary-panel/SecondaryPanel";
16
18
  export { Switch, ThemeSwitch } from "./components/switch/Switch";
17
19
  export type { SwitchProps, ThemeMode, ThemeSwitchProps, } from "./components/switch/Switch";
18
20
  export { ToggleButton, toggleButtonVariants, } from "./components/toggle-button/ToggleButton";
@@ -27,6 +29,8 @@ export { Composer } from "./components/composer/Composer";
27
29
  export type { ComposerLabels, ComposerMode, ComposerPreviewState, ComposerProps, ComposerStatus, } from "./components/composer/Composer";
28
30
  export { ComposerViewTransition } from "./components/composer/ComposerViewTransition";
29
31
  export type { ComposerView, ComposerViewTransitionProps, } from "./components/composer/ComposerViewTransition";
32
+ export { ComposerAttachmentView } from "./components/composer/ComposerAttachmentView";
33
+ export type { ComposerAttachmentViewProps, } from "./components/composer/ComposerAttachmentView";
30
34
  export { Select, selectVariants } from "./components/select/Select";
31
35
  export type { SelectPreviewState, SelectProps, SelectSize, } from "./components/select/Select";
32
36
  export { Link, linkVariants } from "./components/link/Link";
@@ -61,6 +65,8 @@ export { PopoverSurface } from "./components/popover-surface/PopoverSurface";
61
65
  export type { PopoverSurfaceProps } from "./components/popover-surface/PopoverSurface";
62
66
  export { ProjectMenu } from "./components/project-menu/ProjectMenu";
63
67
  export type { ProjectMenuLabels, ProjectMenuProject, ProjectMenuProps, } from "./components/project-menu/ProjectMenu";
68
+ export { Explorer } from "./components/explorer/Explorer";
69
+ export type { ExplorerLabels, ExplorerProps, ExplorerQuestion, ExplorerScientificOutput, ExplorerScientificOutputFolder, ExplorerScientificOutputNode, ExplorerScientificOutputType, ExplorerUploadFile, ExplorerUploadFileType, ExplorerUploadFolder, ExplorerUploadNode, } from "./components/explorer/Explorer";
64
70
  export { AccountMenu } from "./components/account-menu/AccountMenu";
65
71
  export type { AccountMenuAction, AccountMenuProps, } from "./components/account-menu/AccountMenu";
66
72
  export { GlobalAppBar } from "./components/global-app-bar/GlobalAppBar";
@@ -80,4 +86,8 @@ export type { DialogBackdropProps, DialogBodyProps, DialogCloseButtonProps, Dial
80
86
  export { ResizableHandle, ResizablePanel, ResizablePanelGroup, } from "./components/resizable-panels/ResizablePanels";
81
87
  export type { ResizableHandleProps, ResizablePanelDirection, ResizablePanelGroupProps, ResizablePanelMinimum, ResizablePanelProps, } from "./components/resizable-panels/ResizablePanels";
82
88
  export { WorkspaceAppShell } from "./patterns/workspace-app-shell/WorkspaceAppShell";
83
- export type { WorkspaceAppShellLayout, WorkspaceAppShellProps, } from "./patterns/workspace-app-shell/WorkspaceAppShell";
89
+ export { WorkspaceNewQuestionDialog } from "./patterns/workspace-app-shell/WorkspaceNewQuestionDialog";
90
+ export { WorkspaceQuestionSurface } from "./patterns/workspace-app-shell/WorkspaceQuestionSurface";
91
+ export type { WorkspaceAppShellNavigationRenderContext, WorkspaceAppShellNavigationRenderer, WorkspaceAppShellLayout, WorkspaceAppShellProps, WorkspaceNavigationConfiguration, } from "./patterns/workspace-app-shell/WorkspaceAppShell";
92
+ export type { WorkspaceNewQuestionDialogProps, WorkspaceNewQuestionDraft, } from "./patterns/workspace-app-shell/WorkspaceNewQuestionDialog";
93
+ export type { WorkspaceQuestionSurfacePanel, WorkspaceQuestionSurfaceProps, WorkspaceQuestionSurfaceScroll, } from "./patterns/workspace-app-shell/WorkspaceQuestionSurface";