@uxuissk/design-system 0.7.2 → 0.8.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.
@@ -7,7 +7,7 @@ export declare namespace Accordion {
7
7
  var displayName: string;
8
8
  }
9
9
 
10
- export declare function AccordionItem({ title, children, open, onToggle, icon }: AccordionItemProps): JSX.Element;
10
+ export declare function AccordionItem({ title, children, open, onToggle, icon, disabled }: AccordionItemProps): JSX.Element;
11
11
 
12
12
  export declare namespace AccordionItem {
13
13
  var displayName: string;
@@ -24,6 +24,8 @@ export declare interface AccordionItemProps {
24
24
  onToggle: () => void;
25
25
  /** Optional leading icon */
26
26
  icon?: default_2.ReactNode;
27
+ /** Disable interaction for this item */
28
+ disabled?: boolean;
27
29
  }
28
30
 
29
31
  export declare interface AccordionProps {
@@ -35,6 +37,7 @@ export declare interface AccordionProps {
35
37
  title: string;
36
38
  content: default_2.ReactNode;
37
39
  icon?: default_2.ReactNode;
40
+ disabled?: boolean;
38
41
  }[];
39
42
  /** Initially open item(s) */
40
43
  defaultOpen?: string | string[];
@@ -121,6 +124,11 @@ export declare interface AdvancedDataTableProps<T = Record<string, any>> {
121
124
 
122
125
  export declare type AdvancedTableSize = "sm" | "md" | "lg";
123
126
 
127
+ /**
128
+ * Akita brand config — placeholder, theme TBD.
129
+ */
130
+ export declare const akitaBrandConfig: ProductBrandConfig;
131
+
124
132
  export declare function Alert({ variant, title, children, dismissible, onDismiss, action, icon, className }: AlertProps): JSX.Element | null;
125
133
 
126
134
  declare interface AlertProps {
@@ -136,6 +144,173 @@ declare interface AlertProps {
136
144
 
137
145
  export declare type AlertVariant = "info" | "success" | "warning" | "error";
138
146
 
147
+ /**
148
+ * AppShell — top-level layout shell for Sellsuki products.
149
+ *
150
+ * Combines AppShellProvider + TopNavbar + Sidebar + content frame.
151
+ * Handles responsive sidebar (desktop collapse, mobile drawer overlay).
152
+ * Sets data-product attribute for CSS theme token override.
153
+ *
154
+ * @example
155
+ * <AppShell product={sellsukiBrandConfig} user={user} navResolver={nav}>
156
+ * <FeaturePageScaffold layout="list" ... />
157
+ * </AppShell>
158
+ */
159
+ export declare function AppShell({ product, user, navResolver, ...rest }: AppShellProps): JSX.Element;
160
+
161
+ export declare namespace AppShell {
162
+ var displayName: string;
163
+ }
164
+
165
+ /**
166
+ * The context value provided by AppShellProvider and consumed by useAppShell().
167
+ * Feature pages use this to read shell state and push breadcrumbs.
168
+ */
169
+ export declare interface AppShellContextValue {
170
+ /** Whether the sidebar is currently open */
171
+ sidebarOpen: boolean;
172
+ /** Toggle sidebar open/closed */
173
+ setSidebarOpen: (open: boolean) => void;
174
+ /** The current authenticated user */
175
+ user: ShellUser | null;
176
+ /** The current product config */
177
+ product: ProductBrandConfig | null;
178
+ /** Current breadcrumb items */
179
+ breadcrumbs: BreadcrumbEntry[];
180
+ /**
181
+ * Set breadcrumbs from a feature page.
182
+ * Call this in a useEffect when the page mounts.
183
+ *
184
+ * @example
185
+ * const { setBreadcrumbs } = useAppShell();
186
+ * useEffect(() => {
187
+ * setBreadcrumbs([
188
+ * { label: "Orders", href: "/orders" },
189
+ * { label: "Order #12345" },
190
+ * ]);
191
+ * }, []);
192
+ */
193
+ setBreadcrumbs: (items: BreadcrumbEntry[]) => void;
194
+ }
195
+
196
+ /**
197
+ * Error boundary for AppShell content.
198
+ * Prevents a feature page crash from taking down the entire shell.
199
+ *
200
+ * @example
201
+ * <AppShellProvider ...>
202
+ * <AppShellErrorBoundary fallback={<ErrorPage />}>
203
+ * <FeaturePage />
204
+ * </AppShellErrorBoundary>
205
+ * </AppShellProvider>
206
+ */
207
+ export declare class AppShellErrorBoundary extends default_2.Component<AppShellErrorBoundaryProps, ErrorBoundaryState> {
208
+ constructor(props: AppShellErrorBoundaryProps);
209
+ static getDerivedStateFromError(error: Error): ErrorBoundaryState;
210
+ componentDidCatch(error: Error, info: default_2.ErrorInfo): void;
211
+ render(): string | number | bigint | boolean | Iterable<default_2.ReactNode> | Promise<string | number | bigint | boolean | default_2.ReactPortal | default_2.ReactElement<unknown, string | default_2.JSXElementConstructor<any>> | Iterable<default_2.ReactNode> | null | undefined> | JSX.Element | null | undefined;
212
+ }
213
+
214
+ declare interface AppShellErrorBoundaryProps {
215
+ children: default_2.ReactNode;
216
+ fallback?: default_2.ReactNode;
217
+ }
218
+
219
+ export declare interface AppShellFullContextValue extends AppShellContextValue {
220
+ /** Navigation groups resolved from navResolver */
221
+ navGroups: ShellSidebarGroup[];
222
+ /** Whether nav is loading (async navResolver in flight) */
223
+ navLoading: boolean;
224
+ /** Nav load error — display fallback nav when set */
225
+ navError: string | null;
226
+ /** Manually refresh nav (re-call navResolver) */
227
+ refreshNav: () => void;
228
+ }
229
+
230
+ export declare interface AppShellProps {
231
+ /** Product brand config — drives theme and brand identity */
232
+ product: ProductBrandConfig;
233
+ /** Authenticated user */
234
+ user: ShellUser;
235
+ /** Async nav resolver — permission-filtered nav groups */
236
+ navResolver?: NavResolver;
237
+ /** Currently active nav item ID */
238
+ activeItemId?: string;
239
+ /** Navigation handler — called when user clicks a nav item */
240
+ onNavigate?: (item: NavItem) => void;
241
+ /** Notification count (0 = hidden) */
242
+ notificationCount?: number;
243
+ /** Notification click handler */
244
+ onNotificationClick?: () => void;
245
+ /** User click handler (profile menu, logout) */
246
+ onUserClick?: () => void;
247
+ /** Search click handler */
248
+ onSearchClick?: () => void;
249
+ /** Show search in TopNavbar */
250
+ showSearch?: boolean;
251
+ /** App version string */
252
+ version?: string;
253
+ /** App version date */
254
+ versionDate?: string;
255
+ /** Whether content area has padding (default: true) */
256
+ contentPadding?: boolean;
257
+ /** Children — feature page content */
258
+ children: default_2.ReactNode;
259
+ /** Additional class name on root element */
260
+ className?: string;
261
+ }
262
+
263
+ export declare function AppShellProvider({ user, product, navResolver, sidebarOpen: controlledOpen, onSidebarChange, defaultSidebarOpen, children, }: AppShellProviderProps): JSX.Element;
264
+
265
+ export declare namespace AppShellProvider {
266
+ var displayName: string;
267
+ }
268
+
269
+ export declare interface AppShellProviderProps {
270
+ /** The authenticated user for the session */
271
+ user?: ShellUser | null;
272
+ /** The product brand config — drives theme token override and brand identity */
273
+ product?: ProductBrandConfig | null;
274
+ /**
275
+ * Async nav resolver — called once on mount (and when user changes).
276
+ * Return permission-filtered SidebarGroups.
277
+ * If omitted the nav state is empty (product drives its own nav externally).
278
+ */
279
+ navResolver?: NavResolver;
280
+ /**
281
+ * Override sidebar open state from outside (controlled mode).
282
+ * Pair with onSidebarChange for fully controlled behavior.
283
+ */
284
+ sidebarOpen?: boolean;
285
+ /** Sidebar change callback (controlled mode) */
286
+ onSidebarChange?: (open: boolean) => void;
287
+ /** Initial sidebar open state (uncontrolled, default: true on desktop) */
288
+ defaultSidebarOpen?: boolean;
289
+ /** Children */
290
+ children: default_2.ReactNode;
291
+ }
292
+
293
+ /**
294
+ * Full-page loading skeleton for AppShell.
295
+ * Use while the user session or product config is loading.
296
+ */
297
+ export declare function AppShellSkeleton(): JSX.Element;
298
+
299
+ export declare namespace AppShellSkeleton {
300
+ var displayName: string;
301
+ }
302
+
303
+ export declare function AreaChart({ series, height, width, showXAxis, showYAxis, showGrid, showLegend, showTooltip, showDots, smooth, fillOpacity, className, }: AreaChartProps): JSX.Element | null;
304
+
305
+ export declare namespace AreaChart {
306
+ var displayName: string;
307
+ }
308
+
309
+ export declare interface AreaChartProps extends LineChartProps {
310
+ /** Opacity of fill area */
311
+ fillOpacity?: number;
312
+ }
313
+
139
314
  export declare function Avatar({ src, name, size, status, className }: AvatarProps): JSX.Element;
140
315
 
141
316
  export declare namespace Avatar {
@@ -191,8 +366,56 @@ export declare type BadgeSize = "sm" | "md" | "lg";
191
366
 
192
367
  export declare type BadgeVariant = "default" | "secondary" | "outline" | "destructive" | "success" | "warning";
193
368
 
369
+ export declare function BarChart({ series, height, width, showXAxis, showYAxis, showGrid, showLegend, showTooltip, stacked, radius, className, }: BarChartProps): JSX.Element | null;
370
+
371
+ export declare namespace BarChart {
372
+ var displayName: string;
373
+ }
374
+
375
+ export declare interface BarChartProps extends BaseChartProps {
376
+ /** Horizontal bar chart */
377
+ horizontal?: boolean;
378
+ /** Stack bars (when multiple series) */
379
+ stacked?: boolean;
380
+ /** Bar corner radius */
381
+ radius?: number;
382
+ }
383
+
384
+ export declare interface BaseChartProps {
385
+ /** Chart series (single or multiple) */
386
+ series: ChartSeries[];
387
+ /** Chart height */
388
+ height?: number;
389
+ /** Chart width (default: 100% of container) */
390
+ width?: number;
391
+ /** Show X-axis labels */
392
+ showXAxis?: boolean;
393
+ /** Show Y-axis labels */
394
+ showYAxis?: boolean;
395
+ /** Show grid lines */
396
+ showGrid?: boolean;
397
+ /** Show legend */
398
+ showLegend?: boolean;
399
+ /** Show tooltip on hover */
400
+ showTooltip?: boolean;
401
+ /** Y-axis label */
402
+ yAxisLabel?: string;
403
+ /** Additional class name */
404
+ className?: string;
405
+ }
406
+
194
407
  export declare function Breadcrumb({ items, separator, size, maxItems, }: BreadcrumbProps): JSX.Element;
195
408
 
409
+ /**
410
+ * A breadcrumb entry set by feature pages via setBreadcrumbs().
411
+ */
412
+ export declare interface BreadcrumbEntry {
413
+ /** Display label */
414
+ label: string;
415
+ /** Navigation href — omit for current page (last item) */
416
+ href?: string;
417
+ }
418
+
196
419
  export declare interface BreadcrumbItem {
197
420
  label: string;
198
421
  href?: string;
@@ -273,6 +496,22 @@ export declare interface CardProps {
273
496
  elevation?: "none" | "sm" | "md" | "lg";
274
497
  }
275
498
 
499
+ export declare interface ChartDataPoint {
500
+ /** X-axis label */
501
+ label: string;
502
+ /** Numeric value */
503
+ value: number;
504
+ }
505
+
506
+ export declare interface ChartSeries {
507
+ /** Series name (shown in legend/tooltip) */
508
+ name: string;
509
+ /** Data points */
510
+ data: ChartDataPoint[];
511
+ /** Color override (defaults to token palette) */
512
+ color?: string;
513
+ }
514
+
276
515
  export declare function CheckboxGroup({ label, children, direction, className }: CheckboxGroupProps): JSX.Element;
277
516
 
278
517
  declare interface CheckboxGroupProps {
@@ -298,7 +537,67 @@ declare interface CheckboxProps {
298
537
 
299
538
  export declare type CheckboxSize = "sm" | "md" | "lg";
300
539
 
301
- export declare function ColorPicker({ value, onChange, label, presets, showInput, showFormats, size, }: ColorPickerProps): JSX.Element;
540
+ export declare function ChoiceCard({ value, title, description, icon, badge, selected, disabled, showArrow, showCheck, size, layout, onClick, className, }: ChoiceCardProps): JSX.Element;
541
+
542
+ export declare namespace ChoiceCard {
543
+ var displayName: string;
544
+ }
545
+
546
+ export declare function ChoiceCardGroup({ value, onChange, layout, size, children, className, }: ChoiceCardGroupProps): JSX.Element;
547
+
548
+ export declare namespace ChoiceCardGroup {
549
+ var displayName: string;
550
+ }
551
+
552
+ export declare interface ChoiceCardGroupProps {
553
+ /** Currently selected value */
554
+ value?: string;
555
+ /** Change handler */
556
+ onChange?: (value: string) => void;
557
+ /** Layout of the group */
558
+ layout?: ChoiceCardLayout;
559
+ /** Size applied to all cards */
560
+ size?: ChoiceCardSize;
561
+ /** Cards */
562
+ children: default_2.ReactNode;
563
+ /** Additional class name */
564
+ className?: string;
565
+ }
566
+
567
+ declare type ChoiceCardLayout = "horizontal" | "vertical";
568
+
569
+ export declare interface ChoiceCardProps {
570
+ /** Unique value for this card */
571
+ value: string;
572
+ /** Card title */
573
+ title: string;
574
+ /** Subtitle / description */
575
+ description?: string;
576
+ /** Leading icon or image */
577
+ icon?: default_2.ReactNode;
578
+ /** Badge label (top-right) */
579
+ badge?: string;
580
+ /** Whether this card is selected */
581
+ selected?: boolean;
582
+ /** Disabled state */
583
+ disabled?: boolean;
584
+ /** Show arrow indicator (horizontal layout only) */
585
+ showArrow?: boolean;
586
+ /** Show checkmark instead of arrow on selection */
587
+ showCheck?: boolean;
588
+ /** Card size */
589
+ size?: ChoiceCardSize;
590
+ /** Layout direction */
591
+ layout?: ChoiceCardLayout;
592
+ /** Click handler */
593
+ onClick?: (value: string) => void;
594
+ /** Additional class name */
595
+ className?: string;
596
+ }
597
+
598
+ declare type ChoiceCardSize = "sm" | "md" | "lg";
599
+
600
+ export declare function ColorPicker({ value, onChange, label, presets, showInput, showFormats, size, disabled, }: ColorPickerProps): JSX.Element;
302
601
 
303
602
  export declare interface ColorPickerProps {
304
603
  value: string;
@@ -308,6 +607,7 @@ export declare interface ColorPickerProps {
308
607
  showInput?: boolean;
309
608
  showFormats?: boolean;
310
609
  size?: ColorPickerSize;
610
+ disabled?: boolean;
311
611
  }
312
612
 
313
613
  export declare type ColorPickerSize = "sm" | "md" | "lg";
@@ -392,6 +692,73 @@ export declare type DatePickerState = "default" | "error" | "success";
392
692
 
393
693
  export declare type DatePickerVariant = "default" | "outlined" | "filled" | "ghost";
394
694
 
695
+ export declare interface DateRange {
696
+ from: Date | null;
697
+ to: Date | null;
698
+ }
699
+
700
+ export declare function DateRangePicker({ value, onChange, presets, placeholder, size, minDate, maxDate, clearable, disabled, className, }: DateRangePickerProps): JSX.Element;
701
+
702
+ export declare namespace DateRangePicker {
703
+ var displayName: string;
704
+ }
705
+
706
+ export declare interface DateRangePickerProps {
707
+ /** Current range */
708
+ value?: DateRange;
709
+ /** Change handler */
710
+ onChange?: (range: DateRange, preset?: DateRangePreset) => void;
711
+ /** Available presets (default: today, last7, last30, custom) */
712
+ presets?: DateRangePreset[];
713
+ /** Placeholder text */
714
+ placeholder?: string;
715
+ /** Component size */
716
+ size?: DateRangePickerSize;
717
+ /** Min selectable date */
718
+ minDate?: Date;
719
+ /** Max selectable date */
720
+ maxDate?: Date;
721
+ /** Show clear button */
722
+ clearable?: boolean;
723
+ /** Disabled state */
724
+ disabled?: boolean;
725
+ /** Additional class name */
726
+ className?: string;
727
+ }
728
+
729
+ declare type DateRangePickerSize = "sm" | "md" | "lg";
730
+
731
+ export declare type DateRangePreset = "today" | "yesterday" | "last7" | "last30" | "thisMonth" | "lastMonth" | "custom";
732
+
733
+ export declare function DateTimePicker({ value, onChange, format, showSeconds, placeholder, size, minDate, maxDate, disabled, className, }: DateTimePickerProps): JSX.Element;
734
+
735
+ export declare namespace DateTimePicker {
736
+ var displayName: string;
737
+ }
738
+
739
+ export declare interface DateTimePickerProps {
740
+ /** Combined date+time value */
741
+ value?: Date;
742
+ /** Change handler */
743
+ onChange?: (date: Date) => void;
744
+ /** Time format */
745
+ format?: TimePickerFormat;
746
+ /** Show seconds */
747
+ showSeconds?: boolean;
748
+ /** Placeholder */
749
+ placeholder?: string;
750
+ /** Component size */
751
+ size?: TimePickerSize;
752
+ /** Min date */
753
+ minDate?: Date;
754
+ /** Max date */
755
+ maxDate?: Date;
756
+ /** Disabled state */
757
+ disabled?: boolean;
758
+ /** Additional class name */
759
+ className?: string;
760
+ }
761
+
395
762
  export declare function Divider({ label, orientation, dashed, spacing, className, }: DividerProps): JSX.Element;
396
763
 
397
764
  export declare namespace Divider {
@@ -410,6 +777,35 @@ export declare interface DividerProps {
410
777
 
411
778
  export declare type DividerSpacing = "sm" | "md" | "lg";
412
779
 
780
+ export declare function DonutChart({ data, size, innerRatio, centerLabel, centerValue, showLegend, showTooltip, className, }: DonutChartProps): JSX.Element | null;
781
+
782
+ export declare namespace DonutChart {
783
+ var displayName: string;
784
+ }
785
+
786
+ export declare interface DonutChartProps {
787
+ /** Data segments */
788
+ data: {
789
+ label: string;
790
+ value: number;
791
+ color?: string;
792
+ }[];
793
+ /** Outer radius */
794
+ size?: number;
795
+ /** Inner radius ratio (0=pie, 0.6=donut) */
796
+ innerRatio?: number;
797
+ /** Center label */
798
+ centerLabel?: string;
799
+ /** Center value (overrides auto-sum) */
800
+ centerValue?: string;
801
+ /** Show legend */
802
+ showLegend?: boolean;
803
+ /** Show tooltip */
804
+ showTooltip?: boolean;
805
+ /** Additional class name */
806
+ className?: string;
807
+ }
808
+
413
809
  export declare function Drawer({ open, onClose, title, children, side, size, footer, className, }: DrawerProps): JSX.Element | null;
414
810
 
415
811
  export declare namespace Drawer {
@@ -527,6 +923,8 @@ declare interface DSInputProps extends Omit<default_2.InputHTMLAttributes<HTMLIn
527
923
  loading?: boolean;
528
924
  fullWidth?: boolean;
529
925
  required?: boolean;
926
+ /** Show character count below input (requires maxLength) */
927
+ showCount?: boolean;
530
928
  onClear?: () => void;
531
929
  }
532
930
  export { DSInputProps }
@@ -536,7 +934,7 @@ declare function DSRadio({ value, label, description, disabled: localDisabled, s
536
934
  export { DSRadio }
537
935
  export { DSRadio as Radio }
538
936
 
539
- declare function DSTable<T extends Record<string, any>>({ columns, data, size, striped, hoverable, bordered, selectable, selectedRows: controlledSelected, onSelectionChange, loading, emptyMessage, stickyHeader, flush, className, }: TableProps<T>): JSX.Element;
937
+ declare function DSTable<T extends Record<string, any>>({ columns, data, size, striped, hoverable, bordered, selectable, selectedRows: controlledSelected, onSelectionChange, loading, error, emptyMessage, stickyHeader, flush, className, }: TableProps<T>): JSX.Element;
540
938
  export { DSTable }
541
939
  export { DSTable as Table }
542
940
 
@@ -581,6 +979,75 @@ export declare interface EmptyStateProps {
581
979
 
582
980
  export declare type EmptyStateSize = "sm" | "md" | "lg";
583
981
 
982
+ declare interface ErrorBoundaryState {
983
+ hasError: boolean;
984
+ error?: Error;
985
+ }
986
+
987
+ export declare type FeaturePageLayout = "list" | "detail" | "settings" | "wizard" | "dashboard" | "form" | "report";
988
+
989
+ export declare function FeaturePageScaffold(props: FeaturePageScaffoldProps): JSX.Element;
990
+
991
+ export declare namespace FeaturePageScaffold {
992
+ var displayName: string;
993
+ }
994
+
995
+ export declare interface FeaturePageScaffoldProps {
996
+ /**
997
+ * Layout variant — determines the region structure.
998
+ * @default "list"
999
+ */
1000
+ layout?: FeaturePageLayout;
1001
+ /** Page header — use <PageHeader> component */
1002
+ header?: default_2.ReactNode;
1003
+ /** Page-level alert / announcement banner */
1004
+ banner?: default_2.ReactNode;
1005
+ /** Stat cards row — shown above filters in list/dashboard layouts */
1006
+ stats?: default_2.ReactNode;
1007
+ /** Filter bar — shown between stats and content in list layout */
1008
+ filters?: default_2.ReactNode;
1009
+ /** Main content area — table, grid, cards */
1010
+ content?: default_2.ReactNode;
1011
+ /** Footer — pagination, bulk action bar */
1012
+ footer?: default_2.ReactNode;
1013
+ /** Main content column (left, wider) — detail layout */
1014
+ main?: default_2.ReactNode;
1015
+ /** Side panel (right, narrower) — detail layout */
1016
+ aside?: default_2.ReactNode;
1017
+ /** Aside width class — default: "w-80" */
1018
+ asideWidth?: string;
1019
+ /** Whether aside appears on the left instead of right */
1020
+ asideLeft?: boolean;
1021
+ /** Sections list — settings layout (array of ReactNode) */
1022
+ sections?: default_2.ReactNode;
1023
+ /** Stepper — wizard layout */
1024
+ stepper?: default_2.ReactNode;
1025
+ /** Form body — wizard/form layouts */
1026
+ form?: default_2.ReactNode;
1027
+ /** Sticky action bar — wizard/form layouts */
1028
+ actions?: default_2.ReactNode;
1029
+ /** Primary chart area — dashboard */
1030
+ primaryChart?: default_2.ReactNode;
1031
+ /** Secondary chart(s) — dashboard (2-column) */
1032
+ secondaryCharts?: default_2.ReactNode;
1033
+ /** Quick stats / KPI cards */
1034
+ kpis?: default_2.ReactNode;
1035
+ /** Date range picker + period selector */
1036
+ dateRange?: default_2.ReactNode;
1037
+ /** Chart section */
1038
+ charts?: default_2.ReactNode;
1039
+ /** Data table section */
1040
+ table?: default_2.ReactNode;
1041
+ /** Outer max width (e.g. "max-w-7xl") — defaults to full width */
1042
+ maxWidth?: string;
1043
+ /** Page padding — default "p-6" desktop, "p-4" mobile */
1044
+ padding?: string;
1045
+ /** Gap between regions — default "gap-6" */
1046
+ gap?: string;
1047
+ /** Additional className on root element */
1048
+ className?: string;
1049
+ }
1050
+
584
1051
  export declare function FileUpload({ accept, maxSize, multiple, disabled, variant, label, description, value, onChange, onUpload, onRemove, }: FileUploadProps): JSX.Element;
585
1052
 
586
1053
  export declare interface FileUploadProps {
@@ -705,6 +1172,16 @@ export declare interface FormSuccessProps {
705
1172
  className?: string;
706
1173
  }
707
1174
 
1175
+ export declare interface GalleryImage {
1176
+ id: string;
1177
+ src: string;
1178
+ alt?: string;
1179
+ name?: string;
1180
+ size?: string;
1181
+ /** Extra metadata */
1182
+ meta?: Record<string, string>;
1183
+ }
1184
+
708
1185
  export declare const IconButton: default_2.ForwardRefExoticComponent<IconButtonProps & default_2.RefAttributes<HTMLButtonElement>>;
709
1186
 
710
1187
  export declare interface IconButtonProps extends default_2.ButtonHTMLAttributes<HTMLButtonElement> {
@@ -715,6 +1192,45 @@ export declare interface IconButtonProps extends default_2.ButtonHTMLAttributes<
715
1192
  "aria-label": string;
716
1193
  }
717
1194
 
1195
+ export declare function ImageGallery({ images, selectable, selectedIds, onSelectChange, maxSelect, lightbox, uploadable, onUpload, onDelete, defaultLayout, columns, disabled, className, }: ImageGalleryProps): JSX.Element;
1196
+
1197
+ export declare namespace ImageGallery {
1198
+ var displayName: string;
1199
+ }
1200
+
1201
+ declare type ImageGalleryColumns = 2 | 3 | 4 | 5 | 6;
1202
+
1203
+ declare type ImageGalleryLayout = "grid" | "list";
1204
+
1205
+ export declare interface ImageGalleryProps {
1206
+ /** Images to display */
1207
+ images: GalleryImage[];
1208
+ /** Allow selecting images */
1209
+ selectable?: boolean;
1210
+ /** Currently selected image IDs */
1211
+ selectedIds?: string[];
1212
+ /** Selection change handler */
1213
+ onSelectChange?: (ids: string[]) => void;
1214
+ /** Max selectable images (default: unlimited) */
1215
+ maxSelect?: number;
1216
+ /** Show lightbox on click */
1217
+ lightbox?: boolean;
1218
+ /** Allow upload (calls onUpload) */
1219
+ uploadable?: boolean;
1220
+ /** Upload handler */
1221
+ onUpload?: (files: FileList) => void;
1222
+ /** Delete handler */
1223
+ onDelete?: (id: string) => void;
1224
+ /** Default layout */
1225
+ defaultLayout?: ImageGalleryLayout;
1226
+ /** Grid columns */
1227
+ columns?: ImageGalleryColumns;
1228
+ /** Disabled state */
1229
+ disabled?: boolean;
1230
+ /** Additional class name */
1231
+ className?: string;
1232
+ }
1233
+
718
1234
  export declare function ImagePreview({ images, initialIndex }: ImagePreviewProps): JSX.Element;
719
1235
 
720
1236
  export declare interface ImagePreviewItem {
@@ -734,6 +1250,19 @@ export declare type InputState = "default" | "error" | "success" | "warning";
734
1250
 
735
1251
  export declare type InputVariant = "default" | "outlined" | "filled" | "ghost";
736
1252
 
1253
+ export declare function LineChart({ series, height, width, showXAxis, showYAxis, showGrid, showLegend, showTooltip, showDots, smooth, className, }: LineChartProps): JSX.Element | null;
1254
+
1255
+ export declare namespace LineChart {
1256
+ var displayName: string;
1257
+ }
1258
+
1259
+ export declare interface LineChartProps extends BaseChartProps {
1260
+ /** Show dots on data points */
1261
+ showDots?: boolean;
1262
+ /** Smooth curves (catmull-rom) */
1263
+ smooth?: boolean;
1264
+ }
1265
+
737
1266
  export declare function Menu({ items, open, onClose, triggerRef, className }: MenuProps): default_2.ReactPortal | null;
738
1267
 
739
1268
  export declare namespace Menu {
@@ -774,6 +1303,31 @@ export declare interface MenuProps {
774
1303
  className?: string;
775
1304
  }
776
1305
 
1306
+ export declare function MiniSparkline({ values, type, width, height, color, showValue, trend, className, }: MiniSparklineProps): JSX.Element | null;
1307
+
1308
+ export declare namespace MiniSparkline {
1309
+ var displayName: string;
1310
+ }
1311
+
1312
+ export declare interface MiniSparklineProps {
1313
+ /** Data values (no labels needed) */
1314
+ values: number[];
1315
+ /** Type */
1316
+ type?: "line" | "bar" | "area";
1317
+ /** Width */
1318
+ width?: number;
1319
+ /** Height */
1320
+ height?: number;
1321
+ /** Color */
1322
+ color?: string;
1323
+ /** Show last value as label */
1324
+ showValue?: boolean;
1325
+ /** Trend direction override (auto-computed if omitted) */
1326
+ trend?: "up" | "down" | "neutral";
1327
+ /** Additional class name */
1328
+ className?: string;
1329
+ }
1330
+
777
1331
  export declare function Modal({ open, onClose, title, description, size, children, footer, closeOnOverlay, showCloseButton, className, }: ModalProps): JSX.Element | null;
778
1332
 
779
1333
  declare interface ModalProps {
@@ -791,6 +1345,47 @@ declare interface ModalProps {
791
1345
 
792
1346
  export declare type ModalSize = "sm" | "md" | "lg" | "xl" | "full";
793
1347
 
1348
+ /**
1349
+ * A single navigation item in the sidebar.
1350
+ * Supports static badge, async badge, and permission gating.
1351
+ */
1352
+ export declare interface NavItem {
1353
+ /** Unique identifier — used for active state matching */
1354
+ id: string;
1355
+ /** Display label */
1356
+ label: string;
1357
+ /** Leading icon (ReactNode — use lucide-react icons) */
1358
+ icon?: default_2.ReactNode;
1359
+ /** Navigation target — href or route path */
1360
+ href?: string;
1361
+ /** Badge count or label — static string/number or async resolver */
1362
+ badge?: string | number | (() => Promise<number>);
1363
+ /** Child items for nested navigation (one level only) */
1364
+ children?: NavItem[];
1365
+ /** Permission key required to show this item — matched against ShellUser.permissions */
1366
+ permission?: string;
1367
+ /** Disable click and dim the item */
1368
+ disabled?: boolean;
1369
+ }
1370
+
1371
+ /**
1372
+ * A resolver function that returns navigation groups for a given user.
1373
+ * Used by AppShell to support permission-filtered, async navigation.
1374
+ *
1375
+ * @example
1376
+ * const navResolver: NavResolver = async (user) => {
1377
+ * const counts = await fetchBadgeCounts(user.id);
1378
+ * return buildNavGroups(user.permissions, counts);
1379
+ * };
1380
+ */
1381
+ export declare type NavResolver = (user: ShellUser) => ShellSidebarGroup[] | Promise<ShellSidebarGroup[]>;
1382
+
1383
+ export declare interface NavState {
1384
+ groups: ShellSidebarGroup[];
1385
+ loading: boolean;
1386
+ error: string | null;
1387
+ }
1388
+
794
1389
  declare function Notification_2({ type, title, message, closable, onClose, action, avatar, time, read, }: NotificationProps): JSX.Element;
795
1390
  export { Notification_2 as Notification }
796
1391
 
@@ -945,6 +1540,12 @@ export declare type PaginationSize = "sm" | "md" | "lg";
945
1540
 
946
1541
  export declare type PaginationVariant = "default" | "outlined" | "filled" | "minimal";
947
1542
 
1543
+ /**
1544
+ * Patona brand config — Orange-500 primary.
1545
+ * Logo and workspaceSwitcher should be provided by the Patona product repo.
1546
+ */
1547
+ export declare const patonaBrandConfig: ProductBrandConfig;
1548
+
948
1549
  export declare function Popover({ trigger, children, placement, title, open: controlled, onOpenChange, }: PopoverProps): JSX.Element;
949
1550
 
950
1551
  export declare type PopoverPlacement = "top" | "bottom" | "left" | "right";
@@ -958,6 +1559,45 @@ export declare interface PopoverProps {
958
1559
  onOpenChange?: (v: boolean) => void;
959
1560
  }
960
1561
 
1562
+ /**
1563
+ * Static brand identity config for a product.
1564
+ *
1565
+ * This is the config that ships in the npm package (or product repo).
1566
+ * It does NOT include navigation — nav lives in the product repo (dynamic).
1567
+ *
1568
+ * @example
1569
+ * const sellsukiBrandConfig: ProductBrandConfig = {
1570
+ * product: "sellsuki",
1571
+ * brand: {
1572
+ * name: "Sellsuki",
1573
+ * logo: <SellsukiLogo />,
1574
+ * theme: "sellsuki",
1575
+ * },
1576
+ * };
1577
+ */
1578
+ export declare interface ProductBrandConfig {
1579
+ /** Product identifier — sets data-product attribute on shell root */
1580
+ product: ProductId;
1581
+ /** Brand identity */
1582
+ brand: {
1583
+ /** Brand/product name shown in sidebar header and nav title */
1584
+ name: string;
1585
+ /** Logo component or image URL */
1586
+ logo?: default_2.ReactNode;
1587
+ /** CSS theme class or data-product value — used for token overrides */
1588
+ theme?: string;
1589
+ /** Optional workspace/shop switcher rendered after brand logo in TopNavbar */
1590
+ workspaceSwitcher?: default_2.ReactNode;
1591
+ };
1592
+ /** Optional shell layout preferences */
1593
+ shell?: ShellPrefs;
1594
+ }
1595
+
1596
+ /**
1597
+ * Product identifier — all current and planned Sellsuki products.
1598
+ */
1599
+ export declare type ProductId = "sellsuki" | "patona" | "sukispace" | "shipmunk" | "akita" | "oc2plus" | (string & {});
1600
+
961
1601
  export declare function ProgressBar({ value, max, size, color, label, showValue, indeterminate, className, }: ProgressBarProps): JSX.Element;
962
1602
 
963
1603
  export declare namespace ProgressBar {
@@ -977,6 +1617,50 @@ export declare interface ProgressBarProps {
977
1617
 
978
1618
  export declare type ProgressBarSize = "sm" | "md" | "lg";
979
1619
 
1620
+ export declare function RadioCard({ options, value, onChange, columns, layout, size, name, className, }: RadioCardProps): JSX.Element;
1621
+
1622
+ export declare namespace RadioCard {
1623
+ var displayName: string;
1624
+ }
1625
+
1626
+ declare type RadioCardLayout = "grid" | "list";
1627
+
1628
+ export declare interface RadioCardOption {
1629
+ /** Unique value */
1630
+ value: string;
1631
+ /** Card title */
1632
+ title: string;
1633
+ /** Description text */
1634
+ description?: string;
1635
+ /** Icon, logo, or image */
1636
+ icon?: default_2.ReactNode;
1637
+ /** Badge label */
1638
+ badge?: string;
1639
+ /** Disabled state */
1640
+ disabled?: boolean;
1641
+ }
1642
+
1643
+ export declare interface RadioCardProps {
1644
+ /** Options to render */
1645
+ options: RadioCardOption[];
1646
+ /** Currently selected value */
1647
+ value?: string;
1648
+ /** Change handler */
1649
+ onChange?: (value: string) => void;
1650
+ /** Grid columns */
1651
+ columns?: 1 | 2 | 3 | 4;
1652
+ /** Layout */
1653
+ layout?: RadioCardLayout;
1654
+ /** Card size */
1655
+ size?: RadioCardSize;
1656
+ /** Name for the radio group (for form semantics) */
1657
+ name?: string;
1658
+ /** Additional class name */
1659
+ className?: string;
1660
+ }
1661
+
1662
+ declare type RadioCardSize = "sm" | "md" | "lg";
1663
+
980
1664
  export declare function RadioGroup({ name, value: controlled, defaultValue, onChange, label, size, disabled, direction, children, error, className, }: RadioGroupProps): JSX.Element;
981
1665
 
982
1666
  declare interface RadioGroupProps {
@@ -1022,6 +1706,117 @@ export declare interface RatingProps {
1022
1706
 
1023
1707
  export declare type RatingSize = "sm" | "md" | "lg";
1024
1708
 
1709
+ export declare interface RepeatableFieldColumn {
1710
+ /** Column key matching values[key] */
1711
+ key: string;
1712
+ /** Column header label */
1713
+ label: string;
1714
+ /** Render function — receive current value + onChange */
1715
+ render: (value: unknown, onChange: (val: unknown) => void, rowIndex: number) => default_2.ReactNode;
1716
+ /** Column width (CSS, e.g. "200px", "1fr") */
1717
+ width?: string;
1718
+ }
1719
+
1720
+ export declare function RepeatableFieldList({ columns, value, onChange, defaultRow, minRows, maxRows, addLabel, sortable, disabled, className, }: RepeatableFieldListProps): JSX.Element;
1721
+
1722
+ export declare namespace RepeatableFieldList {
1723
+ var displayName: string;
1724
+ }
1725
+
1726
+ export declare interface RepeatableFieldListProps {
1727
+ /** Column definitions */
1728
+ columns: RepeatableFieldColumn[];
1729
+ /** Current rows */
1730
+ value?: RepeatableFieldRow[];
1731
+ /** Change handler */
1732
+ onChange?: (rows: RepeatableFieldRow[]) => void;
1733
+ /** Default values for a new row */
1734
+ defaultRow?: Record<string, unknown>;
1735
+ /** Minimum number of rows (shows disabled remove when at min) */
1736
+ minRows?: number;
1737
+ /** Maximum number of rows (hides add button when at max) */
1738
+ maxRows?: number;
1739
+ /** Add button label */
1740
+ addLabel?: string;
1741
+ /** Whether rows can be reordered */
1742
+ sortable?: boolean;
1743
+ /** Disabled state */
1744
+ disabled?: boolean;
1745
+ /** Additional class name */
1746
+ className?: string;
1747
+ }
1748
+
1749
+ export declare interface RepeatableFieldRow {
1750
+ /** Internal unique ID */
1751
+ id: string;
1752
+ /** Row data values keyed by field name */
1753
+ values: Record<string, unknown>;
1754
+ }
1755
+
1756
+ export declare function RichTextEditor({ value, onChange, placeholder, minHeight, maxHeight, toolbar, fullscreen: allowFullscreen, disabled, readOnly, size, className, }: RichTextEditorProps): JSX.Element;
1757
+
1758
+ export declare namespace RichTextEditor {
1759
+ var displayName: string;
1760
+ }
1761
+
1762
+ export declare interface RichTextEditorProps {
1763
+ /** HTML content value */
1764
+ value?: string;
1765
+ /** Change handler (receives HTML string) */
1766
+ onChange?: (html: string) => void;
1767
+ /** Placeholder text */
1768
+ placeholder?: string;
1769
+ /** Min height (px) */
1770
+ minHeight?: number;
1771
+ /** Max height (px, scroll beyond) */
1772
+ maxHeight?: number;
1773
+ /** Toolbar groups to show */
1774
+ toolbar?: ("format" | "list" | "align" | "link" | "block" | "history")[];
1775
+ /** Allow fullscreen toggle */
1776
+ fullscreen?: boolean;
1777
+ /** Disabled state */
1778
+ disabled?: boolean;
1779
+ /** Read-only state */
1780
+ readOnly?: boolean;
1781
+ /** Component size */
1782
+ size?: RichTextEditorSize;
1783
+ /** Additional class name */
1784
+ className?: string;
1785
+ }
1786
+
1787
+ declare type RichTextEditorSize = "sm" | "md" | "lg";
1788
+
1789
+ /**
1790
+ * KPI stat card row for dashboard layout.
1791
+ * Wraps children in an equal-width responsive grid.
1792
+ */
1793
+ export declare function ScaffoldKPIRow({ children, className }: {
1794
+ children: default_2.ReactNode;
1795
+ className?: string;
1796
+ }): JSX.Element;
1797
+
1798
+ export declare namespace ScaffoldKPIRow {
1799
+ var displayName: string;
1800
+ }
1801
+
1802
+ export declare function ScaffoldSection({ title, description, action, children, className }: ScaffoldSectionProps): JSX.Element;
1803
+
1804
+ export declare namespace ScaffoldSection {
1805
+ var displayName: string;
1806
+ }
1807
+
1808
+ /**
1809
+ * Scaffold section for settings layout.
1810
+ * Provides consistent heading + description + content region.
1811
+ */
1812
+ export declare interface ScaffoldSectionProps {
1813
+ title: string;
1814
+ description?: string;
1815
+ action?: default_2.ReactNode;
1816
+ children: default_2.ReactNode;
1817
+ className?: string;
1818
+ }
1819
+
1025
1820
  export declare function SearchField({ value: controlled, onChange, onSearch, placeholder, size, variant, loading, suggestions, onSuggestionSelect, clearable, disabled, autoFocus, debounce, className, }: SearchFieldProps): JSX.Element;
1026
1821
 
1027
1822
  declare interface SearchFieldProps {
@@ -1052,6 +1847,61 @@ declare interface SearchSuggestion {
1052
1847
 
1053
1848
  export declare type SearchVariant = "default" | "outlined" | "filled";
1054
1849
 
1850
+ /**
1851
+ * Sellsuki brand config — Sky-500 primary, DB HeaventRounded font.
1852
+ * Use this as the default for Sellsuki Admin product.
1853
+ */
1854
+ export declare const sellsukiBrandConfig: ProductBrandConfig;
1855
+
1856
+ /**
1857
+ * Shell layout preferences that can be overridden per product.
1858
+ */
1859
+ export declare interface ShellPrefs {
1860
+ /** Whether the sidebar can be collapsed — default true */
1861
+ sidebarCollapsible?: boolean;
1862
+ /** Sidebar open by default on desktop — default true */
1863
+ sidebarDefaultOpen?: boolean;
1864
+ /** Max width of the content area — default undefined (full width) */
1865
+ contentMaxWidth?: string;
1866
+ }
1867
+
1868
+ /**
1869
+ * A group of navigation items used by AppShell — richer than the standalone Sidebar's SidebarGroup.
1870
+ * Use this type when configuring AppShell navigation via NavResolver.
1871
+ * @alias ShellSidebarGroup
1872
+ */
1873
+ export declare interface ShellSidebarGroup {
1874
+ /** Group label shown as section header — omit for ungrouped items */
1875
+ title?: string;
1876
+ /** Navigation items in this group */
1877
+ items: NavItem[];
1878
+ /** Whether the group can be collapsed — default false */
1879
+ collapsible?: boolean;
1880
+ /** Default collapsed state — only applies if collapsible=true */
1881
+ defaultCollapsed?: boolean;
1882
+ }
1883
+
1884
+ /**
1885
+ * The authenticated user shown in the shell (top nav user menu, sidebar account).
1886
+ */
1887
+ export declare interface ShellUser {
1888
+ /** Display name */
1889
+ name: string;
1890
+ /** Avatar image URL — falls back to initials if not provided */
1891
+ avatar?: string;
1892
+ /** Email address */
1893
+ email?: string;
1894
+ /** User role label (e.g. "Admin", "Staff", "Owner") */
1895
+ role?: string;
1896
+ /** Permission keys for nav item filtering — e.g. ["orders:read", "settings:write"] */
1897
+ permissions: string[];
1898
+ }
1899
+
1900
+ /**
1901
+ * Shipmunk brand config — placeholder, theme TBD.
1902
+ */
1903
+ export declare const shipmunkBrandConfig: ProductBrandConfig;
1904
+
1055
1905
  export declare function Sidebar({ brand, accountSwitcher, groups, activeItem, onNavigate, collapsed, onCollapsedChange, showCollapseToggle, version, versionDate, className, }: SidebarProps): JSX.Element;
1056
1906
 
1057
1907
  export declare namespace Sidebar {
@@ -1111,8 +1961,8 @@ export declare interface SidebarItem {
1111
1961
  label: string;
1112
1962
  /** Leading icon */
1113
1963
  icon?: default_2.ReactNode;
1114
- /** Badge text (e.g., count) */
1115
- badge?: string;
1964
+ /** Badge text or count — shown next to item label */
1965
+ badge?: string | number;
1116
1966
  }
1117
1967
 
1118
1968
  export declare interface SidebarProps {
@@ -1146,7 +1996,9 @@ export declare function Skeleton({ width, height, variant, animate, className, }
1146
1996
 
1147
1997
  export declare function SkeletonCard(): JSX.Element;
1148
1998
 
1149
- export declare function SkeletonList(): JSX.Element;
1999
+ export declare function SkeletonList({ rows }: {
2000
+ rows?: number;
2001
+ }): JSX.Element;
1150
2002
 
1151
2003
  export declare interface SkeletonProps {
1152
2004
  width?: string | number;
@@ -1217,6 +2069,8 @@ export declare interface StepDefinition {
1217
2069
  title: string;
1218
2070
  /** Optional step description */
1219
2071
  description?: string;
2072
+ /** Disable click navigation to this step */
2073
+ disabled?: boolean;
1220
2074
  }
1221
2075
 
1222
2076
  export declare function Stepper({ steps, current, orientation, onStepClick, className, }: StepperProps): JSX.Element;
@@ -1238,6 +2092,11 @@ export declare interface StepperProps {
1238
2092
  className?: string;
1239
2093
  }
1240
2094
 
2095
+ /**
2096
+ * Sukispace brand config — Sky-500 primary (same as Sellsuki, identity TBD).
2097
+ */
2098
+ export declare const sukispaceBrandConfig: ProductBrandConfig;
2099
+
1241
2100
  export declare function Switch({ checked, onChange, label, description, size, disabled, color, }: SwitchProps): JSX.Element;
1242
2101
 
1243
2102
  export declare type SwitchColor = "primary" | "success" | "warning" | "destructive";
@@ -1283,6 +2142,7 @@ declare interface TableProps<T = any> {
1283
2142
  selectedRows?: Set<number>;
1284
2143
  onSelectionChange?: (selected: Set<number>) => void;
1285
2144
  loading?: boolean;
2145
+ error?: string;
1286
2146
  emptyMessage?: string;
1287
2147
  stickyHeader?: boolean;
1288
2148
  /** Remove border and border-radius — use when table is already inside a bordered container */
@@ -1361,6 +2221,29 @@ export declare interface TagProps {
1361
2221
 
1362
2222
  export declare type TagSize = "sm" | "md" | "lg";
1363
2223
 
2224
+ export declare function ThumbnailCell({ src, alt, caption, subCaption, size, onClick, className, }: ThumbnailCellProps): JSX.Element;
2225
+
2226
+ export declare namespace ThumbnailCell {
2227
+ var displayName: string;
2228
+ }
2229
+
2230
+ export declare interface ThumbnailCellProps {
2231
+ /** Image source */
2232
+ src: string;
2233
+ /** Alt text */
2234
+ alt?: string;
2235
+ /** Caption below image */
2236
+ caption?: string;
2237
+ /** Sub-caption (muted) */
2238
+ subCaption?: string;
2239
+ /** Thumbnail size */
2240
+ size?: "xs" | "sm" | "md";
2241
+ /** Click handler */
2242
+ onClick?: () => void;
2243
+ /** Additional class name */
2244
+ className?: string;
2245
+ }
2246
+
1364
2247
  export declare function Timeline({ items, variant, size, }: TimelineProps): JSX.Element;
1365
2248
 
1366
2249
  export declare interface TimelineItem {
@@ -1384,6 +2267,43 @@ export declare type TimelineSize = "sm" | "md" | "lg";
1384
2267
 
1385
2268
  export declare type TimelineVariant = "default" | "alternate" | "compact";
1386
2269
 
2270
+ export declare function TimePicker({ value, onChange, format, showSeconds, minuteStep, placeholder, size, disabled, className, }: TimePickerProps): JSX.Element;
2271
+
2272
+ export declare namespace TimePicker {
2273
+ var displayName: string;
2274
+ }
2275
+
2276
+ export declare type TimePickerFormat = "12h" | "24h";
2277
+
2278
+ export declare interface TimePickerProps {
2279
+ /** Current time value */
2280
+ value?: TimeValue;
2281
+ /** Change handler */
2282
+ onChange?: (time: TimeValue) => void;
2283
+ /** 12-hour or 24-hour format */
2284
+ format?: TimePickerFormat;
2285
+ /** Show seconds column */
2286
+ showSeconds?: boolean;
2287
+ /** Minute step (default: 1) */
2288
+ minuteStep?: number;
2289
+ /** Placeholder text */
2290
+ placeholder?: string;
2291
+ /** Component size */
2292
+ size?: TimePickerSize;
2293
+ /** Disabled state */
2294
+ disabled?: boolean;
2295
+ /** Additional class name */
2296
+ className?: string;
2297
+ }
2298
+
2299
+ declare type TimePickerSize = "sm" | "md" | "lg";
2300
+
2301
+ export declare interface TimeValue {
2302
+ hours: number;
2303
+ minutes: number;
2304
+ seconds?: number;
2305
+ }
2306
+
1387
2307
  export declare const toast: {
1388
2308
  show: (opts: Omit<ToastData, "id">) => void;
1389
2309
  info: (message: string, title?: string) => void;
@@ -1422,7 +2342,7 @@ export declare interface TooltipProps {
1422
2342
  className?: string;
1423
2343
  }
1424
2344
 
1425
- export declare function TopNavbar({ brand, breadcrumbs, title, actions, user, height, showSearch, searchPlaceholder, onSearchClick, notificationCount, onNotificationClick, onMobileMenuClick, onSidebarToggle, onUserClick, onBreadcrumbClick, className, }: TopNavbarProps): JSX.Element;
2345
+ export declare function TopNavbar({ brand, breadcrumbs, title, actions, user, height, showSearch, searchPlaceholder, onSearchClick, notificationCount, onNotificationClick, onMobileMenuClick, onSidebarToggle, onUserClick, onBreadcrumbClick, workspaceSwitcher, className, }: TopNavbarProps): JSX.Element;
1426
2346
 
1427
2347
  export declare namespace TopNavbar {
1428
2348
  var displayName: string;
@@ -1466,6 +2386,8 @@ export declare interface TopNavbarProps {
1466
2386
  onUserClick?: () => void;
1467
2387
  /** Breadcrumb click handler */
1468
2388
  onBreadcrumbClick?: (item: BreadcrumbItem_2, index: number) => void;
2389
+ /** Workspace/shop switcher rendered after brand logo — for multi-workspace products */
2390
+ workspaceSwitcher?: default_2.ReactNode;
1469
2391
  /** Additional class name */
1470
2392
  className?: string;
1471
2393
  }
@@ -1483,7 +2405,7 @@ export declare interface TransferItem {
1483
2405
  disabled?: boolean;
1484
2406
  }
1485
2407
 
1486
- export declare function TransferList({ sourceTitle, targetTitle, items, defaultTarget, searchable, value, onChange, }: TransferListProps): JSX.Element;
2408
+ export declare function TransferList({ sourceTitle, targetTitle, items, defaultTarget, searchable, value, onChange, loading, error, }: TransferListProps): JSX.Element;
1487
2409
 
1488
2410
  export declare interface TransferListProps {
1489
2411
  sourceTitle?: string;
@@ -1495,9 +2417,13 @@ export declare interface TransferListProps {
1495
2417
  value?: string[];
1496
2418
  /** Called when target list changes */
1497
2419
  onChange?: (targetIds: string[]) => void;
2420
+ /** Show loading skeleton overlay */
2421
+ loading?: boolean;
2422
+ /** Show error message instead of content */
2423
+ error?: string;
1498
2424
  }
1499
2425
 
1500
- export declare function Tree({ data, selectable, showLines, defaultExpanded, expandedItems, onExpandChange, selectedItems, onSelect, }: TreeProps): JSX.Element;
2426
+ export declare function Tree({ data, selectable, showLines, defaultExpanded, expandedItems, onExpandChange, selectedItems, onSelect, loading, error, emptyMessage, }: TreeProps): JSX.Element;
1501
2427
 
1502
2428
  export declare interface TreeNode {
1503
2429
  id: string;
@@ -1520,6 +2446,12 @@ export declare interface TreeProps {
1520
2446
  selectedItems?: string[];
1521
2447
  /** Called when selection changes */
1522
2448
  onSelect?: (selectedIds: string[]) => void;
2449
+ /** Show loading skeleton */
2450
+ loading?: boolean;
2451
+ /** Show error message */
2452
+ error?: string;
2453
+ /** Message shown when data is empty */
2454
+ emptyMessage?: string;
1523
2455
  }
1524
2456
 
1525
2457
  export declare interface UploadedFile {
@@ -1531,6 +2463,65 @@ export declare interface UploadedFile {
1531
2463
  status: "uploading" | "done" | "error";
1532
2464
  }
1533
2465
 
2466
+ /**
2467
+ * Access shell state from any descendant component.
2468
+ *
2469
+ * @throws Error if called outside of AppShellProvider
2470
+ *
2471
+ * @example
2472
+ * function OrderDetailPage() {
2473
+ * const { setBreadcrumbs, user, sidebarOpen } = useAppShell();
2474
+ *
2475
+ * useEffect(() => {
2476
+ * setBreadcrumbs([
2477
+ * { label: "Orders", href: "/orders" },
2478
+ * { label: "Order #12345" },
2479
+ * ]);
2480
+ * }, []);
2481
+ *
2482
+ * return <div>...</div>;
2483
+ * }
2484
+ */
2485
+ export declare function useAppShell(): AppShellContextValue;
2486
+
2487
+ /**
2488
+ * Extended hook that also exposes nav state.
2489
+ * Use this in the Sidebar/TopNavbar wrappers that need nav groups.
2490
+ *
2491
+ * @throws Error if called outside of AppShellProvider
2492
+ */
2493
+ export declare function useAppShellFull(): AppShellFullContextValue;
2494
+
2495
+ /**
2496
+ * Convenience hook for setting breadcrumbs from a feature page.
2497
+ * Handles the useEffect pattern automatically.
2498
+ *
2499
+ * @example
2500
+ * function ProductDetailPage({ productId }: { productId: string }) {
2501
+ * useBreadcrumbs([
2502
+ * { label: "Products", href: "/products" },
2503
+ * { label: product.name },
2504
+ * ]);
2505
+ * return <div>...</div>;
2506
+ * }
2507
+ */
2508
+ export declare function useBreadcrumbs(items: BreadcrumbEntry[]): void;
2509
+
1534
2510
  export declare function useFormField(): FormFieldContextValue;
1535
2511
 
2512
+ /**
2513
+ * Standalone hook for products that manage nav outside of AppShellProvider.
2514
+ * Returns nav groups, loading state, error, and a refresh function.
2515
+ *
2516
+ * @example
2517
+ * function AppSidebar() {
2518
+ * const { groups, loading, error, refresh } = useNavResolver(navResolver, currentUser);
2519
+ * if (loading) return <SkeletonList />;
2520
+ * return <Sidebar groups={mapGroupsForSidebar(groups)} />;
2521
+ * }
2522
+ */
2523
+ export declare function useNavResolver(resolver: NavResolver | undefined, user: ShellUser | null): NavState & {
2524
+ refresh: () => void;
2525
+ };
2526
+
1536
2527
  export { }