@khal-os/ui 1.0.0 → 1.0.2
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/LICENSE +94 -0
- package/README.md +25 -0
- package/dist/index.cjs +2661 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +926 -0
- package/dist/index.d.ts +926 -0
- package/dist/index.js +2510 -0
- package/dist/index.js.map +1 -0
- package/package.json +59 -40
- package/tokens.css +260 -238
- package/src/components/ContextMenu.tsx +0 -130
- package/src/components/avatar.tsx +0 -71
- package/src/components/badge.tsx +0 -39
- package/src/components/button.tsx +0 -102
- package/src/components/command.tsx +0 -165
- package/src/components/cost-counter.tsx +0 -75
- package/src/components/data-row.tsx +0 -97
- package/src/components/dropdown-menu.tsx +0 -233
- package/src/components/glass-card.tsx +0 -74
- package/src/components/input.tsx +0 -48
- package/src/components/khal-logo.tsx +0 -73
- package/src/components/live-feed.tsx +0 -109
- package/src/components/mesh-gradient.tsx +0 -57
- package/src/components/metric-display.tsx +0 -93
- package/src/components/note.tsx +0 -55
- package/src/components/number-flow.tsx +0 -25
- package/src/components/pill-badge.tsx +0 -65
- package/src/components/progress-bar.tsx +0 -70
- package/src/components/section-card.tsx +0 -76
- package/src/components/separator.tsx +0 -25
- package/src/components/spinner.tsx +0 -42
- package/src/components/status-dot.tsx +0 -90
- package/src/components/switch.tsx +0 -36
- package/src/components/theme-provider.tsx +0 -58
- package/src/components/theme-switcher.tsx +0 -59
- package/src/components/ticker-bar.tsx +0 -41
- package/src/components/tooltip.tsx +0 -62
- package/src/components/window-minimized-context.tsx +0 -29
- package/src/hooks/useReducedMotion.ts +0 -21
- package/src/index.ts +0 -58
- package/src/lib/animations.ts +0 -50
- package/src/primitives/collapsible-sidebar.tsx +0 -226
- package/src/primitives/dialog.tsx +0 -76
- package/src/primitives/empty-state.tsx +0 -43
- package/src/primitives/index.ts +0 -22
- package/src/primitives/list-view.tsx +0 -155
- package/src/primitives/property-panel.tsx +0 -108
- package/src/primitives/section-header.tsx +0 -19
- package/src/primitives/sidebar-nav.tsx +0 -110
- package/src/primitives/split-pane.tsx +0 -146
- package/src/primitives/status-badge.tsx +0 -10
- package/src/primitives/status-bar.tsx +0 -100
- package/src/primitives/toolbar.tsx +0 -152
- package/src/server.ts +0 -4
- package/src/stores/notification-store.ts +0 -271
- package/src/stores/theme-store.ts +0 -33
- package/src/tokens/lp-tokens.ts +0 -36
- package/src/utils.ts +0 -6
- package/tsconfig.json +0 -17
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,926 @@
|
|
|
1
|
+
export { SUBJECTS, useKhalAuth, useNats, useNatsSubscription, useKhalAuth as useOSAuth } from '@khal-os/sdk/app';
|
|
2
|
+
import * as React$1 from 'react';
|
|
3
|
+
import { ComponentProps, ReactNode, ButtonHTMLAttributes } from 'react';
|
|
4
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
5
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
6
|
+
import { VariantProps } from 'class-variance-authority';
|
|
7
|
+
import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
|
|
8
|
+
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
9
|
+
import { Command as Command$1 } from 'cmdk';
|
|
10
|
+
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
|
11
|
+
import NumberFlowBase from '@number-flow/react';
|
|
12
|
+
import * as SeparatorPrimitive from '@radix-ui/react-separator';
|
|
13
|
+
import * as SwitchPrimitive from '@radix-ui/react-switch';
|
|
14
|
+
import { ThemeProvider as ThemeProvider$1 } from 'next-themes';
|
|
15
|
+
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
16
|
+
import * as zustand from 'zustand';
|
|
17
|
+
import * as zustand_middleware from 'zustand/middleware';
|
|
18
|
+
import { ClassValue } from 'clsx';
|
|
19
|
+
|
|
20
|
+
declare const sizeMap$2: {
|
|
21
|
+
readonly sm: 24;
|
|
22
|
+
readonly md: 32;
|
|
23
|
+
readonly lg: 40;
|
|
24
|
+
};
|
|
25
|
+
interface AvatarProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
26
|
+
name: string;
|
|
27
|
+
size?: keyof typeof sizeMap$2;
|
|
28
|
+
status?: 'online' | 'idle' | 'away' | null;
|
|
29
|
+
src?: string;
|
|
30
|
+
}
|
|
31
|
+
declare const Avatar: React$1.ForwardRefExoticComponent<AvatarProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
32
|
+
|
|
33
|
+
declare const badgeVariants: (props?: ({
|
|
34
|
+
variant?: "blue" | "gray" | "green" | "pink" | "purple" | "red" | "teal" | "amber" | null | undefined;
|
|
35
|
+
size?: "sm" | "md" | null | undefined;
|
|
36
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
37
|
+
interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {
|
|
38
|
+
contrast?: 'low' | 'high';
|
|
39
|
+
}
|
|
40
|
+
declare function Badge({ className, variant, size, contrast, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
|
|
41
|
+
|
|
42
|
+
declare const buttonVariants: (props?: ({
|
|
43
|
+
variant?: "error" | "link" | "default" | "secondary" | "tertiary" | "warning" | "ghost" | null | undefined;
|
|
44
|
+
size?: "small" | "medium" | "large" | "icon" | null | undefined;
|
|
45
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
46
|
+
type ButtonVariantProps = VariantProps<typeof buttonVariants>;
|
|
47
|
+
interface ButtonProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, 'type' | 'prefix'>, ButtonVariantProps {
|
|
48
|
+
asChild?: boolean;
|
|
49
|
+
loading?: boolean;
|
|
50
|
+
prefix?: React$1.ReactNode;
|
|
51
|
+
suffix?: React$1.ReactNode;
|
|
52
|
+
/** HTML button type attribute (named typeName for compat with geistcn API) */
|
|
53
|
+
typeName?: 'submit' | 'button' | 'reset';
|
|
54
|
+
/** Visual type — maps to variant for compat */
|
|
55
|
+
type?: 'shadow' | 'invert' | 'unstyled';
|
|
56
|
+
}
|
|
57
|
+
declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
58
|
+
|
|
59
|
+
declare const ContextMenu: React$1.FC<ContextMenuPrimitive.ContextMenuProps>;
|
|
60
|
+
declare const ContextMenuTrigger: React$1.ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuTriggerProps & React$1.RefAttributes<HTMLSpanElement>>;
|
|
61
|
+
declare const ContextMenuGroup: React$1.ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuGroupProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
62
|
+
declare const ContextMenuPortal: React$1.FC<ContextMenuPrimitive.ContextMenuPortalProps>;
|
|
63
|
+
declare const ContextMenuSub: React$1.FC<ContextMenuPrimitive.ContextMenuSubProps>;
|
|
64
|
+
declare const ContextMenuRadioGroup: React$1.ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuRadioGroupProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
65
|
+
declare const ContextMenuSubTrigger: React$1.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSubTriggerProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
66
|
+
inset?: boolean;
|
|
67
|
+
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
68
|
+
declare const ContextMenuSubContent: React$1.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSubContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
69
|
+
declare const ContextMenuContent: React$1.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
70
|
+
declare const ContextMenuItem: React$1.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuItemProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
71
|
+
inset?: boolean;
|
|
72
|
+
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
73
|
+
declare const ContextMenuSeparator: React$1.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSeparatorProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
74
|
+
|
|
75
|
+
declare const Command: React$1.ForwardRefExoticComponent<Omit<{
|
|
76
|
+
children?: React$1.ReactNode;
|
|
77
|
+
} & Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
|
|
78
|
+
ref?: React$1.Ref<HTMLDivElement>;
|
|
79
|
+
} & {
|
|
80
|
+
asChild?: boolean;
|
|
81
|
+
}, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
|
|
82
|
+
label?: string;
|
|
83
|
+
shouldFilter?: boolean;
|
|
84
|
+
filter?: (value: string, search: string, keywords?: string[]) => number;
|
|
85
|
+
defaultValue?: string;
|
|
86
|
+
value?: string;
|
|
87
|
+
onValueChange?: (value: string) => void;
|
|
88
|
+
loop?: boolean;
|
|
89
|
+
disablePointerSelection?: boolean;
|
|
90
|
+
vimBindings?: boolean;
|
|
91
|
+
} & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
92
|
+
declare function CommandDialog({ children, open, onOpenChange, ...props }: React$1.ComponentProps<typeof DialogPrimitive.Root> & React$1.ComponentPropsWithoutRef<typeof Command$1>): react_jsx_runtime.JSX.Element;
|
|
93
|
+
declare const CommandInput: React$1.ForwardRefExoticComponent<Omit<Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "key" | keyof React$1.InputHTMLAttributes<HTMLInputElement>> & {
|
|
94
|
+
ref?: React$1.Ref<HTMLInputElement>;
|
|
95
|
+
} & {
|
|
96
|
+
asChild?: boolean;
|
|
97
|
+
}, "asChild" | "key" | keyof React$1.InputHTMLAttributes<HTMLInputElement>>, "onChange" | "type" | "value"> & {
|
|
98
|
+
value?: string;
|
|
99
|
+
onValueChange?: (search: string) => void;
|
|
100
|
+
} & React$1.RefAttributes<HTMLInputElement>, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
|
|
101
|
+
declare const CommandList: React$1.ForwardRefExoticComponent<Omit<{
|
|
102
|
+
children?: React$1.ReactNode;
|
|
103
|
+
} & Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
|
|
104
|
+
ref?: React$1.Ref<HTMLDivElement>;
|
|
105
|
+
} & {
|
|
106
|
+
asChild?: boolean;
|
|
107
|
+
}, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
|
|
108
|
+
label?: string;
|
|
109
|
+
} & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
110
|
+
declare const CommandEmpty: React$1.ForwardRefExoticComponent<Omit<{
|
|
111
|
+
children?: React$1.ReactNode;
|
|
112
|
+
} & Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
|
|
113
|
+
ref?: React$1.Ref<HTMLDivElement>;
|
|
114
|
+
} & {
|
|
115
|
+
asChild?: boolean;
|
|
116
|
+
}, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
117
|
+
declare const CommandGroup: React$1.ForwardRefExoticComponent<Omit<{
|
|
118
|
+
children?: React$1.ReactNode;
|
|
119
|
+
} & Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
|
|
120
|
+
ref?: React$1.Ref<HTMLDivElement>;
|
|
121
|
+
} & {
|
|
122
|
+
asChild?: boolean;
|
|
123
|
+
}, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>>, "heading" | "value"> & {
|
|
124
|
+
heading?: React$1.ReactNode;
|
|
125
|
+
value?: string;
|
|
126
|
+
forceMount?: boolean;
|
|
127
|
+
} & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
128
|
+
declare const CommandSeparator: React$1.ForwardRefExoticComponent<Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
|
|
129
|
+
ref?: React$1.Ref<HTMLDivElement>;
|
|
130
|
+
} & {
|
|
131
|
+
asChild?: boolean;
|
|
132
|
+
}, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
|
|
133
|
+
alwaysRender?: boolean;
|
|
134
|
+
} & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
135
|
+
declare const CommandItem: React$1.ForwardRefExoticComponent<Omit<{
|
|
136
|
+
children?: React$1.ReactNode;
|
|
137
|
+
} & Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
|
|
138
|
+
ref?: React$1.Ref<HTMLDivElement>;
|
|
139
|
+
} & {
|
|
140
|
+
asChild?: boolean;
|
|
141
|
+
}, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>>, "onSelect" | "disabled" | "value"> & {
|
|
142
|
+
disabled?: boolean;
|
|
143
|
+
onSelect?: (value: string) => void;
|
|
144
|
+
value?: string;
|
|
145
|
+
keywords?: string[];
|
|
146
|
+
forceMount?: boolean;
|
|
147
|
+
} & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
148
|
+
prefix?: React$1.ReactNode;
|
|
149
|
+
callback?: () => void;
|
|
150
|
+
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
151
|
+
declare const CommandShortcut: ({ className, ...props }: React$1.HTMLAttributes<HTMLSpanElement>) => react_jsx_runtime.JSX.Element;
|
|
152
|
+
|
|
153
|
+
interface CostCounterProps {
|
|
154
|
+
/** The target numeric value to animate to */
|
|
155
|
+
value: number;
|
|
156
|
+
/** Text suffix after the number (e.g. "%", "pts", "k") */
|
|
157
|
+
suffix?: string;
|
|
158
|
+
/** Text prefix before the number (e.g. "$", "+") */
|
|
159
|
+
prefix?: string;
|
|
160
|
+
/** Primary label below the number */
|
|
161
|
+
label: string;
|
|
162
|
+
/** Secondary description text */
|
|
163
|
+
description?: string;
|
|
164
|
+
/** Budget bar target percentage (0-100). Omit to hide the bar. */
|
|
165
|
+
budget?: number;
|
|
166
|
+
/** Budget bar color — defaults to accent-warm */
|
|
167
|
+
budgetColor?: string;
|
|
168
|
+
className?: string;
|
|
169
|
+
}
|
|
170
|
+
declare function CostCounter({ value, suffix, prefix, label, description, budget, budgetColor, className }: CostCounterProps): react_jsx_runtime.JSX.Element;
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* DataRow — LP section-level key-value / data display component.
|
|
174
|
+
*
|
|
175
|
+
* Extracted from khal-landing section components:
|
|
176
|
+
* - Architecture.tsx: font-mono code rules (IF/THEN/ELSE patterns)
|
|
177
|
+
* - Architecture.tsx: connection rows with status dots
|
|
178
|
+
* - Omnichannel-spotlight.tsx: channel count rows (font-mono tabular-nums)
|
|
179
|
+
* - Omnichannel-spotlight.tsx: observability inline data
|
|
180
|
+
*
|
|
181
|
+
* Renders a horizontal key-value pair with monospace font and optional accent.
|
|
182
|
+
*/
|
|
183
|
+
declare const dataRowVariants: (props?: ({
|
|
184
|
+
variant?: "default" | "inline" | "rule" | null | undefined;
|
|
185
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
186
|
+
interface DataRowProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof dataRowVariants> {
|
|
187
|
+
/** The label/key portion (left side) */
|
|
188
|
+
label: string;
|
|
189
|
+
/** The value portion (right side, pushed to end) */
|
|
190
|
+
value?: string;
|
|
191
|
+
/** Accent color for the value text */
|
|
192
|
+
accentColor?: string;
|
|
193
|
+
/** Show a status dot before the label */
|
|
194
|
+
statusDot?: boolean;
|
|
195
|
+
/** Custom status dot color */
|
|
196
|
+
dotColor?: string;
|
|
197
|
+
/** Optional tag/badge to show before the label (e.g. "IF", "THEN") */
|
|
198
|
+
tag?: string;
|
|
199
|
+
/** Tag color — defaults to accent */
|
|
200
|
+
tagColor?: string;
|
|
201
|
+
}
|
|
202
|
+
declare const DataRow: React$1.ForwardRefExoticComponent<DataRowProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
203
|
+
|
|
204
|
+
declare const DropdownMenu: React$1.FC<DropdownMenuPrimitive.DropdownMenuProps>;
|
|
205
|
+
declare const DropdownMenuTrigger: React$1.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
206
|
+
declare const DropdownMenuGroup: React$1.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuGroupProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
207
|
+
declare const DropdownMenuPortal: React$1.FC<DropdownMenuPrimitive.DropdownMenuPortalProps>;
|
|
208
|
+
declare const DropdownMenuSub: React$1.FC<DropdownMenuPrimitive.DropdownMenuSubProps>;
|
|
209
|
+
declare const DropdownMenuRadioGroup: React$1.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
210
|
+
declare const DropdownMenuSubTrigger: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubTriggerProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
211
|
+
inset?: boolean;
|
|
212
|
+
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
213
|
+
declare const DropdownMenuSubContent: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
214
|
+
declare const DropdownMenuContent: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
215
|
+
declare const DropdownMenuItem: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
216
|
+
inset?: boolean;
|
|
217
|
+
prefix?: React$1.ReactNode;
|
|
218
|
+
suffix?: React$1.ReactNode;
|
|
219
|
+
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
220
|
+
declare const DropdownMenuCheckboxItem: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuCheckboxItemProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
221
|
+
declare const DropdownMenuRadioItem: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuRadioItemProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
222
|
+
declare const DropdownMenuLabel: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
223
|
+
inset?: boolean;
|
|
224
|
+
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
225
|
+
declare const DropdownMenuSeparator: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
226
|
+
declare const DropdownMenuShortcut: ({ className, ...props }: React$1.HTMLAttributes<HTMLSpanElement>) => react_jsx_runtime.JSX.Element;
|
|
227
|
+
|
|
228
|
+
declare const glassCardVariants: (props?: ({
|
|
229
|
+
variant?: "default" | "raised" | null | undefined;
|
|
230
|
+
padding?: "sm" | "md" | "lg" | null | undefined;
|
|
231
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
232
|
+
interface GlassCardProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof glassCardVariants> {
|
|
233
|
+
hover?: boolean;
|
|
234
|
+
glow?: string;
|
|
235
|
+
}
|
|
236
|
+
declare const GlassCard: React$1.ForwardRefExoticComponent<GlassCardProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
237
|
+
|
|
238
|
+
interface InputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, 'size'> {
|
|
239
|
+
/** Label above the input (geistcn compat) */
|
|
240
|
+
label?: string;
|
|
241
|
+
/** Size variant (geistcn compat) */
|
|
242
|
+
size?: 'small' | 'medium' | 'large';
|
|
243
|
+
/** HTML input type (named typeName for geistcn compat, also accepts type) */
|
|
244
|
+
typeName?: string;
|
|
245
|
+
}
|
|
246
|
+
declare const Input: React$1.ForwardRefExoticComponent<InputProps & React$1.RefAttributes<HTMLInputElement>>;
|
|
247
|
+
|
|
248
|
+
interface KhalLogoProps {
|
|
249
|
+
size?: number;
|
|
250
|
+
variant?: 'light' | 'dark';
|
|
251
|
+
className?: string;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* KhalLogo — SVG wordmark for large sizes (>=20), single "K" letterform for small sizes.
|
|
255
|
+
* Uses currentColor so color is inherited from parent.
|
|
256
|
+
*/
|
|
257
|
+
declare function KhalLogo({ size, variant, className }: KhalLogoProps): react_jsx_runtime.JSX.Element;
|
|
258
|
+
|
|
259
|
+
type FeedEventType = 'info' | 'success' | 'warning' | 'error' | 'agent' | 'system';
|
|
260
|
+
interface FeedEvent {
|
|
261
|
+
id: string;
|
|
262
|
+
type: FeedEventType;
|
|
263
|
+
message: string;
|
|
264
|
+
timestamp?: Date;
|
|
265
|
+
}
|
|
266
|
+
interface LiveFeedProps {
|
|
267
|
+
/** Initial events to render */
|
|
268
|
+
events?: FeedEvent[];
|
|
269
|
+
/** Maximum visible events before oldest are removed */
|
|
270
|
+
maxVisible?: number;
|
|
271
|
+
/** Show timestamps next to events */
|
|
272
|
+
showTimestamps?: boolean;
|
|
273
|
+
/** Height of the feed container */
|
|
274
|
+
height?: number | string;
|
|
275
|
+
className?: string;
|
|
276
|
+
}
|
|
277
|
+
declare function LiveFeed({ events: externalEvents, maxVisible, showTimestamps, height, className, }: LiveFeedProps): react_jsx_runtime.JSX.Element;
|
|
278
|
+
|
|
279
|
+
interface MeshGradientProps {
|
|
280
|
+
/** Array of CSS color strings (typically 4-8) */
|
|
281
|
+
colors: string[];
|
|
282
|
+
/** Animation speed multiplier (default 0.02) */
|
|
283
|
+
speed?: number;
|
|
284
|
+
className?: string;
|
|
285
|
+
style?: React.CSSProperties;
|
|
286
|
+
}
|
|
287
|
+
declare function MeshGradientInner({ colors, speed, className, style }: MeshGradientProps): react_jsx_runtime.JSX.Element;
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* MetricDisplay — LP section-level metric/stat component.
|
|
291
|
+
*
|
|
292
|
+
* Extracted from khal-landing section components:
|
|
293
|
+
* - Stat cards in metrics.tsx (large numbers with suffix/prefix)
|
|
294
|
+
* - Metric tiles in architecture.tsx AppBuilderMockup
|
|
295
|
+
* - ROI projected savings in metrics.tsx
|
|
296
|
+
*
|
|
297
|
+
* Renders a large highlighted value with a label and optional description.
|
|
298
|
+
*/
|
|
299
|
+
declare const metricDisplayVariants: (props?: ({
|
|
300
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
301
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
302
|
+
interface MetricDisplayProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof metricDisplayVariants> {
|
|
303
|
+
/** The primary value to display */
|
|
304
|
+
value: string | number;
|
|
305
|
+
/** Label describing the metric */
|
|
306
|
+
label: string;
|
|
307
|
+
/** Optional description/subtext below the label */
|
|
308
|
+
description?: string;
|
|
309
|
+
/** Optional prefix before the value (e.g. "+", "$") */
|
|
310
|
+
prefix?: string;
|
|
311
|
+
/** Optional suffix after the value (e.g. "%", "pts", "ms") */
|
|
312
|
+
suffix?: string;
|
|
313
|
+
/** Accent color for the value. Defaults to current text color. */
|
|
314
|
+
accentColor?: string;
|
|
315
|
+
}
|
|
316
|
+
declare const MetricDisplay: React$1.ForwardRefExoticComponent<MetricDisplayProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
317
|
+
|
|
318
|
+
declare const noteVariants: (props?: ({
|
|
319
|
+
type?: "error" | "default" | "warning" | "success" | null | undefined;
|
|
320
|
+
size?: "small" | "default" | null | undefined;
|
|
321
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
322
|
+
interface NoteProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof noteVariants> {
|
|
323
|
+
type?: 'default' | 'error' | 'warning' | 'success';
|
|
324
|
+
label?: boolean | string;
|
|
325
|
+
action?: React$1.ReactNode;
|
|
326
|
+
disabled?: boolean;
|
|
327
|
+
fill?: boolean;
|
|
328
|
+
}
|
|
329
|
+
declare function Note({ className, type, size, label, action, children, ...props }: NoteProps): react_jsx_runtime.JSX.Element;
|
|
330
|
+
|
|
331
|
+
type NumberFlowProps = ComponentProps<typeof NumberFlowBase>;
|
|
332
|
+
/**
|
|
333
|
+
* NumberFlow — animated number transitions via @number-flow/react.
|
|
334
|
+
* Thin wrapper that sets KhalOS-branded timing defaults.
|
|
335
|
+
*/
|
|
336
|
+
declare function NumberFlow({ transformTiming, spinTiming, opacityTiming, ...props }: NumberFlowProps): react_jsx_runtime.JSX.Element;
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* PillBadge — LP section-level badge/tag component.
|
|
340
|
+
*
|
|
341
|
+
* Extracted from khal-landing section components:
|
|
342
|
+
* - Capability tags (omnichannel-spotlight.tsx)
|
|
343
|
+
* - Section label pills (fast-secure.tsx header)
|
|
344
|
+
* - Compliance badges (fast-secure.tsx badge strip)
|
|
345
|
+
* - Accent badges (metrics.tsx ROI calculator)
|
|
346
|
+
*
|
|
347
|
+
* Always uppercase with wide tracking — the LP's signature badge style.
|
|
348
|
+
*/
|
|
349
|
+
declare const pillBadgeVariants: (props?: ({
|
|
350
|
+
variant?: "default" | "muted" | "accent" | null | undefined;
|
|
351
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
352
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
353
|
+
interface PillBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof pillBadgeVariants> {
|
|
354
|
+
/** Show a small dot indicator before the text */
|
|
355
|
+
dot?: boolean;
|
|
356
|
+
/** Custom dot color (defaults to current text color at 40% opacity) */
|
|
357
|
+
dotColor?: string;
|
|
358
|
+
}
|
|
359
|
+
declare const PillBadge: React$1.ForwardRefExoticComponent<PillBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
|
|
360
|
+
|
|
361
|
+
declare const progressBarVariants: (props?: ({
|
|
362
|
+
size?: "sm" | "md" | null | undefined;
|
|
363
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
364
|
+
interface ProgressBarProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'color'>, VariantProps<typeof progressBarVariants> {
|
|
365
|
+
value: number;
|
|
366
|
+
max?: number;
|
|
367
|
+
color?: string;
|
|
368
|
+
showLabel?: boolean;
|
|
369
|
+
}
|
|
370
|
+
declare function ProgressBar({ value, max, color, size, showLabel, className, ...props }: ProgressBarProps): react_jsx_runtime.JSX.Element;
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* SectionCard — LP section-level card component.
|
|
374
|
+
*
|
|
375
|
+
* Extracted from khal-landing section components (architecture.tsx, fast-secure.tsx).
|
|
376
|
+
* Two variants matching the LP's two card styles:
|
|
377
|
+
* - `default`: full-border card (architecture section outer cards)
|
|
378
|
+
* - `inset`: top-left border card (architecture mockup panels)
|
|
379
|
+
*/
|
|
380
|
+
declare const sectionCardVariants: (props?: ({
|
|
381
|
+
variant?: "inset" | "solid" | "default" | null | undefined;
|
|
382
|
+
padding?: "sm" | "md" | "lg" | "none" | null | undefined;
|
|
383
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
384
|
+
interface SectionCardProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof sectionCardVariants> {
|
|
385
|
+
/** Optional gradient overlay color (hex). Renders a subtle top-down gradient. */
|
|
386
|
+
glow?: string;
|
|
387
|
+
}
|
|
388
|
+
declare const SectionCard: React$1.ForwardRefExoticComponent<SectionCardProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
389
|
+
/**
|
|
390
|
+
* SectionCardHeader — optional header row with bottom border separator.
|
|
391
|
+
* Matches the LP mockup panel headers: `py-3 px-4 border-b border-[#FFFFFF1A]`.
|
|
392
|
+
*/
|
|
393
|
+
declare function SectionCardHeader({ className, children, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
394
|
+
declare namespace SectionCardHeader {
|
|
395
|
+
var displayName: string;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
declare const Separator: React$1.ForwardRefExoticComponent<Omit<SeparatorPrimitive.SeparatorProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
399
|
+
|
|
400
|
+
declare const sizeMap$1: {
|
|
401
|
+
readonly sm: 16;
|
|
402
|
+
readonly md: 20;
|
|
403
|
+
readonly lg: 24;
|
|
404
|
+
};
|
|
405
|
+
interface SpinnerProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
406
|
+
size?: keyof typeof sizeMap$1;
|
|
407
|
+
}
|
|
408
|
+
declare function Spinner({ size, className, ...props }: SpinnerProps): react_jsx_runtime.JSX.Element;
|
|
409
|
+
|
|
410
|
+
declare const sizeMap: {
|
|
411
|
+
readonly sm: 8;
|
|
412
|
+
readonly md: 10;
|
|
413
|
+
readonly lg: 12;
|
|
414
|
+
};
|
|
415
|
+
/** All recognized status states */
|
|
416
|
+
type StatusState = 'live' | 'online' | 'active' | 'working' | 'idle' | 'away' | 'queued' | 'error';
|
|
417
|
+
declare const stateConfig: Record<StatusState, {
|
|
418
|
+
color: string;
|
|
419
|
+
label: string;
|
|
420
|
+
pulse: boolean;
|
|
421
|
+
}>;
|
|
422
|
+
interface StatusDotProps extends React$1.HTMLAttributes<HTMLSpanElement> {
|
|
423
|
+
/** Typed state — determines color, pulse, and label automatically */
|
|
424
|
+
state?: StatusState;
|
|
425
|
+
/** Manual color override (legacy support) */
|
|
426
|
+
color?: string;
|
|
427
|
+
/** Manual pulse override */
|
|
428
|
+
pulse?: boolean;
|
|
429
|
+
size?: keyof typeof sizeMap;
|
|
430
|
+
/** Manual label override */
|
|
431
|
+
label?: string;
|
|
432
|
+
/** Show text label next to dot */
|
|
433
|
+
showLabel?: boolean;
|
|
434
|
+
}
|
|
435
|
+
declare function StatusDot({ state, color: colorProp, pulse: pulseProp, size, label: labelProp, showLabel, className, style, ...props }: StatusDotProps): react_jsx_runtime.JSX.Element;
|
|
436
|
+
|
|
437
|
+
interface ToggleProps extends Omit<React$1.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>, 'onChange'> {
|
|
438
|
+
onChange?: (checked: boolean) => void;
|
|
439
|
+
}
|
|
440
|
+
declare const Toggle: React$1.ForwardRefExoticComponent<ToggleProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
441
|
+
|
|
442
|
+
declare function ThemeProvider({ children, ...props }: React.ComponentProps<typeof ThemeProvider$1>): react_jsx_runtime.JSX.Element;
|
|
443
|
+
|
|
444
|
+
interface ThemeSwitcherProps {
|
|
445
|
+
small?: boolean;
|
|
446
|
+
className?: string;
|
|
447
|
+
onThemeSwitch?: (theme: string) => void;
|
|
448
|
+
disabled?: boolean;
|
|
449
|
+
}
|
|
450
|
+
declare function ThemeSwitcher({ small, className, onThemeSwitch, disabled }: ThemeSwitcherProps): react_jsx_runtime.JSX.Element;
|
|
451
|
+
|
|
452
|
+
interface TickerBarProps {
|
|
453
|
+
/** Items to scroll — rendered twice for seamless looping */
|
|
454
|
+
children: ReactNode;
|
|
455
|
+
/** Animation duration in seconds (default 30) */
|
|
456
|
+
duration?: number;
|
|
457
|
+
/** Pause on hover */
|
|
458
|
+
pauseOnHover?: boolean;
|
|
459
|
+
className?: string;
|
|
460
|
+
}
|
|
461
|
+
declare function TickerBar({ children, duration, pauseOnHover, className }: TickerBarProps): react_jsx_runtime.JSX.Element;
|
|
462
|
+
|
|
463
|
+
declare const TooltipProvider: React$1.FC<TooltipPrimitive.TooltipProviderProps>;
|
|
464
|
+
declare const TooltipRoot: React$1.FC<TooltipPrimitive.TooltipProps>;
|
|
465
|
+
declare const TooltipTrigger: React$1.ForwardRefExoticComponent<TooltipPrimitive.TooltipTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
466
|
+
declare const TooltipContent: React$1.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
467
|
+
interface SimpleTooltipProps {
|
|
468
|
+
text: React$1.ReactNode;
|
|
469
|
+
children: React$1.ReactNode;
|
|
470
|
+
position?: 'top' | 'bottom' | 'left' | 'right';
|
|
471
|
+
delay?: boolean;
|
|
472
|
+
delayTime?: number;
|
|
473
|
+
desktopOnly?: boolean;
|
|
474
|
+
className?: string;
|
|
475
|
+
}
|
|
476
|
+
declare function Tooltip({ text, children, position, delay, delayTime, desktopOnly, className }: SimpleTooltipProps): react_jsx_runtime.JSX.Element;
|
|
477
|
+
|
|
478
|
+
declare const WindowMinimizedProvider: React$1.Provider<boolean>;
|
|
479
|
+
declare function useWindowMinimized(): boolean;
|
|
480
|
+
declare const WindowActiveProvider: React$1.Provider<boolean>;
|
|
481
|
+
declare function useWindowActive(): boolean;
|
|
482
|
+
|
|
483
|
+
/**
|
|
484
|
+
* Returns true when the user prefers reduced motion (OS setting or app toggle).
|
|
485
|
+
*/
|
|
486
|
+
declare function useReducedMotion(): boolean;
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* KhalOS animation presets — motion.js configurations for OS-wide use.
|
|
490
|
+
* Import these in components for consistent, branded animations.
|
|
491
|
+
*/
|
|
492
|
+
/** Custom easing curve — KhalOS primary */
|
|
493
|
+
declare const khalEasing: readonly [0.22, 1, 0.36, 1];
|
|
494
|
+
/** Spring config for interactive elements */
|
|
495
|
+
declare const springConfig: {
|
|
496
|
+
readonly stiffness: 300;
|
|
497
|
+
readonly damping: 22;
|
|
498
|
+
};
|
|
499
|
+
/** Window open animation — fade up with blur */
|
|
500
|
+
declare const fadeUp: {
|
|
501
|
+
readonly initial: {
|
|
502
|
+
readonly opacity: 0;
|
|
503
|
+
readonly y: 12;
|
|
504
|
+
readonly filter: "blur(4px)";
|
|
505
|
+
};
|
|
506
|
+
readonly animate: {
|
|
507
|
+
readonly opacity: 1;
|
|
508
|
+
readonly y: 0;
|
|
509
|
+
readonly filter: "blur(0px)";
|
|
510
|
+
};
|
|
511
|
+
readonly transition: {
|
|
512
|
+
readonly duration: 0.7;
|
|
513
|
+
readonly ease: readonly [0.22, 1, 0.36, 1];
|
|
514
|
+
};
|
|
515
|
+
};
|
|
516
|
+
/** App launch animation — scale up with blur */
|
|
517
|
+
declare const scaleUp: {
|
|
518
|
+
readonly initial: {
|
|
519
|
+
readonly opacity: 0;
|
|
520
|
+
readonly scale: 0.96;
|
|
521
|
+
readonly filter: "blur(6px)";
|
|
522
|
+
};
|
|
523
|
+
readonly animate: {
|
|
524
|
+
readonly opacity: 1;
|
|
525
|
+
readonly scale: 1;
|
|
526
|
+
readonly filter: "blur(0px)";
|
|
527
|
+
};
|
|
528
|
+
readonly transition: {
|
|
529
|
+
readonly duration: 0.9;
|
|
530
|
+
readonly ease: readonly [0.22, 1, 0.36, 1];
|
|
531
|
+
};
|
|
532
|
+
};
|
|
533
|
+
/** Stagger container — children appear with 0.12s delay */
|
|
534
|
+
declare const staggerContainer: {
|
|
535
|
+
readonly animate: {
|
|
536
|
+
readonly transition: {
|
|
537
|
+
readonly staggerChildren: 0.12;
|
|
538
|
+
};
|
|
539
|
+
};
|
|
540
|
+
};
|
|
541
|
+
/** Stagger child — each item fades up */
|
|
542
|
+
declare const staggerChild: {
|
|
543
|
+
readonly initial: {
|
|
544
|
+
readonly opacity: 0;
|
|
545
|
+
readonly y: 8;
|
|
546
|
+
};
|
|
547
|
+
readonly animate: {
|
|
548
|
+
readonly opacity: 1;
|
|
549
|
+
readonly y: 0;
|
|
550
|
+
};
|
|
551
|
+
readonly transition: {
|
|
552
|
+
readonly duration: 0.4;
|
|
553
|
+
readonly ease: readonly [0.22, 1, 0.36, 1];
|
|
554
|
+
};
|
|
555
|
+
};
|
|
556
|
+
/** Fade in — simple opacity animation */
|
|
557
|
+
declare const fadeIn: {
|
|
558
|
+
readonly initial: {
|
|
559
|
+
readonly opacity: 0;
|
|
560
|
+
};
|
|
561
|
+
readonly animate: {
|
|
562
|
+
readonly opacity: 1;
|
|
563
|
+
};
|
|
564
|
+
readonly transition: {
|
|
565
|
+
readonly duration: 0.5;
|
|
566
|
+
readonly ease: readonly [0.22, 1, 0.36, 1];
|
|
567
|
+
};
|
|
568
|
+
};
|
|
569
|
+
|
|
570
|
+
interface SidebarContextValue {
|
|
571
|
+
collapsed: boolean;
|
|
572
|
+
toggle: () => void;
|
|
573
|
+
size: number;
|
|
574
|
+
}
|
|
575
|
+
declare function useSidebar(): SidebarContextValue;
|
|
576
|
+
interface CollapsibleSidebarProps {
|
|
577
|
+
children: ReactNode;
|
|
578
|
+
defaultSize?: number;
|
|
579
|
+
min?: number;
|
|
580
|
+
max?: number;
|
|
581
|
+
defaultCollapsed?: boolean;
|
|
582
|
+
side?: 'left' | 'right';
|
|
583
|
+
className?: string;
|
|
584
|
+
}
|
|
585
|
+
declare function CollapsibleSidebarRoot({ children, defaultSize, min, max, defaultCollapsed, side, className, }: CollapsibleSidebarProps): react_jsx_runtime.JSX.Element;
|
|
586
|
+
declare function SidebarHeader({ children, className }: {
|
|
587
|
+
children: ReactNode;
|
|
588
|
+
className?: string;
|
|
589
|
+
}): react_jsx_runtime.JSX.Element;
|
|
590
|
+
declare function CollapseButton({ className }: {
|
|
591
|
+
className?: string;
|
|
592
|
+
}): react_jsx_runtime.JSX.Element;
|
|
593
|
+
declare function SidebarContent({ children, className }: {
|
|
594
|
+
children: ReactNode;
|
|
595
|
+
className?: string;
|
|
596
|
+
}): react_jsx_runtime.JSX.Element;
|
|
597
|
+
declare function SidebarSection({ title, children, className, }: {
|
|
598
|
+
title?: string;
|
|
599
|
+
children: ReactNode;
|
|
600
|
+
className?: string;
|
|
601
|
+
}): react_jsx_runtime.JSX.Element;
|
|
602
|
+
interface SidebarItemProps {
|
|
603
|
+
children: ReactNode;
|
|
604
|
+
icon?: ReactNode;
|
|
605
|
+
active?: boolean;
|
|
606
|
+
indent?: number;
|
|
607
|
+
onClick?: () => void;
|
|
608
|
+
className?: string;
|
|
609
|
+
}
|
|
610
|
+
declare function SidebarItem({ children, icon, active, indent, onClick, className }: SidebarItemProps): react_jsx_runtime.JSX.Element;
|
|
611
|
+
declare const CollapsibleSidebar: typeof CollapsibleSidebarRoot & {
|
|
612
|
+
Header: typeof SidebarHeader;
|
|
613
|
+
CollapseButton: typeof CollapseButton;
|
|
614
|
+
Content: typeof SidebarContent;
|
|
615
|
+
Section: typeof SidebarSection;
|
|
616
|
+
Item: typeof SidebarItem;
|
|
617
|
+
};
|
|
618
|
+
|
|
619
|
+
interface DialogRootProps {
|
|
620
|
+
open: boolean;
|
|
621
|
+
onClose: () => void;
|
|
622
|
+
children: ReactNode;
|
|
623
|
+
}
|
|
624
|
+
declare function DialogRoot({ open, onClose, children }: DialogRootProps): react_jsx_runtime.JSX.Element | null;
|
|
625
|
+
declare function Body({ children }: {
|
|
626
|
+
children: ReactNode;
|
|
627
|
+
}): react_jsx_runtime.JSX.Element;
|
|
628
|
+
declare function Icon({ children, variant: _variant }: {
|
|
629
|
+
children: ReactNode;
|
|
630
|
+
variant?: string;
|
|
631
|
+
}): react_jsx_runtime.JSX.Element;
|
|
632
|
+
declare function Title({ children }: {
|
|
633
|
+
children: ReactNode;
|
|
634
|
+
}): react_jsx_runtime.JSX.Element;
|
|
635
|
+
declare function Description({ children }: {
|
|
636
|
+
children: ReactNode;
|
|
637
|
+
}): react_jsx_runtime.JSX.Element;
|
|
638
|
+
declare function Actions({ children }: {
|
|
639
|
+
children: ReactNode;
|
|
640
|
+
}): react_jsx_runtime.JSX.Element;
|
|
641
|
+
type BtnProps = ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
642
|
+
variant?: string;
|
|
643
|
+
};
|
|
644
|
+
declare function Cancel({ children, ...props }: BtnProps): react_jsx_runtime.JSX.Element;
|
|
645
|
+
declare function Confirm({ children, variant: _variant, ...props }: BtnProps): react_jsx_runtime.JSX.Element;
|
|
646
|
+
declare const Dialog: typeof DialogRoot & {
|
|
647
|
+
Body: typeof Body;
|
|
648
|
+
Icon: typeof Icon;
|
|
649
|
+
Title: typeof Title;
|
|
650
|
+
Description: typeof Description;
|
|
651
|
+
Actions: typeof Actions;
|
|
652
|
+
Cancel: typeof Cancel;
|
|
653
|
+
Confirm: typeof Confirm;
|
|
654
|
+
};
|
|
655
|
+
|
|
656
|
+
interface EmptyStateProps {
|
|
657
|
+
icon?: ReactNode;
|
|
658
|
+
title: string;
|
|
659
|
+
description?: string;
|
|
660
|
+
action?: ReactNode;
|
|
661
|
+
compact?: boolean;
|
|
662
|
+
className?: string;
|
|
663
|
+
}
|
|
664
|
+
declare function EmptyState({ icon, title, description, action, compact, className }: EmptyStateProps): react_jsx_runtime.JSX.Element;
|
|
665
|
+
|
|
666
|
+
interface ListViewProps<T> {
|
|
667
|
+
items: T[];
|
|
668
|
+
selected?: string | string[] | null;
|
|
669
|
+
onSelect?: (key: string | null) => void;
|
|
670
|
+
onActivate?: (item: T) => void;
|
|
671
|
+
renderItem: (item: T, state: {
|
|
672
|
+
selected: boolean;
|
|
673
|
+
focused: boolean;
|
|
674
|
+
index: number;
|
|
675
|
+
}) => ReactNode;
|
|
676
|
+
getKey: (item: T) => string;
|
|
677
|
+
multiSelect?: boolean;
|
|
678
|
+
emptyMessage?: string;
|
|
679
|
+
className?: string;
|
|
680
|
+
}
|
|
681
|
+
declare function ListView<T>({ items, selected, onSelect, onActivate, renderItem, getKey, multiSelect, emptyMessage, className, }: ListViewProps<T>): react_jsx_runtime.JSX.Element;
|
|
682
|
+
|
|
683
|
+
interface PropertyPanelProps {
|
|
684
|
+
title?: string;
|
|
685
|
+
children: ReactNode;
|
|
686
|
+
className?: string;
|
|
687
|
+
}
|
|
688
|
+
declare function PropertyPanelRoot({ title, children, className }: PropertyPanelProps): react_jsx_runtime.JSX.Element;
|
|
689
|
+
declare function PropertySection({ title, children, collapsible: _collapsible, defaultOpen: _defaultOpen, }: {
|
|
690
|
+
title?: string;
|
|
691
|
+
children: ReactNode;
|
|
692
|
+
collapsible?: boolean;
|
|
693
|
+
defaultOpen?: boolean;
|
|
694
|
+
}): react_jsx_runtime.JSX.Element;
|
|
695
|
+
interface PropertyRowProps {
|
|
696
|
+
label: string;
|
|
697
|
+
value?: ReactNode;
|
|
698
|
+
children?: ReactNode;
|
|
699
|
+
mono?: boolean;
|
|
700
|
+
copyable?: boolean;
|
|
701
|
+
}
|
|
702
|
+
declare function PropertyRow({ label, value, children, mono }: PropertyRowProps): react_jsx_runtime.JSX.Element;
|
|
703
|
+
declare function PropertySeparator(): react_jsx_runtime.JSX.Element;
|
|
704
|
+
declare const PropertyPanel: typeof PropertyPanelRoot & {
|
|
705
|
+
Section: typeof PropertySection;
|
|
706
|
+
Row: typeof PropertyRow;
|
|
707
|
+
Separator: typeof PropertySeparator;
|
|
708
|
+
};
|
|
709
|
+
|
|
710
|
+
declare function SectionHeader({ title, description, children, }: {
|
|
711
|
+
title: string;
|
|
712
|
+
description?: string;
|
|
713
|
+
children?: React.ReactNode;
|
|
714
|
+
}): react_jsx_runtime.JSX.Element;
|
|
715
|
+
|
|
716
|
+
interface SidebarNavProps {
|
|
717
|
+
children: ReactNode;
|
|
718
|
+
/** Accessible label for the <nav> element */
|
|
719
|
+
label: string;
|
|
720
|
+
/** Optional heading displayed at the top of the sidebar */
|
|
721
|
+
title?: string;
|
|
722
|
+
className?: string;
|
|
723
|
+
}
|
|
724
|
+
declare function SidebarNavRoot({ children, label, title, className }: SidebarNavProps): react_jsx_runtime.JSX.Element;
|
|
725
|
+
interface SidebarNavGroupProps {
|
|
726
|
+
children: ReactNode;
|
|
727
|
+
title?: string;
|
|
728
|
+
className?: string;
|
|
729
|
+
}
|
|
730
|
+
declare function SidebarNavGroup({ children, title, className }: SidebarNavGroupProps): react_jsx_runtime.JSX.Element;
|
|
731
|
+
interface SidebarNavItemProps {
|
|
732
|
+
children: ReactNode;
|
|
733
|
+
active?: boolean;
|
|
734
|
+
onClick?: () => void;
|
|
735
|
+
icon?: ReactNode;
|
|
736
|
+
/** Trailing content (e.g. a count badge) */
|
|
737
|
+
suffix?: ReactNode;
|
|
738
|
+
className?: string;
|
|
739
|
+
}
|
|
740
|
+
declare function SidebarNavItem({ children, active, onClick, icon, suffix, className }: SidebarNavItemProps): react_jsx_runtime.JSX.Element;
|
|
741
|
+
declare const SidebarNav: typeof SidebarNavRoot & {
|
|
742
|
+
Group: typeof SidebarNavGroup;
|
|
743
|
+
Item: typeof SidebarNavItem;
|
|
744
|
+
};
|
|
745
|
+
|
|
746
|
+
interface SplitPaneProps {
|
|
747
|
+
children: [ReactNode, ReactNode];
|
|
748
|
+
direction?: 'horizontal' | 'vertical';
|
|
749
|
+
defaultSize?: number;
|
|
750
|
+
min?: number;
|
|
751
|
+
max?: number;
|
|
752
|
+
/** On narrow viewports, stack panels vertically and hide the resize handle */
|
|
753
|
+
collapseBelow?: number;
|
|
754
|
+
onResize?: (size: number) => void;
|
|
755
|
+
className?: string;
|
|
756
|
+
}
|
|
757
|
+
declare function SplitPaneRoot({ children, direction, defaultSize, min, max, collapseBelow, onResize, className, }: SplitPaneProps): react_jsx_runtime.JSX.Element;
|
|
758
|
+
declare function Panel({ children, className }: {
|
|
759
|
+
children: ReactNode;
|
|
760
|
+
className?: string;
|
|
761
|
+
}): react_jsx_runtime.JSX.Element;
|
|
762
|
+
declare const SplitPane: typeof SplitPaneRoot & {
|
|
763
|
+
Panel: typeof Panel;
|
|
764
|
+
};
|
|
765
|
+
|
|
766
|
+
declare function StatusBadge({ status }: {
|
|
767
|
+
status: string;
|
|
768
|
+
}): react_jsx_runtime.JSX.Element;
|
|
769
|
+
|
|
770
|
+
interface StatusBarProps {
|
|
771
|
+
children: ReactNode;
|
|
772
|
+
className?: string;
|
|
773
|
+
}
|
|
774
|
+
declare function StatusBarRoot({ children, className }: StatusBarProps): react_jsx_runtime.JSX.Element;
|
|
775
|
+
interface StatusBarItemProps {
|
|
776
|
+
children: ReactNode;
|
|
777
|
+
icon?: ReactNode;
|
|
778
|
+
variant?: 'default' | 'success' | 'warning' | 'error';
|
|
779
|
+
onClick?: () => void;
|
|
780
|
+
className?: string;
|
|
781
|
+
}
|
|
782
|
+
declare function StatusBarItem({ children, icon, variant, onClick, className }: StatusBarItemProps): react_jsx_runtime.JSX.Element;
|
|
783
|
+
declare function StatusBarSeparator(): react_jsx_runtime.JSX.Element;
|
|
784
|
+
declare function StatusBarSpacer(): react_jsx_runtime.JSX.Element;
|
|
785
|
+
declare const StatusBar: typeof StatusBarRoot & {
|
|
786
|
+
Item: typeof StatusBarItem;
|
|
787
|
+
Separator: typeof StatusBarSeparator;
|
|
788
|
+
Spacer: typeof StatusBarSpacer;
|
|
789
|
+
};
|
|
790
|
+
|
|
791
|
+
interface ToolbarProps {
|
|
792
|
+
children: ReactNode;
|
|
793
|
+
className?: string;
|
|
794
|
+
}
|
|
795
|
+
declare function ToolbarRoot({ children, className }: ToolbarProps): react_jsx_runtime.JSX.Element;
|
|
796
|
+
interface ToolbarButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
797
|
+
tooltip?: string;
|
|
798
|
+
active?: boolean;
|
|
799
|
+
children: ReactNode;
|
|
800
|
+
}
|
|
801
|
+
declare function ToolbarGroup({ children, className }: {
|
|
802
|
+
children: ReactNode;
|
|
803
|
+
className?: string;
|
|
804
|
+
}): react_jsx_runtime.JSX.Element;
|
|
805
|
+
declare function ToolbarSeparator(): react_jsx_runtime.JSX.Element;
|
|
806
|
+
declare function ToolbarSpacer(): react_jsx_runtime.JSX.Element;
|
|
807
|
+
declare function ToolbarText({ children, className }: {
|
|
808
|
+
children: ReactNode;
|
|
809
|
+
className?: string;
|
|
810
|
+
}): react_jsx_runtime.JSX.Element;
|
|
811
|
+
declare function ToolbarInput({ value, onChange, placeholder, className, readOnly, }: {
|
|
812
|
+
value?: string;
|
|
813
|
+
onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
814
|
+
placeholder?: string;
|
|
815
|
+
className?: string;
|
|
816
|
+
readOnly?: boolean;
|
|
817
|
+
}): react_jsx_runtime.JSX.Element;
|
|
818
|
+
declare const Toolbar: typeof ToolbarRoot & {
|
|
819
|
+
Button: React$1.ForwardRefExoticComponent<ToolbarButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
820
|
+
Group: typeof ToolbarGroup;
|
|
821
|
+
Separator: typeof ToolbarSeparator;
|
|
822
|
+
Spacer: typeof ToolbarSpacer;
|
|
823
|
+
Text: typeof ToolbarText;
|
|
824
|
+
Input: typeof ToolbarInput;
|
|
825
|
+
};
|
|
826
|
+
|
|
827
|
+
type NotificationUrgency = 'low' | 'normal' | 'critical';
|
|
828
|
+
type DesktopNotifMode = 'background' | 'always' | 'off';
|
|
829
|
+
interface DesktopNotification {
|
|
830
|
+
id: number;
|
|
831
|
+
replacesId: number;
|
|
832
|
+
appName: string;
|
|
833
|
+
summary: string;
|
|
834
|
+
body: string;
|
|
835
|
+
icon: string | null;
|
|
836
|
+
actions: string[];
|
|
837
|
+
expires: number;
|
|
838
|
+
timestamp: number;
|
|
839
|
+
read: boolean;
|
|
840
|
+
urgency: NotificationUrgency;
|
|
841
|
+
category: string | null;
|
|
842
|
+
transient: boolean;
|
|
843
|
+
workspaceId: string | null;
|
|
844
|
+
}
|
|
845
|
+
interface TrayIcon {
|
|
846
|
+
wid: number;
|
|
847
|
+
title: string;
|
|
848
|
+
icon: string | null;
|
|
849
|
+
}
|
|
850
|
+
interface NotificationStore {
|
|
851
|
+
notifications: DesktopNotification[];
|
|
852
|
+
history: DesktopNotification[];
|
|
853
|
+
trayIcons: Map<number, TrayIcon>;
|
|
854
|
+
centerOpen: boolean;
|
|
855
|
+
unreadCount: number;
|
|
856
|
+
doNotDisturb: boolean;
|
|
857
|
+
desktopNotifMode: DesktopNotifMode;
|
|
858
|
+
browserPermission: NotificationPermission;
|
|
859
|
+
setDoNotDisturb: (value: boolean) => void;
|
|
860
|
+
setDesktopNotifMode: (mode: DesktopNotifMode) => void;
|
|
861
|
+
requestBrowserPermission: () => Promise<NotificationPermission>;
|
|
862
|
+
syncBrowserPermission: () => void;
|
|
863
|
+
addNotification: (notification: Omit<DesktopNotification, 'timestamp' | 'read' | 'appName' | 'urgency' | 'category' | 'transient' | 'workspaceId'> & Partial<Pick<DesktopNotification, 'appName' | 'urgency' | 'category' | 'transient' | 'workspaceId'>>) => void;
|
|
864
|
+
dismissNotification: (id: number) => void;
|
|
865
|
+
hideNotification: (id: number) => void;
|
|
866
|
+
clearHistory: () => void;
|
|
867
|
+
markAllRead: () => void;
|
|
868
|
+
toggleCenter: () => void;
|
|
869
|
+
closeCenter: () => void;
|
|
870
|
+
addTrayIcon: (icon: TrayIcon) => void;
|
|
871
|
+
removeTrayIcon: (wid: number) => void;
|
|
872
|
+
updateTrayIcon: (wid: number, updates: Partial<TrayIcon>) => void;
|
|
873
|
+
}
|
|
874
|
+
declare const useNotificationStore: zustand.UseBoundStore<zustand.StoreApi<NotificationStore>>;
|
|
875
|
+
|
|
876
|
+
type ThemeMode = 'light' | 'dark' | 'system';
|
|
877
|
+
interface ThemeStore {
|
|
878
|
+
mode: ThemeMode;
|
|
879
|
+
setMode: (mode: ThemeMode) => void;
|
|
880
|
+
reduceMotion: boolean;
|
|
881
|
+
setReduceMotion: (value: boolean) => void;
|
|
882
|
+
glassEnabled: boolean;
|
|
883
|
+
setGlassEnabled: (value: boolean) => void;
|
|
884
|
+
gpuTerminals: boolean;
|
|
885
|
+
setGpuTerminals: (value: boolean) => void;
|
|
886
|
+
}
|
|
887
|
+
declare const useThemeStore: zustand.UseBoundStore<Omit<zustand.StoreApi<ThemeStore>, "setState" | "persist"> & {
|
|
888
|
+
setState(partial: ThemeStore | Partial<ThemeStore> | ((state: ThemeStore) => ThemeStore | Partial<ThemeStore>), replace?: false | undefined): unknown;
|
|
889
|
+
setState(state: ThemeStore | ((state: ThemeStore) => ThemeStore), replace: true): unknown;
|
|
890
|
+
persist: {
|
|
891
|
+
setOptions: (options: Partial<zustand_middleware.PersistOptions<ThemeStore, ThemeStore, unknown>>) => void;
|
|
892
|
+
clearStorage: () => void;
|
|
893
|
+
rehydrate: () => Promise<void> | void;
|
|
894
|
+
hasHydrated: () => boolean;
|
|
895
|
+
onHydrate: (fn: (state: ThemeStore) => void) => () => void;
|
|
896
|
+
onFinishHydration: (fn: (state: ThemeStore) => void) => () => void;
|
|
897
|
+
getOptions: () => Partial<zustand_middleware.PersistOptions<ThemeStore, ThemeStore, unknown>>;
|
|
898
|
+
};
|
|
899
|
+
}>;
|
|
900
|
+
|
|
901
|
+
/**
|
|
902
|
+
* LP Design Tokens — extracted from khal-landing hero-os-showcase.tsx
|
|
903
|
+
* These are the canonical reference colors from the landing page.
|
|
904
|
+
* The OS theme CSS variables consume these values.
|
|
905
|
+
*/
|
|
906
|
+
declare const WIN_BG = "#111318";
|
|
907
|
+
declare const CHROME_BG = "#0D0F14";
|
|
908
|
+
declare const CELL_BG = "#0D1017";
|
|
909
|
+
declare const WIN_BORDER = "#1E2330";
|
|
910
|
+
declare const WIN_BORDER_FOCUSED = "#333D55";
|
|
911
|
+
declare const TEXT_PRIMARY = "#E8EAF0";
|
|
912
|
+
declare const TEXT_SECONDARY = "#8B92A5";
|
|
913
|
+
declare const TEXT_TERTIARY = "#555D73";
|
|
914
|
+
declare const ACCENT_BLUE = "#0A6FE0";
|
|
915
|
+
declare const MESH_GRADIENT_PALETTE: readonly ["#030508", "#070D15", "#0C1A2E", "#1A4A7A", "#2A3040", "#5C4A38", "#8B6B42", "#D49355"];
|
|
916
|
+
declare const WINDOW_RADIUS = "12px";
|
|
917
|
+
declare const BUTTON_RADIUS = "10px";
|
|
918
|
+
|
|
919
|
+
declare function cn(...inputs: ClassValue[]): string;
|
|
920
|
+
|
|
921
|
+
interface AppComponentProps {
|
|
922
|
+
windowId: string;
|
|
923
|
+
meta?: Record<string, unknown>;
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
export { ACCENT_BLUE, type AppComponentProps, Avatar, type AvatarProps, BUTTON_RADIUS, Badge, Button, type ButtonProps, CELL_BG, CHROME_BG, CollapsibleSidebar, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuSeparator, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CostCounter, type CostCounterProps, DataRow, type DataRowProps, type DesktopNotifMode, type DesktopNotification, Dialog, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type FeedEvent, type FeedEventType, GlassCard, type GlassCardProps, Input, KhalLogo, ListView, LiveFeed, type LiveFeedProps, MESH_GRADIENT_PALETTE, MeshGradientInner as MeshGradient, type MeshGradientProps, MetricDisplay, type MetricDisplayProps, Note, type NotificationUrgency, NumberFlow, type NumberFlowProps, PillBadge, type PillBadgeProps, ProgressBar, type ProgressBarProps, PropertyPanel, SectionCard, SectionCardHeader, type SectionCardProps, SectionHeader, Separator, SidebarNav, Spinner, SplitPane, StatusBadge, StatusBar, StatusDot, type StatusDotProps, type StatusState, TEXT_PRIMARY, TEXT_SECONDARY, TEXT_TERTIARY, ThemeProvider, ThemeSwitcher, TickerBar, type TickerBarProps, Toggle, Toolbar, Tooltip, TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger, type TrayIcon, WINDOW_RADIUS, WIN_BG, WIN_BORDER, WIN_BORDER_FOCUSED, WindowActiveProvider, WindowMinimizedProvider, badgeVariants, buttonVariants, cn, dataRowVariants, fadeIn, fadeUp, glassCardVariants, khalEasing, metricDisplayVariants, pillBadgeVariants, progressBarVariants, scaleUp, sectionCardVariants, springConfig, staggerChild, staggerContainer, stateConfig, useNotificationStore, useReducedMotion, useSidebar, useThemeStore, useWindowActive, useWindowMinimized };
|