@papernote/ui 1.10.5 → 1.10.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -3346,7 +3346,7 @@ const toastStyles = {
3346
3346
  icon: jsx(Info, { className: "h-5 w-5 text-primary-600" }),
3347
3347
  },
3348
3348
  };
3349
- function Toast({ id, type, title, message, duration = 5000, onClose }) {
3349
+ function Toast({ id, type, title, message, duration = 5000, onClose, action }) {
3350
3350
  const [isExiting, setIsExiting] = useState(false);
3351
3351
  const styles = toastStyles[type];
3352
3352
  const handleClose = useCallback(() => {
@@ -3355,13 +3355,19 @@ function Toast({ id, type, title, message, duration = 5000, onClose }) {
3355
3355
  onClose(id);
3356
3356
  }, 300); // Match animation duration
3357
3357
  }, [id, onClose]);
3358
+ const handleAction = useCallback(() => {
3359
+ if (action) {
3360
+ action.onClick();
3361
+ handleClose();
3362
+ }
3363
+ }, [action, handleClose]);
3358
3364
  useEffect(() => {
3359
3365
  const timer = setTimeout(() => {
3360
3366
  handleClose();
3361
3367
  }, duration);
3362
3368
  return () => clearTimeout(timer);
3363
3369
  }, [duration, handleClose]);
3364
- return (jsx("div", { className: `${styles.bg} ${styles.border} bg-subtle-grain rounded-lg shadow-lg p-4 min-w-[320px] max-w-md transition-all duration-300 ${isExiting ? 'opacity-0 translate-x-full' : 'opacity-100 translate-x-0 animate-slide-in-right'}`, children: jsxs("div", { className: "flex items-start gap-3", children: [jsx("div", { className: "flex-shrink-0 mt-0.5", children: styles.icon }), jsxs("div", { className: "flex-1 min-w-0", children: [jsx("h4", { className: "text-sm font-medium text-ink-900 mb-1", children: title }), jsx("p", { className: "text-sm text-ink-600", children: message })] }), jsx("button", { onClick: handleClose, className: "flex-shrink-0 text-ink-400 hover:text-ink-600 transition-colors", "aria-label": "Close notification", children: jsx(X, { className: "h-4 w-4" }) })] }) }));
3370
+ return (jsx("div", { className: `${styles.bg} ${styles.border} bg-subtle-grain rounded-lg shadow-lg p-4 min-w-[320px] max-w-md transition-all duration-300 ${isExiting ? 'opacity-0 translate-x-full' : 'opacity-100 translate-x-0 animate-slide-in-right'}`, children: jsxs("div", { className: "flex items-start gap-3", children: [jsx("div", { className: "flex-shrink-0 mt-0.5", children: styles.icon }), jsxs("div", { className: "flex-1 min-w-0", children: [jsx("h4", { className: "text-sm font-medium text-ink-900 mb-1", children: title }), jsx("p", { className: "text-sm text-ink-600", children: message }), action && (jsx("button", { onClick: handleAction, className: "mt-2 text-sm font-medium text-accent-600 hover:text-accent-700 transition-colors", children: action.label }))] }), jsx("button", { onClick: handleClose, className: "flex-shrink-0 text-ink-400 hover:text-ink-600 transition-colors", "aria-label": "Close notification", children: jsx(X, { className: "h-4 w-4" }) })] }) }));
3365
3371
  }
3366
3372
  const positionStyles = {
3367
3373
  'top-right': 'top-20 right-6',
@@ -8096,6 +8102,289 @@ function SwipeableCard({ children, onSwipeRight, onSwipeLeft, rightAction = {
8096
8102
  }, onTouchStart: handleTouchStart, onTouchMove: handleTouchMove, onTouchEnd: handleTouchEnd, onMouseDown: handleMouseDown, role: "button", "aria-label": `Swipeable card. ${onSwipeRight ? `Swipe right to ${rightAction.label}.` : ''} ${onSwipeLeft ? `Swipe left to ${leftAction.label}.` : ''}`, tabIndex: disabled ? -1 : 0, children: children })] }));
8097
8103
  }
8098
8104
 
