@mieweb/ui 0.6.1-dev.168 → 0.6.1-dev.170

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 (95) hide show
  1. package/dist/brands/index.cjs +18 -18
  2. package/dist/brands/index.js +3 -3
  3. package/dist/chunk-3Q2VWPML.cjs +1802 -0
  4. package/dist/chunk-3Q2VWPML.cjs.map +1 -0
  5. package/dist/{chunk-67CEEDAP.cjs → chunk-3YRDZBW6.cjs} +7 -7
  6. package/dist/{chunk-67CEEDAP.cjs.map → chunk-3YRDZBW6.cjs.map} +1 -1
  7. package/dist/{chunk-UVQEHZRF.js → chunk-6VGXX6L6.js} +2 -2
  8. package/dist/{chunk-UVQEHZRF.js.map → chunk-6VGXX6L6.js.map} +1 -1
  9. package/dist/chunk-CH26CHPH.js +1776 -0
  10. package/dist/chunk-CH26CHPH.js.map +1 -0
  11. package/dist/{chunk-TXRQQMG5.js → chunk-CYMZ2QS5.js} +2 -2
  12. package/dist/{chunk-TXRQQMG5.js.map → chunk-CYMZ2QS5.js.map} +1 -1
  13. package/dist/chunk-FGP64Z24.js +131 -0
  14. package/dist/chunk-FGP64Z24.js.map +1 -0
  15. package/dist/chunk-FIWKHLWY.js +197 -0
  16. package/dist/chunk-FIWKHLWY.js.map +1 -0
  17. package/dist/chunk-GLXTVCHN.cjs +4 -0
  18. package/dist/chunk-GLXTVCHN.cjs.map +1 -0
  19. package/dist/chunk-J7KWQJOB.js +14 -0
  20. package/dist/chunk-J7KWQJOB.js.map +1 -0
  21. package/dist/{chunk-NINI4WVS.cjs → chunk-JC6Y3LGF.cjs} +297 -84
  22. package/dist/chunk-JC6Y3LGF.cjs.map +1 -0
  23. package/dist/chunk-JYZW2PZS.cjs +166 -0
  24. package/dist/chunk-JYZW2PZS.cjs.map +1 -0
  25. package/dist/chunk-LIH3IZYK.js +689 -0
  26. package/dist/chunk-LIH3IZYK.js.map +1 -0
  27. package/dist/{chunk-XVF472GT.js → chunk-NSLR3B7K.js} +2 -2
  28. package/dist/{chunk-XVF472GT.js.map → chunk-NSLR3B7K.js.map} +1 -1
  29. package/dist/chunk-NTYGCBCL.js +543 -0
  30. package/dist/chunk-NTYGCBCL.js.map +1 -0
  31. package/dist/chunk-RISZWWEQ.js +3 -0
  32. package/dist/chunk-RISZWWEQ.js.map +1 -0
  33. package/dist/chunk-S7JQ3FV5.cjs +16 -0
  34. package/dist/chunk-S7JQ3FV5.cjs.map +1 -0
  35. package/dist/{chunk-JWTCEWQ4.cjs → chunk-SNEQXSC5.cjs} +2 -2
  36. package/dist/{chunk-JWTCEWQ4.cjs.map → chunk-SNEQXSC5.cjs.map} +1 -1
  37. package/dist/chunk-SQHMGT4W.js +164 -0
  38. package/dist/chunk-SQHMGT4W.js.map +1 -0
  39. package/dist/chunk-UO3KEUYK.cjs +220 -0
  40. package/dist/chunk-UO3KEUYK.cjs.map +1 -0
  41. package/dist/{chunk-HUXOASEB.js → chunk-X763OLF2.js} +4 -4
  42. package/dist/{chunk-HUXOASEB.js.map → chunk-X763OLF2.js.map} +1 -1
  43. package/dist/{chunk-DKGUOMBC.cjs → chunk-X7J45FU5.cjs} +2 -2
  44. package/dist/{chunk-DKGUOMBC.cjs.map → chunk-X7J45FU5.cjs.map} +1 -1
  45. package/dist/chunk-Y4ESBDQ5.cjs +552 -0
  46. package/dist/chunk-Y4ESBDQ5.cjs.map +1 -0
  47. package/dist/{chunk-MJ7YITLN.cjs → chunk-Y65SK5Y2.cjs} +2 -2
  48. package/dist/{chunk-MJ7YITLN.cjs.map → chunk-Y65SK5Y2.cjs.map} +1 -1
  49. package/dist/chunk-YD23ZGRU.cjs +155 -0
  50. package/dist/chunk-YD23ZGRU.cjs.map +1 -0
  51. package/dist/components/DateInput/index.cjs +2 -2
  52. package/dist/components/DateInput/index.d.cts +8 -2
  53. package/dist/components/DateInput/index.d.ts +8 -2
  54. package/dist/components/DateInput/index.js +1 -1
  55. package/dist/components/Markdown/index.cjs +10 -10
  56. package/dist/components/Markdown/index.js +2 -2
  57. package/dist/components/MediaEditor/index.cjs +42 -0
  58. package/dist/components/MediaEditor/index.cjs.map +1 -0
  59. package/dist/components/MediaEditor/index.d.cts +151 -0
  60. package/dist/components/MediaEditor/index.d.ts +151 -0
  61. package/dist/components/MediaEditor/index.js +17 -0
  62. package/dist/components/MediaEditor/index.js.map +1 -0
  63. package/dist/components/MediaPlayer/index.cjs +24 -0
  64. package/dist/components/MediaPlayer/index.cjs.map +1 -0
  65. package/dist/components/MediaPlayer/index.d.cts +71 -0
  66. package/dist/components/MediaPlayer/index.d.ts +71 -0
  67. package/dist/components/MediaPlayer/index.js +7 -0
  68. package/dist/components/MediaPlayer/index.js.map +1 -0
  69. package/dist/components/TranscriptView/index.cjs +21 -0
  70. package/dist/components/TranscriptView/index.cjs.map +1 -0
  71. package/dist/components/TranscriptView/index.d.cts +55 -0
  72. package/dist/components/TranscriptView/index.d.ts +55 -0
  73. package/dist/components/TranscriptView/index.js +4 -0
  74. package/dist/components/TranscriptView/index.js.map +1 -0
  75. package/dist/esheet.cjs +6 -6
  76. package/dist/esheet.js +3 -3
  77. package/dist/hooks/index.cjs +49 -11
  78. package/dist/hooks/index.d.cts +88 -1
  79. package/dist/hooks/index.d.ts +88 -1
  80. package/dist/hooks/index.js +3 -1
  81. package/dist/index.cjs +380 -253
  82. package/dist/index.cjs.map +1 -1
  83. package/dist/index.d.cts +7 -2
  84. package/dist/index.d.ts +7 -2
  85. package/dist/index.js +89 -42
  86. package/dist/index.js.map +1 -1
  87. package/dist/styles.css +1 -1
  88. package/dist/transcript-oaWqY3yr.d.cts +81 -0
  89. package/dist/transcript-oaWqY3yr.d.ts +81 -0
  90. package/dist/useTranscriptEdits-BUylQFg0.d.cts +168 -0
  91. package/dist/useTranscriptEdits-CWYnjbGP.d.ts +168 -0
  92. package/package.json +1 -1
  93. package/dist/chunk-HYEJLKXI.js +0 -476
  94. package/dist/chunk-HYEJLKXI.js.map +0 -1
  95. package/dist/chunk-NINI4WVS.cjs.map +0 -1
