@mieweb/ui 0.10.0-dev.8 → 0.10.0-dev.9

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 (38) hide show
  1. package/dist/{chunk-7G3ZIYFY.js → chunk-4A3W4TQF.js} +15 -2
  2. package/dist/chunk-4A3W4TQF.js.map +1 -0
  3. package/dist/{chunk-WNAA6CLE.cjs → chunk-AR7AKDM2.cjs} +2 -2
  4. package/dist/{chunk-WNAA6CLE.cjs.map → chunk-AR7AKDM2.cjs.map} +1 -1
  5. package/dist/{chunk-EZSSESEU.cjs → chunk-ASSDGS4F.cjs} +15 -2
  6. package/dist/chunk-ASSDGS4F.cjs.map +1 -0
  7. package/dist/{chunk-JHULS3EC.js → chunk-AWJBOND5.js} +2 -2
  8. package/dist/{chunk-JHULS3EC.js.map → chunk-AWJBOND5.js.map} +1 -1
  9. package/dist/chunk-BM35CACB.js +148 -0
  10. package/dist/chunk-BM35CACB.js.map +1 -0
  11. package/dist/{chunk-WIAQQNFU.cjs → chunk-FS4VZUFV.cjs} +31 -2
  12. package/dist/chunk-FS4VZUFV.cjs.map +1 -0
  13. package/dist/{chunk-22CYDCXA.js → chunk-HACNIFO3.js} +31 -3
  14. package/dist/chunk-HACNIFO3.js.map +1 -0
  15. package/dist/chunk-VPTASZ2O.cjs +171 -0
  16. package/dist/chunk-VPTASZ2O.cjs.map +1 -0
  17. package/dist/components/SuperChat/index.cjs +261 -112
  18. package/dist/components/SuperChat/index.cjs.map +1 -1
  19. package/dist/components/SuperChat/index.js +255 -106
  20. package/dist/components/SuperChat/index.js.map +1 -1
  21. package/dist/hooks/index.cjs +22 -13
  22. package/dist/hooks/index.d.cts +101 -1
  23. package/dist/hooks/index.d.ts +101 -1
  24. package/dist/hooks/index.js +2 -1
  25. package/dist/index.cjs +193 -70
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.cts +1 -1
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.js +146 -30
  30. package/dist/index.js.map +1 -1
  31. package/dist/styles.css +1 -1
  32. package/dist/tailwind-preset.cjs +4 -4
  33. package/dist/tailwind-preset.js +1 -1
  34. package/package.json +1 -1
  35. package/dist/chunk-22CYDCXA.js.map +0 -1
  36. package/dist/chunk-7G3ZIYFY.js.map +0 -1
  37. package/dist/chunk-EZSSESEU.cjs.map +0 -1
  38. package/dist/chunk-WIAQQNFU.cjs.map +0 -1
@@ -1,8 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkWNAA6CLE_cjs = require('../chunk-WNAA6CLE.cjs');
3
+ var chunkAR7AKDM2_cjs = require('../chunk-AR7AKDM2.cjs');
4
4
  var chunkIXFC7LK2_cjs = require('../chunk-IXFC7LK2.cjs');
5
5
  var chunk2O7D6F67_cjs = require('../chunk-2O7D6F67.cjs');
6
+ var chunkVPTASZ2O_cjs = require('../chunk-VPTASZ2O.cjs');
6
7
  var chunk7IKLGH3Z_cjs = require('../chunk-7IKLGH3Z.cjs');
7
8
  var chunkNPKPCYAT_cjs = require('../chunk-NPKPCYAT.cjs');
8
9
  require('../chunk-NUFUV43P.cjs');
@@ -21,51 +22,51 @@ require('../chunk-EUAMEVVI.cjs');
21
22
 
22
23
  Object.defineProperty(exports, "RTL_LOCALES", {
23
24
  enumerable: true,
24
- get: function () { return chunkWNAA6CLE_cjs.RTL_LOCALES; }
25
+ get: function () { return chunkAR7AKDM2_cjs.RTL_LOCALES; }
25
26
  });
