@papernote/ui 1.3.1 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/dist/components/BottomNavigation.d.ts +98 -0
  2. package/dist/components/BottomNavigation.d.ts.map +1 -0
  3. package/dist/components/Checkbox.d.ts +2 -0
  4. package/dist/components/Checkbox.d.ts.map +1 -1
  5. package/dist/components/CheckboxList.d.ts +81 -0
  6. package/dist/components/CheckboxList.d.ts.map +1 -0
  7. package/dist/components/Chip.d.ts +92 -1
  8. package/dist/components/Chip.d.ts.map +1 -1
  9. package/dist/components/ConfirmDialog.d.ts +43 -1
  10. package/dist/components/ConfirmDialog.d.ts.map +1 -1
  11. package/dist/components/DataTable.d.ts +10 -1
  12. package/dist/components/DataTable.d.ts.map +1 -1
  13. package/dist/components/DataTableCardView.d.ts +99 -0
  14. package/dist/components/DataTableCardView.d.ts.map +1 -0
  15. package/dist/components/ExpandablePanel.d.ts +142 -0
  16. package/dist/components/ExpandablePanel.d.ts.map +1 -0
  17. package/dist/components/FloatingActionButton.d.ts +98 -0
  18. package/dist/components/FloatingActionButton.d.ts.map +1 -0
  19. package/dist/components/Input.d.ts +45 -1
  20. package/dist/components/Input.d.ts.map +1 -1
  21. package/dist/components/MobileHeader.d.ts +98 -0
  22. package/dist/components/MobileHeader.d.ts.map +1 -0
  23. package/dist/components/MobileLayout.d.ts +121 -0
  24. package/dist/components/MobileLayout.d.ts.map +1 -0
  25. package/dist/components/Modal.d.ts +50 -1
  26. package/dist/components/Modal.d.ts.map +1 -1
  27. package/dist/components/PullToRefresh.d.ts +87 -0
  28. package/dist/components/PullToRefresh.d.ts.map +1 -0
  29. package/dist/components/QueryTransparency.d.ts +1 -1
  30. package/dist/components/QueryTransparency.d.ts.map +1 -1
  31. package/dist/components/SearchableList.d.ts +83 -0
  32. package/dist/components/SearchableList.d.ts.map +1 -0
  33. package/dist/components/Select.d.ts +16 -2
  34. package/dist/components/Select.d.ts.map +1 -1
  35. package/dist/components/Sidebar.d.ts +40 -1
  36. package/dist/components/Sidebar.d.ts.map +1 -1
  37. package/dist/components/SwipeActions.d.ts +93 -0
  38. package/dist/components/SwipeActions.d.ts.map +1 -0
  39. package/dist/components/Switch.d.ts +1 -0
  40. package/dist/components/Switch.d.ts.map +1 -1
  41. package/dist/components/Textarea.d.ts +13 -0
  42. package/dist/components/Textarea.d.ts.map +1 -1
  43. package/dist/components/index.d.ts +27 -3
  44. package/dist/components/index.d.ts.map +1 -1
  45. package/dist/context/MobileContext.d.ts +168 -0
  46. package/dist/context/MobileContext.d.ts.map +1 -0
  47. package/dist/hooks/useResponsive.d.ts +158 -0
  48. package/dist/hooks/useResponsive.d.ts.map +1 -0
  49. package/dist/index.d.ts +1653 -56
  50. package/dist/index.esm.js +2832 -194
  51. package/dist/index.esm.js.map +1 -1
  52. package/dist/index.js +2865 -192
  53. package/dist/index.js.map +1 -1
  54. package/dist/styles.css +404 -1
  55. package/dist/types/index.d.ts +2 -0
  56. package/dist/types/index.d.ts.map +1 -1
  57. package/package.json +1 -1
  58. package/src/components/BottomNavigation.stories.tsx +142 -0
  59. package/src/components/BottomNavigation.tsx +225 -0
  60. package/src/components/Checkbox.stories.tsx +162 -0
  61. package/src/components/Checkbox.tsx +22 -6
  62. package/src/components/CheckboxList.stories.tsx +311 -0
  63. package/src/components/CheckboxList.tsx +433 -0
  64. package/src/components/Chip.stories.tsx +389 -0
  65. package/src/components/Chip.tsx +182 -3
  66. package/src/components/ConfirmDialog.tsx +56 -4
  67. package/src/components/DataTable.tsx +60 -1
  68. package/src/components/DataTableCardView.stories.tsx +307 -0
  69. package/src/components/DataTableCardView.tsx +419 -0
  70. package/src/components/ExpandablePanel.stories.tsx +620 -0
  71. package/src/components/ExpandablePanel.tsx +383 -0
  72. package/src/components/FloatingActionButton.stories.tsx +197 -0
  73. package/src/components/FloatingActionButton.tsx +301 -0
  74. package/src/components/Grid.stories.tsx +16 -16
  75. package/src/components/Input.stories.tsx +214 -0
  76. package/src/components/Input.tsx +81 -4
  77. package/src/components/MobileHeader.stories.tsx +205 -0
  78. package/src/components/MobileHeader.tsx +233 -0
  79. package/src/components/MobileLayout.stories.tsx +338 -0
  80. package/src/components/MobileLayout.tsx +313 -0
  81. package/src/components/Modal.stories.tsx +183 -0
  82. package/src/components/Modal.tsx +84 -3
  83. package/src/components/PullToRefresh.stories.tsx +321 -0
  84. package/src/components/PullToRefresh.tsx +294 -0
  85. package/src/components/QueryTransparency.tsx +1 -1
  86. package/src/components/SearchableList.stories.tsx +437 -0
  87. package/src/components/SearchableList.tsx +326 -0
  88. package/src/components/Select.stories.tsx +190 -0
  89. package/src/components/Select.tsx +353 -137
  90. package/src/components/Sidebar.tsx +191 -8
  91. package/src/components/SwipeActions.stories.tsx +327 -0
  92. package/src/components/SwipeActions.tsx +387 -0
  93. package/src/components/Switch.stories.tsx +158 -0
  94. package/src/components/Switch.tsx +12 -3
  95. package/src/components/Textarea.tsx +31 -1
  96. package/src/components/index.ts +63 -3
  97. package/src/context/MobileContext.tsx +296 -0
  98. package/src/hooks/useResponsive.ts +360 -0
  99. package/src/types/index.ts +4 -0
  100. package/tailwind.config.js +56 -1
package/dist/index.d.ts CHANGED
@@ -155,7 +155,7 @@ type ValidationState$1 = 'error' | 'success' | 'warning' | null;
155
155
  /**
156
156
  * Input component props
157
157
  */
158
- interface InputProps extends React__default.InputHTMLAttributes<HTMLInputElement> {
158
+ interface InputProps extends Omit<React__default.InputHTMLAttributes<HTMLInputElement>, 'size'> {
159
159
  /** Input label text */
160
160
  label?: string;
161
161
  /** Helper text displayed below input */
@@ -186,6 +186,31 @@ interface InputProps extends React__default.InputHTMLAttributes<HTMLInputElement
186
186
  onClear?: () => void;
187
187
  /** Show loading spinner in input */
188
188
  loading?: boolean;
189
+ /**
190
+ * Input mode hint for mobile keyboards.
191
+ * 'none' - No virtual keyboard
192
+ * 'text' - Standard text keyboard (default)
193
+ * 'decimal' - Decimal number keyboard
194
+ * 'numeric' - Numeric keyboard
195
+ * 'tel' - Telephone keypad
196
+ * 'search' - Search optimized keyboard
197
+ * 'email' - Email optimized keyboard
198
+ * 'url' - URL optimized keyboard
199
+ */
200
+ inputMode?: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';
201
+ /**
202
+ * Enter key hint for mobile keyboards.
203
+ * 'enter' - Standard enter key
204
+ * 'done' - Done action
205
+ * 'go' - Go/navigate action
206
+ * 'next' - Move to next field
207
+ * 'previous' - Move to previous field
208
+ * 'search' - Search action
209
+ * 'send' - Send action
210
+ */
211
+ enterKeyHint?: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send';
212
+ /** Size variant - 'md' is default, 'lg' provides larger touch target (44px min) */
213
+ size?: 'sm' | 'md' | 'lg';
189
214
  }
190
215
  /**
191
216
  * Input - Text input component with validation, icons, and prefixes/suffixes
@@ -193,12 +218,19 @@ interface InputProps extends React__default.InputHTMLAttributes<HTMLInputElement
193
218
  * A feature-rich text input with support for validation states, character counting,
194
219
  * password visibility toggle, prefix/suffix text and icons, and clearable functionality.
195
220
  *
221
+ * Mobile optimizations:
222
+ * - inputMode prop for appropriate mobile keyboard
223
+ * - enterKeyHint prop for mobile keyboard action button
224
+ * - Size variants with touch-friendly targets (44px for 'lg')
225
+ *
196
226
  * @example Basic input with label
197
227
  * ```tsx
198
228
  * <Input
199
229
  * label="Email"
200
230
  * type="email"
201
231
  * placeholder="Enter your email"
232
+ * inputMode="email"
233
+ * enterKeyHint="next"
202
234
  * />
203
235
  * ```
204
236
  *
@@ -224,11 +256,23 @@ interface InputProps extends React__default.InputHTMLAttributes<HTMLInputElement
224
256
  * />
225
257
  * ```
226
258
  *
259
+ * @example Mobile-optimized phone input
260
+ * ```tsx
261
+ * <Input
262
+ * label="Phone Number"
263
+ * type="tel"
264
+ * inputMode="tel"
265
+ * enterKeyHint="done"
266
+ * size="lg"
267
+ * />
268
+ * ```
269
+ *
227
270
  * @example With prefix/suffix
228
271
  * ```tsx
229
272
  * <Input
230
273
  * label="Amount"
231
274
  * type="number"
275
+ * inputMode="decimal"
232
276
  * prefixIcon={<DollarSign />}
233
277
  * suffix="USD"
234
278
  * clearable
@@ -310,12 +354,16 @@ interface SelectProps {
310
354
  virtualHeight?: string;
311
355
  /** Height of each option row in pixels (default: 42) */
312
356
  virtualItemHeight?: number;
357
+ /** Size of the select trigger - 'lg' provides 44px touch-friendly target */
358
+ size?: 'sm' | 'md' | 'lg';
359
+ /** Mobile display mode - 'auto' uses BottomSheet on mobile, 'dropdown' always uses dropdown, 'native' uses native select on mobile */
360
+ mobileMode?: 'auto' | 'dropdown' | 'native';
313
361
  }
314
362
  /**
315
- * Select - Dropdown select component with search, groups, and virtual scrolling
363
+ * Select - Dropdown select component with search, groups, virtual scrolling, and mobile support
316
364
  *
317
365
  * A feature-rich select component supporting flat or grouped options, search/filter,
318
- * option creation, virtual scrolling for large lists, and clear functionality.
366
+ * option creation, virtual scrolling for large lists, and mobile-optimized BottomSheet display.
319
367
  *
320
368
  * @example Basic select
321
369
  * ```tsx
@@ -333,6 +381,16 @@ interface SelectProps {
333
381
  * />
334
382
  * ```
335
383
  *
384
+ * @example Mobile-optimized with large touch targets
385
+ * ```tsx
386
+ * <Select
387
+ * options={options}
388
+ * size="lg"
389
+ * mobileMode="auto"
390
+ * placeholder="Select..."
391
+ * />
392
+ * ```
393
+ *
336
394
  * @example Searchable with groups
337
395
  * ```tsx
338
396
  * const groups = [
@@ -413,6 +471,7 @@ interface SwitchProps {
413
471
  label?: string;
414
472
  description?: string;
415
473
  disabled?: boolean;
474
+ /** Size variant - 'lg' provides better touch targets. On mobile, 'md' auto-upgrades to 'lg'. */
416
475
  size?: 'sm' | 'md' | 'lg';
417
476
  /** Show loading spinner (disables interaction) */
418
477
  loading?: boolean;
@@ -437,6 +496,19 @@ interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement
437
496
  resize?: 'none' | 'vertical' | 'horizontal' | 'both';
438
497
  /** Show loading spinner (for async operations like auto-save) */
439
498
  loading?: boolean;
499
+ /**
500
+ * Size variant - 'md' is default, 'lg' provides larger touch-friendly text and padding.
501
+ * On mobile, 'md' is automatically upgraded to 'lg' for better touch targets.
502
+ */
503
+ size?: 'sm' | 'md' | 'lg';
504
+ /**
505
+ * Enter key hint for mobile keyboards.
506
+ * 'enter' - Standard enter key (newline)
507
+ * 'done' - Done action
508
+ * 'go' - Go/navigate action
509
+ * 'send' - Send action
510
+ */
511
+ enterKeyHint?: 'enter' | 'done' | 'go' | 'send';
440
512
  }
441
513
  declare const Textarea: React$1.ForwardRefExoticComponent<TextareaProps & React$1.RefAttributes<HTMLTextAreaElement>>;
442
514
 
@@ -452,6 +524,8 @@ interface CheckboxProps {
452
524
  name?: string;
453
525
  /** Optional icon to display next to label */
454
526
  icon?: React.ReactNode;
527
+ /** Size variant - 'lg' provides 44px touch-friendly targets. On mobile, 'md' auto-upgrades to 'lg'. */
528
+ size?: 'sm' | 'md' | 'lg';
455
529
  }
