@memobit/libs 1.0.62 → 1.0.63

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.d.ts CHANGED
@@ -13,6 +13,7 @@ import { ReactElement } from 'react';
13
13
  import { ReactNode } from 'react';
14
14
  import { ReactPortal } from 'react';
15
15
  import { RefAttributes } from 'react';
16
+ import { TouchEvent as TouchEvent_2 } from 'react';
16
17
 
17
18
  export declare const Accordion: default_2.FC<AccordionProps>;
18
19
 
@@ -73,6 +74,32 @@ export declare interface AnalogClockProps {
73
74
  className?: string;
74
75
  }
75
76
 
77
+ export declare const AngleSlider: FC<AngleSliderProps>;
78
+
79
+ export declare interface AngleSliderProps {
80
+ disabled?: boolean;
81
+ /** Text under the dial. Replaced by the degree readout when `showValue` is on. */
82
+ label?: string;
83
+ /** Highest angle the dial accepts, in degrees. Defaults to a full turn. */
84
+ max?: number;
85
+ /** Lowest angle the dial accepts, in degrees. */
86
+ min?: number;
87
+ onChange: (value: number) => void;
88
+ /** Diameter in pixels. */
89
+ size?: number;
90
+ /** Rounding applied to every change, in degrees. */
91
+ step?: number;
92
+ /** Draws a tick every N degrees. `0` turns the ticks off. */
93
+ tickStep?: number;
94
+ /** Degrees moved per arrow key press. Defaults to `step`. */
95
+ keyboardStep?: number;
96
+ showValue?: boolean;
97
+ value: number;
98
+ variant?: AngleSliderVariant;
99
+ }
100
+
101
+ export declare type AngleSliderVariant = 'accent' | 'info' | 'success' | 'warning' | 'danger';
102
+
76
103
  export declare const APP_DATE_FORMAT = "DD MMM YYYY";
77
104
 
78
105
  export declare const APP_DATE_TIME_FORMAT = "DD MMM YYYY HH:mm";
