@mieweb/ui 0.3.0-dev.73 → 0.3.0-dev.75

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 (135) hide show
  1. package/dist/ag-grid.cjs +31 -21
  2. package/dist/ag-grid.cjs.map +1 -1
  3. package/dist/ag-grid.js +31 -21
  4. package/dist/ag-grid.js.map +1 -1
  5. package/dist/brands/bluehive.css +5 -5
  6. package/dist/brands/mieweb.css +5 -5
  7. package/dist/brands/ozwell.css +5 -5
  8. package/dist/brands/webchart.css +5 -5
  9. package/dist/{chunk-N2YMRZ7P.cjs → chunk-2EPJ5SMX.cjs} +5 -5
  10. package/dist/{chunk-N2YMRZ7P.cjs.map → chunk-2EPJ5SMX.cjs.map} +1 -1
  11. package/dist/{chunk-QDGZBDBI.cjs → chunk-2LF7PSSX.cjs} +3 -3
  12. package/dist/{chunk-QDGZBDBI.cjs.map → chunk-2LF7PSSX.cjs.map} +1 -1
  13. package/dist/{chunk-O43QBXRX.js → chunk-43GBCUSQ.js} +3 -3
  14. package/dist/{chunk-O43QBXRX.js.map → chunk-43GBCUSQ.js.map} +1 -1
  15. package/dist/{chunk-MOULJE34.js → chunk-4DMZAVB2.js} +6 -6
  16. package/dist/chunk-4DMZAVB2.js.map +1 -0
  17. package/dist/{chunk-OJ64Q3A5.js → chunk-5PUEQH2L.js} +3 -3
  18. package/dist/{chunk-OJ64Q3A5.js.map → chunk-5PUEQH2L.js.map} +1 -1
  19. package/dist/{chunk-VKTQQOUH.js → chunk-5U7IIMKH.js} +4 -4
  20. package/dist/{chunk-VKTQQOUH.js.map → chunk-5U7IIMKH.js.map} +1 -1
  21. package/dist/{chunk-TSZRR2ZK.cjs → chunk-67QT2WYS.cjs} +3 -3
  22. package/dist/{chunk-TSZRR2ZK.cjs.map → chunk-67QT2WYS.cjs.map} +1 -1
  23. package/dist/{chunk-LXHPW2ZF.cjs → chunk-7BARESXI.cjs} +3 -3
  24. package/dist/{chunk-LXHPW2ZF.cjs.map → chunk-7BARESXI.cjs.map} +1 -1
  25. package/dist/{chunk-BBQZNIB4.js → chunk-AL6ASCL6.js} +9 -9
  26. package/dist/{chunk-BBQZNIB4.js.map → chunk-AL6ASCL6.js.map} +1 -1
  27. package/dist/{chunk-AUXHRAID.cjs → chunk-CHMMHFOW.cjs} +9 -9
  28. package/dist/{chunk-AUXHRAID.cjs.map → chunk-CHMMHFOW.cjs.map} +1 -1
  29. package/dist/{chunk-JDI45GEY.js → chunk-CWDQ7OPJ.js} +3 -3
  30. package/dist/{chunk-JDI45GEY.js.map → chunk-CWDQ7OPJ.js.map} +1 -1
  31. package/dist/{chunk-Z4HZ35KX.cjs → chunk-DEZ7XSTG.cjs} +3 -3
  32. package/dist/{chunk-Z4HZ35KX.cjs.map → chunk-DEZ7XSTG.cjs.map} +1 -1
  33. package/dist/{chunk-GPBQCGKA.cjs → chunk-DT4CHRTJ.cjs} +382 -380
  34. package/dist/chunk-DT4CHRTJ.cjs.map +1 -0
  35. package/dist/{chunk-QMQE4PDD.cjs → chunk-E3GBBYAO.cjs} +6 -6
  36. package/dist/{chunk-QMQE4PDD.cjs.map → chunk-E3GBBYAO.cjs.map} +1 -1
  37. package/dist/{chunk-IMNLYVXJ.cjs → chunk-EUUQVDXX.cjs} +6 -6
  38. package/dist/{chunk-IMNLYVXJ.cjs.map → chunk-EUUQVDXX.cjs.map} +1 -1
  39. package/dist/{chunk-TF5OZDFU.js → chunk-FMGX2AM2.js} +6 -6
  40. package/dist/{chunk-TF5OZDFU.js.map → chunk-FMGX2AM2.js.map} +1 -1
  41. package/dist/{chunk-5NSURWMM.js → chunk-FYEK4RZ3.js} +4 -4
  42. package/dist/{chunk-5NSURWMM.js.map → chunk-FYEK4RZ3.js.map} +1 -1
  43. package/dist/{chunk-DLLVXNAQ.js → chunk-G7P5X2F4.js} +5 -5
  44. package/dist/{chunk-DLLVXNAQ.js.map → chunk-G7P5X2F4.js.map} +1 -1
  45. package/dist/{chunk-QEAIFTUL.cjs → chunk-HT3SXDFF.cjs} +5 -5
  46. package/dist/{chunk-QEAIFTUL.cjs.map → chunk-HT3SXDFF.cjs.map} +1 -1
  47. package/dist/{chunk-DCDXOT3A.js → chunk-IEVAVY43.js} +3 -3
  48. package/dist/{chunk-DCDXOT3A.js.map → chunk-IEVAVY43.js.map} +1 -1
  49. package/dist/{chunk-EMMQPDOY.cjs → chunk-KLLGX5O3.cjs} +4 -4
  50. package/dist/{chunk-EMMQPDOY.cjs.map → chunk-KLLGX5O3.cjs.map} +1 -1
  51. package/dist/{chunk-ND75VHB7.cjs → chunk-MIGLLTTD.cjs} +4 -4
  52. package/dist/{chunk-ND75VHB7.cjs.map → chunk-MIGLLTTD.cjs.map} +1 -1
  53. package/dist/{chunk-3DM6LMZG.js → chunk-MUYTGWGE.js} +4 -3
  54. package/dist/chunk-MUYTGWGE.js.map +1 -0
  55. package/dist/{chunk-VQW36LLX.cjs → chunk-NVHAQOHH.cjs} +3 -3
  56. package/dist/{chunk-VQW36LLX.cjs.map → chunk-NVHAQOHH.cjs.map} +1 -1
  57. package/dist/{chunk-4ASPCSWT.js → chunk-PU6ZC4GI.js} +3 -3
  58. package/dist/{chunk-4ASPCSWT.js.map → chunk-PU6ZC4GI.js.map} +1 -1
  59. package/dist/{chunk-JE4AH2TZ.cjs → chunk-Q2EWNXIB.cjs} +6 -6
  60. package/dist/chunk-Q2EWNXIB.cjs.map +1 -0
  61. package/dist/{chunk-PLIK3DN6.cjs → chunk-QASIWBXU.cjs} +4 -3
  62. package/dist/chunk-QASIWBXU.cjs.map +1 -0
  63. package/dist/{chunk-V2O636JO.js → chunk-QBFNONJD.js} +5 -5
  64. package/dist/{chunk-V2O636JO.js.map → chunk-QBFNONJD.js.map} +1 -1
  65. package/dist/{chunk-YR365F2H.cjs → chunk-QG7CJH4O.cjs} +3 -3
  66. package/dist/{chunk-YR365F2H.cjs.map → chunk-QG7CJH4O.cjs.map} +1 -1
  67. package/dist/{chunk-ZGSPFVGL.cjs → chunk-QNTUYH6G.cjs} +4 -4
  68. package/dist/{chunk-ZGSPFVGL.cjs.map → chunk-QNTUYH6G.cjs.map} +1 -1
  69. package/dist/{chunk-YN3ZIUYC.js → chunk-TRZXK57D.js} +6 -6
  70. package/dist/{chunk-YN3ZIUYC.js.map → chunk-TRZXK57D.js.map} +1 -1
  71. package/dist/{chunk-NDHW3ZRF.js → chunk-VCO2IZOG.js} +3 -3
  72. package/dist/{chunk-NDHW3ZRF.js.map → chunk-VCO2IZOG.js.map} +1 -1
  73. package/dist/{chunk-7XWPUWSL.js → chunk-WFS6R2F5.js} +3 -3
  74. package/dist/{chunk-7XWPUWSL.js.map → chunk-WFS6R2F5.js.map} +1 -1
  75. package/dist/{chunk-JCHVLSXS.js → chunk-WORZLEUZ.js} +382 -380
  76. package/dist/chunk-WORZLEUZ.js.map +1 -0
  77. package/dist/{chunk-RCMF6KZA.js → chunk-YTZPVEIO.js} +3 -3
  78. package/dist/{chunk-RCMF6KZA.js.map → chunk-YTZPVEIO.js.map} +1 -1
  79. package/dist/{chunk-6EN6ZIW3.js → chunk-YY23MK3V.js} +4 -4
  80. package/dist/{chunk-6EN6ZIW3.js.map → chunk-YY23MK3V.js.map} +1 -1
  81. package/dist/{chunk-QXJMKJJV.cjs → chunk-ZKFVGYBK.cjs} +3 -3
  82. package/dist/{chunk-QXJMKJJV.cjs.map → chunk-ZKFVGYBK.cjs.map} +1 -1
  83. package/dist/{chunk-Z2ABQA5Z.cjs → chunk-ZRI6OXQD.cjs} +3 -3
  84. package/dist/{chunk-Z2ABQA5Z.cjs.map → chunk-ZRI6OXQD.cjs.map} +1 -1
  85. package/dist/components/AudioPlayer/index.cjs +6 -6
  86. package/dist/components/AudioPlayer/index.js +1 -1
  87. package/dist/components/AudioRecorder/index.cjs +6 -6
  88. package/dist/components/AudioRecorder/index.js +1 -1
  89. package/dist/components/Card/index.cjs +15 -15
  90. package/dist/components/Card/index.js +1 -1
  91. package/dist/components/Checkbox/index.cjs +4 -4
  92. package/dist/components/Checkbox/index.js +1 -1
  93. package/dist/components/CountryCodeDropdown/index.cjs +4 -4
  94. package/dist/components/CountryCodeDropdown/index.js +1 -1
  95. package/dist/components/DateInput/index.cjs +2 -2
  96. package/dist/components/DateInput/index.js +1 -1
  97. package/dist/components/Dropdown/index.cjs +7 -7
  98. package/dist/components/Dropdown/index.js +1 -1
  99. package/dist/components/Pagination/index.cjs +4 -4
  100. package/dist/components/Pagination/index.js +1 -1
  101. package/dist/components/PhoneInput/index.cjs +3 -3
  102. package/dist/components/PhoneInput/index.js +1 -1
  103. package/dist/components/Progress/index.cjs +6 -6
  104. package/dist/components/Progress/index.js +1 -1
  105. package/dist/components/QuickAction/index.cjs +6 -6
  106. package/dist/components/QuickAction/index.js +1 -1
  107. package/dist/components/Radio/index.cjs +4 -4
  108. package/dist/components/Radio/index.js +1 -1
  109. package/dist/components/SchedulePicker/index.cjs +10 -10
  110. package/dist/components/SchedulePicker/index.js +1 -1
  111. package/dist/components/Select/index.cjs +3 -3
  112. package/dist/components/Select/index.js +1 -1
  113. package/dist/components/Slider/index.cjs +5 -5
  114. package/dist/components/Slider/index.js +1 -1
  115. package/dist/components/Spinner/index.cjs +5 -5
  116. package/dist/components/Spinner/index.js +1 -1
  117. package/dist/components/Switch/index.cjs +4 -4
  118. package/dist/components/Switch/index.js +1 -1
  119. package/dist/components/Tabs/index.cjs +7 -7
  120. package/dist/components/Tabs/index.js +1 -1
  121. package/dist/components/Text/index.cjs +4 -4
  122. package/dist/components/Text/index.js +1 -1
  123. package/dist/index.cjs +773 -804
  124. package/dist/index.cjs.map +1 -1
  125. package/dist/index.js +489 -520
  126. package/dist/index.js.map +1 -1
  127. package/dist/styles/init.css +24 -11
  128. package/dist/styles.css +1 -1
  129. package/package.json +1 -1
  130. package/dist/chunk-3DM6LMZG.js.map +0 -1
  131. package/dist/chunk-GPBQCGKA.cjs.map +0 -1
  132. package/dist/chunk-JCHVLSXS.js.map +0 -1
  133. package/dist/chunk-JE4AH2TZ.cjs.map +0 -1
  134. package/dist/chunk-MOULJE34.js.map +0 -1
  135. package/dist/chunk-PLIK3DN6.cjs.map +0 -1