456
530
  declare const Checkbox: React$1.ForwardRefExoticComponent<CheckboxProps & React$1.RefAttributes<HTMLInputElement>>;
457
531
 
@@ -1289,8 +1363,57 @@ interface ModalProps {
1289
1363
  showCloseButton?: boolean;
1290
1364
  /** Animation variant for modal entrance (default: 'scale') */
1291
1365
  animation?: 'scale' | 'slide-up' | 'slide-down' | 'fade' | 'none';
1366
+ /** Mobile display mode: 'auto' uses BottomSheet on mobile, 'modal' always uses modal, 'sheet' always uses BottomSheet */
1367
+ mobileMode?: 'auto' | 'modal' | 'sheet';
1368
+ /** Height preset for BottomSheet on mobile (default: 'lg') */
1369
+ mobileHeight?: 'sm' | 'md' | 'lg' | 'full';
1370
+ /** Show drag handle on BottomSheet (default: true) */
1371
+ mobileShowHandle?: boolean;
1292
1372
  }
1293
- declare function Modal({ isOpen, onClose, title, children, size, showCloseButton, animation, }: ModalProps): react_jsx_runtime.JSX.Element | null;
1373
+ /**
1374
+ * Modal - Adaptive dialog component
1375
+ *
1376
+ * On desktop, renders as a centered modal dialog.
1377
+ * On mobile (when mobileMode='auto'), automatically renders as a BottomSheet
1378
+ * for better touch interaction and visibility.
1379
+ *
1380
+ * @example Basic modal
1381
+ * ```tsx
1382
+ * <Modal isOpen={isOpen} onClose={handleClose} title="Edit User">
1383
+ * <form>...</form>
1384
+ * <ModalFooter>
1385
+ * <Button onClick={handleClose}>Cancel</Button>
1386
+ * <Button variant="primary" onClick={handleSave}>Save</Button>
1387
+ * </ModalFooter>
1388
+ * </Modal>
1389
+ * ```
1390
+ *
1391
+ * @example Force modal on mobile
1392
+ * ```tsx
1393
+ * <Modal
1394
+ * isOpen={isOpen}
1395
+ * onClose={handleClose}
1396
+ * title="Settings"
1397
+ * mobileMode="modal"
1398
+ * >
1399
+ * ...
1400
+ * </Modal>
1401
+ * ```
1402
+ *
1403
+ * @example Always use BottomSheet
1404
+ * ```tsx
1405
+ * <Modal
1406
+ * isOpen={isOpen}
1407
+ * onClose={handleClose}
1408
+ * title="Select Option"
1409
+ * mobileMode="sheet"
1410
+ * mobileHeight="md"
1411
+ * >
1412
+ * ...
1413
+ * </Modal>
1414
+ * ```
1415
+ */
1416
+ declare function Modal({ isOpen, onClose, title, children, size, showCloseButton, animation, mobileMode, mobileHeight, mobileShowHandle, }: ModalProps): react_jsx_runtime.JSX.Element | null;
1294
1417
  declare function ModalFooter({ children }: {
1295
1418
  children: React__default.ReactNode;
1296
1419
  }): react_jsx_runtime.JSX.Element;
@@ -1335,8 +1458,47 @@ interface ConfirmDialogProps {
1335
1458
  variant?: 'danger' | 'warning' | 'info';
1336
1459
  icon?: React__default.ReactNode;
1337
1460
  isLoading?: boolean;
1461
+ /** Mobile display mode (inherited from Modal) */
1462
+ mobileMode?: ModalProps['mobileMode'];
1463
+ /** Height preset for BottomSheet on mobile */
1464
+ mobileHeight?: ModalProps['mobileHeight'];
1338
1465
  }