@@ -0,0 +1,55 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+ import { T as Transcript } from '../../transcript-oaWqY3yr.js';
5
+ export { E as EditableWord, c as PLAYBACK_SPEEDS, a as PlaybackSegment, P as PlaybackSpeed, d as Speaker, S as SpeedMarker, e as TranscriptSegment, b as TranscriptWord, W as WordType } from '../../transcript-oaWqY3yr.js';
6
+
7
+ type TranscriptGranularity = 'word' | 'segment';
8
+ interface TranscriptViewProps extends VariantProps<typeof transcriptViewVariants> {
9
+ /** The transcript to render */
10
+ transcript: Transcript;
11
+ /**
12
+ * Rendering granularity. Defaults to 'segment' when the transcript has
13
+ * segments, otherwise 'word'.
14
+ */
15
+ granularity?: TranscriptGranularity;
16
+ /** Controlled playback position (ms); the matching word/segment is highlighted */
17
+ currentTimeMs?: number;
18
+ /** Called with the start time (ms) of a clicked word/segment; the host performs the seek/play */
19
+ onSeek?: (timeMs: number) => void;
20
+ /** Auto-scroll the active word/segment into view (default true) */
21
+ followPlayback?: boolean;
22
+ /**
23
+ * Maps Speaker.id to a display label (e.g. Clinician/Patient). Falls back to
24
+ * Speaker.name from transcript.speakers, then the raw id.
25
+ */
26
+ speakerLabels?: Record<string, string>;
27
+ /** Segment mode: merge consecutive same-speaker segments into one row (default false) */
28
+ mergeSameSpeaker?: boolean;
29
+ /** Segment mode: show mm:ss timestamps (default true) */
30
+ showTimestamps?: boolean;
31
+ /** Rendered in a header row (host supplies copy/re-transcribe/remove buttons) */
32
+ actions?: React.ReactNode;
33
+ /** Additional class name */
34
+ className?: string;
35
+ /** Accessible label for the transcript container (default 'Transcript') */
36
+ 'aria-label'?: string;
37
+ }
38
+ declare const transcriptViewVariants: (props?: ({
39
+ variant?: "card" | "plain" | null | undefined;
40
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
41
+ /** Format milliseconds as m:ss (osheet timestamp style) */
42
+ declare function formatTimestampMs(ms: number): string;
43
+ /**
44
+ * Read-only transcript viewer with word-level and segment-level (diarized)
45
+ * rendering modes.
46
+ *
47
+ * Controlled and persistence-agnostic: the host owns playback and passes the
48
+ * position via `currentTimeMs`; clicking a word/segment reports the target
49
+ * time through `onSeek`. Segment mode matches the osheet artifact-viewer row
50
+ * UX (timestamp | speaker | text, click to seek + play). Editing lives in
51
+ * MediaEditor, not here.
52
+ */
53
+ declare const TranscriptView: React.ForwardRefExoticComponent<TranscriptViewProps & React.RefAttributes<HTMLDivElement>>;
54
+
55
+ export { Transcript, type TranscriptGranularity, TranscriptView, type TranscriptViewProps, formatTimestampMs };
@@ -0,0 +1,4 @@
1
+ export { TranscriptView, formatTimestampMs } from '../../chunk-FIWKHLWY.js';
2
+ export { PLAYBACK_SPEEDS } from '../../chunk-J7KWQJOB.js';
3
+ //# sourceMappingURL=index.js.map
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
package/dist/esheet.cjs CHANGED
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunk67CEEDAP_cjs = require('./chunk-67CEEDAP.cjs');
3
+ var chunk3YRDZBW6_cjs = require('./chunk-3YRDZBW6.cjs');
4
4
  require('./chunk-U3ABLVYH.cjs');
5
5
  require('./chunk-RH43XBNV.cjs');
6
6
  require('./chunk-XP6HELVG.cjs');
7
- require('./chunk-FRT6RQND.cjs');
8
7
  require('./chunk-UOOH356R.cjs');
8
+ require('./chunk-FRT6RQND.cjs');
9
9
  require('./chunk-ZHBANUBI.cjs');
10
- require('./chunk-NINI4WVS.cjs');
10
+ require('./chunk-JC6Y3LGF.cjs');
11
11
  require('./chunk-KJPOFUF5.cjs');
12
12
  require('./chunk-MSRU3XBH.cjs');
13
13
  require('./chunk-UTYUT5YY.cjs');
@@ -75,7 +75,7 @@ function MedicationListField({
75
75
  return definition.medications ?? [];
76
76
  }, [response?.answer, definition.medications]);
77
77
  return /* @__PURE__ */ jsxRuntime.jsx(
78
- chunk67CEEDAP_cjs.MedicationReconciliation,
78
+ chunk3YRDZBW6_cjs.MedicationReconciliation,
79
79
  {
80
80
  medications,
81
81
  onChange: (next) => onResponse({ answer: JSON.stringify({ medications: next }) }),
@@ -132,7 +132,7 @@ function AllergyListField({
132
132
  codeLookup
133
133
  }) {
134
134
  const definition = field.definition;
135
- const ambientCodeLookup = chunk67CEEDAP_cjs.useCodeLookupConfig();
135
+ const ambientCodeLookup = chunk3YRDZBW6_cjs.useCodeLookupConfig();
136
136
  const effectiveCodeLookup = codeLookup === false ? void 0 : codeLookup ?? ambientCodeLookup ?? void 0;
137
137
  const value = React__namespace.useMemo(() => {
138
138
  if (response?.answer) return parseValue2(response.answer);
@@ -142,7 +142,7 @@ function AllergyListField({
142
142
  onResponse({ answer: JSON.stringify(next) });
143
143
  };
144
144
  return /* @__PURE__ */ jsxRuntime.jsx(
145
- chunk67CEEDAP_cjs.AllergyManager,
145
+ chunk3YRDZBW6_cjs.AllergyManager,
146
146
  {
147
147
  allergies: value.allergies,
148
148
  onChange: (allergies) => commit({
package/dist/esheet.js CHANGED
@@ -1,11 +1,11 @@
1
- import { MedicationReconciliation, useCodeLookupConfig, AllergyManager } from './chunk-HUXOASEB.js';
1
+ import { MedicationReconciliation, useCodeLookupConfig, AllergyManager } from './chunk-X763OLF2.js';
2
2
  import './chunk-6LFG4JFF.js';
3
3
  import './chunk-FZJBFJJR.js';
4
4
  import './chunk-EZKRAW2X.js';
5
- import './chunk-R25H4N4Z.js';
6
5
  import './chunk-DUPR6FEL.js';
6
+ import './chunk-R25H4N4Z.js';
7
7
  import './chunk-5BQE6BEL.js';
8
- import './chunk-HYEJLKXI.js';
8
+ import './chunk-LIH3IZYK.js';
9
9
  import './chunk-IUFDGB5O.js';
10
10
  import './chunk-PVUDXJAI.js';
11
11
  import './chunk-DHKYGVP7.js';
@@ -1,7 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkDKGUOMBC_cjs = require('../chunk-DKGUOMBC.cjs');
3
+ var chunkX7J45FU5_cjs = require('../chunk-X7J45FU5.cjs');
4
4
  var chunk2O7D6F67_cjs = require('../chunk-2O7D6F67.cjs');
5
+ var chunkY4ESBDQ5_cjs = require('../chunk-Y4ESBDQ5.cjs');
6
+ var chunkJYZW2PZS_cjs = require('../chunk-JYZW2PZS.cjs');
5
7
  var chunkIKMR2ADM_cjs = require('../chunk-IKMR2ADM.cjs');
6
8
  var chunkYVPC65ZJ_cjs = require('../chunk-YVPC65ZJ.cjs');
7
9
  var chunk6HFFWEM3_cjs = require('../chunk-6HFFWEM3.cjs');
@@ -13,48 +15,84 @@ require('../chunk-SCV7C55E.cjs');
13
15
 
14
16
  Object.defineProperty(exports, "useCommandK", {
15
17
  enumerable: true,
16
- get: function () { return chunkDKGUOMBC_cjs.useCommandK; }
18
+ get: function () { return chunkX7J45FU5_cjs.useCommandK; }
17
19
  });
18
20
  Object.defineProperty(exports, "useIsDesktop", {
19
21
  enumerable: true,
20
- get: function () { return chunkDKGUOMBC_cjs.useIsDesktop; }
22
+ get: function () { return chunkX7J45FU5_cjs.useIsDesktop; }
21
23
  });
22
24
  Object.defineProperty(exports, "useIsLargeDesktop", {
23
25
  enumerable: true,
24
- get: function () { return chunkDKGUOMBC_cjs.useIsLargeDesktop; }
26
+ get: function () { return chunkX7J45FU5_cjs.useIsLargeDesktop; }
25
27
  });
26
28
  Object.defineProperty(exports, "useIsMobile", {
27
29
  enumerable: true,
28
- get: function () { return chunkDKGUOMBC_cjs.useIsMobile; }
30
+ get: function () { return chunkX7J45FU5_cjs.useIsMobile; }
29
31
  });
30
32
  Object.defineProperty(exports, "useIsMobileOrTablet", {
31
33
  enumerable: true,
32
- get: function () { return chunkDKGUOMBC_cjs.useIsMobileOrTablet; }
34
+ get: function () { return chunkX7J45FU5_cjs.useIsMobileOrTablet; }
33
35
  });
34
36
  Object.defineProperty(exports, "useIsSmallTablet", {
35
37
  enumerable: true,
36
- get: function () { return chunkDKGUOMBC_cjs.useIsSmallTablet; }
38
+ get: function () { return chunkX7J45FU5_cjs.useIsSmallTablet; }
37
39
  });
38
40
  Object.defineProperty(exports, "useIsTablet", {
39
41
  enumerable: true,
40
- get: function () { return chunkDKGUOMBC_cjs.useIsTablet; }
42
+ get: function () { return chunkX7J45FU5_cjs.useIsTablet; }
41
43
  });
42
44
  Object.defineProperty(exports, "useKeyboardShortcut", {
43
45
  enumerable: true,
44
- get: function () { return chunkDKGUOMBC_cjs.useKeyboardShortcut; }
46
+ get: function () { return chunkX7J45FU5_cjs.useKeyboardShortcut; }
45
47
  });
46
48
  Object.defineProperty(exports, "useMediaQuery", {
47
49
  enumerable: true,
48
- get: function () { return chunkDKGUOMBC_cjs.useMediaQuery; }
50
+ get: function () { return chunkX7J45FU5_cjs.useMediaQuery; }
49
51
  });
50
52
  Object.defineProperty(exports, "useScrollSpy", {
51
53
  enumerable: true,
52
- get: function () { return chunkDKGUOMBC_cjs.useScrollSpy; }
54
+ get: function () { return chunkX7J45FU5_cjs.useScrollSpy; }
53
55
  });
54
56
  Object.defineProperty(exports, "useTheme", {
55
57
  enumerable: true,
56
58
  get: function () { return chunk2O7D6F67_cjs.useTheme; }
57
59
  });
60
+ Object.defineProperty(exports, "DEFAULT_FILLER_WORDS", {
61
+ enumerable: true,
62
+ get: function () { return chunkY4ESBDQ5_cjs.DEFAULT_FILLER_WORDS; }
63
+ });
64
+ Object.defineProperty(exports, "DEFAULT_MIN_SILENCE_MS", {
65
+ enumerable: true,
66
+ get: function () { return chunkY4ESBDQ5_cjs.DEFAULT_MIN_SILENCE_MS; }
67
+ });
68
+ Object.defineProperty(exports, "DEFAULT_NL_SILENCE_MS", {
69
+ enumerable: true,
70
+ get: function () { return chunkY4ESBDQ5_cjs.DEFAULT_NL_SILENCE_MS; }
71
+ });
72
+ Object.defineProperty(exports, "buildPlaybackSegments", {
73
+ enumerable: true,
74
+ get: function () { return chunkY4ESBDQ5_cjs.buildPlaybackSegments; }
75
+ });
76
+ Object.defineProperty(exports, "getSpeedAtIndex", {
77
+ enumerable: true,
78
+ get: function () { return chunkY4ESBDQ5_cjs.getSpeedAtIndex; }
79
+ });
80
+ Object.defineProperty(exports, "initEditableWords", {
81
+ enumerable: true,
82
+ get: function () { return chunkY4ESBDQ5_cjs.initEditableWords; }
83
+ });
84
+ Object.defineProperty(exports, "insertSilences", {
85
+ enumerable: true,
86
+ get: function () { return chunkY4ESBDQ5_cjs.insertSilences; }
87
+ });
88
+ Object.defineProperty(exports, "useTranscriptEdits", {
89
+ enumerable: true,
90
+ get: function () { return chunkY4ESBDQ5_cjs.useTranscriptEdits; }
91
+ });
92
+ Object.defineProperty(exports, "useMediaTransport", {
93
+ enumerable: true,
94
+ get: function () { return chunkJYZW2PZS_cjs.useMediaTransport; }
95
+ });
58
96
  Object.defineProperty(exports, "useClickOutside", {
59
97
  enumerable: true,
60
98
  get: function () { return chunkIKMR2ADM_cjs.useClickOutside; }
@@ -1,6 +1,8 @@
1
1
  export { R as ResolvedTheme, T as Theme, u as useTheme } from '../useTheme-B9SWu6ui.cjs';
2
2
  import * as React from 'react';
3
3
  import { RefObject } from 'react';
4
+ export { D as DEFAULT_FILLER_WORDS, a as DEFAULT_MIN_SILENCE_MS, b as DEFAULT_NL_SILENCE_MS, F as FillerAnalysis, S as SilenceThresholdCount, T as TranscriptClipboard, c as TranscriptEditStats, U as UseTranscriptEditsOptions, d as UseTranscriptEditsResult, e as buildPlaybackSegments, g as getSpeedAtIndex, i as initEditableWords, f as insertSilences, u as useTranscriptEdits } from '../useTranscriptEdits-BUylQFg0.cjs';
5
+ import '../transcript-oaWqY3yr.cjs';
4
6
 
5
7
  interface UseScrollSpyOptions {
6
8
  /** CSS selector for the elements to observe (e.g. 'h2, h3, h4') */
@@ -273,4 +275,89 @@ declare function dragIndicatorClasses(drag: Pick<UseDragReorderReturn, 'dragging
273
275
  */
274
276
  declare function useLiveAnnouncement(): [string, (message: string) => void];
275
277
 
276
- export { type DragOverState, type KeyboardShortcutOptions, type UseDragReorderOptions, type UseDragReorderReturn, type UseScrollSpyOptions, type UseScrollSpyReturn, dragIndicatorClasses, reorderIds, useClickOutside, useCommandK, useDragReorder, useEscapeKey, useFocusTrap, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useLiveAnnouncement, useMediaQuery, usePrefersReducedMotion, useScrollSpy };
278
+ type MediaTransportState = 'idle' | 'loading' | 'playing' | 'paused' | 'error';
279
+ interface UseMediaTransportOptions {
280
+ /** Fired on every native `timeupdate` and on metadata load, in milliseconds. */
281
+ onTimeUpdate?: (currentTimeMs: number, durationMs: number) => void;
282
+ /** Fired whenever the derived transport state changes. */
283
+ onStateChange?: (state: MediaTransportState) => void;
284
+ /** Fired when playback reaches the end. */
285
+ onEnded?: () => void;
286
+ /** Fired on a media error, with a descriptive Error. */
287
+ onError?: (error: Error) => void;
288
+ /** Initial playback rate (default `1`). Kept in sync with the element. */
289
+ initialRate?: number;
290
+ /** Transport state to enter when playback ends (default `'paused'`). */
291
+ endedState?: Extract<MediaTransportState, 'idle' | 'paused'>;
292
+ /** Reset the position to `0` when playback ends (default `false`). */
293
+ resetTimeOnEnd?: boolean;
294
+ /** Human-readable label used in the error message (default `'media'`). */
295
+ errorLabel?: string;
296
+ }
297
+ interface UseMediaTransportReturn {
298
+ /**
299
+ * Callback ref for the `<audio>`/`<video>` element to control. Pass this to
300
+ * the element's `ref` (or call it imperatively). Transport listeners attach
301
+ * when an element mounts and detach when it unmounts.
302
+ */
303
+ setMediaElement: (element: HTMLMediaElement | null) => void;
304
+ /** The currently attached media element, or `null`. */
305
+ mediaElement: HTMLMediaElement | null;
306
+ /** Derived transport state. */
307
+ state: MediaTransportState;
308
+ /** Current playback position in milliseconds. */
309
+ currentTimeMs: number;
310
+ /** Media duration in milliseconds (`0` until known / non-finite). */
311
+ durationMs: number;
312
+ /** Current playback rate. */
313
+ playbackRate: number;
314
+ /** `true` while `state === 'playing'`. */
315
+ isPlaying: boolean;
316
+ /** `true` while `state === 'loading'`. */
317
+ isLoading: boolean;
318
+ /** Start playback. */
319
+ play: () => void;
320
+ /** Pause playback. */
321
+ pause: () => void;
322
+ /** Toggle between play and pause. */
323
+ togglePlay: () => void;
324
+ /** Seek to a position in milliseconds. */
325
+ seekToMs: (timeMs: number) => void;
326
+ /** Set the playback rate multiplier. */
327
+ setPlaybackRate: (rate: number) => void;
328
+ /** Read the current position in milliseconds. */
329
+ getCurrentTimeMs: () => number;
330
+ /** Read the duration in milliseconds (`0` when unknown). */
331
+ getDurationMs: () => number;
332
+ /** Whether playback is currently paused (reads the element directly). */
333
+ isPaused: () => boolean;
334
+ }
335
+ /**
336
+ * Headless playback transport for a native `HTMLMediaElement`.
337
+ *
338
+ * Owns the derived transport state (idle/loading/playing/paused/error),
339
+ * position, duration and playback rate, and exposes imperative controls — all
340
+ * in **milliseconds**. It never creates or renders an element: pass the
341
+ * returned {@link UseMediaTransportReturn.setMediaElement} callback to an
342
+ * `<audio>`/`<video>` `ref` and the hook wires the native listeners.
343
+ *
344
+ * Shared by `MediaPlayer` (ms API) and, at the boundary, `AudioPlayer`
345
+ * (seconds API — convert with `ms / 1000`). The WaveSurfer waveform variant is
346
+ * out of scope; this hook targets native media transport only.
347
+ *
348
+ * @example
349
+ * ```tsx
350
+ * function Player({ src }: { src: string }) {
351
+ * const t = useMediaTransport({ onEnded: () => console.log('done') });
352
+ * return (
353
+ * <div>
354
+ * <video ref={t.setMediaElement} src={src} controls />
355
+ * <button onClick={t.togglePlay}>{t.isPlaying ? 'Pause' : 'Play'}</button>
356
+ * </div>
357
+ * );
358
+ * }
359
+ * ```
360
+ */
361
+ declare function useMediaTransport(options?: UseMediaTransportOptions): UseMediaTransportReturn;
362
+
363
+ export { type DragOverState, type KeyboardShortcutOptions, type MediaTransportState, type UseDragReorderOptions, type UseDragReorderReturn, type UseMediaTransportOptions, type UseMediaTransportReturn, type UseScrollSpyOptions, type UseScrollSpyReturn, dragIndicatorClasses, reorderIds, useClickOutside, useCommandK, useDragReorder, useEscapeKey, useFocusTrap, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useLiveAnnouncement, useMediaQuery, useMediaTransport, usePrefersReducedMotion, useScrollSpy };
@@ -1,6 +1,8 @@
1
1
  export { R as ResolvedTheme, T as Theme, u as useTheme } from '../useTheme-B9SWu6ui.js';
2
2
  import * as React from 'react';
3
3
  import { RefObject } from 'react';
4
+ export { D as DEFAULT_FILLER_WORDS, a as DEFAULT_MIN_SILENCE_MS, b as DEFAULT_NL_SILENCE_MS, F as FillerAnalysis, S as SilenceThresholdCount, T as TranscriptClipboard, c as TranscriptEditStats, U as UseTranscriptEditsOptions, d as UseTranscriptEditsResult, e as buildPlaybackSegments, g as getSpeedAtIndex, i as initEditableWords, f as insertSilences, u as useTranscriptEdits } from '../useTranscriptEdits-CWYnjbGP.js';
5
+ import '../transcript-oaWqY3yr.js';
4
6
 
5
7
  interface UseScrollSpyOptions {
6
8
  /** CSS selector for the elements to observe (e.g. 'h2, h3, h4') */
@@ -273,4 +275,89 @@ declare function dragIndicatorClasses(drag: Pick<UseDragReorderReturn, 'dragging
273
275
  */
274
276
  declare function useLiveAnnouncement(): [string, (message: string) => void];
275
277
 
276
- export { type DragOverState, type KeyboardShortcutOptions, type UseDragReorderOptions, type UseDragReorderReturn, type UseScrollSpyOptions, type UseScrollSpyReturn, dragIndicatorClasses, reorderIds, useClickOutside, useCommandK, useDragReorder, useEscapeKey, useFocusTrap, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useLiveAnnouncement, useMediaQuery, usePrefersReducedMotion, useScrollSpy };
278
+ type MediaTransportState = 'idle' | 'loading' | 'playing' | 'paused' | 'error';
279
+ interface UseMediaTransportOptions {
280
+ /** Fired on every native `timeupdate` and on metadata load, in milliseconds. */
281
+ onTimeUpdate?: (currentTimeMs: number, durationMs: number) => void;
282
+ /** Fired whenever the derived transport state changes. */
283
+ onStateChange?: (state: MediaTransportState) => void;
284
+ /** Fired when playback reaches the end. */
285
+ onEnded?: () => void;
286
+ /** Fired on a media error, with a descriptive Error. */
287
+ onError?: (error: Error) => void;
288
+ /** Initial playback rate (default `1`). Kept in sync with the element. */
289
+ initialRate?: number;
290
+ /** Transport state to enter when playback ends (default `'paused'`). */
291
+ endedState?: Extract<MediaTransportState, 'idle' | 'paused'>;
292
+ /** Reset the position to `0` when playback ends (default `false`). */
293
+ resetTimeOnEnd?: boolean;
294
+ /** Human-readable label used in the error message (default `'media'`). */
295
+ errorLabel?: string;
296
+ }
297
+ interface UseMediaTransportReturn {
298
+ /**
299
+ * Callback ref for the `<audio>`/`<video>` element to control. Pass this to
300
+ * the element's `ref` (or call it imperatively). Transport listeners attach
301
+ * when an element mounts and detach when it unmounts.
302
+ */
303
+ setMediaElement: (element: HTMLMediaElement | null) => void;
304
+ /** The currently attached media element, or `null`. */
305
+ mediaElement: HTMLMediaElement | null;
306
+ /** Derived transport state. */
307
+ state: MediaTransportState;
308
+ /** Current playback position in milliseconds. */
309
+ currentTimeMs: number;
310
+ /** Media duration in milliseconds (`0` until known / non-finite). */
311
+ durationMs: number;
312
+ /** Current playback rate. */
313
+ playbackRate: number;
314
+ /** `true` while `state === 'playing'`. */
315
+ isPlaying: boolean;
316
+ /** `true` while `state === 'loading'`. */
317
+ isLoading: boolean;
318
+ /** Start playback. */
319
+ play: () => void;
320
+ /** Pause playback. */
321
+ pause: () => void;
322
+ /** Toggle between play and pause. */
323
+ togglePlay: () => void;
324
+ /** Seek to a position in milliseconds. */
325
+ seekToMs: (timeMs: number) => void;
326
+ /** Set the playback rate multiplier. */
327
+ setPlaybackRate: (rate: number) => void;
328
+ /** Read the current position in milliseconds. */
329
+ getCurrentTimeMs: () => number;
330
+ /** Read the duration in milliseconds (`0` when unknown). */
331
+ getDurationMs: () => number;
332
+ /** Whether playback is currently paused (reads the element directly). */
333
+ isPaused: () => boolean;
334
+ }
335
+ /**
336
+ * Headless playback transport for a native `HTMLMediaElement`.
337
+ *
338
+ * Owns the derived transport state (idle/loading/playing/paused/error),
339
+ * position, duration and playback rate, and exposes imperative controls — all
340
+ * in **milliseconds**. It never creates or renders an element: pass the
341
+ * returned {@link UseMediaTransportReturn.setMediaElement} callback to an
342
+ * `<audio>`/`<video>` `ref` and the hook wires the native listeners.
343
+ *
344
+ * Shared by `MediaPlayer` (ms API) and, at the boundary, `AudioPlayer`
345
+ * (seconds API — convert with `ms / 1000`). The WaveSurfer waveform variant is
346
+ * out of scope; this hook targets native media transport only.
347
+ *
348
+ * @example
349
+ * ```tsx
350
+ * function Player({ src }: { src: string }) {
351
+ * const t = useMediaTransport({ onEnded: () => console.log('done') });
352
+ * return (
353
+ * <div>
354
+ * <video ref={t.setMediaElement} src={src} controls />
355
+ * <button onClick={t.togglePlay}>{t.isPlaying ? 'Pause' : 'Play'}</button>
356
+ * </div>
357
+ * );
358
+ * }
359
+ * ```
360
+ */
361
+ declare function useMediaTransport(options?: UseMediaTransportOptions): UseMediaTransportReturn;
362
+
363
+ export { type DragOverState, type KeyboardShortcutOptions, type MediaTransportState, type UseDragReorderOptions, type UseDragReorderReturn, type UseMediaTransportOptions, type UseMediaTransportReturn, type UseScrollSpyOptions, type UseScrollSpyReturn, dragIndicatorClasses, reorderIds, useClickOutside, useCommandK, useDragReorder, useEscapeKey, useFocusTrap, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useLiveAnnouncement, useMediaQuery, useMediaTransport, usePrefersReducedMotion, useScrollSpy };
@@ -1,5 +1,7 @@
1
- export { useCommandK, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useMediaQuery, useScrollSpy } from '../chunk-UVQEHZRF.js';
1
+ export { useCommandK, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useMediaQuery, useScrollSpy } from '../chunk-6VGXX6L6.js';
2
2
  export { useTheme } from '../chunk-KJZNEVYM.js';
3
+ export { DEFAULT_FILLER_WORDS, DEFAULT_MIN_SILENCE_MS, DEFAULT_NL_SILENCE_MS, buildPlaybackSegments, getSpeedAtIndex, initEditableWords, insertSilences, useTranscriptEdits } from '../chunk-NTYGCBCL.js';
4
+ export { useMediaTransport } from '../chunk-SQHMGT4W.js';
3
5
  export { useClickOutside } from '../chunk-OKBR6PX4.js';
4
6
  export { dragIndicatorClasses, reorderIds, useDragReorder, useLiveAnnouncement } from '../chunk-7ZVTLTJF.js';
5
7
  export { usePrefersReducedMotion } from '../chunk-HB7C7NB5.js';