8105
+ // Color classes for action backgrounds
8106
+ const getColorClass = (color) => {
8107
+ const colorMap = {
8108
+ destructive: 'bg-error-500',
8109
+ warning: 'bg-warning-500',
8110
+ success: 'bg-success-500',
8111
+ primary: 'bg-accent-500',
8112
+ };
8113
+ return colorMap[color] || color;
8114
+ };
8115
+ /**
8116
+ * SwipeableListItem - List item with swipe-to-action functionality
8117
+ *
8118
+ * Designed for mobile workflows with keyboard accessibility:
8119
+ * - Swipe right to approve/confirm
8120
+ * - Swipe left to dismiss/delete
8121
+ * - Arrow keys for keyboard navigation
8122
+ * - Async callback support with loading state
8123
+ *
8124
+ * @example
8125
+ * ```tsx
8126
+ * <SwipeableListItem
8127
+ * onSwipeRight={() => handleApprove()}
8128
+ * onSwipeLeft={() => handleDismiss()}
8129
+ * rightAction={{
8130
+ * icon: Check,
8131
+ * color: 'success',
8132
+ * label: 'Approve'
8133
+ * }}
8134
+ * leftAction={{
8135
+ * icon: X,
8136
+ * color: 'destructive',
8137
+ * label: 'Dismiss'
8138
+ * }}
8139
+ * >
8140
+ * <div className="p-4">List item content</div>
8141
+ * </SwipeableListItem>
8142
+ * ```
8143
+ */
8144
+ function SwipeableListItem({ children, onSwipeRight, onSwipeLeft, rightAction, leftAction, swipeThreshold = 100, disabled = false, className = '', }) {
8145
+ const containerRef = useRef(null);
8146
+ const [isDragging, setIsDragging] = useState(false);
8147
+ const [offsetX, setOffsetX] = useState(0);
8148
+ const [isTriggered, setIsTriggered] = useState(null);
8149
+ const [isLoading, setIsLoading] = useState(false);
8150
+ const [keyboardDirection, setKeyboardDirection] = useState(null);
8151
+ const startX = useRef(0);
8152
+ const startY = useRef(0);
8153
+ const isHorizontalSwipe = useRef(null);
8154
+ // Trigger haptic feedback
8155
+ const triggerHaptic = useCallback((style = 'medium') => {
8156
+ if ('vibrate' in navigator) {
8157
+ const patterns = {
8158
+ light: 10,
8159
+ medium: 25,
8160
+ heavy: [50, 30, 50],
8161
+ };
8162
+ navigator.vibrate(patterns[style]);
8163
+ }
8164
+ }, []);
8165
+ // Execute action with async support
8166
+ const executeAction = useCallback(async (direction) => {
8167
+ const handler = direction === 'right' ? onSwipeRight : onSwipeLeft;
8168
+ if (!handler)
8169
+ return;
8170
+ setIsLoading(true);
8171
+ triggerHaptic('heavy');
8172
+ // Animate out
8173
+ const slideDistance = direction === 'right' ? window.innerWidth : -window.innerWidth;
8174
+ setOffsetX(slideDistance);
8175
+ try {
8176
+ await handler();
8177
+ }
8178
+ finally {
8179
+ // Reset state after animation
8180
+ setTimeout(() => {
8181
+ setOffsetX(0);
8182
+ setIsTriggered(null);
8183
+ setIsLoading(false);
8184
+ setKeyboardDirection(null);
8185
+ }, 200);
8186
+ }
8187
+ }, [onSwipeRight, onSwipeLeft, triggerHaptic]);
8188
+ // Handle drag start
8189
+ const handleDragStart = useCallback((clientX, clientY) => {
8190
+ if (disabled || isLoading)
8191
+ return;
8192
+ setIsDragging(true);
8193
+ startX.current = clientX;
8194
+ startY.current = clientY;
8195
+ isHorizontalSwipe.current = null;
8196
+ }, [disabled, isLoading]);
8197
+ // Handle drag move
8198
+ const handleDragMove = useCallback((clientX, clientY) => {
8199
+ if (!isDragging || disabled || isLoading)
8200
+ return;
8201
+ const deltaX = clientX - startX.current;
8202
+ const deltaY = clientY - startY.current;
8203
+ // Determine if this is a horizontal swipe on first significant movement
8204
+ if (isHorizontalSwipe.current === null) {
8205
+ const absDeltaX = Math.abs(deltaX);
8206
+ const absDeltaY = Math.abs(deltaY);
8207
+ if (absDeltaX > 10 || absDeltaY > 10) {
8208
+ isHorizontalSwipe.current = absDeltaX > absDeltaY;
8209
+ }
8210
+ }
8211
+ // Only process horizontal swipes
8212
+ if (isHorizontalSwipe.current !== true)
8213
+ return;
8214
+ // Check if we should allow this direction
8215
+ const canSwipeRight = onSwipeRight !== undefined && rightAction !== undefined;
8216
+ const canSwipeLeft = onSwipeLeft !== undefined && leftAction !== undefined;
8217
+ let newOffset = deltaX;
8218
+ // Limit swipe direction based on available actions
8219
+ if (!canSwipeRight && deltaX > 0)
8220
+ newOffset = 0;
8221
+ if (!canSwipeLeft && deltaX < 0)
8222
+ newOffset = 0;
8223
+ // Add resistance when exceeding threshold
8224
+ const maxSwipe = swipeThreshold * 1.5;
8225
+ if (Math.abs(newOffset) > swipeThreshold) {
8226
+ const overflow = Math.abs(newOffset) - swipeThreshold;
8227
+ const resistance = overflow * 0.3;
8228
+ newOffset = newOffset > 0
8229
+ ? swipeThreshold + resistance
8230
+ : -(swipeThreshold + resistance);
8231
+ newOffset = Math.max(-maxSwipe, Math.min(maxSwipe, newOffset));
8232
+ }
8233
+ setOffsetX(newOffset);
8234
+ // Check for threshold crossing and trigger haptic
8235
+ const newTriggered = Math.abs(newOffset) >= swipeThreshold
8236
+ ? (newOffset > 0 ? 'right' : 'left')
8237
+ : null;
8238
+ if (newTriggered !== isTriggered) {
8239
+ if (newTriggered) {
8240
+ triggerHaptic('medium');
8241
+ }
8242
+ setIsTriggered(newTriggered);
8243
+ }
8244
+ }, [isDragging, disabled, isLoading, onSwipeRight, onSwipeLeft, rightAction, leftAction, swipeThreshold, isTriggered, triggerHaptic]);
8245
+ // Handle drag end
8246
+ const handleDragEnd = useCallback(() => {
8247
+ if (!isDragging)
8248
+ return;
8249
+ setIsDragging(false);
8250
+ // Check if action should be triggered
8251
+ if (Math.abs(offsetX) >= swipeThreshold) {
8252
+ if (offsetX > 0 && onSwipeRight && rightAction) {
8253
+ executeAction('right');
8254
+ return;
8255
+ }
8256
+ else if (offsetX < 0 && onSwipeLeft && leftAction) {
8257
+ executeAction('left');
8258
+ return;
8259
+ }
8260
+ }
8261
+ // Snap back
8262
+ setOffsetX(0);
8263
+ setIsTriggered(null);
8264
+ }, [isDragging, offsetX, swipeThreshold, onSwipeRight, onSwipeLeft, rightAction, leftAction, executeAction]);
8265
+ // Touch event handlers
8266
+ const handleTouchStart = (e) => {
8267
+ handleDragStart(e.touches[0].clientX, e.touches[0].clientY);
8268
+ };
8269
+ const handleTouchMove = (e) => {
8270
+ handleDragMove(e.touches[0].clientX, e.touches[0].clientY);
8271
+ // Prevent vertical scroll if horizontal swipe
8272
+ if (isHorizontalSwipe.current === true) {
8273
+ e.preventDefault();
8274
+ }
8275
+ };
8276
+ const handleTouchEnd = () => {
8277
+ handleDragEnd();
8278
+ };
8279
+ // Mouse event handlers (for desktop testing)
8280
+ const handleMouseDown = (e) => {
8281
+ handleDragStart(e.clientX, e.clientY);
8282
+ };
8283
+ useEffect(() => {
8284
+ if (!isDragging)
8285
+ return;
8286
+ const handleMouseMove = (e) => {
8287
+ handleDragMove(e.clientX, e.clientY);
8288
+ };
8289
+ const handleMouseUp = () => {
8290
+ handleDragEnd();
8291
+ };
8292
+ document.addEventListener('mousemove', handleMouseMove);
8293
+ document.addEventListener('mouseup', handleMouseUp);
8294
+ return () => {
8295
+ document.removeEventListener('mousemove', handleMouseMove);
8296
+ document.removeEventListener('mouseup', handleMouseUp);
8297
+ };
8298
+ }, [isDragging, handleDragMove, handleDragEnd]);
8299
+ // Keyboard event handlers
8300
+ const handleKeyDown = useCallback((e) => {
8301
+ if (disabled || isLoading)
8302
+ return;
8303
+ const canSwipeRight = onSwipeRight !== undefined && rightAction !== undefined;
8304
+ const canSwipeLeft = onSwipeLeft !== undefined && leftAction !== undefined;
8305
+ switch (e.key) {
8306
+ case 'ArrowRight':
8307
+ if (canSwipeRight) {
8308
+ e.preventDefault();
8309
+ setKeyboardDirection('right');
8310
+ setOffsetX(swipeThreshold);
8311
+ setIsTriggered('right');
8312
+ triggerHaptic('medium');
8313
+ }
8314
+ break;
8315
+ case 'ArrowLeft':
8316
+ if (canSwipeLeft) {
8317
+ e.preventDefault();
8318
+ setKeyboardDirection('left');
8319
+ setOffsetX(-swipeThreshold);
8320
+ setIsTriggered('left');
8321
+ triggerHaptic('medium');
8322
+ }
8323
+ break;
8324
+ case 'Enter':
8325
+ if (keyboardDirection) {
8326
+ e.preventDefault();
8327
+ executeAction(keyboardDirection);
8328
+ }
8329
+ break;
8330
+ case 'Escape':
8331
+ if (keyboardDirection) {
8332
+ e.preventDefault();
8333
+ setKeyboardDirection(null);
8334
+ setOffsetX(0);
8335
+ setIsTriggered(null);
8336
+ }
8337
+ break;
8338
+ }
8339
+ }, [disabled, isLoading, onSwipeRight, onSwipeLeft, rightAction, leftAction, swipeThreshold, keyboardDirection, executeAction, triggerHaptic]);
8340
+ // Reset keyboard state on blur
8341
+ const handleBlur = useCallback(() => {
8342
+ if (keyboardDirection) {
8343
+ setKeyboardDirection(null);
8344
+ setOffsetX(0);
8345
+ setIsTriggered(null);
8346
+ }
8347
+ }, [keyboardDirection]);
8348
+ // Calculate action opacity based on swipe distance
8349
+ const rightActionOpacity = offsetX > 0 ? Math.min(1, offsetX / swipeThreshold) : 0;
8350
+ const leftActionOpacity = offsetX < 0 ? Math.min(1, Math.abs(offsetX) / swipeThreshold) : 0;
8351
+ // Build aria-label
8352
+ const ariaLabel = [
8353
+ 'Swipeable list item.',
8354
+ rightAction && onSwipeRight ? `Swipe right or press Arrow Right to ${rightAction.label}.` : '',
8355
+ leftAction && onSwipeLeft ? `Swipe left or press Arrow Left to ${leftAction.label}.` : '',
8356
+ keyboardDirection ? `Press Enter to confirm or Escape to cancel.` : '',
8357
+ ].filter(Boolean).join(' ');
8358
+ return (jsxs("div", { ref: containerRef, className: `relative overflow-hidden ${className}`, children: [rightAction && onSwipeRight && (jsx("div", { className: `
8359
+ absolute inset-y-0 left-0 flex items-center justify-start pl-6
8360
+ ${getColorClass(rightAction.color)}
8361
+ transition-opacity duration-100
8362
+ `, style: {
8363
+ opacity: rightActionOpacity,
8364
+ width: Math.abs(offsetX) + 20,
8365
+ }, "aria-hidden": "true", children: jsx("div", { className: `
8366
+ text-white transform transition-transform duration-200
8367
+ ${isTriggered === 'right' ? 'scale-125' : 'scale-100'}
8368
+ `, children: isLoading && isTriggered === 'right' ? (jsx(Loader2, { className: "h-6 w-6 animate-spin" })) : (jsx(rightAction.icon, { className: "h-6 w-6" })) }) })), leftAction && onSwipeLeft && (jsx("div", { className: `
8369
+ absolute inset-y-0 right-0 flex items-center justify-end pr-6
8370
+ ${getColorClass(leftAction.color)}
8371
+ transition-opacity duration-100
8372
+ `, style: {
8373
+ opacity: leftActionOpacity,
8374
+ width: Math.abs(offsetX) + 20,
8375
+ }, "aria-hidden": "true", children: jsx("div", { className: `
8376
+ text-white transform transition-transform duration-200
8377
+ ${isTriggered === 'left' ? 'scale-125' : 'scale-100'}
8378
+ `, children: isLoading && isTriggered === 'left' ? (jsx(Loader2, { className: "h-6 w-6 animate-spin" })) : (jsx(leftAction.icon, { className: "h-6 w-6" })) }) })), jsx("div", { className: `
8379
+ relative bg-white
8380
+ ${isDragging ? '' : 'transition-transform duration-200 ease-out'}
8381
+ ${disabled ? 'opacity-50 pointer-events-none' : ''}
8382
+ ${keyboardDirection ? 'ring-2 ring-accent-500 ring-inset' : ''}
8383
+ `, style: {
8384
+ transform: `translateX(${offsetX}px)`,
8385
+ }, onTouchStart: handleTouchStart, onTouchMove: handleTouchMove, onTouchEnd: handleTouchEnd, onMouseDown: handleMouseDown, onKeyDown: handleKeyDown, onBlur: handleBlur, role: "button", "aria-label": ariaLabel, tabIndex: disabled ? -1 : 0, children: children })] }));
8386
+ }
8387
+
8099
8388
  /**
8100
8389
  * NotificationBanner - Dismissible banner for important alerts
8101
8390
  *
@@ -58476,5 +58765,5 @@ function Responsive({ mobile, tablet, desktop, }) {
58476
58765
  return jsx(Fragment, { children: mobile || tablet || desktop });
58477
58766
  }
58478
58767
 
58479
- export { Accordion, ActionBar, ActionBarCenter, ActionBarLeft, ActionBarRight, ActionButton, AdminModal, Alert, AlertDialog, AppLayout, Autocomplete, Avatar, BREAKPOINTS, Badge, BottomNavigation, BottomNavigationSpacer, BottomSheet, BottomSheetActions, BottomSheetContent, BottomSheetHeader, Box, Breadcrumbs, Button, ButtonGroup, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CardView, Carousel, Checkbox, CheckboxList, Chip, ChipGroup, Collapsible, ColorPicker, Combobox, ComingSoon, CommandPalette, CompactStat, ConfirmDialog, ContextMenu, ControlBar, CurrencyDisplay, CurrencyInput, Dashboard, DashboardContent, DashboardHeader, DataGrid, DataTable, DataTableCardView, DateDisplay, DatePicker, DateRangePicker, DateTimePicker, DesktopOnly, Drawer, DrawerFooter, DropZone, Dropdown, DropdownTrigger, EmptyState, ErrorBoundary, ExpandablePanel, ExpandablePanelContainer, ExpandablePanelSpacer, ExpandableRowButton, ExpandableToolbar, ExpandedRowEditForm, ExportButton, FORMULA_CATEGORIES, FORMULA_DEFINITIONS, FORMULA_NAMES, FieldArray, FileUpload, FilterBar, FilterControls, FilterStatusBanner, FloatingActionButton, Form, FormContext, FormControl, FormWizard, Grid, GridItem, Hide, HorizontalScroll, HoverCard, InfiniteScroll, Input, KanbanBoard, Layout, Loading, LoadingOverlay, Logo, MarkdownEditor, MaskedInput, Menu, MenuDivider, MobileHeader, MobileHeaderSpacer, MobileLayout, MobileOnly, MobileProvider, Modal, ModalFooter, MultiSelect, NotificationBanner, NotificationBar, NotificationBell, NotificationIndicator, NumberInput, Page, PageHeader, PageLayout, PageNavigation, Pagination, PasswordInput, Popover, Progress, PullToRefresh, QueryTransparency, RadioGroup, Rating, Responsive, RichTextEditor, SearchBar, SearchableList, Select, Separator, Show, Sidebar, SidebarGroup, Skeleton, SkeletonCard$1 as SkeletonCard, SkeletonTable, Slider, Spreadsheet, SpreadsheetReport, Stack, StatCard, StatItem, StatsCardGrid, StatsGrid, StatusBadge, StatusBar, StepIndicator, Stepper, SwipeActions, SwipeableCard, Switch, Tabs, TabsContent, TabsList, TabsRoot, TabsTrigger, Text, Textarea, ThemeToggle, TimePicker, Timeline, TimezoneSelector, Toast, ToastContainer, Tooltip, Transfer, TreeView, TwoColumnContent, UserProfileButton, addErrorMessage, addInfoMessage, addSuccessMessage, addWarningMessage, calculateColumnWidth, createActionsSection, createFiltersSection, createMultiSheetExcel, createPageControlsSection, createQueryDetailsSection, exportDataTableToExcel, exportToExcel, formatStatisticValue, formatStatistics, getFormula, getFormulasByCategory, getLocalTimezone, isValidTimezone, loadColumnOrder, loadColumnWidths, reorderArray, saveColumnOrder, saveColumnWidths, searchFormulas, statusManager, useBreadcrumbReset, useBreakpoint, useBreakpointValue, useColumnReorder, useColumnResize, useCommandPalette, useConfirmDialog, useFABScroll, useFormContext, useIsDesktop, useIsMobile, useIsTablet, useIsTouchDevice, useMediaQuery, useMobileContext, useOrientation, usePrefersMobile, useResponsiveCallback, useSafeAreaInsets, useViewportSize, withMobileContext };
58768
+ export { Accordion, ActionBar, ActionBarCenter, ActionBarLeft, ActionBarRight, ActionButton, AdminModal, Alert, AlertDialog, AppLayout, Autocomplete, Avatar, BREAKPOINTS, Badge, BottomNavigation, BottomNavigationSpacer, BottomSheet, BottomSheetActions, BottomSheetContent, BottomSheetHeader, Box, Breadcrumbs, Button, ButtonGroup, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CardView, Carousel, Checkbox, CheckboxList, Chip, ChipGroup, Collapsible, ColorPicker, Combobox, ComingSoon, CommandPalette, CompactStat, ConfirmDialog, ContextMenu, ControlBar, CurrencyDisplay, CurrencyInput, Dashboard, DashboardContent, DashboardHeader, DataGrid, DataTable, DataTableCardView, DateDisplay, DatePicker, DateRangePicker, DateTimePicker, DesktopOnly, Drawer, DrawerFooter, DropZone, Dropdown, DropdownTrigger, EmptyState, ErrorBoundary, ExpandablePanel, ExpandablePanelContainer, ExpandablePanelSpacer, ExpandableRowButton, ExpandableToolbar, ExpandedRowEditForm, ExportButton, FORMULA_CATEGORIES, FORMULA_DEFINITIONS, FORMULA_NAMES, FieldArray, FileUpload, FilterBar, FilterControls, FilterStatusBanner, FloatingActionButton, Form, FormContext, FormControl, FormWizard, Grid, GridItem, Hide, HorizontalScroll, HoverCard, InfiniteScroll, Input, KanbanBoard, Layout, Loading, LoadingOverlay, Logo, MarkdownEditor, MaskedInput, Menu, MenuDivider, MobileHeader, MobileHeaderSpacer, MobileLayout, MobileOnly, MobileProvider, Modal, ModalFooter, MultiSelect, NotificationBanner, NotificationBar, NotificationBell, NotificationIndicator, NumberInput, Page, PageHeader, PageLayout, PageNavigation, Pagination, PasswordInput, Popover, Progress, PullToRefresh, QueryTransparency, RadioGroup, Rating, Responsive, RichTextEditor, SearchBar, SearchableList, Select, Separator, Show, Sidebar, SidebarGroup, Skeleton, SkeletonCard$1 as SkeletonCard, SkeletonTable, Slider, Spreadsheet, SpreadsheetReport, Stack, StatCard, StatItem, StatsCardGrid, StatsGrid, StatusBadge, StatusBar, StepIndicator, Stepper, SwipeActions, SwipeableCard, SwipeableListItem, Switch, Tabs, TabsContent, TabsList, TabsRoot, TabsTrigger, Text, Textarea, ThemeToggle, TimePicker, Timeline, TimezoneSelector, Toast, ToastContainer, Tooltip, Transfer, TreeView, TwoColumnContent, UserProfileButton, addErrorMessage, addInfoMessage, addSuccessMessage, addWarningMessage, calculateColumnWidth, createActionsSection, createFiltersSection, createMultiSheetExcel, createPageControlsSection, createQueryDetailsSection, exportDataTableToExcel, exportToExcel, formatStatisticValue, formatStatistics, getFormula, getFormulasByCategory, getLocalTimezone, isValidTimezone, loadColumnOrder, loadColumnWidths, reorderArray, saveColumnOrder, saveColumnWidths, searchFormulas, statusManager, useBreadcrumbReset, useBreakpoint, useBreakpointValue, useColumnReorder, useColumnResize, useCommandPalette, useConfirmDialog, useFABScroll, useFormContext, useIsDesktop, useIsMobile, useIsTablet, useIsTouchDevice, useMediaQuery, useMobileContext, useOrientation, usePrefersMobile, useResponsiveCallback, useSafeAreaInsets, useViewportSize, withMobileContext };
58480
58769
  //# sourceMappingURL=index.esm.js.map