26
27
  Object.defineProperty(exports, "isRtlLocale", {
27
28
  enumerable: true,
28
- get: function () { return chunkWNAA6CLE_cjs.isRtlLocale; }
29
+ get: function () { return chunkAR7AKDM2_cjs.isRtlLocale; }
29
30
  });
30
31
  Object.defineProperty(exports, "useCommandK", {
31
32
  enumerable: true,
32
- get: function () { return chunkWNAA6CLE_cjs.useCommandK; }
33
+ get: function () { return chunkAR7AKDM2_cjs.useCommandK; }
33
34
  });
34
35
  Object.defineProperty(exports, "useDirection", {
35
36
  enumerable: true,
36
- get: function () { return chunkWNAA6CLE_cjs.useDirection; }
37
+ get: function () { return chunkAR7AKDM2_cjs.useDirection; }
37
38
  });
38
39
  Object.defineProperty(exports, "useIsDesktop", {
39
40
  enumerable: true,
40
- get: function () { return chunkWNAA6CLE_cjs.useIsDesktop; }
41
+ get: function () { return chunkAR7AKDM2_cjs.useIsDesktop; }
41
42
  });
42
43
  Object.defineProperty(exports, "useIsLargeDesktop", {
43
44
  enumerable: true,
44
- get: function () { return chunkWNAA6CLE_cjs.useIsLargeDesktop; }
45
+ get: function () { return chunkAR7AKDM2_cjs.useIsLargeDesktop; }
45
46
  });
46
47
  Object.defineProperty(exports, "useIsMobile", {
47
48
  enumerable: true,
48
- get: function () { return chunkWNAA6CLE_cjs.useIsMobile; }
49
+ get: function () { return chunkAR7AKDM2_cjs.useIsMobile; }
49
50
  });
50
51
  Object.defineProperty(exports, "useIsMobileOrTablet", {
51
52
  enumerable: true,
52
- get: function () { return chunkWNAA6CLE_cjs.useIsMobileOrTablet; }
53
+ get: function () { return chunkAR7AKDM2_cjs.useIsMobileOrTablet; }
53
54
  });
54
55
  Object.defineProperty(exports, "useIsSmallTablet", {
55
56
  enumerable: true,
56
- get: function () { return chunkWNAA6CLE_cjs.useIsSmallTablet; }
57
+ get: function () { return chunkAR7AKDM2_cjs.useIsSmallTablet; }
57
58
  });
58
59
  Object.defineProperty(exports, "useIsTablet", {
59
60
  enumerable: true,
60
- get: function () { return chunkWNAA6CLE_cjs.useIsTablet; }
61
+ get: function () { return chunkAR7AKDM2_cjs.useIsTablet; }
61
62
  });
62
63
  Object.defineProperty(exports, "useKeyboardShortcut", {
63
64
  enumerable: true,
64
- get: function () { return chunkWNAA6CLE_cjs.useKeyboardShortcut; }
65
+ get: function () { return chunkAR7AKDM2_cjs.useKeyboardShortcut; }
65
66
  });
66
67
  Object.defineProperty(exports, "useMediaQuery", {
67
68
  enumerable: true,
68
- get: function () { return chunkWNAA6CLE_cjs.useMediaQuery; }
69
+ get: function () { return chunkAR7AKDM2_cjs.useMediaQuery; }
69
70
  });