1339
- declare function ConfirmDialog({ isOpen, onClose, onConfirm, title, message, confirmLabel, cancelLabel, variant, icon, isLoading, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
1466
+ /**
1467
+ * ConfirmDialog - Confirmation dialog with mobile support
1468
+ *
1469
+ * @example Basic usage
1470
+ * ```tsx
1471
+ * <ConfirmDialog
1472
+ * isOpen={isOpen}
1473
+ * onClose={handleClose}
1474
+ * onConfirm={handleDelete}
1475
+ * title="Delete Item"
1476
+ * message="Are you sure you want to delete this item? This action cannot be undone."
1477
+ * variant="danger"
1478
+ * />
1479
+ * ```
1480
+ *
1481
+ * @example With useConfirmDialog hook
1482
+ * ```tsx
1483
+ * const confirmDialog = useConfirmDialog();
1484
+ *
1485
+ * const handleDelete = () => {
1486
+ * confirmDialog.show({
1487
+ * title: 'Delete Item',
1488
+ * message: 'Are you sure?',
1489
+ * onConfirm: async () => await deleteItem(),
1490
+ * });
1491
+ * };
1492
+ *
1493
+ * return (
1494
+ * <>
1495
+ * <button onClick={handleDelete}>Delete</button>
1496
+ * <ConfirmDialog {...confirmDialog.props} />
1497
+ * </>
1498
+ * );
1499
+ * ```
1500
+ */
1501
+ declare function ConfirmDialog({ isOpen, onClose, onConfirm, title, message, confirmLabel, cancelLabel, variant, icon, isLoading, mobileMode, mobileHeight, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
1340
1502
  /**
1341
1503
  * Hook for managing ConfirmDialog state
1342
1504
  *
@@ -1966,8 +2128,262 @@ interface ChipProps {
1966
2128
  disabled?: boolean;
1967
2129
  className?: string;
1968
2130
  onClick?: () => void;
2131
+ /** Whether the chip is in a selected state */
2132
+ selected?: boolean;
2133
+ /** Maximum width for text truncation */
2134
+ maxWidth?: string | number;
2135
+ /** Unique key for use in ChipGroup selection */
2136
+ chipKey?: string;
2137
+ }
2138
+ interface ChipGroupProps {
2139
+ children: ReactNode;
2140
+ /** Layout direction */
2141
+ direction?: 'horizontal' | 'vertical';
2142
+ /** Whether chips should wrap to next line */
2143
+ wrap?: boolean;
2144
+ /** Gap between chips */
2145
+ gap?: 'xs' | 'sm' | 'md' | 'lg';
2146
+ /** Selection mode */
2147
+ selectionMode?: 'none' | 'single' | 'multiple';
2148
+ /** Selected chip keys (controlled) */
2149
+ selectedKeys?: string[];
2150
+ /** Callback when selection changes */
2151
+ onSelectionChange?: (keys: string[]) => void;
2152
+ /** Additional CSS classes */
2153
+ className?: string;
2154
+ }
2155
+ /**
2156
+ * Chip - Compact element for displaying values with optional remove functionality
2157
+ *
2158
+ * @example Basic chip
2159
+ * ```tsx
2160
+ * <Chip>Tag Name</Chip>
2161
+ * ```
2162
+ *
2163
+ * @example Removable chip
2164
+ * ```tsx
2165
+ * <Chip onClose={() => removeTag(tag)}>
2166
+ * {tag.name}
2167
+ * </Chip>
2168
+ * ```
2169
+ *
2170
+ * @example With icon and selected state
2171
+ * ```tsx
2172
+ * <Chip
2173
+ * icon={<Star className="h-3 w-3" />}
2174
+ * selected={isSelected}
2175
+ * onClick={() => toggleSelection()}
2176
+ * >
2177
+ * Favorite
2178
+ * </Chip>
2179
+ * ```
2180
+ */
2181
+ declare function Chip({ children, variant, size, onClose, icon, disabled, className, onClick, selected, maxWidth, chipKey, }: ChipProps): react_jsx_runtime.JSX.Element;
2182
+ /**
2183
+ * ChipGroup - Container for multiple chips with layout and selection support
2184
+ *
2185
+ * @example Basic group
2186
+ * ```tsx
2187
+ * <ChipGroup wrap gap="sm">
2188
+ * {tags.map(tag => (
2189
+ * <Chip key={tag.id} onClose={() => removeTag(tag)}>
2190
+ * {tag.name}
2191
+ * </Chip>
2192
+ * ))}
2193
+ * </ChipGroup>
2194
+ * ```
2195
+ *
2196
+ * @example Selectable group (single)
2197
+ * ```tsx
2198
+ * <ChipGroup
2199
+ * selectionMode="single"
2200
+ * selectedKeys={[selectedCategory]}
2201
+ * onSelectionChange={(keys) => setSelectedCategory(keys[0])}
2202
+ * >
2203
+ * <Chip chipKey="all">All</Chip>
2204
+ * <Chip chipKey="active">Active</Chip>
2205
+ * <Chip chipKey="archived">Archived</Chip>
2206
+ * </ChipGroup>
2207
+ * ```
2208
+ *
2209
+ * @example Multi-select group
2210
+ * ```tsx
2211
+ * <ChipGroup
2212
+ * selectionMode="multiple"
2213
+ * selectedKeys={selectedTags}
2214
+ * onSelectionChange={setSelectedTags}
2215
+ * wrap
2216
+ * >
2217
+ * {availableTags.map(tag => (
2218
+ * <Chip key={tag} chipKey={tag}>{tag}</Chip>
2219
+ * ))}
2220
+ * </ChipGroup>
2221
+ * ```
2222
+ */
2223
+ declare function ChipGroup({ children, direction, wrap, gap, selectionMode, selectedKeys, onSelectionChange, className, }: ChipGroupProps): react_jsx_runtime.JSX.Element;
2224
+
2225
+ interface CheckboxListItem<T = unknown> {
2226
+ key: string;
2227
+ label: string;
2228
+ description?: string;
2229
+ group?: string;
2230
+ disabled?: boolean;
2231
+ data?: T;
2232
+ }
2233
+ interface CheckboxListProps<T = unknown> {
2234
+ /** Array of items to display */
2235
+ items: CheckboxListItem<T>[];
2236
+ /** Currently selected item keys */
2237
+ selectedKeys: string[];
2238
+ /** Callback when selection changes */
2239
+ onSelectionChange: (selectedKeys: string[]) => void;
2240
+ /** Labels for groups (key -> display label) */
2241
+ groupLabels?: Record<string, string>;
2242
+ /** Keys of groups that should be expanded (controlled) */
2243
+ expandedGroups?: string[];
2244
+ /** Default expanded groups (uncontrolled) */
2245
+ defaultExpandedGroups?: string[];
2246
+ /** Callback when group expansion changes */
2247
+ onGroupToggle?: (groupKey: string, expanded: boolean) => void;
2248
+ /** Enable search functionality */
2249
+ searchable?: boolean;
2250
+ /** Search input placeholder */
2251
+ searchPlaceholder?: string;
2252
+ /** Custom filter function */
2253
+ filterFn?: (item: CheckboxListItem<T>, searchTerm: string) => boolean;
2254
+ /** Debounce delay for search in ms */
2255
+ debounceMs?: number;
2256
+ /** Maximum height with overflow scroll */
2257
+ maxHeight?: string | number;
2258
+ /** Show select all checkbox */
2259
+ showSelectAll?: boolean;
2260
+ /** Select all label text */
2261
+ selectAllLabel?: string;
2262
+ /** Show count of selected items */
2263
+ showSelectedCount?: boolean;
2264
+ /** Message when no items available */
2265
+ emptyMessage?: string;
2266
+ /** Message when search has no results */
2267
+ noResultsMessage?: string;
2268
+ /** Size variant */
2269
+ size?: 'sm' | 'md' | 'lg';
2270
+ /** Visual variant */
2271
+ variant?: 'default' | 'bordered' | 'card';
2272
+ /** Additional CSS classes */
2273
+ className?: string;
2274
+ }
2275
+ /**
2276
+ * CheckboxList - Multi-select list with checkboxes, grouping, and search
2277
+ *
2278
+ * @example Basic usage
2279
+ * ```tsx
2280
+ * <CheckboxList
2281
+ * items={[
2282
+ * { key: '1', label: 'Option 1' },
2283
+ * { key: '2', label: 'Option 2' },
2284
+ * ]}
2285
+ * selectedKeys={selected}
2286
+ * onSelectionChange={setSelected}
2287
+ * />
2288
+ * ```
2289
+ *
2290
+ * @example With grouping and search
2291
+ * ```tsx
2292
+ * <CheckboxList
2293
+ * items={fields}
2294
+ * selectedKeys={selectedFields}
2295
+ * onSelectionChange={setSelectedFields}
2296
+ * groupLabels={{ table1: 'Users', table2: 'Orders' }}
2297
+ * searchable
2298
+ * searchPlaceholder="Search fields..."
2299
+ * showSelectAll
2300
+ * maxHeight="300px"
2301
+ * />
2302
+ * ```
2303
+ */
2304
+ declare function CheckboxList<T = unknown>({ items, selectedKeys, onSelectionChange, groupLabels, expandedGroups: controlledExpandedGroups, defaultExpandedGroups, onGroupToggle, searchable, searchPlaceholder, filterFn, debounceMs, maxHeight, showSelectAll, selectAllLabel, showSelectedCount, emptyMessage, noResultsMessage, size, variant, className, }: CheckboxListProps<T>): react_jsx_runtime.JSX.Element;
2305
+
2306
+ interface SearchableListItem<T = unknown> {
2307
+ key: string;
2308
+ data: T;
2309
+ }
2310
+ interface SearchableListProps<T = unknown> {
2311
+ /** Array of items to display */
2312
+ items: SearchableListItem<T>[];
2313
+ /** Search input placeholder */
2314
+ searchPlaceholder?: string;
2315
+ /** Controlled search value */
2316
+ searchValue?: string;
2317
+ /** Callback when search changes */
2318
+ onSearchChange?: (value: string) => void;
2319
+ /** Custom filter function */
2320
+ filterFn?: (item: SearchableListItem<T>, searchTerm: string) => boolean;
2321
+ /** Debounce delay for search in ms */
2322
+ debounceMs?: number;
2323
+ /** Render function for each item */
2324
+ renderItem: (item: SearchableListItem<T>, index: number, isSelected: boolean, isHighlighted: boolean) => ReactNode;
2325
+ /** Currently selected item key */
2326
+ selectedKey?: string;
2327
+ /** Callback when item is selected */
2328
+ onSelect?: (item: SearchableListItem<T>) => void;
2329
+ /** Maximum height with overflow scroll */
2330
+ maxHeight?: string | number;
2331
+ /** Show result count */
2332
+ showResultCount?: boolean;
2333
+ /** Result count format function */
2334
+ formatResultCount?: (count: number, total: number) => string;
2335
+ /** Message when no items available */
2336
+ emptyMessage?: string | ReactNode;
2337
+ /** Message when search has no results */
2338
+ noResultsMessage?: string | ReactNode;
2339
+ /** Loading state */
2340
+ loading?: boolean;
2341
+ /** Loading message */
2342
+ loadingMessage?: string | ReactNode;
2343
+ /** Size variant */
2344
+ size?: 'sm' | 'md' | 'lg';
2345
+ /** Visual variant */
2346
+ variant?: 'default' | 'bordered' | 'card';
2347
+ /** Additional CSS classes */
2348
+ className?: string;
2349
+ /** Enable keyboard navigation (arrow keys, enter) */
2350
+ enableKeyboardNavigation?: boolean;
2351
+ /** Auto-focus search input */
2352
+ autoFocus?: boolean;
1969
2353
  }
1970
- declare function Chip({ children, variant, size, onClose, icon, disabled, className, onClick, }: ChipProps): react_jsx_runtime.JSX.Element;
2354
+ /**
2355
+ * SearchableList - List component with integrated search/filter functionality
2356
+ *
2357
+ * @example Basic usage
2358
+ * ```tsx
2359
+ * <SearchableList
2360
+ * items={users.map(u => ({ key: u.id, data: u }))}
2361
+ * renderItem={(item) => <div>{item.data.name}</div>}
2362
+ * onSelect={(item) => setSelectedUser(item.data)}
2363
+ * searchable
2364
+ * searchPlaceholder="Search users..."
2365
+ * />
2366
+ * ```
2367
+ *
2368
+ * @example With custom filter and loading
2369
+ * ```tsx
2370
+ * <SearchableList
2371
+ * items={products}
2372
+ * renderItem={(item, index, isSelected) => (
2373
+ * <div className={isSelected ? 'bg-accent-50' : ''}>
2374
+ * {item.data.name} - ${item.data.price}
2375
+ * </div>
2376
+ * )}
2377
+ * filterFn={(item, term) =>
2378
+ * item.data.name.toLowerCase().includes(term.toLowerCase())
2379
+ * }
2380
+ * loading={isLoading}
2381
+ * loadingMessage="Fetching products..."
2382
+ * maxHeight="400px"
2383
+ * />
2384
+ * ```
2385
+ */
2386
+ declare function SearchableList<T = unknown>({ items, searchPlaceholder, searchValue: controlledSearchValue, onSearchChange, filterFn, debounceMs, renderItem, selectedKey, onSelect, maxHeight, showResultCount, formatResultCount, emptyMessage, noResultsMessage, loading, loadingMessage, size, variant, className, enableKeyboardNavigation, autoFocus, }: SearchableListProps<T>): react_jsx_runtime.JSX.Element;
1971
2387
 
1972
2388
  interface NumberInputProps {
1973
2389
  value?: number;
@@ -2082,12 +2498,153 @@ interface CollapsibleProps {
2082
2498
  }
2083
2499
  declare function Collapsible({ trigger, children, defaultOpen, open: controlledOpen, onOpenChange, disabled, showIcon, className, triggerClassName, contentClassName, }: CollapsibleProps): react_jsx_runtime.JSX.Element;
2084
2500
 
2085
- type Breakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';
2501
+ interface ExpandablePanelProps {
2502
+ /** Content shown in the collapsed header bar */
2503
+ collapsedContent: ReactNode;
2504
+ /** Full content shown when expanded */
2505
+ children: ReactNode;
2506
+ /** Position of the panel */
2507
+ position?: 'bottom' | 'top';
2508
+ /**
2509
+ * Positioning mode:
2510
+ * - 'viewport': Fixed to viewport edges (default, for standalone use)
2511
+ * - 'container': Sticky within parent container (for use inside Page/AppLayout)
2512
+ */
2513
+ mode?: 'viewport' | 'container';
2514
+ /** Whether the panel is expanded (controlled) */
2515
+ expanded?: boolean;
2516
+ /** Default expanded state (uncontrolled) */
2517
+ defaultExpanded?: boolean;
2518
+ /** Callback when expanded state changes */
2519
+ onExpandedChange?: (expanded: boolean) => void;
2520
+ /** Height when expanded */
2521
+ expandedHeight?: string | number;
2522
+ /**
2523
+ * Maximum width of the panel (e.g., '1400px', '80%', 1200)
2524
+ * When set, the panel will be centered horizontally within its container/viewport
2525
+ */
2526
+ maxWidth?: string | number;
2527
+ /** Whether to show the expand/collapse toggle button */
2528
+ showToggle?: boolean;
2529
+ /** Custom toggle button content */
2530
+ toggleContent?: ReactNode;
2531
+ /** Additional actions to show in the header (right side) */
2532
+ headerActions?: ReactNode;
2533
+ /** Close on Escape key */
2534
+ closeOnEscape?: boolean;
2535
+ /** Visual variant */
2536
+ variant?: 'default' | 'elevated' | 'bordered';
2537
+ /** Size variant affecting header height */
2538
+ size?: 'sm' | 'md' | 'lg';
2539
+ /** Additional CSS classes for the container */
2540
+ className?: string;
2541
+ /** Additional CSS classes for the header */
2542
+ headerClassName?: string;
2543
+ /** Additional CSS classes for the content */
2544
+ contentClassName?: string;
2545
+ /** Z-index for the panel (only applies in viewport mode) */
2546
+ zIndex?: number;
2547
+ }
2548
+ /**
2549
+ * ExpandablePanel - A panel that sticks to the bottom (or top) and can expand/collapse
2550
+ *
2551
+ * For bottom position: expands UPWARD (content appears above header)
2552
+ * For top position: expands DOWNWARD (content appears below header)
2553
+ *
2554
+ * Two modes of operation:
2555
+ * - `viewport`: Fixed to the viewport (for standalone pages, covers StatusBar)
2556
+ * - `container`: Sticky within its parent container (for use inside Page/AppLayout, respects StatusBar)
2557
+ *
2558
+ * @example Basic usage (viewport mode - full page)
2559
+ * ```tsx
2560
+ * <ExpandablePanel
2561
+ * mode="viewport"
2562
+ * collapsedContent={<Text>3 items selected</Text>}
2563
+ * expandedHeight="300px"
2564
+ * >
2565
+ * {content}
2566
+ * </ExpandablePanel>
2567
+ * ```
2568
+ *
2569
+ * @example Inside Page/AppLayout (container mode - respects StatusBar)
2570
+ * ```tsx
2571
+ * <Page>
2572
+ * <ExpandablePanelContainer>
2573
+ * <div className="flex-1 overflow-auto">
2574
+ * {pageContent}
2575
+ * </div>
2576
+ * <ExpandablePanel
2577
+ * mode="container"
2578
+ * collapsedContent={<Text>3 items selected</Text>}
2579
+ * expandedHeight="300px"
2580
+ * >
2581
+ * {selectedItemsContent}
2582
+ * </ExpandablePanel>
2583
+ * </ExpandablePanelContainer>
2584
+ * </Page>
2585
+ * ```
2586
+ *
2587
+ * @example With maxWidth to match page content
2588
+ * ```tsx
2589
+ * <ExpandablePanel
2590
+ * mode="container"
2591
+ * maxWidth="1400px"
2592
+ * collapsedContent={<Text>Generated SQL</Text>}
2593
+ * expandedHeight="300px"
2594
+ * >
2595
+ * {sqlContent}
2596
+ * </ExpandablePanel>
2597
+ * ```
2598
+ */
2599
+ declare function ExpandablePanel({ collapsedContent, children, position, mode, expanded: controlledExpanded, defaultExpanded, onExpandedChange, expandedHeight, maxWidth, showToggle, toggleContent, headerActions, closeOnEscape, variant, size, className, headerClassName, contentClassName, zIndex, }: ExpandablePanelProps): react_jsx_runtime.JSX.Element;
2600
+ /**
2601
+ * ExpandablePanelSpacer - Adds spacing to prevent content from being hidden behind the panel
2602
+ * Only needed in viewport mode. In container mode, the panel is part of the flex layout.
2603
+ *
2604
+ * @example
2605
+ * ```tsx
2606
+ * <div>
2607
+ * <MainContent />
2608
+ * <ExpandablePanelSpacer size="md" />
2609
+ * </div>
2610
+ * <ExpandablePanel mode="viewport" position="bottom" size="md" {...props} />
2611
+ * ```
2612
+ */
2613
+ declare function ExpandablePanelSpacer({ size }: {
2614
+ size?: 'sm' | 'md' | 'lg';
2615
+ }): react_jsx_runtime.JSX.Element;
2616
+ /**
2617
+ * ExpandablePanelContainer - Wrapper that sets up proper layout for container mode
2618
+ * Use this to wrap your page content when using ExpandablePanel with mode="container"
2619
+ *
2620
+ * This creates a relative container with full height so the panel can position absolutely
2621
+ * at the bottom while the content scrolls above it.
2622
+ *
2623
+ * @example
2624
+ * ```tsx
2625
+ * <Page>
2626
+ * <ExpandablePanelContainer>
2627
+ * <div className="flex-1 overflow-auto p-4">
2628
+ * {pageContent}
2629
+ * </div>
2630
+ * <ExpandablePanel mode="container" {...props}>
2631
+ * {panelContent}
2632
+ * </ExpandablePanel>
2633
+ * </ExpandablePanelContainer>
2634
+ * </Page>
2635
+ * ```
2636
+ */
2637
+ declare function ExpandablePanelContainer({ children, className, }: {
2638
+ children: ReactNode;
2639
+ className?: string;
2640
+ }): react_jsx_runtime.JSX.Element;
2641
+
2642
+ type Breakpoint$1 = 'sm' | 'md' | 'lg' | 'xl' | '2xl';
2086
2643
  interface ResponsiveProps {
2087
2644
  children: ReactNode;
2088
- above?: Breakpoint;
2089
- below?: Breakpoint;
2090
- only?: Breakpoint;
2645
+ above?: Breakpoint$1;
2646
+ below?: Breakpoint$1;
2647
+ only?: Breakpoint$1;
2091
2648
  className?: string;
2092
2649
  }
2093
2650
  /**
@@ -2130,14 +2687,6 @@ declare function Show({ children, above, below, only, className }: ResponsivePro
2130
2687
  * </Hide>
2131
2688
  */
2132
2689
  declare function Hide({ children, above, below, only, className }: ResponsiveProps): react_jsx_runtime.JSX.Element;
2133
- /**
2134
- * useMediaQuery hook - React hook for responsive logic in components
2135
- *
2136
- * @example
2137
- * const isMobile = useMediaQuery('(max-width: 768px)');
2138
- * const isDesktop = useMediaQuery('(min-width: 1024px)');
2139
- */
2140
- declare function useMediaQuery(query: string): boolean;
2141
2690
 
2142
2691
  interface BreadcrumbItem {
2143
2692
  label: string;
@@ -2380,14 +2929,14 @@ interface FileUploadProps {
2380
2929
  declare function FileUpload({ accept, multiple, maxSize, // 10MB default
2381
2930
  maxFiles, onFilesSelected, onUpload, disabled, }: FileUploadProps): react_jsx_runtime.JSX.Element;
2382
2931
 
2383
- interface Section$1 {
2932
+ interface Section$2 {
2384
2933
  id: string;
2385
2934
  label: string;
2386
2935
  }
2387
2936
  interface PageNavigationProps {
2388
2937
  className?: string;
2389
2938
  /** External sections to display (overrides auto-detection) */
2390
- sections?: Section$1[];
2939
+ sections?: Section$2[];
2391
2940
  }
2392
2941
  declare const PageNavigation: React__default.FC<PageNavigationProps>;
2393
2942
 
@@ -2410,6 +2959,12 @@ interface SidebarProps {
2410
2959
  header?: React__default.ReactNode;
2411
2960
  footer?: React__default.ReactNode;
2412
2961
  currentPath?: string;
2962
+ /** Whether sidebar is open on mobile (drawer mode) */
2963
+ mobileOpen?: boolean;
2964
+ /** Callback when mobile drawer should close */
2965
+ onMobileClose?: () => void;
2966
+ /** Width of the sidebar (default: 256px / w-64) */
2967
+ width?: string;
2413
2968
  }
2414
2969
  interface SidebarGroupProps {
2415
2970
  title?: string;
@@ -2419,47 +2974,457 @@ interface SidebarGroupProps {
2419
2974
  currentPath?: string;
2420
2975
  }
2421
2976
  declare function SidebarGroup({ title, items, onNavigate, defaultExpanded, currentPath }: SidebarGroupProps): react_jsx_runtime.JSX.Element;
2422
- declare function Sidebar({ items, onNavigate, className, header, footer, currentPath }: SidebarProps): react_jsx_runtime.JSX.Element;
2423
-
2424
- interface LogoProps {
2425
- size?: 'sm' | 'md' | 'lg';
2426
- showText?: boolean;
2427
- text?: string;
2428
- className?: string;
2429
- }
2430
- declare function Logo({ size, showText, text, className, }: LogoProps): react_jsx_runtime.JSX.Element;
2431
-
2432
- interface UserProfileButtonProps {
2433
- userName: string;
2434
- userEmail?: string;
2435
- userTitle?: string;
2436
- initials: string;
2437
- isOnline?: boolean;
2438
- onProfileClick?: () => void;
2439
- onSettingsClick?: () => void;
2440
- onLogoutClick?: () => void;
2441
- dropdownItems?: DropdownItem[];
2442
- className?: string;
2443
- }
2444
- declare function UserProfileButton({ userName, userEmail, userTitle, initials, isOnline, onProfileClick, onSettingsClick, onLogoutClick, dropdownItems, className, }: UserProfileButtonProps): react_jsx_runtime.JSX.Element;
2977
+ /**
2978
+ * Sidebar - Navigation sidebar with mobile drawer support
2979
+ *
2980
+ * On desktop: Renders as a fixed-width sidebar
2981
+ * On mobile: Renders as a drawer overlay when mobileOpen is true
2982
+ *
2983
+ * @example Desktop usage (no mobile props)
2984
+ * ```tsx
2985
+ * <Sidebar
2986
+ * items={navItems}
2987
+ * header={<Logo />}
2988
+ * footer={<UserProfile />}
2989
+ * currentPath={location.pathname}
2990
+ * onNavigate={(href) => navigate(href)}
2991
+ * />
2992
+ * ```
2993
+ *
2994
+ * @example With mobile drawer support
2995
+ * ```tsx
2996
+ * const [mobileOpen, setMobileOpen] = useState(false);
2997
+ *
2998
+ * <Sidebar
2999
+ * items={navItems}
3000
+ * header={<Logo />}
3001
+ * mobileOpen={mobileOpen}
3002
+ * onMobileClose={() => setMobileOpen(false)}
3003
+ * onNavigate={(href) => {
3004
+ * navigate(href);
3005
+ * setMobileOpen(false); // Close drawer on navigation
3006
+ * }}
3007
+ * />
3008
+ * ```
3009
+ */
3010
+ declare function Sidebar({ items, onNavigate, className, header, footer, currentPath, mobileOpen, onMobileClose, width, }: SidebarProps): react_jsx_runtime.JSX.Element | null;
2445
3011
 
2446
- interface Section {
2447
- /** Unique identifier for the section */
3012
+ /**
3013
+ * Bottom navigation item configuration
3014
+ */
3015
+ interface BottomNavItem {
3016
+ /** Unique identifier for the nav item */
2448
3017
  id: string;
2449
- /** Display label for the section in navigation */
3018
+ /** Display label */
2450
3019
  label: string;
3020
+ /** Icon element (use lucide-react icons) */
3021
+ icon: React__default.ReactNode;
3022
+ /** Navigation URL (optional) */
3023
+ href?: string;
3024
+ /** Badge count for notifications */
3025
+ badge?: number;
3026
+ /** Click handler (alternative to href) */
3027
+ onClick?: () => void;
3028
+ /** Disabled state */
3029
+ disabled?: boolean;
2451
3030
  }
2452
- interface LayoutProps {
2453
- /** Sidebar content - typically the Sidebar component with navigation items */
2454
- sidebar: React__default.ReactNode;
2455
- /** Main page content - wrap in Page or PageLayout components for notebook styling */
2456
- children: React__default.ReactNode;
3031
+ /**
3032
+ * BottomNavigation component props
3033
+ */
3034
+ interface BottomNavigationProps {
3035
+ /** Navigation items (max 5 recommended) */
3036
+ items: BottomNavItem[];
3037
+ /** Currently active item ID */
3038
+ activeId?: string;
3039
+ /** Navigation handler - receives item ID and href */
3040
+ onNavigate?: (id: string, href?: string) => void;
3041
+ /** Show labels below icons */
3042
+ showLabels?: boolean;
3043
+ /** Additional CSS classes */
3044
+ className?: string;
3045
+ /** Safe area handling for notched devices */
3046
+ safeArea?: boolean;
3047
+ }
3048
+ /**
3049
+ * BottomNavigation - Mobile-style bottom tab bar
3050
+ *
3051
+ * iOS/Android-style fixed bottom navigation with icons, labels, and badges.
3052
+ * Handles safe area insets for notched devices automatically.
3053
+ *
3054
+ * Best practices:
3055
+ * - Use 3-5 items maximum
3056
+ * - Keep labels short (1-2 words)
3057
+ * - Use consistent icon style
3058
+ *
3059
+ * @example Basic usage
3060
+ * ```tsx
3061
+ * import { BottomNavigation } from 'notebook-ui';
3062
+ * import { Home, Search, Bell, User } from 'lucide-react';
3063
+ *
3064
+ * const navItems = [
3065
+ * { id: 'home', label: 'Home', icon: <Home />, href: '/' },
3066
+ * { id: 'search', label: 'Search', icon: <Search />, href: '/search' },
3067
+ * { id: 'notifications', label: 'Alerts', icon: <Bell />, badge: 3 },
3068
+ * { id: 'profile', label: 'Profile', icon: <User />, href: '/profile' },
3069
+ * ];
3070
+ *
3071
+ * <BottomNavigation
3072
+ * items={navItems}
3073
+ * activeId="home"
3074
+ * onNavigate={(id, href) => navigate(href)}
3075
+ * />
3076
+ * ```
3077
+ *
3078
+ * @example With onClick handlers
3079
+ * ```tsx
3080
+ * const navItems = [
3081
+ * { id: 'home', label: 'Home', icon: <Home />, onClick: () => setTab('home') },
3082
+ * { id: 'add', label: 'Add', icon: <Plus />, onClick: openAddModal },
3083
+ * ];
3084
+ *
3085
+ * <BottomNavigation items={navItems} activeId={currentTab} />
3086
+ * ```
3087
+ */
3088
+ declare function BottomNavigation({ items, activeId, onNavigate, showLabels, className, safeArea, }: BottomNavigationProps): react_jsx_runtime.JSX.Element;
3089
+ /**
3090
+ * BottomNavigationSpacer - Spacer to prevent content from being hidden behind BottomNavigation
3091
+ *
3092
+ * Place this at the bottom of your scrollable content when using BottomNavigation.
3093
+ *
3094
+ * @example
3095
+ * ```tsx
3096
+ * <div className="flex flex-col h-screen">
3097
+ * <main className="flex-1 overflow-auto">
3098
+ * {/* Your content *\/}
3099
+ * <BottomNavigationSpacer />
3100
+ * </main>
3101
+ * <BottomNavigation items={navItems} />
3102
+ * </div>
3103
+ * ```
3104
+ */
3105
+ declare function BottomNavigationSpacer({ safeArea }: {
3106
+ safeArea?: boolean;
3107
+ }): react_jsx_runtime.JSX.Element;
3108
+
3109
+ /**
3110
+ * MobileHeader component props
3111
+ */
3112
+ interface MobileHeaderProps {
3113
+ /** Page/section title */
3114
+ title: string;
3115
+ /** Subtitle or breadcrumb text */
3116
+ subtitle?: string;
3117
+ /** Handler for menu button click (hamburger) */
3118
+ onMenuClick?: () => void;
3119
+ /** Handler for back button click - shows back arrow instead of menu */
3120
+ onBackClick?: () => void;
3121
+ /** Handler for close button click - shows X instead of menu */
3122
+ onCloseClick?: () => void;
3123
+ /** Right side action element (button, icon, etc.) */
3124
+ rightAction?: React__default.ReactNode;
3125
+ /** Left side action element (overrides menu/back/close buttons) */
3126
+ leftAction?: React__default.ReactNode;
3127
+ /** Make header sticky at top */
3128
+ sticky?: boolean;
3129
+ /** Show border at bottom */
3130
+ bordered?: boolean;
3131
+ /** Background style */
3132
+ variant?: 'solid' | 'transparent' | 'blur';
3133
+ /** Additional CSS classes */
3134
+ className?: string;
3135
+ /** Safe area handling for notched devices */
3136
+ safeArea?: boolean;
3137
+ }
3138
+ /**
3139
+ * MobileHeader - Mobile app header with navigation controls
3140
+ *
3141
+ * A flexible mobile header component with support for:
3142
+ * - Hamburger menu button (default)
3143
+ * - Back navigation arrow
3144
+ * - Close button (X)
3145
+ * - Custom left/right actions
3146
+ * - Sticky positioning
3147
+ * - Blur/transparent variants
3148
+ *
3149
+ * @example Basic with menu button
3150
+ * ```tsx
3151
+ * <MobileHeader
3152
+ * title="Dashboard"
3153
+ * onMenuClick={() => setDrawerOpen(true)}
3154
+ * />
3155
+ * ```
3156
+ *
3157
+ * @example With back button
3158
+ * ```tsx
3159
+ * <MobileHeader
3160
+ * title="User Details"
3161
+ * subtitle="Profile"
3162
+ * onBackClick={() => navigate(-1)}
3163
+ * />
3164
+ * ```
3165
+ *
3166
+ * @example With right action
3167
+ * ```tsx
3168
+ * <MobileHeader
3169
+ * title="Settings"
3170
+ * onMenuClick={openMenu}
3171
+ * rightAction={
3172
+ * <Button variant="ghost" iconOnly onClick={save}>
3173
+ * <Check className="w-5 h-5" />
3174
+ * </Button>
3175
+ * }
3176
+ * />
3177
+ * ```
3178
+ *
3179
+ * @example Transparent with blur
3180
+ * ```tsx
3181
+ * <MobileHeader
3182
+ * title="Photo Gallery"
3183
+ * variant="blur"
3184
+ * onBackClick={goBack}
3185
+ * />
3186
+ * ```
3187
+ */
3188
+ declare function MobileHeader({ title, subtitle, onMenuClick, onBackClick, onCloseClick, rightAction, leftAction, sticky, bordered, variant, className, safeArea, }: MobileHeaderProps): react_jsx_runtime.JSX.Element;
3189
+ /**
3190
+ * MobileHeaderSpacer - Spacer to prevent content from being hidden behind sticky MobileHeader
3191
+ *
3192
+ * Place this at the top of your content when NOT using sticky header
3193
+ * to maintain consistent spacing.
3194
+ *
3195
+ * @example
3196
+ * ```tsx
3197
+ * <MobileHeader title="Page" sticky={false} />
3198
+ * <MobileHeaderSpacer />
3199
+ * <main>Content here</main>
3200
+ * ```
3201
+ */
3202
+ declare function MobileHeaderSpacer({ safeArea }: {
3203
+ safeArea?: boolean;
3204
+ }): react_jsx_runtime.JSX.Element;
3205
+
3206
+ /**
3207
+ * Action item for FAB menu
3208
+ */
3209
+ interface FABAction {
3210
+ /** Unique identifier */
3211
+ id: string;
3212
+ /** Icon for the action */
3213
+ icon: React__default.ReactNode;
3214
+ /** Label text (shown on hover/long-press) */
3215
+ label: string;
3216
+ /** Click handler */
3217
+ onClick: () => void;
3218
+ /** Disabled state */
3219
+ disabled?: boolean;
3220
+ }
3221
+ /**
3222
+ * FloatingActionButton component props
3223
+ */
3224
+ interface FloatingActionButtonProps {
3225
+ /** Primary action when FAB is clicked (without menu) */
3226
+ onClick?: () => void;
3227
+ /** Icon for the FAB - defaults to Plus */
3228
+ icon?: React__default.ReactNode;
3229
+ /** Secondary actions shown in menu */
3230
+ actions?: FABAction[];
3231
+ /** Position on screen */
3232
+ position?: 'bottom-right' | 'bottom-left' | 'bottom-center';
3233
+ /** Color variant */
3234
+ variant?: 'primary' | 'secondary' | 'accent';
3235
+ /** Size */
3236
+ size?: 'md' | 'lg';
3237
+ /** Accessible label */
3238
+ label?: string;
3239
+ /** Extended FAB with text label */
3240
+ extended?: boolean;
3241
+ /** Text for extended FAB */
3242
+ extendedLabel?: string;
3243
+ /** Hide FAB (useful for scroll-based show/hide) */
3244
+ hidden?: boolean;
3245
+ /** Custom offset from edge (in pixels) */
3246
+ offset?: {
3247
+ x?: number;
3248
+ y?: number;
3249
+ };
3250
+ /** Additional class names */
3251
+ className?: string;
3252
+ }
3253
+ /**
3254
+ * FloatingActionButton - Material Design style FAB for mobile
3255
+ *
3256
+ * A prominent button for the primary action on a screen.
3257
+ * Supports single action or expandable menu with multiple actions.
3258
+ *
3259
+ * @example Simple FAB
3260
+ * ```tsx
3261
+ * <FloatingActionButton
3262
+ * onClick={() => openCreateModal()}
3263
+ * label="Create new item"
3264
+ * />
3265
+ * ```
3266
+ *
3267
+ * @example FAB with action menu
3268
+ * ```tsx
3269
+ * <FloatingActionButton
3270
+ * actions={[
3271
+ * { id: 'photo', icon: <Camera />, label: 'Take Photo', onClick: takePhoto },
3272
+ * { id: 'upload', icon: <Upload />, label: 'Upload File', onClick: uploadFile },
3273
+ * { id: 'note', icon: <FileText />, label: 'Create Note', onClick: createNote },
3274
+ * ]}
3275
+ * />
3276
+ * ```
3277
+ *
3278
+ * @example Extended FAB
3279
+ * ```tsx
3280
+ * <FloatingActionButton
3281
+ * extended
3282
+ * extendedLabel="New Task"
3283
+ * icon={<Plus />}
3284
+ * onClick={createTask}
3285
+ * />
3286
+ * ```
3287
+ */
3288
+ declare function FloatingActionButton({ onClick, icon, actions, position, variant, size, label, extended, extendedLabel, hidden, offset, className, }: FloatingActionButtonProps): React__default.ReactPortal;
3289
+ /**
3290
+ * Hook for scroll-based FAB visibility
3291
+ *
3292
+ * @example
3293
+ * ```tsx
3294
+ * const { hidden, scrollDirection } = useFABScroll();
3295
+ * <FloatingActionButton hidden={hidden} />
3296
+ * ```
3297
+ */
3298
+ declare function useFABScroll(threshold?: number): {
3299
+ hidden: boolean;
3300
+ scrollDirection: 'up' | 'down' | null;
3301
+ };
3302
+
3303
+ /**
3304
+ * PullToRefresh component props
3305
+ */
3306
+ interface PullToRefreshProps {
3307
+ /** Content to wrap */
3308
+ children: React__default.ReactNode;
3309
+ /** Async refresh handler - should return a Promise */
3310
+ onRefresh: () => Promise<void>;
3311
+ /** Disable pull-to-refresh */
3312
+ disabled?: boolean;
3313
+ /** Pull distance required to trigger refresh (default: 80) */
3314
+ pullThreshold?: number;
3315
+ /** Maximum pull distance (default: 120) */
3316
+ maxPull?: number;
3317
+ /** Custom loading indicator */
3318
+ loadingIndicator?: React__default.ReactNode;
3319
+ /** Custom pull indicator */
3320
+ pullIndicator?: React__default.ReactNode;
3321
+ /** Additional class names for container */
3322
+ className?: string;
3323
+ }
3324
+ /**
3325
+ * PullToRefresh - Mobile pull-to-refresh gesture handler
3326
+ *
3327
+ * Wraps content and provides native-feeling pull-to-refresh functionality.
3328
+ * Only activates when scrolled to top of content.
3329
+ *
3330
+ * @example Basic usage
3331
+ * ```tsx
3332
+ * <PullToRefresh onRefresh={async () => {
3333
+ * await fetchLatestData();
3334
+ * }}>
3335
+ * <div className="min-h-screen">
3336
+ * {content}
3337
+ * </div>
3338
+ * </PullToRefresh>
3339
+ * ```
3340
+ *
3341
+ * @example With custom threshold
3342
+ * ```tsx
3343
+ * <PullToRefresh
3344
+ * onRefresh={handleRefresh}
3345
+ * pullThreshold={100}
3346
+ * maxPull={150}
3347
+ * >
3348
+ * {content}
3349
+ * </PullToRefresh>
3350
+ * ```
3351
+ */
3352
+ declare function PullToRefresh({ children, onRefresh, disabled, pullThreshold, maxPull, loadingIndicator, pullIndicator, className, }: PullToRefreshProps): react_jsx_runtime.JSX.Element;
3353
+ /**
3354
+ * usePullToRefresh - Hook for custom pull-to-refresh implementations
3355
+ *
3356
+ * @example
3357
+ * ```tsx
3358
+ * const { pullDistance, isRefreshing, bind } = usePullToRefresh({
3359
+ * onRefresh: async () => {
3360
+ * await fetchData();
3361
+ * }
3362
+ * });
3363
+ *
3364
+ * return (
3365
+ * <div {...bind}>
3366
+ * {isRefreshing && <Spinner />}
3367
+ * {content}
3368
+ * </div>
3369
+ * );
3370
+ * ```
3371
+ */
3372
+ declare function usePullToRefresh({ onRefresh, pullThreshold, maxPull, disabled, }: {
3373
+ onRefresh: () => Promise<void>;
3374
+ pullThreshold?: number;
3375
+ maxPull?: number;
3376
+ disabled?: boolean;
3377
+ }): {
3378
+ pullDistance: number;
3379
+ isRefreshing: boolean;
3380
+ isReady: boolean;
3381
+ progress: number;
3382
+ bind: {
3383
+ onTouchStart: (e: React__default.TouchEvent) => void;
3384
+ onTouchMove: (e: React__default.TouchEvent) => void;
3385
+ onTouchEnd: () => Promise<void>;
3386
+ };
3387
+ };
3388
+
3389
+ interface LogoProps {
3390
+ size?: 'sm' | 'md' | 'lg';
3391
+ showText?: boolean;
3392
+ text?: string;
3393
+ className?: string;
3394
+ }
3395
+ declare function Logo({ size, showText, text, className, }: LogoProps): react_jsx_runtime.JSX.Element;
3396
+
3397
+ interface UserProfileButtonProps {
3398
+ userName: string;
3399
+ userEmail?: string;
3400
+ userTitle?: string;
3401
+ initials: string;
3402
+ isOnline?: boolean;
3403
+ onProfileClick?: () => void;
3404
+ onSettingsClick?: () => void;
3405
+ onLogoutClick?: () => void;
3406
+ dropdownItems?: DropdownItem[];
3407
+ className?: string;
3408
+ }
3409
+ declare function UserProfileButton({ userName, userEmail, userTitle, initials, isOnline, onProfileClick, onSettingsClick, onLogoutClick, dropdownItems, className, }: UserProfileButtonProps): react_jsx_runtime.JSX.Element;
3410
+
3411
+ interface Section$1 {
3412
+ /** Unique identifier for the section */
3413
+ id: string;
3414
+ /** Display label for the section in navigation */
3415
+ label: string;
3416
+ }
3417
+ interface LayoutProps {
3418
+ /** Sidebar content - typically the Sidebar component with navigation items */
3419
+ sidebar: React__default.ReactNode;
3420
+ /** Main page content - wrap in Page or PageLayout components for notebook styling */
3421
+ children: React__default.ReactNode;
2457
3422
  /** Optional status bar component displayed at the bottom of the layout */
2458
3423
  statusBar?: React__default.ReactNode;
2459
3424
  /** Additional CSS classes to apply to the layout container */
2460
3425
  className?: string;
2461
3426
  /** Page sections for navigation dots in the gutter (auto-detected from section IDs in content) */
2462
- sections?: Section[];
3427
+ sections?: Section$1[];
2463
3428
  }
2464
3429
  /**
2465
3430
  * Layout - Complete application layout with sidebar, gutter, and scrollable content
@@ -2514,6 +3479,122 @@ interface LayoutProps {
2514
3479
  */
2515
3480
  declare const Layout: React__default.FC<LayoutProps>;
2516
3481
 
3482
+ interface Section {
3483
+ /** Unique identifier for the section */
3484
+ id: string;
3485
+ /** Display label for the section in navigation */
3486
+ label: string;
3487
+ }
3488
+ interface MobileLayoutProps {
3489
+ /** Main page content */
3490
+ children: React__default.ReactNode;
3491
+ /** Sidebar navigation items (required for both desktop sidebar and mobile drawer) */
3492
+ sidebarItems: SidebarItem[];
3493
+ /** Current active path for highlighting */
3494
+ currentPath?: string;
3495
+ /** Handler for navigation clicks */
3496
+ onNavigate?: (href: string) => void;
3497
+ /** Header component for sidebar (logo, branding, etc.) */
3498
+ header?: React__default.ReactNode;
3499
+ /** User profile button for sidebar footer */
3500
+ userProfile?: React__default.ReactNode;
3501
+ /** Additional sidebar content */
3502
+ sidebarFooter?: React__default.ReactNode;
3503
+ /** Title displayed in mobile header (required for mobile layout) */
3504
+ title: string;
3505
+ /** Subtitle displayed in mobile header */
3506
+ subtitle?: string;
3507
+ /** Right action for mobile header */
3508
+ headerRightAction?: React__default.ReactNode;
3509
+ /** Custom left action for mobile header (overrides menu button) */
3510
+ headerLeftAction?: React__default.ReactNode;
3511
+ /** Mobile header variant */
3512
+ headerVariant?: MobileHeaderProps['variant'];
3513
+ /** Bottom navigation items for mobile (if not provided, uses sidebarItems) */
3514
+ bottomNavItems?: BottomNavItem[];
3515
+ /** Active bottom nav item ID */
3516
+ activeBottomNavId?: string;
3517
+ /** Show labels on bottom nav */
3518
+ showBottomNavLabels?: boolean;
3519
+ /** Optional status bar component displayed at the bottom (desktop only) */
3520
+ statusBar?: React__default.ReactNode;
3521
+ /** Additional CSS classes */
3522
+ className?: string;
3523
+ /** Page sections for navigation dots in desktop gutter */
3524
+ sections?: Section[];
3525
+ /** Force mobile layout even on desktop */
3526
+ forceMobile?: boolean;
3527
+ /** Force desktop layout even on mobile */
3528
+ forceDesktop?: boolean;
3529
+ /** Hide bottom navigation on mobile */
3530
+ hideBottomNav?: boolean;
3531
+ /** Hide mobile header */
3532
+ hideMobileHeader?: boolean;
3533
+ /** Use safe area insets for notched devices */
3534
+ safeArea?: boolean;
3535
+ }
3536
+ /**
3537
+ * MobileLayout - Auto-responsive layout that switches between desktop and mobile patterns
3538
+ *
3539
+ * This component automatically detects the viewport size and renders the appropriate layout:
3540
+ * - **Desktop** (≥1024px): Standard Layout with sidebar, gutter, and scrollable content
3541
+ * - **Mobile/Tablet** (<1024px): Mobile header, drawer navigation, bottom tab bar
3542
+ *
3543
+ * The mobile layout features:
3544
+ * - Sticky header with hamburger menu to open drawer
3545
+ * - Sidebar rendered as a slide-in drawer
3546
+ * - Bottom navigation bar for primary navigation
3547
+ * - Safe area support for notched devices
3548
+ *
3549
+ * @example Basic usage
3550
+ * ```tsx
3551
+ * <MobileLayout
3552
+ * sidebarItems={[
3553
+ * { id: 'home', label: 'Home', icon: <Home />, href: '/' },
3554
+ * { id: 'tasks', label: 'Tasks', icon: <CheckSquare />, href: '/tasks' },
3555
+ * { id: 'settings', label: 'Settings', icon: <Settings />, href: '/settings' }
3556
+ * ]}
3557
+ * currentPath={location.pathname}
3558
+ * onNavigate={(href) => navigate(href)}
3559
+ * title="My App"
3560
+ * header={<Logo />}
3561
+ * userProfile={<UserProfileButton user={user} />}
3562
+ * >
3563
+ * <Page>
3564
+ * <h1>Dashboard</h1>
3565
+ * </Page>
3566
+ * </MobileLayout>
3567
+ * ```
3568
+ *
3569
+ * @example With custom bottom nav items
3570
+ * ```tsx
3571
+ * <MobileLayout
3572
+ * sidebarItems={fullNavItems}
3573
+ * bottomNavItems={[
3574
+ * { id: 'home', label: 'Home', icon: <Home />, href: '/' },
3575
+ * { id: 'search', label: 'Search', icon: <Search />, href: '/search' },
3576
+ * { id: 'profile', label: 'Profile', icon: <User />, href: '/profile' }
3577
+ * ]}
3578
+ * currentPath={location.pathname}
3579
+ * title="My App"
3580
+ * >
3581
+ * {children}
3582
+ * </MobileLayout>
3583
+ * ```
3584
+ *
3585
+ * @example Force mobile layout for testing
3586
+ * ```tsx
3587
+ * <MobileLayout
3588
+ * sidebarItems={items}
3589
+ * title="Mobile Preview"
3590
+ * forceMobile
3591
+ * >
3592
+ * {children}
3593
+ * </MobileLayout>
3594
+ * ```
3595
+ */
3596
+ declare const MobileLayout: React__default.FC<MobileLayoutProps>;
3597
+
2517
3598
  interface TwoColumnContentProps {
2518
3599
  /** Content for the left sidebar column */
2519
3600
  sidebar: React__default.ReactNode;
@@ -2701,6 +3782,102 @@ interface NotificationIndicatorProps {
2701
3782
  }
2702
3783
  declare function NotificationIndicator({ count, onClick, className, maxCount, variant, }: NotificationIndicatorProps): react_jsx_runtime.JSX.Element;
2703
3784
 
3785
+ /**
3786
+ * Configuration for how data should display in card view
3787
+ */
3788
+ interface CardViewConfig<T> {
3789
+ /** Column key to use as the main title */
3790
+ titleKey: keyof T | string;
3791
+ /** Column key to use as subtitle (optional) */
3792
+ subtitleKey?: keyof T | string;
3793
+ /** Column keys to show as metadata rows */
3794
+ metadataKeys?: (keyof T | string)[];
3795
+ /** Column key to use for badge/status display */
3796
+ badgeKey?: keyof T | string;
3797
+ /** Column key for avatar/image (renders circular image) */
3798
+ avatarKey?: keyof T | string;
3799
+ /** Custom render function for entire card content */
3800
+ renderCard?: (item: T, columns: DataTableColumn<T>[]) => React__default.ReactNode;
3801
+ /** Show chevron indicator for clickable cards */
3802
+ showChevron?: boolean;
3803
+ }
3804
+ interface DataTableCardViewProps<T extends BaseDataItem$1> {
3805
+ /** Data items to display */
3806
+ data: T[];
3807
+ /** Column definitions (used for rendering values and getting column info) */
3808
+ columns: DataTableColumn<T>[];
3809
+ /** Card view configuration */
3810
+ cardConfig?: CardViewConfig<T>;
3811
+ /** Loading state */
3812
+ loading?: boolean;
3813
+ /** Number of skeleton cards to show while loading */
3814
+ loadingRows?: number;
3815
+ /** Empty state message */
3816
+ emptyMessage?: string;
3817
+ /** Click handler for card tap */
3818
+ onCardClick?: (item: T) => void;
3819
+ /** Long press / context menu handler */
3820
+ onCardLongPress?: (item: T, event: React__default.TouchEvent | React__default.MouseEvent) => void;
3821
+ /** Enable selection mode */
3822
+ selectable?: boolean;
3823
+ /** Currently selected row keys */
3824
+ selectedRows?: Set<string>;
3825
+ /** Selection change handler */
3826
+ onSelectionChange?: (selectedRows: string[]) => void;
3827
+ /** Function to extract unique key from row */
3828
+ keyExtractor?: (row: T) => string;
3829
+ /** Row actions (shown in action menu) */
3830
+ actions?: DataTableAction<T>[];
3831
+ /** Built-in edit handler */
3832
+ onEdit?: (item: T) => void;
3833
+ /** Built-in delete handler */
3834
+ onDelete?: (item: T) => void;
3835
+ /** Additional CSS classes */
3836
+ className?: string;
3837
+ /** Custom card class name */
3838
+ cardClassName?: string;
3839
+ /** Gap between cards */
3840
+ gap?: 'sm' | 'md' | 'lg';
3841
+ }
3842
+ /**
3843
+ * DataTableCardView - Mobile-friendly card view for data tables
3844
+ *
3845
+ * Renders data as cards instead of table rows, optimized for touch interaction.
3846
+ * Automatically uses column render functions for consistent data display.
3847
+ *
3848
+ * @example Basic usage
3849
+ * ```tsx
3850
+ * <DataTableCardView
3851
+ * data={users}
3852
+ * columns={columns}
3853
+ * cardConfig={{
3854
+ * titleKey: 'name',
3855
+ * subtitleKey: 'email',
3856
+ * metadataKeys: ['department', 'role'],
3857
+ * badgeKey: 'status',
3858
+ * }}
3859
+ * onCardClick={(user) => navigate(`/users/${user.id}`)}
3860
+ * />
3861
+ * ```
3862
+ *
3863
+ * @example With selection
3864
+ * ```tsx
3865
+ * <DataTableCardView
3866
+ * data={orders}
3867
+ * columns={columns}
3868
+ * cardConfig={{
3869
+ * titleKey: 'orderNumber',
3870
+ * subtitleKey: 'customer',
3871
+ * badgeKey: 'status',
3872
+ * }}
3873
+ * selectable
3874
+ * selectedRows={selectedOrders}
3875
+ * onSelectionChange={setSelectedOrders}
3876
+ * />
3877
+ * ```
3878
+ */
3879
+ declare function DataTableCardView<T extends BaseDataItem$1>({ data, columns, cardConfig, loading, loadingRows, emptyMessage, onCardClick, onCardLongPress, selectable, selectedRows, onSelectionChange, keyExtractor, actions, onEdit, onDelete, className, cardClassName, gap, }: DataTableCardViewProps<T>): react_jsx_runtime.JSX.Element;
3880
+
2704
3881
  /**
2705
3882
  * Base data item interface - all data items must have an id
2706
3883
  *
@@ -2921,6 +4098,14 @@ interface DataTableProps<T extends BaseDataItem$1 = BaseDataItem$1> {
2921
4098
  onPageSizeChange?: (pageSize: number) => void;
2922
4099
  /** Show page size selector (default: true when paginated) */
2923
4100
  showPageSizeSelector?: boolean;
4101
+ /** Mobile view mode: 'auto' (detect viewport), 'card' (always cards), 'table' (always table) */
4102
+ mobileView?: 'auto' | 'card' | 'table';
4103
+ /** Configuration for card view layout */
4104
+ cardConfig?: CardViewConfig<T>;
4105
+ /** Gap between cards in card view */
4106
+ cardGap?: 'sm' | 'md' | 'lg';
4107
+ /** Custom class name for cards */
4108
+ cardClassName?: string;
2924
4109
  }
2925
4110
  /**
2926
4111
  * DataTable - Feature-rich data table component
@@ -2966,7 +4151,98 @@ interface DataTableProps<T extends BaseDataItem$1 = BaseDataItem$1> {
2966
4151
  * />
2967
4152
  * ```
2968
4153
  */
2969
- declare function DataTable<T extends BaseDataItem$1 = BaseDataItem$1>({ data, columns, loading, error, emptyMessage, loadingRows, className, onSortChange, currentSort, onEdit, onDelete, actions, enableContextMenu, onRowClick, onRowDoubleClick, selectable, selectedRows: externalSelectedRows, onRowSelect, keyExtractor, expandable, expandedRows: externalExpandedRows, renderExpandedRow, expandedRowConfig, showExpandChevron, striped, stripedColor, density, rowClassName, rowHighlight, highlightedRowId, bordered, borderColor, disableHover, hiddenColumns, headerClassName, renderEmptyState: customRenderEmptyState, resizable, onColumnResize, reorderable, onColumnReorder, virtualized, virtualHeight, virtualRowHeight, paginated, currentPage, pageSize, totalItems, onPageChange, pageSizeOptions, onPageSizeChange, showPageSizeSelector, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
4154
+ declare function DataTable<T extends BaseDataItem$1 = BaseDataItem$1>({ data, columns, loading, error, emptyMessage, loadingRows, className, onSortChange, currentSort, onEdit, onDelete, actions, enableContextMenu, onRowClick, onRowDoubleClick, selectable, selectedRows: externalSelectedRows, onRowSelect, keyExtractor, expandable, expandedRows: externalExpandedRows, renderExpandedRow, expandedRowConfig, showExpandChevron, striped, stripedColor, density, rowClassName, rowHighlight, highlightedRowId, bordered, borderColor, disableHover, hiddenColumns, headerClassName, renderEmptyState: customRenderEmptyState, resizable, onColumnResize, reorderable, onColumnReorder, virtualized, virtualHeight, virtualRowHeight, paginated, currentPage, pageSize, totalItems, onPageChange, pageSizeOptions, onPageSizeChange, showPageSizeSelector, mobileView, cardConfig, cardGap, cardClassName, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
4155
+
4156
+ /**
4157
+ * Single swipe action configuration
4158
+ */
4159
+ interface SwipeAction {
4160
+ /** Unique identifier */
4161
+ id: string;
4162
+ /** Action label (shown on the button) */
4163
+ label: string;
4164
+ /** Icon to display */
4165
+ icon?: React__default.ReactNode;
4166
+ /** Background color class (Tailwind) */
4167
+ color?: 'primary' | 'success' | 'warning' | 'error' | 'default';
4168
+ /** Click handler */
4169
+ onClick: () => void;
4170
+ /** Whether this is the primary action (full swipe triggers it) */
4171
+ primary?: boolean;
4172
+ }
4173
+ /**
4174
+ * SwipeActions component props
4175
+ */
4176
+ interface SwipeActionsProps {
4177
+ /** Content to wrap with swipe actions */
4178
+ children: React__default.ReactNode;
4179
+ /** Actions shown when swiping left (appears on right side) */
4180
+ leftActions?: SwipeAction[];
4181
+ /** Actions shown when swiping right (appears on left side) */
4182
+ rightActions?: SwipeAction[];
4183
+ /** Swipe threshold in pixels to reveal actions (default: 80) */
4184
+ threshold?: number;
4185
+ /** Full swipe threshold percentage to trigger primary action (default: 0.5) */
4186
+ fullSwipeThreshold?: number;
4187
+ /** Enable full swipe to trigger primary action */
4188
+ fullSwipe?: boolean;
4189
+ /** Disable swipe gestures */
4190
+ disabled?: boolean;
4191
+ /** Callback when actions are revealed/hidden */
4192
+ onSwipeChange?: (direction: 'left' | 'right' | null) => void;
4193
+ /** Additional CSS classes */
4194
+ className?: string;
4195
+ }
4196
+ /**
4197
+ * SwipeActions - Touch-based swipe actions for list items
4198
+ *
4199
+ * Wraps any content with swipe-to-reveal actions, commonly used in mobile
4200
+ * list items for quick actions like delete, archive, edit, etc.
4201
+ *
4202
+ * Features:
4203
+ * - Left and right swipe actions
4204
+ * - Full swipe to trigger primary action
4205
+ * - Spring-back animation
4206
+ * - Touch and mouse support
4207
+ * - Customizable thresholds
4208
+ *
4209
+ * @example Basic delete action
4210
+ * ```tsx
4211
+ * <SwipeActions
4212
+ * leftActions={[
4213
+ * {
4214
+ * id: 'delete',
4215
+ * label: 'Delete',
4216
+ * icon: <Trash className="h-5 w-5" />,
4217
+ * color: 'error',
4218
+ * onClick: () => handleDelete(item),
4219
+ * primary: true,
4220
+ * },
4221
+ * ]}
4222
+ * >
4223
+ * <div className="p-4 bg-white">
4224
+ * List item content
4225
+ * </div>
4226
+ * </SwipeActions>
4227
+ * ```
4228
+ *
4229
+ * @example Multiple actions on both sides
4230
+ * ```tsx
4231
+ * <SwipeActions
4232
+ * leftActions={[
4233
+ * { id: 'delete', label: 'Delete', icon: <Trash />, color: 'error', onClick: handleDelete },
4234
+ * { id: 'archive', label: 'Archive', icon: <Archive />, color: 'warning', onClick: handleArchive },
4235
+ * ]}
4236
+ * rightActions={[
4237
+ * { id: 'edit', label: 'Edit', icon: <Edit />, color: 'primary', onClick: handleEdit },
4238
+ * ]}
4239
+ * fullSwipe
4240
+ * >
4241
+ * <ListItem />
4242
+ * </SwipeActions>
4243
+ * ```
4244
+ */
4245
+ declare function SwipeActions({ children, leftActions, rightActions, threshold, fullSwipeThreshold, fullSwipe, disabled, onSwipeChange, className, }: SwipeActionsProps): react_jsx_runtime.JSX.Element;
2970
4246
 
2971
4247
  /**
2972
4248
  * Enhanced cell type with formula support
@@ -3465,7 +4741,7 @@ interface QueryTransparencyInfo {
3465
4741
  relatedData?: Array<{
3466
4742
  entity: string;
3467
4743
  description: string;
3468
- type: 'join' | 'include' | 'lookup';
4744
+ type: 'primary' | 'join' | 'include' | 'lookup';
3469
4745
  }>;
3470
4746
  calculations?: Array<{
3471
4747
  field: string;
@@ -3726,6 +5002,7 @@ declare function NotificationBar({ notifications, onDismiss }: NotificationBarPr
3726
5002
  /**
3727
5003
  * Core types for notebook-ui library
3728
5004
  */
5005
+
3729
5006
  /**
3730
5007
  * Base interface for all data items that can be displayed in tables
3731
5008
  */
@@ -3744,6 +5021,7 @@ interface PaginationResponse<T = BaseDataItem> {
3744
5021
  pageSize: number;
3745
5022
  executedQuery?: string;
3746
5023
  executionTimeMs?: number;
5024
+ queryInfo?: QueryTransparencyInfo;
3747
5025
  }
3748
5026
  /**
3749
5027
  * Parameters for fetching paginated data
@@ -4060,5 +5338,324 @@ declare function useColumnReorder<T>(initialColumns: T[], options?: UseColumnReo
4060
5338
  resetOrder: () => void;
4061
5339
  };
4062
5340
 
4063
- export { Accordion, ActionButton, AdminModal, Alert, AlertDialog, AppLayout, Autocomplete, Avatar, Badge, BottomSheet, Box, Breadcrumbs, Button, ButtonGroup, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CardView, Carousel, Checkbox, Chip, Collapsible, ColorPicker, Combobox, ComingSoon, CommandPalette, ConfirmDialog, ContextMenu, ControlBar, CurrencyDisplay, CurrencyInput, Dashboard, DashboardContent, DashboardHeader, DataTable, DateDisplay, DatePicker, DateRangePicker, DateTimePicker, Drawer, DrawerFooter, DropZone, Dropdown, DropdownTrigger, EmptyState, ErrorBoundary, ExpandableRowButton, ExpandableToolbar, ExpandedRowEditForm, ExportButton, FieldArray, FileUpload, FilterBar, FilterControls, FilterStatusBanner, Form, FormContext, FormControl, FormWizard, Grid, GridItem, Hide, HoverCard, InfiniteScroll, Input, KanbanBoard, Layout, Loading, LoadingOverlay, Logo, MarkdownEditor, MaskedInput, Menu, MenuDivider, Modal, ModalFooter, MultiSelect, NotificationBar, NotificationIndicator, NumberInput, Page, PageLayout, PageNavigation, Pagination, PasswordInput, Popover, Progress, QueryTransparency, RadioGroup, Rating, RichTextEditor, SearchBar, Select, Separator, Show, Sidebar, SidebarGroup, Skeleton, SkeletonCard, SkeletonTable, Slider, Spreadsheet, SpreadsheetReport, Stack, StatCard$1 as StatCard, StatItem, StatsCardGrid, StatsGrid, StatusBadge, StatusBar, StepIndicator, Stepper, Switch, Tabs, Text, Textarea, ThemeToggle, TimePicker, Timeline, Toast, ToastContainer, Tooltip, Transfer, TreeView, TwoColumnContent, UserProfileButton, addErrorMessage, addInfoMessage, addSuccessMessage, addWarningMessage, calculateColumnWidth, createActionsSection, createFiltersSection, createMultiSheetExcel, createPageControlsSection, createQueryDetailsSection, exportDataTableToExcel, exportToExcel, formatStatisticValue, formatStatistics, loadColumnOrder, loadColumnWidths, reorderArray, saveColumnOrder, saveColumnWidths, statusManager, useColumnReorder, useColumnResize, useCommandPalette, useConfirmDialog, useFormContext, useMediaQuery };
4064
- export type { AccordionItem, AccordionProps, ActionButtonProps, ActionsSectionProps, AdminModalProps, AdminModalTab, AlertDialogAction, AlertDialogProps, AlertProps, AppLayoutProps, AppliedFilter, AutocompleteHandle, AutocompleteOption, AutocompleteProps, AvatarProps, BadgeProps, BaseDataItem, BottomSheetProps, BoxProps, BreadcrumbItem, BreadcrumbsProps, ButtonGroupOption, ButtonGroupProps, ButtonProps, CalendarEvent, CalendarProps, CardProps, CardViewItem, CarouselItem, CarouselProps, CheckboxFormField, CheckboxProps, ChipProps, CollapsibleProps, ColorPickerProps, ColumnOrder, ColumnResize, ComboboxHandle, ComboboxOption, ComboboxProps, ComingSoonProps, Command, CommandPaletteProps, ConfirmDialogProps, ContextMenuProps, ControlBarProps, ControlBarSection, CurrencyDisplayProps, CurrencyInputProps, DashboardContentProps, DashboardHeaderProps, DashboardProps, DataFetchParams, DataTableAction, DataTableColumn, DataTableExportOptions, DateDisplayProps, DatePickerHandle, DatePickerProps, DateRange, DateRangePickerHandle, DateRangePickerProps, DateTimePickerProps, DrawerProps, DropZoneProps, DropdownItem, DropdownProps, EmptyStateProps, ErrorBoundaryProps, ExcelColumn, ExpandableRowButtonProps, ExpandableToolbarProps, ExpandedRowConfig, ExpandedRowEditFormProps, ExpansionMode, ExportButtonProps, ExportFormat, ExportToExcelOptions, FieldArrayProps, FieldErrors, FileUploadProps, FilterBarProps, FilterConfig, FiltersSectionProps, FormContextValue, FormControlProps, FormField, FormFieldType, FormProps, FormWizardProps, FormattedStatistic, GridItemProps, GridProps, HoverCardProps, InfiniteScrollProps, InputProps, KanbanBoardProps, KanbanCard, KanbanColumn, LayoutProps, LoadingOverlayProps, LoadingProps, LogoProps, MarkdownEditorProps, MaskType, MaskedInputHandle, MaskedInputProps, MenuItem, MenuProps, ModalProps, MultiSelectHandle, MultiSelectOption, MultiSelectProps, MultiSheetExcelOptions, NotificationIndicatorProps, NumberInputProps, PageControlsSectionProps, PageNavigationProps, PageProps, PaginationProps, PaginationResponse, PasswordInputHandle, PasswordInputProps, PasswordStrength, PopoverProps, ProgressProps, QueryDetailsSectionProps, QueryTransparencyInfo, QueryTransparencyProps, RadioGroupProps, RadioOption, RatingProps, RichTextEditorProps, SearchBarProps, SelectFormField, SelectHandle, SelectOption, SelectProps, SeparatorProps, SidebarGroupProps, SidebarItem, SidebarProps, SliderProps, SortConfig, SpreadsheetCell, SpreadsheetProps, StackProps, StatCardProps, StatItemProps, StatisticConfig, StatisticFormat, StatsGridProps, StatusBadgeProps, StatusBarProps, StatusMessage, StatusType, Step, StepConfig, StepIndicatorProps, StepperProps, SwitchFormField, SwitchProps, Tab, TabsProps, TextFormField, TextProps, TextareaFormField, TextareaProps, ThemeToggleProps, TimePickerHandle, TimePickerProps, TimelineItem, TimelineProps, ToastProps, ToastType, ToolbarSection, TooltipProps, TransferItem, TransferProps, TreeNode, TreeViewProps, TwoColumnContentProps, UploadedFile, UseColumnReorderOptions, UseColumnResizeOptions, UseDataTableOptions, UseDataTableReturn, UserProfileButtonProps, ValidationRule, ValidationState$1 as ValidationState, WizardStep };
5341
+ /**
5342
+ * Tailwind breakpoint values in pixels
5343
+ */
5344
+ declare const BREAKPOINTS: {
5345
+ readonly xs: 0;
5346
+ readonly sm: 640;
5347
+ readonly md: 768;
5348
+ readonly lg: 1024;
5349
+ readonly xl: 1280;
5350
+ readonly '2xl': 1536;
5351
+ };
5352
+ type Breakpoint = keyof typeof BREAKPOINTS;
5353
+ /**
5354
+ * Viewport size state
5355
+ */
5356
+ interface ViewportSize {
5357
+ width: number;
5358
+ height: number;
5359
+ }
5360
+ /**
5361
+ * Orientation type
5362
+ */
5363
+ type Orientation = 'portrait' | 'landscape';
5364
+ /**
5365
+ * useViewportSize - Returns current viewport dimensions
5366
+ *
5367
+ * Updates on window resize with debouncing for performance.
5368
+ * SSR-safe with sensible defaults.
5369
+ *
5370
+ * @example
5371
+ * const { width, height } = useViewportSize();
5372
+ * console.log(`Viewport: ${width}x${height}`);
5373
+ */
5374
+ declare function useViewportSize(): ViewportSize;
5375
+ /**
5376
+ * useBreakpoint - Returns the current Tailwind breakpoint
5377
+ *
5378
+ * Automatically updates when viewport crosses breakpoint thresholds.
5379
+ *
5380
+ * @example
5381
+ * const breakpoint = useBreakpoint();
5382
+ * // Returns: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'
5383
+ */
5384
+ declare function useBreakpoint(): Breakpoint;
5385
+ /**
5386
+ * useMediaQuery - React hook for CSS media queries
5387
+ *
5388
+ * SSR-safe implementation that returns false during SSR and
5389
+ * updates reactively when media query match state changes.
5390
+ *
5391
+ * @param query - CSS media query string (e.g., '(max-width: 768px)')
5392
+ * @returns boolean indicating if the media query matches
5393
+ *
5394
+ * @example
5395
+ * const isDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
5396
+ * const isReducedMotion = useMediaQuery('(prefers-reduced-motion: reduce)');
5397
+ * const isPortrait = useMediaQuery('(orientation: portrait)');
5398
+ */
5399
+ declare function useMediaQuery(query: string): boolean;
5400
+ /**
5401
+ * useIsMobile - Returns true when viewport is mobile-sized (< 768px)
5402
+ *
5403
+ * @example
5404
+ * const isMobile = useIsMobile();
5405
+ * return isMobile ? <MobileNav /> : <DesktopNav />;
5406
+ */
5407
+ declare function useIsMobile(): boolean;
5408
+ /**
5409
+ * useIsTablet - Returns true when viewport is tablet-sized (768px - 1023px)
5410
+ *
5411
+ * @example
5412
+ * const isTablet = useIsTablet();
5413
+ */
5414
+ declare function useIsTablet(): boolean;
5415
+ /**
5416
+ * useIsDesktop - Returns true when viewport is desktop-sized (>= 1024px)
5417
+ *
5418
+ * @example
5419
+ * const isDesktop = useIsDesktop();
5420
+ */
5421
+ declare function useIsDesktop(): boolean;
5422
+ /**
5423
+ * useIsTouchDevice - Detects if the device supports touch input
5424
+ *
5425
+ * Uses multiple detection methods for reliability:
5426
+ * - Touch event support
5427
+ * - Pointer coarse media query
5428
+ * - Max touch points
5429
+ *
5430
+ * @example
5431
+ * const isTouchDevice = useIsTouchDevice();
5432
+ * // Show swipe hints on touch devices
5433
+ */
5434
+ declare function useIsTouchDevice(): boolean;
5435
+ /**
5436
+ * useOrientation - Returns current screen orientation
5437
+ *
5438
+ * @returns 'portrait' | 'landscape'
5439
+ *
5440
+ * @example
5441
+ * const orientation = useOrientation();
5442
+ * // Adjust layout based on orientation
5443
+ */
5444
+ declare function useOrientation(): Orientation;
5445
+ /**
5446
+ * useBreakpointValue - Returns different values based on breakpoint
5447
+ *
5448
+ * Mobile-first: Returns the value for the current breakpoint or the
5449
+ * closest smaller breakpoint that has a value defined.
5450
+ *
5451
+ * @param values - Object mapping breakpoints to values
5452
+ * @param defaultValue - Fallback value if no breakpoint matches
5453
+ *
5454
+ * @example
5455
+ * const columns = useBreakpointValue({ xs: 1, sm: 2, lg: 4 }, 1);
5456
+ * // Returns 1 on xs, 2 on sm/md, 4 on lg/xl/2xl
5457
+ *
5458
+ * const padding = useBreakpointValue({ xs: 'p-2', md: 'p-4', xl: 'p-8' });
5459
+ */
5460
+ declare function useBreakpointValue<T>(values: Partial<Record<Breakpoint, T>>, defaultValue?: T): T | undefined;
5461
+ /**
5462
+ * useResponsiveCallback - Returns a memoized callback that receives responsive info
5463
+ *
5464
+ * Useful for callbacks that need to behave differently based on viewport.
5465
+ *
5466
+ * @example
5467
+ * const handleClick = useResponsiveCallback((isMobile) => {
5468
+ * if (isMobile) {
5469
+ * openBottomSheet();
5470
+ * } else {
5471
+ * openModal();
5472
+ * }
5473
+ * });
5474
+ */
5475
+ declare function useResponsiveCallback<T extends (...args: any[]) => any>(callback: (isMobile: boolean, isTablet: boolean, isDesktop: boolean) => T): T;
5476
+ /**
5477
+ * useSafeAreaInsets - Returns safe area insets for notched devices
5478
+ *
5479
+ * Uses CSS environment variables (env(safe-area-inset-*)) to get
5480
+ * safe area dimensions for devices with notches or home indicators.
5481
+ *
5482
+ * @example
5483
+ * const { top, bottom } = useSafeAreaInsets();
5484
+ * // Add padding-bottom for home indicator
5485
+ */
5486
+ declare function useSafeAreaInsets(): {
5487
+ top: number;
5488
+ right: number;
5489
+ bottom: number;
5490
+ left: number;
5491
+ };
5492
+ /**
5493
+ * usePrefersMobile - Checks if user prefers reduced data/animations (mobile-friendly)
5494
+ *
5495
+ * Combines multiple preferences that might indicate mobile/low-power usage.
5496
+ */
5497
+ declare function usePrefersMobile(): boolean;
5498
+
5499
+ /**
5500
+ * Mobile context value interface
5501
+ *
5502
+ * Provides comprehensive responsive state for the entire application.
5503
+ */
5504
+ interface MobileContextValue {
5505
+ /** True when viewport width < 768px */
5506
+ isMobile: boolean;
5507
+ /** True when viewport width is 768px - 1023px */
5508
+ isTablet: boolean;
5509
+ /** True when viewport width >= 1024px */
5510
+ isDesktop: boolean;
5511
+ /** True when device supports touch input */
5512
+ isTouchDevice: boolean;
5513
+ /** Current Tailwind breakpoint: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' */
5514
+ breakpoint: Breakpoint;
5515
+ /** Current orientation: 'portrait' | 'landscape' */
5516
+ orientation: Orientation;
5517
+ /** Current viewport dimensions */
5518
+ viewport: ViewportSize;
5519
+ /** Safe area insets for notched devices */
5520
+ safeAreaInsets: {
5521
+ top: number;
5522
+ right: number;
5523
+ bottom: number;
5524
+ left: number;
5525
+ };
5526
+ /** True when mobile OR touch device (useful for UI decisions) */
5527
+ useMobileUI: boolean;
5528
+ }
5529
+ /**
5530
+ * MobileProvider props
5531
+ */
5532
+ interface MobileProviderProps {
5533
+ /** Child components that will have access to mobile context */
5534
+ children: ReactNode;
5535
+ /**
5536
+ * Force mobile UI mode regardless of device detection.
5537
+ * Useful for testing or forcing mobile layout on tablets.
5538
+ */
5539
+ forceMobileUI?: boolean;
5540
+ /**
5541
+ * Force desktop UI mode regardless of device detection.
5542
+ * Useful for testing or forcing desktop layout on mobile.
5543
+ */
5544
+ forceDesktopUI?: boolean;
5545
+ }
5546
+ /**
5547
+ * MobileProvider - Provides responsive state to the entire application
5548
+ *
5549
+ * Wrap your application with MobileProvider to enable auto-responsive
5550
+ * behavior in notebook-ui components.
5551
+ *
5552
+ * @example Basic usage
5553
+ * ```tsx
5554
+ * import { MobileProvider } from 'notebook-ui';
5555
+ *
5556
+ * function App() {
5557
+ * return (
5558
+ * <MobileProvider>
5559
+ * <YourApplication />
5560
+ * </MobileProvider>
5561
+ * );
5562
+ * }
5563
+ * ```
5564
+ *
5565
+ * @example Force mobile UI for testing
5566
+ * ```tsx
5567
+ * <MobileProvider forceMobileUI>
5568
+ * <YourApplication />
5569
+ * </MobileProvider>
5570
+ * ```
5571
+ */
5572
+ declare function MobileProvider({ children, forceMobileUI, forceDesktopUI, }: MobileProviderProps): react_jsx_runtime.JSX.Element;
5573
+ /**
5574
+ * useMobileContext - Hook to access mobile responsive state
5575
+ *
5576
+ * Must be used within a MobileProvider. Returns comprehensive
5577
+ * responsive state for making UI decisions.
5578
+ *
5579
+ * @example
5580
+ * ```tsx
5581
+ * function MyComponent() {
5582
+ * const { isMobile, useMobileUI, breakpoint } = useMobileContext();
5583
+ *
5584
+ * return useMobileUI ? <MobileView /> : <DesktopView />;
5585
+ * }
5586
+ * ```
5587
+ */
5588
+ declare function useMobileContext(): MobileContextValue;
5589
+ /**
5590
+ * withMobileContext - HOC to inject mobile context as props
5591
+ *
5592
+ * For class components or when you prefer props over hooks.
5593
+ *
5594
+ * @example
5595
+ * ```tsx
5596
+ * interface Props {
5597
+ * mobile: MobileContextValue;
5598
+ * }
5599
+ *
5600
+ * class MyComponent extends React.Component<Props> {
5601
+ * render() {
5602
+ * const { isMobile } = this.props.mobile;
5603
+ * return isMobile ? <Mobile /> : <Desktop />;
5604
+ * }
5605
+ * }
5606
+ *
5607
+ * export default withMobileContext(MyComponent);
5608
+ * ```
5609
+ */
5610
+ declare function withMobileContext<P extends {
5611
+ mobile: MobileContextValue;
5612
+ }>(Component: React__default.ComponentType<P>): {
5613
+ (props: Omit<P, "mobile">): react_jsx_runtime.JSX.Element;
5614
+ displayName: string;
5615
+ };
5616
+ /**
5617
+ * MobileOnly - Renders children only on mobile devices
5618
+ *
5619
+ * @example
5620
+ * ```tsx
5621
+ * <MobileOnly>
5622
+ * <BottomNavigation items={navItems} />
5623
+ * </MobileOnly>
5624
+ * ```
5625
+ */
5626
+ declare function MobileOnly({ children }: {
5627
+ children: ReactNode;
5628
+ }): react_jsx_runtime.JSX.Element | null;
5629
+ /**
5630
+ * DesktopOnly - Renders children only on desktop devices
5631
+ *
5632
+ * @example
5633
+ * ```tsx
5634
+ * <DesktopOnly>
5635
+ * <Sidebar items={navItems} />
5636
+ * </DesktopOnly>
5637
+ * ```
5638
+ */
5639
+ declare function DesktopOnly({ children }: {
5640
+ children: ReactNode;
5641
+ }): react_jsx_runtime.JSX.Element | null;
5642
+ /**
5643
+ * Responsive - Renders different content based on device type
5644
+ *
5645
+ * @example
5646
+ * ```tsx
5647
+ * <Responsive
5648
+ * mobile={<MobileNavigation />}
5649
+ * tablet={<TabletNavigation />}
5650
+ * desktop={<DesktopNavigation />}
5651
+ * />
5652
+ * ```
5653
+ */
5654
+ declare function Responsive({ mobile, tablet, desktop, }: {
5655
+ mobile?: ReactNode;
5656
+ tablet?: ReactNode;
5657
+ desktop?: ReactNode;
5658
+ }): react_jsx_runtime.JSX.Element;
5659
+
5660
+ export { Accordion, ActionButton, AdminModal, Alert, AlertDialog, AppLayout, Autocomplete, Avatar, BREAKPOINTS, Badge, BottomNavigation, BottomNavigationSpacer, BottomSheet, Box, Breadcrumbs, Button, ButtonGroup, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CardView, Carousel, Checkbox, CheckboxList, Chip, ChipGroup, Collapsible, ColorPicker, Combobox, ComingSoon, CommandPalette, ConfirmDialog, ContextMenu, ControlBar, CurrencyDisplay, CurrencyInput, Dashboard, DashboardContent, DashboardHeader, DataTable, DataTableCardView, DateDisplay, DatePicker, DateRangePicker, DateTimePicker, DesktopOnly, Drawer, DrawerFooter, DropZone, Dropdown, DropdownTrigger, EmptyState, ErrorBoundary, ExpandablePanel, ExpandablePanelContainer, ExpandablePanelSpacer, ExpandableRowButton, ExpandableToolbar, ExpandedRowEditForm, ExportButton, FieldArray, FileUpload, FilterBar, FilterControls, FilterStatusBanner, FloatingActionButton, Form, FormContext, FormControl, FormWizard, Grid, GridItem, Hide, HoverCard, InfiniteScroll, Input, KanbanBoard, Layout, Loading, LoadingOverlay, Logo, MarkdownEditor, MaskedInput, Menu, MenuDivider, MobileHeader, MobileHeaderSpacer, MobileLayout, MobileOnly, MobileProvider, Modal, ModalFooter, MultiSelect, NotificationBar, NotificationIndicator, NumberInput, Page, PageLayout, PageNavigation, Pagination, PasswordInput, Popover, Progress, PullToRefresh, QueryTransparency, RadioGroup, Rating, Responsive, RichTextEditor, SearchBar, SearchableList, Select, Separator, Show, Sidebar, SidebarGroup, Skeleton, SkeletonCard, SkeletonTable, Slider, Spreadsheet, SpreadsheetReport, Stack, StatCard$1 as StatCard, StatItem, StatsCardGrid, StatsGrid, StatusBadge, StatusBar, StepIndicator, Stepper, SwipeActions, Switch, Tabs, Text, Textarea, ThemeToggle, TimePicker, Timeline, Toast, ToastContainer, Tooltip, Transfer, TreeView, TwoColumnContent, UserProfileButton, addErrorMessage, addInfoMessage, addSuccessMessage, addWarningMessage, calculateColumnWidth, createActionsSection, createFiltersSection, createMultiSheetExcel, createPageControlsSection, createQueryDetailsSection, exportDataTableToExcel, exportToExcel, formatStatisticValue, formatStatistics, loadColumnOrder, loadColumnWidths, reorderArray, saveColumnOrder, saveColumnWidths, statusManager, useBreakpoint, useBreakpointValue, useColumnReorder, useColumnResize, useCommandPalette, useConfirmDialog, useFABScroll, useFormContext, useIsDesktop, useIsMobile, useIsTablet, useIsTouchDevice, useMediaQuery, useMobileContext, useOrientation, usePrefersMobile, usePullToRefresh, useResponsiveCallback, useSafeAreaInsets, useViewportSize, withMobileContext };
5661
+ export type { AccordionItem, AccordionProps, ActionButtonProps, ActionsSectionProps, AdminModalProps, AdminModalTab, AlertDialogAction, AlertDialogProps, AlertProps, AppLayoutProps, AppliedFilter, AutocompleteHandle, AutocompleteOption, AutocompleteProps, AvatarProps, BadgeProps, BaseDataItem, BottomNavItem, BottomNavigationProps, BottomSheetProps, BoxProps, BreadcrumbItem, BreadcrumbsProps, Breakpoint, ButtonGroupOption, ButtonGroupProps, ButtonProps, CalendarEvent, CalendarProps, CardProps, CardViewConfig, CardViewItem, CarouselItem, CarouselProps, CheckboxFormField, CheckboxListItem, CheckboxListProps, CheckboxProps, ChipGroupProps, ChipProps, CollapsibleProps, ColorPickerProps, ColumnOrder, ColumnResize, ComboboxHandle, ComboboxOption, ComboboxProps, ComingSoonProps, Command, CommandPaletteProps, ConfirmDialogProps, ContextMenuProps, ControlBarProps, ControlBarSection, CurrencyDisplayProps, CurrencyInputProps, DashboardContentProps, DashboardHeaderProps, DashboardProps, DataFetchParams, DataTableAction, DataTableCardViewProps, DataTableColumn, DataTableExportOptions, DateDisplayProps, DatePickerHandle, DatePickerProps, DateRange, DateRangePickerHandle, DateRangePickerProps, DateTimePickerProps, DrawerProps, DropZoneProps, DropdownItem, DropdownProps, EmptyStateProps, ErrorBoundaryProps, ExcelColumn, ExpandablePanelProps, ExpandableRowButtonProps, ExpandableToolbarProps, ExpandedRowConfig, ExpandedRowEditFormProps, ExpansionMode, ExportButtonProps, ExportFormat, ExportToExcelOptions, FABAction, FieldArrayProps, FieldErrors, FileUploadProps, FilterBarProps, FilterConfig, FiltersSectionProps, FloatingActionButtonProps, FormContextValue, FormControlProps, FormField, FormFieldType, FormProps, FormWizardProps, FormattedStatistic, GridItemProps, GridProps, HoverCardProps, InfiniteScrollProps, InputProps, KanbanBoardProps, KanbanCard, KanbanColumn, LayoutProps, LoadingOverlayProps, LoadingProps, LogoProps, MarkdownEditorProps, MaskType, MaskedInputHandle, MaskedInputProps, MenuItem, MenuProps, MobileContextValue, MobileHeaderProps, MobileLayoutProps, MobileProviderProps, ModalProps, MultiSelectHandle, MultiSelectOption, MultiSelectProps, MultiSheetExcelOptions, NotificationIndicatorProps, NumberInputProps, Orientation, PageControlsSectionProps, PageNavigationProps, PageProps, PaginationProps, PaginationResponse, PasswordInputHandle, PasswordInputProps, PasswordStrength, PopoverProps, ProgressProps, PullToRefreshProps, QueryDetailsSectionProps, QueryTransparencyInfo, QueryTransparencyProps, RadioGroupProps, RadioOption, RatingProps, RichTextEditorProps, SearchBarProps, SearchableListItem, SearchableListProps, SelectFormField, SelectHandle, SelectOption, SelectProps, SeparatorProps, SidebarGroupProps, SidebarItem, SidebarProps, SliderProps, SortConfig, SpreadsheetCell, SpreadsheetProps, StackProps, StatCardProps, StatItemProps, StatisticConfig, StatisticFormat, StatsGridProps, StatusBadgeProps, StatusBarProps, StatusMessage, StatusType, Step, StepConfig, StepIndicatorProps, StepperProps, SwipeAction, SwipeActionsProps, SwitchFormField, SwitchProps, Tab, TabsProps, TextFormField, TextProps, TextareaFormField, TextareaProps, ThemeToggleProps, TimePickerHandle, TimePickerProps, TimelineItem, TimelineProps, ToastProps, ToastType, ToolbarSection, TooltipProps, TransferItem, TransferProps, TreeNode, TreeViewProps, TwoColumnContentProps, UploadedFile, UseColumnReorderOptions, UseColumnResizeOptions, UseDataTableOptions, UseDataTableReturn, UserProfileButtonProps, ValidationRule, ValidationState$1 as ValidationState, ViewportSize, WizardStep };