@@ -187,6 +214,35 @@ export declare interface BannerProps {
187
214
 
188
215
  export declare type BannerVariant = 'default' | 'success' | 'info' | 'warning' | 'danger';
189
216
 
217
+ export declare const Blockquote: FC<BlockquoteProps>;
218
+
219
+ export declare type BlockquoteAppearance = 'bar' | 'card' | 'plain' | 'pull';
220
+
221
+ export declare interface BlockquoteProps {
222
+ /** Centres a `pull` quote; the other appearances read better left-aligned. */
223
+ align?: 'left' | 'center';
224
+ /** How the quote is framed: a left rule, a filled card, bare text, or a large pull quote. */
225
+ appearance?: BlockquoteAppearance;
226
+ /** Who said it. */
227
+ author?: string;
228
+ children: ReactNode;
229
+ className?: string;
230
+ /** Turns the source into a link. */
231
+ href?: string;
232
+ /** Small icon before the quote — handy for flagging a note or a warning. */
233
+ icon?: IconName;
234
+ /** Draws a large decorative quote glyph behind the text. */
235
+ showQuoteMark?: boolean;
236
+ size?: BlockquoteSize;
237
+ /** Where it came from: a book, an article, a ticket. Shown after the author. */
238
+ source?: string;
239
+ variant?: BlockquoteVariant;
240
+ }
241
+
242
+ export declare type BlockquoteSize = 'sm' | 'md' | 'lg';
243
+
244
+ export declare type BlockquoteVariant = 'default' | 'accent' | 'info' | 'success' | 'warning' | 'danger';
245
+
190
246
  export declare const BMI: default_2.FC<BMIProps>;
191
247
 
192
248
  declare interface BMIProps {
@@ -304,6 +360,12 @@ export declare const calculateTimelineMarkers: <T extends TimelineMarkersItem>(i
304
360
 
305
361
  export declare const Calendar: default_2.FC<CalendarProps>;
306
362
 
363
+ /** Half-open [start, end): with start 9 and end 18, 17:00 is active and 18:00 is not. */
364
+ export declare interface CalendarActiveHours {
365
+ start: number;
366
+ end: number;
367
+ }
368
+
307
369
  export declare interface CalendarDateRange {
308
370
  start: Date;
309
371
  end: Date;
@@ -439,6 +501,8 @@ export declare type ChipSize = 'xsmall' | 'small' | 'medium' | 'large';
439
501
 
440
502
  export declare type ChipVariant = 'plain' | 'default' | 'success' | 'info' | 'warning' | 'danger';
441
503
 
504
+ export declare const Col: FC<ColProps>;
505
+
442
506
  export declare const CollapsibleSection: default_2.FC<CollapsibleSectionProps>;
443
507
 
444
508
  declare interface CollapsibleSectionProps {
@@ -468,6 +532,20 @@ export declare interface ColorPickerProps {
468
532
  onChange?: (hex: string) => void;
469
533
  }
470
534
 
535
+ export declare interface ColProps {
536
+ children: ReactNode;
537
+ className?: string;
538
+ /** Column count this cell occupies on desktop. */
539
+ span?: ColSpan;
540
+ /** Column count on mobile (<= 768px). Defaults to filling the row. */
541
+ spanMobile?: ColSpan;
542
+ /** Column count on tablet (769px - 1024px). Defaults to `span`, clamped by the parent. */
543
+ spanTablet?: ColSpan;
544
+ style?: CSSProperties;
545
+ }
546
+
547
+ export declare type ColSpan = GridColumns;
548
+
471
549
  export declare interface CommandItem {
472
550
  id: string;
473
551
  label: string;
@@ -1088,14 +1166,17 @@ export declare interface DateRangePreset {
1088
1166
  }
1089
1167
 
1090
1168
  /**
1091
- * A single day's events, listed in a modal. The month grid can only show a chip or
1092
- * three per cell before it starts hiding them behind "+N more", and the chips are too
1093
- * small to aim at on a phone — this is the way into a busy day.
1169
+ * One day laid out against the clock, in a modal.
1170
+ *
1171
+ * A month cell can only carry a chip or three before the rest hide behind "+N more", and
1172
+ * those chips are too small to aim at on a phone. This is the way into a busy day: events
1173
+ * sit at the hour they actually happen, overlapping ones split into lanes, and the empty
1174
+ * stretches are themselves the target for adding something at that time.
1094
1175
  */
1095
- export declare function DayAgenda<T>({ addLabel, className, date, defaultDurationMinutes, emptyLabel, events, isOpen, onAdd, onClose, onEventClick, renderEvent, }: DayAgendaProps<T>): JSX.Element;
1176
+ export declare function DayAgenda<T>({ activeHours, addLabel, className, date, dayEndHour, dayStartHour, defaultDurationMinutes, emptyLabel, events, hourHeight, isOpen, onAdd, onClose, onDateChange, onEventClick, renderEvent, }: DayAgendaProps<T>): JSX.Element;
1096
1177
 
1097
1178
  export declare interface DayAgendaProps<T = unknown> {
1098
- /** The day to list. Only the date part is read. */
1179
+ /** The day to lay out. Only the date part is read. */
1099
1180
  date: Date;
1100
1181
  /**
1101
1182
  * The same array the calendar is given — the day's events are picked out here, so the
@@ -1104,14 +1185,35 @@ export declare interface DayAgendaProps<T = unknown> {
1104
1185
  events: CalendarEvent<T>[];
1105
1186
  isOpen: boolean;
1106
1187
  onClose: () => void;
1188
+ /**
1189
+ * Enables swiping the grid left or right to step a day. Without it the modal shows
1190
+ * only the day it was opened on — which is fine for a one-off, but on a phone the
1191
+ * neighbouring day is usually the next thing wanted.
1192
+ */
1193
+ onDateChange?: (date: Date) => void;
1107
1194
  onEventClick?: (event: CalendarEvent<T>) => void;
1108
- /** Adds a footer button that hands back the day being listed. */
1195
+ /**
1196
+ * Fires with the hour slot that was clicked, so something added from an empty stretch
1197
+ * starts at the time pointed at rather than at midnight. Also backs the footer button,
1198
+ * which passes the day itself for an entry with no particular time.
1199
+ */
1109
1200
  onAdd?: (date: Date) => void;
1110
1201
  addLabel?: string;
1111
- /** Replaces the title of a row. The time column and colour bar stay. */
1202
+ /** Replaces a chip's contents. */
1112
1203
  renderEvent?: (event: CalendarEvent<T>) => ReactNode;
1113
1204
  emptyLabel?: string;
1114
- /** Assumed length of a timed event with no `end`, used for the row's time range. */
1205
+ /** First and last hour rendered. */
1206
+ dayStartHour?: number;
1207
+ dayEndHour?: number;
1208
+ /**
1209
+ * The hours that matter — working hours, opening hours. Everything outside the band
1210
+ * recedes, so the part of the day worth reading is found without counting rows. It
1211
+ * trims nothing, unlike `dayStartHour`/`dayEndHour`.
1212
+ */
1213
+ activeHours?: CalendarActiveHours;
1214
+ /** Height of one hour row, in pixels. */
1215
+ hourHeight?: number;
1216
+ /** Assumed length of a timed event with no `end`. */
1115
1217
  defaultDurationMinutes?: number;
1116
1218
  className?: string;
1117
1219
  }
@@ -1298,7 +1400,7 @@ declare interface ErrorBoundaryState {
1298
1400
  error: Error | null;
1299
1401
  }
1300
1402
 
1301
- export declare function EventCalendar<T>({ className, date, dayAgenda, dayEndHour, dayStartHour, defaultDurationMinutes, emptyLabel, events, firstDayOfWeek, headerExtra, hourHeight, maxEventsPerDay, onDateChange, onDayClick, onEventClick, onEventDrop, onViewChange, renderEvent, showHeader, showWeekNumbers, view, }: EventCalendarProps<T>): JSX.Element;
1403
+ export declare function EventCalendar<T>({ activeHours, className, date, dayAgenda, dayEndHour, dayStartHour, defaultDurationMinutes, emptyLabel, events, firstDayOfWeek, headerExtra, hourHeight, maxEventsPerDay, onDateChange, onDayClick, onEventClick, onEventDrop, onViewChange, renderEvent, showHeader, showWeekNumbers, swipeNavigation, view, }: EventCalendarProps<T>): JSX.Element;
1302
1404
 
1303
1405
  export declare interface EventCalendarProps<T = unknown> {
1304
1406
  events: CalendarEvent<T>[];
@@ -1309,8 +1411,14 @@ export declare interface EventCalendarProps<T = unknown> {
1309
1411
  date?: Date;
1310
1412
  onDateChange?: (date: Date) => void;
1311
1413
  firstDayOfWeek?: 0 | 1;
1312
- /** Adds the ISO week number: a leading column in month view, a suffix on the week title. */
1414
+ /** Adds a leading ISO week-number column to the month grid. The week view names its own period, so it needs none. */
1313
1415
  showWeekNumbers?: boolean;
1416
+ /**
1417
+ * Swiping the grid left or right pages to the next or previous period — the month in
1418
+ * month view, the week in week view. Touch only, so it costs a desktop nothing. Set
1419
+ * false where a horizontal drag already means something else.
1420
+ */
1421
+ swipeNavigation?: boolean;
1314
1422
  onEventClick?: (event: CalendarEvent<T>) => void;
1315
1423
  /** Fires on the empty part of a day cell (month) or an hour slot (week). */
1316
1424
  onDayClick?: (date: Date) => void;
@@ -1335,6 +1443,13 @@ export declare interface EventCalendarProps<T = unknown> {
1335
1443
  /** First and last hour rendered by the week view. */
1336
1444
  dayStartHour?: number;
1337
1445
  dayEndHour?: number;
1446
+ /**
1447
+ * The hours that matter — working hours, opening hours. Everything outside the band
1448
+ * recedes, so the part of the day worth reading is found without counting rows. Unlike
1449
+ * `dayStartHour`/`dayEndHour` this trims nothing: a 21:00 event still shows, just
1450
+ * against a quieter background. Omit to treat every hour alike.
1451
+ */
1452
+ activeHours?: CalendarActiveHours;
1338
1453
  /** Height of one hour row in the week view, in pixels. */
1339
1454
  hourHeight?: number;
1340
1455
  /** Assumed length of a timed event with no `end`. */
@@ -1382,6 +1497,46 @@ declare interface FloatButtonProps {
1382
1497
  actions: FloatButtonAction[];
1383
1498
  }
1384
1499
 
1500
+ export declare const FloatingWindow: FC<FloatingWindowProps>;
1501
+
1502
+ export declare interface FloatingWindowPosition {
1503
+ x: number;
1504
+ y: number;
1505
+ }
1506
+
1507
+ export declare interface FloatingWindowProps {
1508
+ children: ReactNode;
1509
+ className?: string;
1510
+ /** Escape closes the window. Off by default — a floating window is not modal. */
1511
+ closeOnEscape?: boolean;
1512
+ /** Opening position in viewport pixels. Centred on the viewport when omitted. */
1513
+ defaultPosition?: FloatingWindowPosition;
1514
+ defaultSize?: FloatingWindowSize;
1515
+ /** Pinned strip along the bottom of the window. */
1516
+ footer?: ReactNode;
1517
+ isOpen: boolean;
1518
+ /** Shows the collapse control. */
1519
+ minimizable?: boolean;
1520
+ minHeight?: number;
1521
+ minWidth?: number;
1522
+ onClose: () => void;
1523
+ /** Reports every settled move and resize, for callers that persist the geometry. */
1524
+ onGeometryChange?: (geometry: FloatingWindowPosition & FloatingWindowSize) => void;
1525
+ /** Shows the maximize control and the edge handles. */
1526
+ resizable?: boolean;
1527
+ title?: string;
1528
+ titleIcon?: IconName;
1529
+ usePortal?: boolean;
1530
+ zIndex?: number;
1531
+ }
1532
+
1533
+ export declare type FloatingWindowResizeDirection = 'n' | 's' | 'e' | 'w' | 'ne' | 'nw' | 'se' | 'sw';
1534
+
1535
+ export declare interface FloatingWindowSize {
1536
+ height: number;
1537
+ width: number;
1538
+ }
1539
+
1385
1540
  export declare const foldDiacritics: (input: string) => string;
1386
1541
 
1387
1542
  export declare interface FolderBrowserEntry {
@@ -1488,6 +1643,41 @@ export declare const getThemeConfig: (themeValue: string) => ThemeConfig | undef
1488
1643
 
1489
1644
  export declare const getTodayDateString: () => string;
1490
1645
 
1646
+ export declare const Grid: FC<GridProps>;
1647
+
1648
+ export declare type GridAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline';
1649
+
1650
+ export declare type GridColumns = 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12;
1651
+
1652
+ export declare type GridGap = '0' | '2' | '4' | '6' | '8' | '12' | '16' | '20' | '24' | '32' | '40' | '48';
1653
+
1654
+ export declare type GridJustify = 'start' | 'center' | 'end' | 'space-between' | 'space-around';
1655
+
1656
+ export declare interface GridProps {
1657
+ /** Vertical alignment of the items inside each row. */
1658
+ align?: GridAlign;
1659
+ children: ReactNode;
1660
+ className?: string;
1661
+ /** Columns from the desktop breakpoint up (> 1024px). */
1662
+ cols?: GridColumns;
1663
+ /** Columns on mobile (<= 768px). Defaults to 1 so content stacks. */
1664
+ colsMobile?: GridColumns;
1665
+ /** Columns on tablet (769px - 1024px). Defaults to `cols` capped at 2. */
1666
+ colsTablet?: GridColumns;
1667
+ /** Spacing token used between columns, and between rows unless `rowGap` overrides it. */
1668
+ gap?: GridGap;
1669
+ /** Horizontal distribution of a partially filled row. */
1670
+ justify?: GridJustify;
1671
+ /**
1672
+ * Switches to a fluid track: every child takes at least this many pixels and rows wrap on
1673
+ * their own. `cols` and the responsive overrides are ignored while this is set.
1674
+ */
1675
+ minColWidth?: number;
1676
+ /** Row spacing token, when rows should breathe differently from columns. */
1677
+ rowGap?: GridGap;
1678
+ style?: CSSProperties;
1679
+ }
1680
+
1491
1681
  export declare function highlightText(text: string, searchTerm: string): ReactNode;
1492
1682
 
1493
1683
  /**
@@ -1742,6 +1932,32 @@ declare interface InputPhoneProps {
1742
1932
  value?: string;
1743
1933
  }
1744
1934
 
1935
+ export declare const InputPIN: FC<InputPINProps>;
1936
+
1937
+ export declare interface InputPINProps {
1938
+ autoFocus?: boolean;
1939
+ disabled?: boolean;
1940
+ error?: string;
1941
+ id?: string;
1942
+ label?: string;
1943
+ /** Number of cells. */
1944
+ length?: number;
1945
+ /** Renders a gap after this many cells, the way grouped codes are printed. */
1946
+ groupSize?: number;
1947
+ /** Fired on every edit with the code so far, shorter than `length` while incomplete. */
1948
+ onChange: (value: string) => void;
1949
+ /** Fired once the last cell is filled, with the finished code. */
1950
+ onComplete?: (value: string) => void;
1951
+ /** Masks the characters, for a PIN rather than a one-time code. */
1952
+ secret?: boolean;
1953
+ success?: string;
1954
+ /** `numeric` accepts digits only and asks phones for the number pad. */
1955
+ type?: InputPINType;
1956
+ value: string;
1957
+ }
1958
+
1959
+ export declare type InputPINType = 'numeric' | 'alphanumeric';
1960
+
1745
1961
  export declare const InputSearch: ForwardRefExoticComponent<InputSearchProps & RefAttributes<HTMLInputElement>>;
1746
1962
 
1747
1963
  export declare interface InputSearchProps {
@@ -2323,12 +2539,49 @@ export declare interface RadioProps {
2323
2539
  className?: string;
2324
2540
  }
2325
2541
 
2542
+ export declare const RangeSlider: FC<RangeSliderProps>;
2543
+
2544
+ export declare interface RangeSliderProps {
2545
+ disabled?: boolean;
2546
+ /** Renders each readout and tick label — money, units, dates, whatever the range means. */
2547
+ formatValue?: (value: number) => string;
2548
+ label?: string;
2549
+ max?: number;
2550
+ min?: number;
2551
+ /** Smallest gap the two thumbs may be pushed to. Defaults to one `step`. */
2552
+ minDistance?: number;
2553
+ onChange: (value: RangeSliderValue) => void;
2554
+ /** Fired once when a drag or key press settles — the place to kick off a query. */
2555
+ onChangeEnd?: (value: RangeSliderValue) => void;
2556
+ showValues?: boolean;
2557
+ step?: number;
2558
+ /** Renders a thinner track and smaller thumbs. */
2559
+ thin?: boolean;
2560
+ /** Draws a labelled tick every N units. `0` turns the ticks off. */
2561
+ tickStep?: number;
2562
+ value: RangeSliderValue;
2563
+ variant?: RangeSliderVariant;
2564
+ }
2565
+
2566
+ export declare type RangeSliderValue = [number, number];
2567
+
2568
+ export declare type RangeSliderVariant = 'accent' | 'info' | 'success' | 'warning' | 'danger';
2569
+
2326
2570
  export declare const Rating: FC<RatingProps>;
2327
2571
 
2328
- declare type RatingIconType = 'star' | 'bullet' | 'bar';
2572
+ export declare type RatingFilled = 'full' | 'half' | 'empty';
2573
+
2574
+ export declare type RatingIconType = 'star' | 'bullet' | 'bar' | 'emoji';
2329
2575
 
2330
2576
  declare interface RatingProps {
2331
2577
  align?: 'left' | 'right' | 'space-between';
2578
+ /**
2579
+ * Emoji only: tint the chosen face by where it sits on the scale — red at the sad end,
2580
+ * amber in the middle, green at the happy end — instead of using `variant` throughout.
2581
+ */
2582
+ emojiColorByMood?: boolean;
2583
+ /** Emoji only: pixel size of each face. Faces need more room than a star to stay readable. */
2584
+ emojiSize?: number;
2332
2585
  icon?: RatingIconType;
2333
2586
  maxRate?: number;
2334
2587
  onHover?: (value: number) => void;
@@ -2341,7 +2594,7 @@ declare interface RatingProps {
2341
2594
  variant?: RatingVariant;
2342
2595
  }
2343
2596
 
2344
- declare type RatingVariant = 'success' | 'info' | 'warning' | 'danger';
2597
+ export declare type RatingVariant = 'success' | 'info' | 'warning' | 'danger';
2345
2598
 
2346
2599
  export declare const RichTextEditor: ({ advanced, error, format, id, label, onBlur, onChange, placeholder, required, value, }: RichTextEditorProps) => JSX.Element;
2347
2600
 
@@ -2358,6 +2611,33 @@ declare interface RichTextEditorProps {
2358
2611
  value?: string;
2359
2612
  }
2360
2613
 
2614
+ export declare const RollingNumber: FC<RollingNumberProps>;
2615
+
2616
+ export declare type RollingNumberDirection = 'up' | 'down' | 'none';
2617
+
2618
+ export declare interface RollingNumberProps {
2619
+ className?: string;
2620
+ /** Tint the readout green when the value rose and red when it fell, overriding `variant`. */
2621
+ colorByDirection?: boolean;
2622
+ decimals?: number;
2623
+ decimalSeparator?: string;
2624
+ /** Roll duration in milliseconds. */
2625
+ duration?: number;
2626
+ /** Thousands separator. Pass an empty string to switch grouping off. */
2627
+ groupSeparator?: string;
2628
+ prefix?: string;
2629
+ size?: RollingNumberSize;
2630
+ /** Delay added per digit so the columns land one after another, in milliseconds. */
2631
+ stagger?: number;
2632
+ suffix?: string;
2633
+ value: number;
2634
+ variant?: RollingNumberVariant;
2635
+ }
2636
+
2637
+ export declare type RollingNumberSize = 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | 'xxxl';
2638
+
2639
+ export declare type RollingNumberVariant = 'default' | 'accent' | 'info' | 'success' | 'warning' | 'danger';
2640
+
2361
2641
  export declare interface ScrollInfo {
2362
2642
  scrollTop: number;
2363
2643
  scrollHeight: number;
@@ -2533,6 +2813,37 @@ declare interface SplitPanelProps {
2533
2813
  className?: string;
2534
2814
  }
2535
2815
 
2816
+ export declare const Splitter: FC<SplitterProps>;
2817
+
2818
+ export declare type SplitterOrientation = 'horizontal' | 'vertical';
2819
+
2820
+ export declare interface SplitterPane {
2821
+ content: ReactNode;
2822
+ /** Stable identity for the pane — also used as the React key. */
2823
+ id: string;
2824
+ /** Smallest share this pane may be dragged to, in percent. Defaults to 10. */
2825
+ minSize?: number;
2826
+ /** Starting share of the container, in percent. Omitted panes split what is left evenly. */
2827
+ size?: number;
2828
+ }
2829
+
2830
+ export declare interface SplitterProps {
2831
+ className?: string;
2832
+ /** Dragging a pane below half its minimum snaps it shut instead of stopping at the minimum. */
2833
+ collapsible?: boolean;
2834
+ /** Thickness of the drag handles in pixels. */
2835
+ gutterSize?: number;
2836
+ /** Percent moved per arrow key press on a focused gutter. */
2837
+ keyboardStep?: number;
2838
+ /** Fired with the full list of pane sizes (percent) whenever a drag or key press settles. */
2839
+ onResize?: (sizes: number[]) => void;
2840
+ /** `horizontal` lays the panes out side by side; `vertical` stacks them. */
2841
+ orientation?: SplitterOrientation;
2842
+ panes: SplitterPane[];
2843
+ /** Double-clicking a gutter restores the sizes the Splitter started with. */
2844
+ resetOnDoubleClick?: boolean;
2845
+ }
2846
+
2536
2847
  export declare const StackedBar: ({ animated, height, normalize, orientation, segments, separators, showLabels, showPercentage, thin, width, }: StackedBarProps) => JSX.Element;
2537
2848
 
2538
2849
  export declare type StackedBarOrientation = 'horizontal' | 'vertical';
@@ -2634,6 +2945,12 @@ declare interface SuggestionsListProps {
2634
2945
  onRowClick?: (item: SuggestionsListElement) => void;
2635
2946
  }
2636
2947
 
2948
+ export declare interface SwipeHandlers {
2949
+ onTouchStart: (event: TouchEvent_2) => void;
2950
+ onTouchEnd: (event: TouchEvent_2) => void;
2951
+ onTouchCancel: () => void;
2952
+ }
2953
+
2637
2954
  export declare type Theme = 'amber-meridian' | 'archive-indigo' | 'arctic-blue' | 'asphalt-code' | 'atelier-media' | 'audit-ember' | 'azure-night' | 'blossom-meadow' | 'blueprint-clay' | 'blush-market' | 'brass-chronicle' | 'carbon-velocity' | 'chalk-circuit' | 'chrono-atlas' | 'clinical-aqua' | 'cobalt-pulse' | 'citrus-vital' | 'command-slate' | 'crawler-dusk' | 'crimson-dusk' | 'cyber-forest' | 'dashdarkx' | 'ember-night' | 'emerald-ledger' | 'frost-petal' | 'garden-harvest' | 'gilded-bear' | 'graphite-shell' | 'horizon-amber' | 'horizon-drift' | 'ivory-serif' | 'lavender-mist' | 'light-blue' | 'lumen' | 'luna' | 'mesh-circuit' | 'midnight-atlas' | 'midnight-amber' | 'midnight-folio' | 'mint-meadow' | 'mintone' | 'neon-tokyo' | 'noir-marquee' | 'ocean-breeze' | 'ocean-depths' | 'orbital-night' | 'sandstone' | 'sandy-parchment' | 'screening-room' | 'signal-burst' | 'signal-clarity' | 'slate-focus' | 'slate-bazaar' | 'spectrum-vault' | 'tailwind-vue-dark' | 'terminal-phosphor' | 'terracotta-kitchen' | 'twilight-pulse' | 'vault-guard' | 'velvet-reel' | 'velvet-tome' | 'verdant-pulse' | 'vital-aurora' | 'vital-signal';
2638
2955
 
2639
2956
  export declare const THEME_CONFIGS: ThemeConfig[];
@@ -2983,6 +3300,35 @@ export declare interface TourHudProps {
2983
3300
  className?: string;
2984
3301
  }
2985
3302
 
3303
+ export declare const Transition: FC<TransitionProps>;
3304
+
3305
+ export declare interface TransitionProps {
3306
+ /** Play the enter animation on the very first render too. */
3307
+ appear?: boolean;
3308
+ /** Element rendered around the children. */
3309
+ as?: TransitionTag;
3310
+ children: ReactNode;
3311
+ className?: string;
3312
+ /** Delay before the enter animation starts, in milliseconds. */
3313
+ delay?: number;
3314
+ /** Animation length in milliseconds. Also how long the exit is held before unmounting. */
3315
+ duration?: number;
3316
+ easing?: string;
3317
+ /** Keep the element mounted but hidden instead of removing it once the exit finishes. */
3318
+ keepMounted?: boolean;
3319
+ onEntered?: () => void;
3320
+ onExited?: () => void;
3321
+ /** `true` plays the enter animation; `false` plays the exit animation, then unmounts. */
3322
+ show: boolean;
3323
+ type?: TransitionType;
3324
+ }
3325
+
3326
+ export declare type TransitionStatus = 'unmounted' | 'entering' | 'entered' | 'exiting';
3327
+
3328
+ export declare type TransitionTag = 'div' | 'span' | 'section' | 'li';
3329
+
3330
+ export declare type TransitionType = 'fade' | 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right' | 'scale' | 'collapse';
3331
+
2986
3332
  export declare const Tree: default_2.FC<TreeProps>;
2987
3333
 
2988
3334
  export declare interface TreeNode {
@@ -3071,6 +3417,40 @@ export declare interface User {
3071
3417
 
3072
3418
  export declare const useSidebar: () => SidebarContextValue;
3073
3419
 
3420
+ /**
3421
+ * Turns a touch drag into a direction.
3422
+ *
3423
+ * Touch only, deliberately: a mouse drag on the same element usually already means
3424
+ * something (selecting text, dragging an item), and a phone is where a swipe is the
3425
+ * natural gesture. Nothing is ever `preventDefault`ed, so the element keeps scrolling
3426
+ * normally and a swipe that fails the threshold costs the user nothing.
3427
+ *
3428
+ * Spread the returned handlers onto the element that should respond:
3429
+ *
3430
+ * const swipe = useSwipe({ onSwipeLeft: next, onSwipeRight: previous });
3431
+ * return <div {...swipe}>…</div>;
3432
+ */
3433
+ export declare const useSwipe: ({ enabled, maxDurationMs, onSwipeDown, onSwipeLeft, onSwipeRight, onSwipeUp, restraint, threshold, }: UseSwipeOptions) => SwipeHandlers;
3434
+
3435
+ export declare interface UseSwipeOptions {
3436
+ onSwipeLeft?: () => void;
3437
+ onSwipeRight?: () => void;
3438
+ onSwipeUp?: () => void;
3439
+ onSwipeDown?: () => void;
3440
+ /** Distance along the swipe axis, in px, before it counts as one. */
3441
+ threshold?: number;
3442
+ /**
3443
+ * Allowed drift across the swipe axis, in px. This is what keeps a vertical scroll
3444
+ * inside a calendar grid from registering as a horizontal page turn, so it matters
3445
+ * most when the swiped element scrolls the other way.
3446
+ */
3447
+ restraint?: number;
3448
+ /** A drag slower than this is someone reading, not swiping. */
3449
+ maxDurationMs?: number;
3450
+ /** Set false to detach without changing where the hook is called. */
3451
+ enabled?: boolean;
3452
+ }
3453
+
3074
3454
  export declare const useTheme: () => ThemeContextType;
3075
3455
 
3076
3456
  export declare const useToast: () => ToastContextValue;