70
71
  Object.defineProperty(exports, "useYouTubeHoverPreview", {
71
72
  enumerable: true,
@@ -75,6 +76,14 @@ Object.defineProperty(exports, "useTheme", {
75
76
  enumerable: true,
76
77
  get: function () { return chunk2O7D6F67_cjs.useTheme; }
77
78
  });
79
+ Object.defineProperty(exports, "useStickToBottom", {
80
+ enumerable: true,
81
+ get: function () { return chunkVPTASZ2O_cjs.useStickToBottom; }
82
+ });
83
+ Object.defineProperty(exports, "useStreamEndedBelowFold", {
84
+ enumerable: true,
85
+ get: function () { return chunkVPTASZ2O_cjs.useStreamEndedBelowFold; }
86
+ });
78
87
  Object.defineProperty(exports, "useScrollSpy", {
79
88
  enumerable: true,
80
89
  get: function () { return chunk7IKLGH3Z_cjs.useScrollSpy; }
@@ -319,6 +319,106 @@ declare function dragIndicatorClasses(drag: Pick<UseDragReorderReturn, 'dragging
319
319
  */
320
320
  declare function useLiveAnnouncement(): [string, (message: string) => void];
321
321
 
322
+ /**
323
+ * Options for {@link useStickToBottom}.
324
+ */
325
+ interface UseStickToBottomOptions {
326
+ /**
327
+ * Distance from the bottom (px) within which the user still counts as "at
328
+ * the bottom" — small offsets from rounding or momentum scrolling shouldn't
329
+ * break pinning.
330
+ */
331
+ threshold?: number;
332
+ /**
333
+ * Disable all behavior (listeners and observers detach). Useful when the
334
+ * scroll container anchors somewhere other than the bottom (e.g. a
335
+ * newest-first feed).
336
+ */
337
+ disabled?: boolean;
338
+ }
339
+ interface UseStickToBottomReturn {
340
+ /** Attach to the scrollable container. */
341
+ containerRef: React.RefObject<HTMLDivElement | null>;
342
+ /**
343
+ * Attach to the element wrapping the container's content. Its growth (e.g.
344
+ * a streaming message) re-pins the scroll while the user is at the bottom.
345
+ */
346
+ contentRef: React.RefObject<HTMLDivElement | null>;
347
+ /** Whether the user is currently at (or within `threshold` of) the bottom. */
348
+ isAtBottom: boolean;
349
+ /** Scroll to the bottom and resume pinning. */
350
+ scrollToBottom: (behavior?: ScrollBehavior) => void;
351
+ /**
352
+ * Scroll so `target`'s top aligns with the viewport top and enter “reading”
353
+ * mode: content growing past the fold no longer auto-follows, so the reader
354
+ * consumes the response at their own pace (the ChatGPT/Claude send UX).
355
+ * Following resumes when they explicitly return to the bottom — a
356
+ * jump-to-bottom click (`scrollToBottom`) or scrolling there by hand.
357
+ */
358
+ anchorToTurnStart: (target: HTMLElement, behavior?: ScrollBehavior) => void;
359
+ /**
360
+ * Scroll to the bottom only while actually following (at the bottom and not
361
+ * in reading mode). Returns whether it scrolled — hosts use this to decide
362
+ * between following an appended message and raising a “new messages” hint.
363
+ */
364
+ followIfPinned: (behavior?: ScrollBehavior) => boolean;
365
+ /**
366
+ * Hold the current position: enter reading mode without scrolling, so an
367
+ * incoming stream fills below the fold instead of pushing the view up.
368
+ * Call right after a streaming message appends (optionally after revealing
369
+ * its first line with `followIfPinned`). Following resumes exactly as after
370
+ * `anchorToTurnStart`: an explicit `scrollToBottom` or the reader returning
371
+ * to the bottom by hand.
372
+ */
373
+ stopFollowing: () => void;
374
+ }
375
+ /**
376
+ * Keeps a scroll container pinned to its bottom edge while the user is there,
377
+ * and — crucially — leaves the scroll position alone once they scroll up.
378
+ *
379
+ * Designed for chat threads with streaming responses:
380
+ * - While the user is at the bottom, content growth (new tokens, new
381
+ * messages) and container resizes (on-screen keyboard, growing composer)
382
+ * keep the newest content in view via a `ResizeObserver` on both the
383
+ * content and the container.
384
+ * - Once the user scrolls up, nothing moves until they return to the bottom
385
+ * themselves or the host calls `scrollToBottom` (e.g. a jump-to-bottom
386
+ * button, or an outgoing message from the local user).
387
+ *
388
+ * The hook only pins; *when* to force a scroll (own message sent, thread
389
+ * switched) stays a host decision through `scrollToBottom`,
390
+ * `anchorToTurnStart` (ChatGPT-style: scroll a fresh turn to the viewport top
391
+ * and pause following while the reader digests the reply), and
392
+ * `followIfPinned` (follow an append only while actually at the bottom).
393
+ *
394
+ * @example
395
+ * ```tsx
396
+ * const { containerRef, contentRef, isAtBottom, scrollToBottom } =
397
+ * useStickToBottom();
398
+ * return (
399
+ * <div className="relative min-h-0 flex-1">
400
+ * <div ref={containerRef} className="h-full overflow-y-auto">
401
+ * <div ref={contentRef}>{rows}</div>
402
+ * </div>
403
+ * {!isAtBottom && <JumpToBottom onClick={() => scrollToBottom('smooth')} />}
404
+ * </div>
405
+ * );
406
+ * ```
407
+ */
408
+ declare function useStickToBottom({ threshold, disabled, }?: UseStickToBottomOptions): UseStickToBottomReturn;
409
+ /**
410
+ * Companion to {@link useStickToBottom}: fires `onEnded` when the newest
411
+ * message finishes streaming while the reader is away from the bottom — the
412
+ * end of the reply landed below the fold, so the jump-to-bottom button should
413
+ * upgrade to its “new messages” hint. When the whole reply fit above the fold
414
+ * (the reader is still at the bottom), `onEndedAtBottom` fires instead so the
415
+ * host can exit the stream's hold and resume following (`scrollToBottom`).
416
+ */
417
+ declare function useStreamEndedBelowFold(newest: {
418
+ id: string;
419
+ status?: string;
420
+ } | undefined, isAtBottom: boolean, onEnded: () => void, onEndedAtBottom?: () => void): void;
421
+
322
422
  type HoverPreviewState = 'idle' | 'loading' | 'playing';
323
423
  interface UseYouTubeHoverPreviewOptions {
324
424
  /** Hover dwell before the player mounts. Default 600ms. */
@@ -444,4 +544,4 @@ interface UseMediaTransportReturn {
444
544
  */
445
545
  declare function useMediaTransport(options?: UseMediaTransportOptions): UseMediaTransportReturn;
446
546
 
447
- export { type Direction, type DragOverState, type HoverPreviewState, type KeyboardShortcutOptions, type MediaTransportState, RTL_LOCALES, type UseDragReorderOptions, type UseDragReorderReturn, type UseMediaTransportOptions, type UseMediaTransportReturn, type UseScrollSpyOptions, type UseScrollSpyReturn, type UseYouTubeHoverPreviewOptions, type UseYouTubeHoverPreviewReturn, dragIndicatorClasses, isDarkMode, isRtlLocale, reorderIds, useClickOutside, useCommandK, useDirection, useDragReorder, useEscapeKey, useFocusTrap, useIsDarkMode, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useLiveAnnouncement, useMediaQuery, useMediaTransport, usePrefersReducedMotion, useScrollSpy, useYouTubeHoverPreview };
547
+ export { type Direction, type DragOverState, type HoverPreviewState, type KeyboardShortcutOptions, type MediaTransportState, RTL_LOCALES, type UseDragReorderOptions, type UseDragReorderReturn, type UseMediaTransportOptions, type UseMediaTransportReturn, type UseScrollSpyOptions, type UseScrollSpyReturn, type UseStickToBottomOptions, type UseStickToBottomReturn, type UseYouTubeHoverPreviewOptions, type UseYouTubeHoverPreviewReturn, dragIndicatorClasses, isDarkMode, isRtlLocale, reorderIds, useClickOutside, useCommandK, useDirection, useDragReorder, useEscapeKey, useFocusTrap, useIsDarkMode, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useLiveAnnouncement, useMediaQuery, useMediaTransport, usePrefersReducedMotion, useScrollSpy, useStickToBottom, useStreamEndedBelowFold, useYouTubeHoverPreview };
@@ -319,6 +319,106 @@ declare function dragIndicatorClasses(drag: Pick<UseDragReorderReturn, 'dragging
319
319
  */
320
320
  declare function useLiveAnnouncement(): [string, (message: string) => void];
321
321
 
322
+ /**
323
+ * Options for {@link useStickToBottom}.
324
+ */
325
+ interface UseStickToBottomOptions {
326
+ /**
327
+ * Distance from the bottom (px) within which the user still counts as "at
328
+ * the bottom" — small offsets from rounding or momentum scrolling shouldn't
329
+ * break pinning.
330
+ */
331
+ threshold?: number;
332
+ /**
333
+ * Disable all behavior (listeners and observers detach). Useful when the
334
+ * scroll container anchors somewhere other than the bottom (e.g. a
335
+ * newest-first feed).
336
+ */
337
+ disabled?: boolean;
338
+ }
339
+ interface UseStickToBottomReturn {
340
+ /** Attach to the scrollable container. */
341
+ containerRef: React.RefObject<HTMLDivElement | null>;
342
+ /**
343
+ * Attach to the element wrapping the container's content. Its growth (e.g.
344
+ * a streaming message) re-pins the scroll while the user is at the bottom.
345
+ */
346
+ contentRef: React.RefObject<HTMLDivElement | null>;
347
+ /** Whether the user is currently at (or within `threshold` of) the bottom. */
348
+ isAtBottom: boolean;
349
+ /** Scroll to the bottom and resume pinning. */
350
+ scrollToBottom: (behavior?: ScrollBehavior) => void;
351
+ /**
352
+ * Scroll so `target`'s top aligns with the viewport top and enter “reading”
353
+ * mode: content growing past the fold no longer auto-follows, so the reader
354
+ * consumes the response at their own pace (the ChatGPT/Claude send UX).
355
+ * Following resumes when they explicitly return to the bottom — a
356
+ * jump-to-bottom click (`scrollToBottom`) or scrolling there by hand.
357
+ */
358
+ anchorToTurnStart: (target: HTMLElement, behavior?: ScrollBehavior) => void;
359
+ /**
360
+ * Scroll to the bottom only while actually following (at the bottom and not
361
+ * in reading mode). Returns whether it scrolled — hosts use this to decide
362
+ * between following an appended message and raising a “new messages” hint.
363
+ */
364
+ followIfPinned: (behavior?: ScrollBehavior) => boolean;
365
+ /**
366
+ * Hold the current position: enter reading mode without scrolling, so an
367
+ * incoming stream fills below the fold instead of pushing the view up.
368
+ * Call right after a streaming message appends (optionally after revealing
369
+ * its first line with `followIfPinned`). Following resumes exactly as after
370
+ * `anchorToTurnStart`: an explicit `scrollToBottom` or the reader returning
371
+ * to the bottom by hand.
372
+ */
373
+ stopFollowing: () => void;
374
+ }
375
+ /**
376
+ * Keeps a scroll container pinned to its bottom edge while the user is there,
377
+ * and — crucially — leaves the scroll position alone once they scroll up.
378
+ *
379
+ * Designed for chat threads with streaming responses:
380
+ * - While the user is at the bottom, content growth (new tokens, new
381
+ * messages) and container resizes (on-screen keyboard, growing composer)
382
+ * keep the newest content in view via a `ResizeObserver` on both the
383
+ * content and the container.
384
+ * - Once the user scrolls up, nothing moves until they return to the bottom
385
+ * themselves or the host calls `scrollToBottom` (e.g. a jump-to-bottom
386
+ * button, or an outgoing message from the local user).
387
+ *
388
+ * The hook only pins; *when* to force a scroll (own message sent, thread
389
+ * switched) stays a host decision through `scrollToBottom`,
390
+ * `anchorToTurnStart` (ChatGPT-style: scroll a fresh turn to the viewport top
391
+ * and pause following while the reader digests the reply), and
392
+ * `followIfPinned` (follow an append only while actually at the bottom).
393
+ *
394
+ * @example
395
+ * ```tsx
396
+ * const { containerRef, contentRef, isAtBottom, scrollToBottom } =
397
+ * useStickToBottom();
398
+ * return (
399
+ * <div className="relative min-h-0 flex-1">
400
+ * <div ref={containerRef} className="h-full overflow-y-auto">
401
+ * <div ref={contentRef}>{rows}</div>
402
+ * </div>
403
+ * {!isAtBottom && <JumpToBottom onClick={() => scrollToBottom('smooth')} />}
404
+ * </div>
405
+ * );
406
+ * ```
407
+ */
408
+ declare function useStickToBottom({ threshold, disabled, }?: UseStickToBottomOptions): UseStickToBottomReturn;
409
+ /**
410
+ * Companion to {@link useStickToBottom}: fires `onEnded` when the newest
411
+ * message finishes streaming while the reader is away from the bottom — the
412
+ * end of the reply landed below the fold, so the jump-to-bottom button should
413
+ * upgrade to its “new messages” hint. When the whole reply fit above the fold
414
+ * (the reader is still at the bottom), `onEndedAtBottom` fires instead so the
415
+ * host can exit the stream's hold and resume following (`scrollToBottom`).
416
+ */
417
+ declare function useStreamEndedBelowFold(newest: {
418
+ id: string;
419
+ status?: string;
420
+ } | undefined, isAtBottom: boolean, onEnded: () => void, onEndedAtBottom?: () => void): void;
421
+
322
422
  type HoverPreviewState = 'idle' | 'loading' | 'playing';
323
423
  interface UseYouTubeHoverPreviewOptions {
324
424
  /** Hover dwell before the player mounts. Default 600ms. */
@@ -444,4 +544,4 @@ interface UseMediaTransportReturn {
444
544
  */
445
545
  declare function useMediaTransport(options?: UseMediaTransportOptions): UseMediaTransportReturn;
446
546
 
447
- export { type Direction, type DragOverState, type HoverPreviewState, type KeyboardShortcutOptions, type MediaTransportState, RTL_LOCALES, type UseDragReorderOptions, type UseDragReorderReturn, type UseMediaTransportOptions, type UseMediaTransportReturn, type UseScrollSpyOptions, type UseScrollSpyReturn, type UseYouTubeHoverPreviewOptions, type UseYouTubeHoverPreviewReturn, dragIndicatorClasses, isDarkMode, isRtlLocale, reorderIds, useClickOutside, useCommandK, useDirection, useDragReorder, useEscapeKey, useFocusTrap, useIsDarkMode, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useLiveAnnouncement, useMediaQuery, useMediaTransport, usePrefersReducedMotion, useScrollSpy, useYouTubeHoverPreview };
547
+ export { type Direction, type DragOverState, type HoverPreviewState, type KeyboardShortcutOptions, type MediaTransportState, RTL_LOCALES, type UseDragReorderOptions, type UseDragReorderReturn, type UseMediaTransportOptions, type UseMediaTransportReturn, type UseScrollSpyOptions, type UseScrollSpyReturn, type UseStickToBottomOptions, type UseStickToBottomReturn, type UseYouTubeHoverPreviewOptions, type UseYouTubeHoverPreviewReturn, dragIndicatorClasses, isDarkMode, isRtlLocale, reorderIds, useClickOutside, useCommandK, useDirection, useDragReorder, useEscapeKey, useFocusTrap, useIsDarkMode, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useLiveAnnouncement, useMediaQuery, useMediaTransport, usePrefersReducedMotion, useScrollSpy, useStickToBottom, useStreamEndedBelowFold, useYouTubeHoverPreview };
@@ -1,6 +1,7 @@
1
- export { RTL_LOCALES, isRtlLocale, useCommandK, useDirection, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useMediaQuery } from '../chunk-JHULS3EC.js';
1
+ export { RTL_LOCALES, isRtlLocale, useCommandK, useDirection, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useMediaQuery } from '../chunk-AWJBOND5.js';
2
2
  export { useYouTubeHoverPreview } from '../chunk-POWS35OT.js';
3
3
  export { useTheme } from '../chunk-KJZNEVYM.js';
4
+ export { useStickToBottom, useStreamEndedBelowFold } from '../chunk-BM35CACB.js';
4
5
  export { useScrollSpy } from '../chunk-WBGUYSWY.js';
5
6
  export { DEFAULT_FILLER_WORDS, DEFAULT_MIN_SILENCE_MS, DEFAULT_NL_SILENCE_MS, buildPlaybackSegments, getSpeedAtIndex, initEditableWords, insertSilences, useTranscriptEdits } from '../chunk-UUI7WXI5.js';
6
7
  import '../chunk-6CGM5H4J.js';