@@ -73,13 +73,13 @@ var playButtonVariants = classVarianceAuthority.cva(
73
73
  "dark:text-neutral-400 dark:hover:text-neutral-200 dark:hover:bg-neutral-800"
74
74
  ],
75
75
  compact: [
76
- "bg-primary-600 text-white",
77
- "hover:bg-primary-700",
76
+ "bg-primary-800 text-white",
77
+ "hover:bg-primary-900",
78
78
  "active:bg-primary-800"
79
79
  ],
80
80
  waveform: [
81
- "bg-primary-600 text-white",
82
- "hover:bg-primary-700",
81
+ "bg-primary-800 text-white",
82
+ "hover:bg-primary-900",
83
83
  "active:bg-primary-800"
84
84
  ]
85
85
  },
@@ -202,14 +202,14 @@ function ProgressBar({
202
202
  /* @__PURE__ */ jsxRuntime.jsx(
203
203
  "div",
204
204
  {
205
- className: "bg-primary-600 absolute inset-y-0 left-0 rounded-full transition-all",
205
+ className: "bg-primary-800 absolute inset-y-0 left-0 rounded-full transition-all",
206
206
  style: { width: `${progress}%` }
207
207
  }
208
208
  ),
209
209
  /* @__PURE__ */ jsxRuntime.jsx(
210
210
  "div",
211
211
  {
212
- className: "bg-primary-600 absolute top-1/2 h-3 w-3 -translate-y-1/2 rounded-full shadow-sm transition-all",
212
+ className: "bg-primary-800 absolute top-1/2 h-3 w-3 -translate-y-1/2 rounded-full shadow-sm transition-all",
213
213
  style: { left: `calc(${progress}% - 6px)` }
214
214
  }
215
215
  )
@@ -426,324 +426,378 @@ function Waveform({
426
426
  }
427
427
  );
428
428
  }
429
- var AudioPlayer = React__namespace.forwardRef(function AudioPlayer2({
430
- src,
431
- title,
432
- variant = "compact",
433
- size = "md",
434
- onStateChange,
435
- onEnded,
436
- onError,
437
- onTimeUpdate,
438
- showTime = true,
439
- showDuration = true,
440
- waveColor,
441
- progressColor,
442
- waveformHeight = 64,
443
- showWaveformHoverCursor = true,
444
- waveformCursorColor,
445
- disabled = false,
446
- className,
447
- "aria-label": ariaLabel,
448
- playbackRates = [0.5, 0.75, 1, 1.25, 1.5, 2],
449
- showPlaybackRate = false,
450
- /** Whether to preload audio (set to false for lists with many items) */
451
- preload = false,
452
- /** Fallback duration in seconds to display before audio is loaded */
453
- fallbackDuration
454
- }, ref) {
455
- const [state, setState] = React__namespace.useState("idle");
456
- const [currentTime, setCurrentTime] = React__namespace.useState(0);
457
- const [duration, setDuration] = React__namespace.useState(0);
458
- const [playbackRate, setPlaybackRate] = React__namespace.useState(1);
459
- const [audioInitialized, setAudioInitialized] = React__namespace.useState(false);
460
- const [hoverTime, setHoverTime] = React__namespace.useState(null);
461
- const containerRef = React__namespace.useRef(null);
462
- const audioRef = React__namespace.useRef(null);
463
- const waveformMethodsRef = React__namespace.useRef(null);
464
- const isPlaying = state === "playing";
465
- const isLoading = state === "loading";
466
- const displayDuration = duration > 0 ? duration : fallbackDuration ?? 0;
467
- const updateState = React__namespace.useCallback(
468
- (newState) => {
469
- setState(newState);
470
- onStateChange?.(newState);
471
- },
472
- [onStateChange]
473
- );
474
- const initAudio = React__namespace.useCallback(() => {
475
- if (variant === "waveform" || audioInitialized) return null;
476
- const audio = new globalThis.Audio(src);
477
- audioRef.current = audio;
478
- setAudioInitialized(true);
479
- audio.addEventListener("loadstart", () => updateState("loading"));
480
- audio.addEventListener("canplay", () => {
481
- updateState("idle");
482
- });
483
- audio.addEventListener("loadedmetadata", () => {
484
- setDuration(audio.duration);
485
- onTimeUpdate?.(audio.currentTime, audio.duration);
486
- });
487
- audio.addEventListener("timeupdate", () => {
488
- setCurrentTime(audio.currentTime);
489
- onTimeUpdate?.(audio.currentTime, audio.duration);
490
- });
491
- audio.addEventListener("ended", () => {
492
- updateState("idle");
493
- setCurrentTime(0);
494
- onEnded?.();
495
- });
496
- audio.addEventListener("error", () => {
497
- updateState("error");
498
- onError?.(new Error("Failed to load audio"));
499
- });
500
- return audio;
501
- }, [
429
+ var AudioPlayer = React__namespace.forwardRef(
430
+ function AudioPlayer2({
502
431
  src,
503
- variant,
504
- audioInitialized,
505
- updateState,
506
- onTimeUpdate,
432
+ title,
433
+ variant = "compact",
434
+ size = "md",
435
+ onStateChange,
507
436
  onEnded,
508
- onError
509
- ]);
510
- React__namespace.useImperativeHandle(
511
- ref,
512
- () => ({
513
- get container() {
514
- return containerRef.current;
437
+ onError,
438
+ onTimeUpdate,
439
+ showTime = true,
440
+ showDuration = true,
441
+ waveColor,
442
+ progressColor,
443
+ waveformHeight = 64,
444
+ showWaveformHoverCursor = true,
445
+ waveformCursorColor,
446
+ disabled = false,
447
+ className,
448
+ "aria-label": ariaLabel,
449
+ playbackRates = [0.5, 0.75, 1, 1.25, 1.5, 2],
450
+ showPlaybackRate = false,
451
+ /** Whether to preload audio (set to false for lists with many items) */
452
+ preload = false,
453
+ /** Fallback duration in seconds to display before audio is loaded */
454
+ fallbackDuration
455
+ }, ref) {
456
+ const [state, setState] = React__namespace.useState("idle");
457
+ const [currentTime, setCurrentTime] = React__namespace.useState(0);
458
+ const [duration, setDuration] = React__namespace.useState(0);
459
+ const [playbackRate, setPlaybackRate] = React__namespace.useState(1);
460
+ const [audioInitialized, setAudioInitialized] = React__namespace.useState(false);
461
+ const [hoverTime, setHoverTime] = React__namespace.useState(null);
462
+ const containerRef = React__namespace.useRef(null);
463
+ const audioRef = React__namespace.useRef(null);
464
+ const waveformMethodsRef = React__namespace.useRef(null);
465
+ const isPlaying = state === "playing";
466
+ const isLoading = state === "loading";
467
+ const displayDuration = duration > 0 ? duration : fallbackDuration ?? 0;
468
+ const updateState = React__namespace.useCallback(
469
+ (newState) => {
470
+ setState(newState);
471
+ onStateChange?.(newState);
515
472
  },
516
- seekTo: (time) => {
517
- if (variant === "waveform") {
518
- waveformMethodsRef.current?.seekTo(time);
519
- } else {
520
- if (!audioRef.current) {
521
- initAudio();
473
+ [onStateChange]
474
+ );
475
+ const initAudio = React__namespace.useCallback(() => {
476
+ if (variant === "waveform" || audioInitialized) return null;
477
+ const audio = new globalThis.Audio(src);
478
+ audioRef.current = audio;
479
+ setAudioInitialized(true);
480
+ audio.addEventListener("loadstart", () => updateState("loading"));
481
+ audio.addEventListener("canplay", () => {
482
+ updateState("idle");
483
+ });
484
+ audio.addEventListener("loadedmetadata", () => {
485
+ setDuration(audio.duration);
486
+ onTimeUpdate?.(audio.currentTime, audio.duration);
487
+ });
488
+ audio.addEventListener("timeupdate", () => {
489
+ setCurrentTime(audio.currentTime);
490
+ onTimeUpdate?.(audio.currentTime, audio.duration);
491
+ });
492
+ audio.addEventListener("ended", () => {
493
+ updateState("idle");
494
+ setCurrentTime(0);
495
+ onEnded?.();
496
+ });
497
+ audio.addEventListener("error", () => {
498
+ updateState("error");
499
+ onError?.(new Error("Failed to load audio"));
500
+ });
501
+ return audio;
502
+ }, [
503
+ src,
504
+ variant,
505
+ audioInitialized,
506
+ updateState,
507
+ onTimeUpdate,
508
+ onEnded,
509
+ onError
510
+ ]);
511
+ React__namespace.useImperativeHandle(
512
+ ref,
513
+ () => ({
514
+ get container() {
515
+ return containerRef.current;
516
+ },
517
+ seekTo: (time) => {
518
+ if (variant === "waveform") {
519
+ waveformMethodsRef.current?.seekTo(time);
520
+ } else {
521
+ if (!audioRef.current) {
522
+ initAudio();
523
+ }
524
+ if (audioRef.current) {
525
+ audioRef.current.currentTime = time;
526
+ }
522
527
  }
523
- if (audioRef.current) {
524
- audioRef.current.currentTime = time;
528
+ },
529
+ play: () => {
530
+ if (variant === "waveform") {
531
+ if (waveformMethodsRef.current) {
532
+ waveformMethodsRef.current.play();
533
+ updateState("playing");
534
+ }
535
+ } else {
536
+ if (!audioRef.current) {
537
+ initAudio();
538
+ }
539
+ if (audioRef.current) {
540
+ audioRef.current.play().catch((error) => {
541
+ updateState("error");
542
+ onError?.(error);
543
+ });
544
+ updateState("playing");
545
+ }
525
546
  }
526
- }
527
- },
528
- play: () => {
529
- if (variant === "waveform") {
530
- if (waveformMethodsRef.current) {
531
- waveformMethodsRef.current.play();
532
- updateState("playing");
547
+ },
548
+ pause: () => {
549
+ if (variant === "waveform") {
550
+ if (waveformMethodsRef.current) {
551
+ waveformMethodsRef.current.pause();
552
+ updateState("paused");
553
+ }
554
+ } else if (audioRef.current) {
555
+ audioRef.current.pause();
556
+ updateState("paused");
533
557
  }
534
- } else {
535
- if (!audioRef.current) {
536
- initAudio();
558
+ },
559
+ getCurrentTime: () => {
560
+ if (variant === "waveform") {
561
+ return waveformMethodsRef.current?.getCurrentTime() ?? 0;
537
562
  }
538
- if (audioRef.current) {
539
- audioRef.current.play().catch((error) => {
540
- updateState("error");
541
- onError?.(error);
542
- });
543
- updateState("playing");
563
+ return audioRef.current?.currentTime ?? 0;
564
+ },
565
+ getDuration: () => {
566
+ if (variant === "waveform") {
567
+ return waveformMethodsRef.current?.getDuration() ?? 0;
544
568
  }
569
+ const rawDuration = audioRef.current?.duration;
570
+ return Number.isFinite(rawDuration) ? rawDuration : 0;
545
571
  }
546
- },
547
- pause: () => {
548
- if (variant === "waveform") {
549
- if (waveformMethodsRef.current) {
550
- waveformMethodsRef.current.pause();
551
- updateState("paused");
552
- }
553
- } else if (audioRef.current) {
572
+ }),
573
+ [variant, initAudio, updateState, onError]
574
+ );
575
+ React__namespace.useEffect(() => {
576
+ if (preload && !audioInitialized && variant !== "waveform") {
577
+ initAudio();
578
+ }
579
+ }, [preload, audioInitialized, variant, initAudio]);
580
+ React__namespace.useEffect(() => {
581
+ return () => {
582
+ if (audioRef.current) {
554
583
  audioRef.current.pause();
555
- updateState("paused");
556
- }
557
- },
558
- getCurrentTime: () => {
559
- if (variant === "waveform") {
560
- return waveformMethodsRef.current?.getCurrentTime() ?? 0;
584
+ audioRef.current.src = "";
561
585
  }
562
- return audioRef.current?.currentTime ?? 0;
563
- },
564
- getDuration: () => {
565
- if (variant === "waveform") {
566
- return waveformMethodsRef.current?.getDuration() ?? 0;
567
- }
568
- const rawDuration = audioRef.current?.duration;
569
- return Number.isFinite(rawDuration) ? rawDuration : 0;
570
- }
571
- }),
572
- [variant, initAudio, updateState, onError]
573
- );
574
- React__namespace.useEffect(() => {
575
- if (preload && !audioInitialized && variant !== "waveform") {
576
- initAudio();
577
- }
578
- }, [preload, audioInitialized, variant, initAudio]);
579
- React__namespace.useEffect(() => {
580
- return () => {
586
+ };
587
+ }, []);
588
+ React__namespace.useEffect(() => {
581
589
  if (audioRef.current) {
582
- audioRef.current.pause();
583
- audioRef.current.src = "";
590
+ audioRef.current.playbackRate = playbackRate;
584
591
  }
585
- };
586
- }, []);
587
- React__namespace.useEffect(() => {
588
- if (audioRef.current) {
589
- audioRef.current.playbackRate = playbackRate;
590
- }
591
- }, [playbackRate]);
592
- const handlePlay = React__namespace.useCallback(() => {
593
- if (disabled) return;
594
- if (variant === "waveform") {
595
- if (isLoading) return;
596
- updateState(isPlaying ? "paused" : "playing");
597
- return;
598
- }
599
- if (!audioInitialized && !isLoading) {
600
- const audio = initAudio();
601
- if (audio) {
602
- updateState("loading");
603
- audio.addEventListener(
604
- "canplay",
605
- () => {
606
- audio.play().catch((error) => {
607
- updateState("error");
608
- onError?.(error);
609
- });
610
- updateState("playing");
611
- },
612
- { once: true }
613
- );
592
+ }, [playbackRate]);
593
+ const handlePlay = React__namespace.useCallback(() => {
594
+ if (disabled) return;
595
+ if (variant === "waveform") {
596
+ if (isLoading) return;
597
+ updateState(isPlaying ? "paused" : "playing");
598
+ return;
614
599
  }
615
- return;
616
- }
617
- if (isLoading) return;
618
- if (isPlaying) {
619
- if (audioRef.current) {
620
- audioRef.current.pause();
621
- }
622
- updateState("paused");
623
- } else {
624
- if (audioRef.current) {
625
- audioRef.current.play().catch((error) => {
626
- updateState("error");
627
- onError?.(error);
628
- });
629
- updateState("playing");
600
+ if (!audioInitialized && !isLoading) {
601
+ const audio = initAudio();
602
+ if (audio) {
603
+ updateState("loading");
604
+ audio.addEventListener(
605
+ "canplay",
606
+ () => {
607
+ audio.play().catch((error) => {
608
+ updateState("error");
609
+ onError?.(error);
610
+ });
611
+ updateState("playing");
612
+ },
613
+ { once: true }
614
+ );
615
+ }
616
+ return;
630
617
  }
631
- }
632
- }, [
633
- disabled,
634
- variant,
635
- audioInitialized,
636
- isLoading,
637
- isPlaying,
638
- initAudio,
639
- updateState,
640
- onError
641
- ]);
642
- const handleSeek = React__namespace.useCallback(
643
- (time) => {
644
- if (audioRef.current) {
645
- audioRef.current.currentTime = time;
646
- setCurrentTime(time);
647
- onTimeUpdate?.(time, audioRef.current.duration);
618
+ if (isLoading) return;
619
+ if (isPlaying) {
620
+ if (audioRef.current) {
621
+ audioRef.current.pause();
622
+ }
623
+ updateState("paused");
624
+ } else {
625
+ if (audioRef.current) {
626
+ audioRef.current.play().catch((error) => {
627
+ updateState("error");
628
+ onError?.(error);
629
+ });
630
+ updateState("playing");
631
+ }
648
632
  }
649
- },
650
- [onTimeUpdate]
651
- );
652
- const handleWaveformReady = React__namespace.useCallback(
653
- (dur) => {
654
- setDuration(dur);
655
- setState("idle");
656
- onTimeUpdate?.(currentTime, dur);
657
- },
658
- [currentTime, onTimeUpdate]
659
- );
660
- const handleWaveformTimeUpdate = React__namespace.useCallback(
661
- (time, dur) => {
662
- setCurrentTime(time);
663
- if (dur > 0) {
633
+ }, [
634
+ disabled,
635
+ variant,
636
+ audioInitialized,
637
+ isLoading,
638
+ isPlaying,
639
+ initAudio,
640
+ updateState,
641
+ onError
642
+ ]);
643
+ const handleSeek = React__namespace.useCallback(
644
+ (time) => {
645
+ if (audioRef.current) {
646
+ audioRef.current.currentTime = time;
647
+ setCurrentTime(time);
648
+ onTimeUpdate?.(time, audioRef.current.duration);
649
+ }
650
+ },
651
+ [onTimeUpdate]
652
+ );
653
+ const handleWaveformReady = React__namespace.useCallback(
654
+ (dur) => {
664
655
  setDuration(dur);
665
- }
666
- onTimeUpdate?.(time, dur);
667
- },
668
- [onTimeUpdate]
669
- );
670
- const handleWaveformFinish = React__namespace.useCallback(() => {
671
- updateState("idle");
672
- setCurrentTime(0);
673
- onEnded?.();
674
- }, [updateState, onEnded]);
675
- const handleWaveformSeek = React__namespace.useCallback((time) => {
676
- setCurrentTime(time);
677
- }, []);
678
- const handleHoverTimeChange = React__namespace.useCallback((time) => {
679
- setHoverTime(time);
680
- }, []);
681
- const iconSize = size === "sm" ? "h-3.5 w-3.5" : size === "lg" ? "h-5 w-5" : "h-4 w-4";
682
- const getAriaLabel = () => {
683
- if (ariaLabel) return ariaLabel;
684
- if (title) return `${isPlaying ? "Pause" : "Play"} ${title}`;
685
- return isPlaying ? "Pause audio" : "Play audio";
686
- };
687
- const renderPlayButton = () => /* @__PURE__ */ jsxRuntime.jsx(
688
- "button",
689
- {
690
- type: "button",
691
- "data-slot": "audio-player-play-btn",
692
- onClick: handlePlay,
693
- disabled: disabled || isLoading,
694
- className: chunkOR5DRJCW_cjs.cn(playButtonVariants({ variant, size })),
695
- "aria-label": getAriaLabel(),
696
- "aria-pressed": isPlaying,
697
- children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(SpinnerIcon, { className: iconSize }) : isPlaying ? /* @__PURE__ */ jsxRuntime.jsx(PauseIcon, { className: iconSize }) : /* @__PURE__ */ jsxRuntime.jsx(PlayIcon, { className: iconSize })
698
- }
699
- );
700
- const renderTime = (useHoverTime = false) => {
701
- if (!showTime) return null;
702
- const displayTime = useHoverTime && hoverTime !== null ? hoverTime : currentTime;
703
- const isShowingHoverTime = useHoverTime && hoverTime !== null;
704
- return /* @__PURE__ */ jsxRuntime.jsxs(
705
- "span",
706
- {
707
- "data-slot": "audio-player-time",
708
- className: chunkOR5DRJCW_cjs.cn(
709
- "font-mono text-xs tabular-nums",
710
- isShowingHoverTime ? "text-primary-600 dark:text-primary-400" : "text-neutral-500 dark:text-neutral-400"
711
- ),
712
- children: [
713
- formatTime(displayTime),
714
- " / ",
715
- formatTime(displayDuration)
716
- ]
717
- }
656
+ setState("idle");
657
+ onTimeUpdate?.(currentTime, dur);
658
+ },
659
+ [currentTime, onTimeUpdate]
718
660
  );
719
- };
720
- const renderPlaybackRateControl = () => {
721
- if (!showPlaybackRate) return null;
722
- return /* @__PURE__ */ jsxRuntime.jsx(
723
- "select",
661
+ const handleWaveformTimeUpdate = React__namespace.useCallback(
662
+ (time, dur) => {
663
+ setCurrentTime(time);
664
+ if (dur > 0) {
665
+ setDuration(dur);
666
+ }
667
+ onTimeUpdate?.(time, dur);
668
+ },
669
+ [onTimeUpdate]
670
+ );
671
+ const handleWaveformFinish = React__namespace.useCallback(() => {
672
+ updateState("idle");
673
+ setCurrentTime(0);
674
+ onEnded?.();
675
+ }, [updateState, onEnded]);
676
+ const handleWaveformSeek = React__namespace.useCallback((time) => {
677
+ setCurrentTime(time);
678
+ }, []);
679
+ const handleHoverTimeChange = React__namespace.useCallback((time) => {
680
+ setHoverTime(time);
681
+ }, []);
682
+ const iconSize = size === "sm" ? "h-3.5 w-3.5" : size === "lg" ? "h-5 w-5" : "h-4 w-4";
683
+ const getAriaLabel = () => {
684
+ if (ariaLabel) return ariaLabel;
685
+ if (title) return `${isPlaying ? "Pause" : "Play"} ${title}`;
686
+ return isPlaying ? "Pause audio" : "Play audio";
687
+ };
688
+ const renderPlayButton = () => /* @__PURE__ */ jsxRuntime.jsx(
689
+ "button",
724
690
  {
725
- "data-slot": "audio-player-rate",
726
- value: playbackRate,
727
- onChange: (e) => setPlaybackRate(Number(e.target.value)),
728
- className: "rounded border border-neutral-200 bg-transparent px-1 py-0.5 text-xs dark:border-neutral-700",
729
- "aria-label": "Playback speed",
730
- children: playbackRates.map((rate) => /* @__PURE__ */ jsxRuntime.jsxs("option", { value: rate, children: [
731
- rate,
732
- "x"
733
- ] }, rate))
691
+ type: "button",
692
+ "data-slot": "audio-player-play-btn",
693
+ onClick: handlePlay,
694
+ disabled: disabled || isLoading,
695
+ className: chunkOR5DRJCW_cjs.cn(playButtonVariants({ variant, size })),
696
+ "aria-label": getAriaLabel(),
697
+ "aria-pressed": isPlaying,
698
+ children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(SpinnerIcon, { className: iconSize }) : isPlaying ? /* @__PURE__ */ jsxRuntime.jsx(PauseIcon, { className: iconSize }) : /* @__PURE__ */ jsxRuntime.jsx(PlayIcon, { className: iconSize })
734
699
  }
735
700
  );
736
- };
737
- if (variant === "inline") {
701
+ const renderTime = (useHoverTime = false) => {
702
+ if (!showTime) return null;
703
+ const displayTime = useHoverTime && hoverTime !== null ? hoverTime : currentTime;
704
+ const isShowingHoverTime = useHoverTime && hoverTime !== null;
705
+ return /* @__PURE__ */ jsxRuntime.jsxs(
706
+ "span",
707
+ {
708
+ "data-slot": "audio-player-time",
709
+ className: chunkOR5DRJCW_cjs.cn(
710
+ "font-mono text-xs tabular-nums",
711
+ isShowingHoverTime ? "text-primary-800 dark:text-primary-400" : "text-muted-foreground"
712
+ ),
713
+ children: [
714
+ formatTime(displayTime),
715
+ " / ",
716
+ formatTime(displayDuration)
717
+ ]
718
+ }
719
+ );
720
+ };
721
+ const renderPlaybackRateControl = () => {
722
+ if (!showPlaybackRate) return null;
723
+ return /* @__PURE__ */ jsxRuntime.jsx(
724
+ "select",
725
+ {
726
+ "data-slot": "audio-player-rate",
727
+ value: playbackRate,
728
+ onChange: (e) => setPlaybackRate(Number(e.target.value)),
729
+ className: "rounded border border-neutral-200 bg-transparent px-1 py-0.5 text-xs dark:border-neutral-700",
730
+ "aria-label": "Playback speed",
731
+ children: playbackRates.map((rate) => /* @__PURE__ */ jsxRuntime.jsxs("option", { value: rate, children: [
732
+ rate,
733
+ "x"
734
+ ] }, rate))
735
+ }
736
+ );
737
+ };
738
+ if (variant === "inline") {
739
+ return /* @__PURE__ */ jsxRuntime.jsxs(
740
+ "div",
741
+ {
742
+ ref: containerRef,
743
+ "data-slot": "audio-player",
744
+ "data-variant": "inline",
745
+ className: chunkOR5DRJCW_cjs.cn(audioPlayerVariants({ variant, size }), className),
746
+ children: [
747
+ renderPlayButton(),
748
+ title && /* @__PURE__ */ jsxRuntime.jsx(
749
+ "span",
750
+ {
751
+ "data-slot": "audio-player-title",
752
+ className: "text-sm font-medium text-neutral-700 dark:text-neutral-300",
753
+ children: title
754
+ }
755
+ ),
756
+ showDuration && displayDuration > 0 && /* @__PURE__ */ jsxRuntime.jsx(
757
+ "span",
758
+ {
759
+ "data-slot": "audio-player-duration",
760
+ className: "font-mono text-xs text-neutral-500 tabular-nums dark:text-neutral-400",
761
+ children: isPlaying ? formatTime(currentTime) : formatTime(displayDuration)
762
+ }
763
+ )
764
+ ]
765
+ }
766
+ );
767
+ }
768
+ if (variant === "compact") {
769
+ return /* @__PURE__ */ jsxRuntime.jsxs(
770
+ "div",
771
+ {
772
+ ref: containerRef,
773
+ "data-slot": "audio-player",
774
+ "data-variant": "compact",
775
+ className: chunkOR5DRJCW_cjs.cn(audioPlayerVariants({ variant, size }), className),
776
+ children: [
777
+ renderPlayButton(),
778
+ /* @__PURE__ */ jsxRuntime.jsx(
779
+ ProgressBar,
780
+ {
781
+ currentTime,
782
+ duration: displayDuration,
783
+ onSeek: handleSeek,
784
+ disabled
785
+ }
786
+ ),
787
+ renderTime(),
788
+ renderPlaybackRateControl()
789
+ ]
790
+ }
791
+ );
792
+ }
738
793
  return /* @__PURE__ */ jsxRuntime.jsxs(
739
794
  "div",
740
795
  {
741
796
  ref: containerRef,
742
797
  "data-slot": "audio-player",
743
- "data-variant": "inline",
798
+ "data-variant": "waveform",
744
799
  className: chunkOR5DRJCW_cjs.cn(audioPlayerVariants({ variant, size }), className),
745
800
  children: [
746
- renderPlayButton(),
747
801
  title && /* @__PURE__ */ jsxRuntime.jsx(
748
802
  "span",
749
803
  {
@@ -752,96 +806,44 @@ var AudioPlayer = React__namespace.forwardRef(function AudioPlayer2({
752
806
  children: title
753
807
  }
754
808
  ),
755
- showDuration && displayDuration > 0 && /* @__PURE__ */ jsxRuntime.jsx(
756
- "span",
757
- {
758
- "data-slot": "audio-player-duration",
759
- className: "font-mono text-xs text-neutral-500 tabular-nums dark:text-neutral-400",
760
- children: isPlaying ? formatTime(currentTime) : formatTime(displayDuration)
761
- }
762
- )
763
- ]
764
- }
765
- );
766
- }
767
- if (variant === "compact") {
768
- return /* @__PURE__ */ jsxRuntime.jsxs(
769
- "div",
770
- {
771
- ref: containerRef,
772
- "data-slot": "audio-player",
773
- "data-variant": "compact",
774
- className: chunkOR5DRJCW_cjs.cn(audioPlayerVariants({ variant, size }), className),
775
- children: [
776
- renderPlayButton(),
777
809
  /* @__PURE__ */ jsxRuntime.jsx(
778
- ProgressBar,
810
+ Waveform,
779
811
  {
780
- currentTime,
781
- duration: displayDuration,
782
- onSeek: handleSeek,
783
- disabled
812
+ src,
813
+ isPlaying,
814
+ playbackRate,
815
+ onReady: handleWaveformReady,
816
+ onTimeUpdate: handleWaveformTimeUpdate,
817
+ onFinish: handleWaveformFinish,
818
+ onSeek: handleWaveformSeek,
819
+ waveColor,
820
+ progressColor,
821
+ height: waveformHeight,
822
+ showHoverCursor: showWaveformHoverCursor,
823
+ onHoverTimeChange: handleHoverTimeChange,
824
+ cursorColor: waveformCursorColor,
825
+ waveformRef: waveformMethodsRef
784
826
  }
785
827
  ),
786
- renderTime(),
787
- renderPlaybackRateControl()
828
+ /* @__PURE__ */ jsxRuntime.jsxs(
829
+ "div",
830
+ {
831
+ "data-slot": "audio-player-controls",
832
+ className: "flex items-center gap-3",
833
+ children: [
834
+ renderPlayButton(),
835
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-1 items-center justify-between", children: [
836
+ renderTime(true),
837
+ renderPlaybackRateControl()
838
+ ] })
839
+ ]
840
+ }
841
+ )
788
842
  ]
789
843
  }
790
844
  );
791
845
  }
792
- return /* @__PURE__ */ jsxRuntime.jsxs(
793
- "div",
794
- {
795
- ref: containerRef,
796
- "data-slot": "audio-player",
797
- "data-variant": "waveform",
798
- className: chunkOR5DRJCW_cjs.cn(audioPlayerVariants({ variant, size }), className),
799
- children: [
800
- title && /* @__PURE__ */ jsxRuntime.jsx(
801
- "span",
802
- {
803
- "data-slot": "audio-player-title",
804
- className: "text-sm font-medium text-neutral-700 dark:text-neutral-300",
805
- children: title
806
- }
807
- ),
808
- /* @__PURE__ */ jsxRuntime.jsx(
809
- Waveform,
810
- {
811
- src,
812
- isPlaying,
813
- playbackRate,
814
- onReady: handleWaveformReady,
815
- onTimeUpdate: handleWaveformTimeUpdate,
816
- onFinish: handleWaveformFinish,
817
- onSeek: handleWaveformSeek,
818
- waveColor,
819
- progressColor,
820
- height: waveformHeight,
821
- showHoverCursor: showWaveformHoverCursor,
822
- onHoverTimeChange: handleHoverTimeChange,
823
- cursorColor: waveformCursorColor,
824
- waveformRef: waveformMethodsRef
825
- }
826
- ),
827
- /* @__PURE__ */ jsxRuntime.jsxs(
828
- "div",
829
- {
830
- "data-slot": "audio-player-controls",
831
- className: "flex items-center gap-3",
832
- children: [
833
- renderPlayButton(),
834
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-1 items-center justify-between", children: [
835
- renderTime(true),
836
- renderPlaybackRateControl()
837
- ] })
838
- ]
839
- }
840
- )
841
- ]
842
- }
843
- );
844
- });
846
+ );
845
847
  AudioPlayer.displayName = "AudioPlayer";
846
848
 
847
849
  exports.AudioPlayer = AudioPlayer;
@@ -849,5 +851,5 @@ exports.ProgressBar = ProgressBar;
849
851
  exports.audioPlayerVariants = audioPlayerVariants;
850
852
  exports.formatTime = formatTime;
851
853
  exports.playButtonVariants = playButtonVariants;
852
- //# sourceMappingURL=chunk-GPBQCGKA.cjs.map
853
- //# sourceMappingURL=chunk-GPBQCGKA.cjs.map
854
+ //# sourceMappingURL=chunk-DT4CHRTJ.cjs.map
855
+ //# sourceMappingURL=chunk-DT4CHRTJ.cjs.map