lyrics-transcriber 0.44.0__py3-none-any.whl → 0.46.0__py3-none-any.whl

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 (29) hide show
  1. lyrics_transcriber/frontend/.yarn/releases/{yarn-4.6.0.cjs → yarn-4.7.0.cjs} +292 -291
  2. lyrics_transcriber/frontend/.yarnrc.yml +1 -1
  3. lyrics_transcriber/frontend/dist/assets/{index-DVoI6Z16.js → index-BXOpmKq-.js} +2715 -2030
  4. lyrics_transcriber/frontend/dist/assets/index-BXOpmKq-.js.map +1 -0
  5. lyrics_transcriber/frontend/dist/index.html +1 -1
  6. lyrics_transcriber/frontend/package.json +1 -1
  7. lyrics_transcriber/frontend/src/App.tsx +1 -1
  8. lyrics_transcriber/frontend/src/components/EditActionBar.tsx +68 -0
  9. lyrics_transcriber/frontend/src/components/EditModal.tsx +376 -303
  10. lyrics_transcriber/frontend/src/components/EditTimelineSection.tsx +373 -0
  11. lyrics_transcriber/frontend/src/components/EditWordList.tsx +308 -0
  12. lyrics_transcriber/frontend/src/components/Header.tsx +8 -23
  13. lyrics_transcriber/frontend/src/components/LyricsAnalyzer.tsx +460 -62
  14. lyrics_transcriber/frontend/src/components/ReferenceView.tsx +3 -1
  15. lyrics_transcriber/frontend/src/components/TranscriptionView.tsx +7 -7
  16. lyrics_transcriber/frontend/src/components/WordDivider.tsx +4 -3
  17. lyrics_transcriber/frontend/src/components/shared/components/HighlightedText.tsx +4 -2
  18. lyrics_transcriber/frontend/src/components/shared/components/SourceSelector.tsx +26 -3
  19. lyrics_transcriber/frontend/src/components/shared/components/Word.tsx +1 -1
  20. lyrics_transcriber/frontend/src/components/shared/types.ts +2 -0
  21. lyrics_transcriber/frontend/src/components/shared/utils/keyboardHandlers.ts +68 -46
  22. lyrics_transcriber/frontend/tsconfig.tsbuildinfo +1 -1
  23. {lyrics_transcriber-0.44.0.dist-info → lyrics_transcriber-0.46.0.dist-info}/METADATA +1 -1
  24. {lyrics_transcriber-0.44.0.dist-info → lyrics_transcriber-0.46.0.dist-info}/RECORD +27 -25
  25. lyrics_transcriber/frontend/dist/assets/index-DVoI6Z16.js.map +0 -1
  26. lyrics_transcriber/frontend/src/components/GlobalSyncEditor.tsx +0 -675
  27. {lyrics_transcriber-0.44.0.dist-info → lyrics_transcriber-0.46.0.dist-info}/LICENSE +0 -0
  28. {lyrics_transcriber-0.44.0.dist-info → lyrics_transcriber-0.46.0.dist-info}/WHEEL +0 -0
  29. {lyrics_transcriber-0.44.0.dist-info → lyrics_transcriber-0.46.0.dist-info}/entry_points.txt +0 -0
@@ -34,7 +34,8 @@ export default function ReferenceView({
34
34
  highlightInfo,
35
35
  mode,
36
36
  gaps,
37
- corrections
37
+ corrections,
38
+ onAddLyrics
38
39
  }: ReferenceViewProps) {
39
40
  // Get available sources from referenceSources object
40
41
  const availableSources = useMemo(() =>
@@ -183,6 +184,7 @@ export default function ReferenceView({
183
184
  availableSources={availableSources}
184
185
  currentSource={effectiveCurrentSource}
185
186
  onSourceChange={onSourceChange}
187
+ onAddLyrics={onAddLyrics}
186
188
  />
187
189
  </Box>
188
190
  <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.2 }}>
@@ -63,8 +63,8 @@ export default function TranscriptionView({
63
63
  {data.corrected_segments.map((segment, segmentIndex) => {
64
64
  const segmentWords: TranscriptionWordPosition[] = segment.words.map(word => {
65
65
  // Find if this word is part of a correction
66
- const correction = data.corrections?.find(c =>
67
- c.corrected_word_id === word.id ||
66
+ const correction = data.corrections?.find(c =>
67
+ c.corrected_word_id === word.id ||
68
68
  c.word_id === word.id
69
69
  )
70
70
 
@@ -109,10 +109,10 @@ export default function TranscriptionView({
109
109
  })
110
110
 
111
111
  return (
112
- <Box key={segment.id} sx={{
113
- display: 'flex',
114
- alignItems: 'flex-start',
115
- width: '100%',
112
+ <Box key={segment.id} sx={{
113
+ display: 'flex',
114
+ alignItems: 'flex-start',
115
+ width: '100%',
116
116
  mb: 0,
117
117
  '&:hover': {
118
118
  backgroundColor: 'rgba(0, 0, 0, 0.03)'
@@ -129,7 +129,7 @@ export default function TranscriptionView({
129
129
  <IconButton
130
130
  size="small"
131
131
  onClick={() => onPlaySegment?.(segment.start_time!)}
132
- sx={{
132
+ sx={{
133
133
  padding: '1px',
134
134
  height: '18px',
135
135
  width: '18px',
@@ -2,6 +2,7 @@ import { Box, Button, Typography } from '@mui/material'
2
2
  import AddIcon from '@mui/icons-material/Add'
3
3
  import MergeIcon from '@mui/icons-material/CallMerge'
4
4
  import CallSplitIcon from '@mui/icons-material/CallSplit'
5
+ import { SxProps, Theme } from '@mui/material/styles'
5
6
 
6
7
  interface WordDividerProps {
7
8
  onAddWord: () => void
@@ -13,7 +14,7 @@ interface WordDividerProps {
13
14
  canMerge?: boolean
14
15
  isFirst?: boolean
15
16
  isLast?: boolean
16
- sx?: any
17
+ sx?: SxProps<Theme>
17
18
  }
18
19
 
19
20
  const buttonTextStyle = {
@@ -83,7 +84,7 @@ export default function WordDivider({
83
84
  Add Word
84
85
  </Typography>
85
86
  </Button>
86
- {isFirst && (
87
+ {isFirst && onAddSegmentBefore && onMergeSegment && (
87
88
  <>
88
89
  <Button
89
90
  onClick={onAddSegmentBefore}
@@ -148,7 +149,7 @@ export default function WordDivider({
148
149
  </Typography>
149
150
  </Button>
150
151
  )}
151
- {isLast && (
152
+ {isLast && onAddSegmentAfter && onMergeSegment && (
152
153
  <>
153
154
  <Button
154
155
  onClick={onAddSegmentAfter}
@@ -181,7 +181,8 @@ export function HighlightedText({
181
181
  return correction ? {
182
182
  originalWord: correction.original_word,
183
183
  handler: correction.handler,
184
- confidence: correction.confidence
184
+ confidence: correction.confidence,
185
+ source: correction.source
185
186
  } : null;
186
187
  })()}
187
188
  />
@@ -219,7 +220,8 @@ export function HighlightedText({
219
220
  const correctionInfo = correction ? {
220
221
  originalWord: correction.original_word,
221
222
  handler: correction.handler,
222
- confidence: correction.confidence
223
+ confidence: correction.confidence,
224
+ source: correction.source
223
225
  } : null;
224
226
 
225
227
  return (
@@ -1,21 +1,23 @@
1
1
  import { Box, Button } from '@mui/material'
2
+ import AddIcon from '@mui/icons-material/Add'
2
3
 
3
4
  export interface SourceSelectorProps {
4
5
  currentSource: string
5
6
  onSourceChange: (source: string) => void
6
7
  availableSources: string[]
8
+ onAddLyrics?: () => void
7
9
  }
8
10
 
9
- export function SourceSelector({ currentSource, onSourceChange, availableSources }: SourceSelectorProps) {
11
+ export function SourceSelector({ currentSource, onSourceChange, availableSources, onAddLyrics }: SourceSelectorProps) {
10
12
  return (
11
- <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 0.3 }}>
13
+ <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 0.3, alignItems: 'center' }}>
12
14
  {availableSources.map((source) => (
13
15
  <Button
14
16
  key={source}
15
17
  size="small"
16
18
  variant={currentSource === source ? 'contained' : 'outlined'}
17
19
  onClick={() => onSourceChange(source)}
18
- sx={{
20
+ sx={{
19
21
  mr: 0,
20
22
  py: 0.2,
21
23
  px: 0.8,
@@ -28,6 +30,27 @@ export function SourceSelector({ currentSource, onSourceChange, availableSources
28
30
  {source.charAt(0).toUpperCase() + source.slice(1)}
29
31
  </Button>
30
32
  ))}
33
+ {onAddLyrics && (
34
+ <Button
35
+ size="small"
36
+ variant="outlined"
37
+ onClick={onAddLyrics}
38
+ startIcon={<AddIcon sx={{ fontSize: '0.9rem' }} />}
39
+ sx={{
40
+ mr: 0,
41
+ py: 0.2,
42
+ px: 0.8,
43
+ minWidth: 'auto',
44
+ fontSize: '0.7rem',
45
+ lineHeight: 1.2,
46
+ '& .MuiButton-startIcon': {
47
+ marginLeft: '-5px',
48
+ marginRight: '1px',
49
+ marginTop: '-1px'
50
+ }
51
+ }}
52
+ >New</Button>
53
+ )}
31
54
  </Box>
32
55
  )
33
56
  }
@@ -62,7 +62,7 @@ export const WordComponent = React.memo(function Word({
62
62
  <>
63
63
  <strong>Original:</strong> "{correction.originalWord}"<br />
64
64
  <strong>Corrected by:</strong> {correction.handler}<br />
65
- <strong>Confidence:</strong> {(correction.confidence * 100).toFixed(0)}%
65
+ <strong>Source:</strong> {correction.source}
66
66
  </>
67
67
  )
68
68
 
@@ -62,6 +62,7 @@ export interface WordProps {
62
62
  originalWord: string
63
63
  handler: string
64
64
  confidence: number
65
+ source: string
65
66
  } | null
66
67
  }
67
68
 
@@ -100,6 +101,7 @@ export interface ReferenceViewProps extends BaseViewProps {
100
101
  onSourceChange: (source: string) => void
101
102
  corrected_segments: LyricsSegment[]
102
103
  corrections: WordCorrection[]
104
+ onAddLyrics?: () => void
103
105
  }
104
106
 
105
107
  // Update HighlightedTextProps to include linePositions
@@ -1,6 +1,7 @@
1
1
  // Add a global ref for the modal handler
2
2
  let currentModalHandler: ((e: KeyboardEvent) => void) | undefined
3
3
  let isModalOpen = false
4
+ const debugLog = false
4
5
 
5
6
  type KeyboardState = {
6
7
  setIsShiftPressed: (value: boolean) => void
@@ -13,36 +14,45 @@ type KeyboardState = {
13
14
 
14
15
  // Add functions to update the modal handler state
15
16
  export const setModalHandler = (handler: ((e: KeyboardEvent) => void) | undefined, open: boolean) => {
16
- console.log('setModalHandler called', {
17
- hasHandler: !!handler,
18
- open,
19
- previousState: {
20
- hadHandler: !!currentModalHandler,
21
- wasOpen: isModalOpen
22
- }
23
- })
17
+ if (debugLog) {
18
+ console.log('setModalHandler called', {
19
+ hasHandler: !!handler,
20
+ open,
21
+ previousState: {
22
+ hadHandler: !!currentModalHandler,
23
+ wasOpen: isModalOpen
24
+ }
25
+ })
26
+ }
27
+
24
28
  currentModalHandler = handler
25
29
  isModalOpen = open
26
30
  }
27
31
 
28
32
  export const setupKeyboardHandlers = (state: KeyboardState) => {
29
33
  const handlerId = Math.random().toString(36).substr(2, 9)
30
- console.log(`Setting up keyboard handlers [${handlerId}]`)
34
+ if (debugLog) {
35
+ console.log(`Setting up keyboard handlers [${handlerId}]`)
36
+ }
31
37
 
32
38
  const handleKeyDown = (e: KeyboardEvent) => {
33
- console.log(`Keyboard event captured [${handlerId}]`, {
34
- key: e.key,
35
- code: e.code,
36
- type: e.type,
37
- target: e.target,
38
- currentTarget: e.currentTarget,
39
- eventPhase: e.eventPhase,
40
- isModalOpen,
41
- hasModalHandler: !!currentModalHandler
42
- })
39
+ if (debugLog) {
40
+ console.log(`Keyboard event captured [${handlerId}]`, {
41
+ key: e.key,
42
+ code: e.code,
43
+ type: e.type,
44
+ target: e.target,
45
+ currentTarget: e.currentTarget,
46
+ eventPhase: e.eventPhase,
47
+ isModalOpen,
48
+ hasModalHandler: !!currentModalHandler
49
+ })
50
+ }
43
51
 
44
52
  if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) {
45
- console.log(`[${handlerId}] Ignoring keydown in input/textarea`)
53
+ if (debugLog) {
54
+ console.log(`[${handlerId}] Ignoring keydown in input/textarea`)
55
+ }
46
56
  return
47
57
  }
48
58
 
@@ -52,37 +62,45 @@ export const setupKeyboardHandlers = (state: KeyboardState) => {
52
62
  } else if (e.key === 'Meta') {
53
63
  state.setIsCtrlPressed?.(true)
54
64
  } else if (e.key === ' ' || e.code === 'Space') {
55
- console.log('Keyboard handler - Spacebar pressed down', {
56
- modalOpen: isModalOpen,
57
- hasModalHandler: !!currentModalHandler,
58
- hasGlobalToggle: !!window.toggleAudioPlayback,
59
- target: e.target,
60
- eventPhase: e.eventPhase,
61
- handlerFunction: currentModalHandler?.toString().slice(0, 100)
62
- })
65
+ if (debugLog) {
66
+ console.log('Keyboard handler - Spacebar pressed down', {
67
+ modalOpen: isModalOpen,
68
+ hasModalHandler: !!currentModalHandler,
69
+ hasGlobalToggle: !!window.toggleAudioPlayback,
70
+ target: e.target,
71
+ eventPhase: e.eventPhase,
72
+ handlerFunction: currentModalHandler?.toString().slice(0, 100)
73
+ })
74
+ }
63
75
 
64
76
  e.preventDefault()
65
77
 
66
78
  if (isModalOpen && currentModalHandler) {
67
- console.log('Keyboard handler - Delegating to modal handler')
79
+ if (debugLog) {
80
+ console.log('Keyboard handler - Delegating to modal handler')
81
+ }
68
82
  currentModalHandler(e)
69
83
  } else if (window.toggleAudioPlayback && !isModalOpen) {
70
- console.log('Keyboard handler - Using global audio toggle')
84
+ if (debugLog) {
85
+ console.log('Keyboard handler - Using global audio toggle')
86
+ }
71
87
  window.toggleAudioPlayback()
72
88
  }
73
89
  }
74
90
  }
75
91
 
76
92
  const handleKeyUp = (e: KeyboardEvent) => {
77
- console.log(`Keyboard up event captured [${handlerId}]`, {
78
- key: e.key,
79
- code: e.code,
80
- type: e.type,
81
- target: e.target,
82
- eventPhase: e.eventPhase,
83
- isModalOpen,
84
- hasModalHandler: !!currentModalHandler
85
- })
93
+ if (debugLog) {
94
+ console.log(`Keyboard up event captured [${handlerId}]`, {
95
+ key: e.key,
96
+ code: e.code,
97
+ type: e.type,
98
+ target: e.target,
99
+ eventPhase: e.eventPhase,
100
+ isModalOpen,
101
+ hasModalHandler: !!currentModalHandler
102
+ })
103
+ }
86
104
 
87
105
  if (e.key === 'Shift') {
88
106
  state.setIsShiftPressed(false)
@@ -90,17 +108,21 @@ export const setupKeyboardHandlers = (state: KeyboardState) => {
90
108
  } else if (e.key === 'Meta') {
91
109
  state.setIsCtrlPressed?.(false)
92
110
  } else if (e.key === ' ' || e.code === 'Space') {
93
- console.log('Keyboard handler - Spacebar released', {
94
- modalOpen: isModalOpen,
95
- hasModalHandler: !!currentModalHandler,
96
- target: e.target,
97
- eventPhase: e.eventPhase
98
- })
111
+ if (debugLog) {
112
+ console.log('Keyboard handler - Spacebar released', {
113
+ modalOpen: isModalOpen,
114
+ hasModalHandler: !!currentModalHandler,
115
+ target: e.target,
116
+ eventPhase: e.eventPhase
117
+ })
118
+ }
99
119
 
100
120
  e.preventDefault()
101
121
 
102
122
  if (isModalOpen && currentModalHandler) {
103
- console.log('Keyboard handler - Delegating keyup to modal handler')
123
+ if (debugLog) {
124
+ console.log('Keyboard handler - Delegating keyup to modal handler')
125
+ }
104
126
  currentModalHandler(e)
105
127
  }
106
128
  }
@@ -1 +1 @@
1
- {"root":["./src/app.tsx","./src/api.ts","./src/main.tsx","./src/theme.ts","./src/types.ts","./src/validation.ts","./src/vite-env.d.ts","./src/components/addlyricsmodal.tsx","./src/components/audioplayer.tsx","./src/components/correctionmetrics.tsx","./src/components/editmodal.tsx","./src/components/fileupload.tsx","./src/components/findreplacemodal.tsx","./src/components/globalsynceditor.tsx","./src/components/header.tsx","./src/components/lyricsanalyzer.tsx","./src/components/modeselector.tsx","./src/components/previewvideosection.tsx","./src/components/referenceview.tsx","./src/components/reviewchangesmodal.tsx","./src/components/segmentdetailsmodal.tsx","./src/components/timelineeditor.tsx","./src/components/transcriptionview.tsx","./src/components/worddivider.tsx","./src/components/shared/constants.ts","./src/components/shared/styles.ts","./src/components/shared/types.ts","./src/components/shared/components/highlightedtext.tsx","./src/components/shared/components/sourceselector.tsx","./src/components/shared/components/word.tsx","./src/components/shared/hooks/usewordclick.ts","./src/components/shared/utils/keyboardhandlers.ts","./src/components/shared/utils/localstorage.ts","./src/components/shared/utils/referencelinecalculator.ts","./src/components/shared/utils/segmentoperations.ts","./src/components/shared/utils/wordutils.ts","./src/hooks/usemanualsync.ts","./src/types/global.d.ts"],"version":"5.6.3"}
1
+ {"root":["./src/app.tsx","./src/api.ts","./src/main.tsx","./src/theme.ts","./src/types.ts","./src/validation.ts","./src/vite-env.d.ts","./src/components/addlyricsmodal.tsx","./src/components/audioplayer.tsx","./src/components/correctionmetrics.tsx","./src/components/editactionbar.tsx","./src/components/editmodal.tsx","./src/components/edittimelinesection.tsx","./src/components/editwordlist.tsx","./src/components/fileupload.tsx","./src/components/findreplacemodal.tsx","./src/components/header.tsx","./src/components/lyricsanalyzer.tsx","./src/components/modeselector.tsx","./src/components/previewvideosection.tsx","./src/components/referenceview.tsx","./src/components/reviewchangesmodal.tsx","./src/components/segmentdetailsmodal.tsx","./src/components/timelineeditor.tsx","./src/components/transcriptionview.tsx","./src/components/worddivider.tsx","./src/components/shared/constants.ts","./src/components/shared/styles.ts","./src/components/shared/types.ts","./src/components/shared/components/highlightedtext.tsx","./src/components/shared/components/sourceselector.tsx","./src/components/shared/components/word.tsx","./src/components/shared/hooks/usewordclick.ts","./src/components/shared/utils/keyboardhandlers.ts","./src/components/shared/utils/localstorage.ts","./src/components/shared/utils/referencelinecalculator.ts","./src/components/shared/utils/segmentoperations.ts","./src/components/shared/utils/wordutils.ts","./src/hooks/usemanualsync.ts","./src/types/global.d.ts"],"version":"5.6.3"}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: lyrics-transcriber
3
- Version: 0.44.0
3
+ Version: 0.46.0
4
4
  Summary: Automatically create synchronised lyrics files in ASS and MidiCo LRC formats with word-level timestamps, using Whisper and lyrics from Genius and Spotify
5
5
  License: MIT
6
6
  Author: Andrew Beveridge
@@ -23,45 +23,47 @@ lyrics_transcriber/correction/phrase_analyzer.py,sha256=dtO_2LjxnPdHJM7De40mYIdH
23
23
  lyrics_transcriber/correction/text_utils.py,sha256=z4eiTBCmkNeTUvxG_RpR1Zwg0cbMPKFyxVaKAvLAk88,761
24
24
  lyrics_transcriber/frontend/.gitignore,sha256=lgGIPiVpFVUNSZl9oNQLelLOWUzpF7sikLW8xmsrrqI,248
25
25
  lyrics_transcriber/frontend/.yarn/install-state.gz,sha256=kcgQ-S9HvdNHexkXQVt18LWUpqtP2mdyRfjJV1htFAc,345895
26
- lyrics_transcriber/frontend/.yarn/releases/yarn-4.6.0.cjs,sha256=6vHuq8FkpEygtl29zNVK9-VfP_kpSz_zGNWq7JLysgs,2764946
27
- lyrics_transcriber/frontend/.yarnrc.yml,sha256=RIUAbDBlfdQoS1V4MjkeMHzQqi4cvIWSzY5T3gEB_1I,66
26
+ lyrics_transcriber/frontend/.yarn/releases/yarn-4.7.0.cjs,sha256=KTYy2KCV2OpHhussV5jIPDdUSr7RftMRhqPsRUmgfAY,2765465
27
+ lyrics_transcriber/frontend/.yarnrc.yml,sha256=0hZQ1OTcPqTUNBqQeme4VFkIzrsabHNzLtc_M-wSgIM,66
28
28
  lyrics_transcriber/frontend/README.md,sha256=-D6CAfKTT7Y0V3EjlZ2fMy7fyctFQ4x2TJ9vx6xtccM,1607
29
- lyrics_transcriber/frontend/dist/assets/index-DVoI6Z16.js,sha256=2xxswQwdYHoQRNsV7gz9OHtwDH4yTOFTpT3mU3Eej2Q,1211733
30
- lyrics_transcriber/frontend/dist/assets/index-DVoI6Z16.js.map,sha256=AMz62uaShqqb0KqsQpCXOf6piu57QfAvzoIKzkYki7s,2550722
31
- lyrics_transcriber/frontend/dist/index.html,sha256=T5hrDDR_1fDv6yEAqbpqhIaDN8PH3eKuB1J7bLf1xGA,400
29
+ lyrics_transcriber/frontend/dist/assets/index-BXOpmKq-.js,sha256=fJYGO_HEfgSg_5A6_NK1Ee1f2kP_Qkp7JVcDe2ymvj4,1226990
30
+ lyrics_transcriber/frontend/dist/assets/index-BXOpmKq-.js.map,sha256=cgcHxY4eVWppSWSJ-ucIom6w9cuk47hay-wy8jlwD9k,2606947
31
+ lyrics_transcriber/frontend/dist/index.html,sha256=48OalxiOQ5ZEiPndZ-7VH4wb0wbeXzFH6VNWzRz1tqc,400
32
32
  lyrics_transcriber/frontend/dist/vite.svg,sha256=SnSK_UQ5GLsWWRyDTEAdrjPoeGGrXbrQgRw6O0qSFPs,1497
33
33
  lyrics_transcriber/frontend/eslint.config.js,sha256=3ADH23ANA4NNBKFy6nCVk65e8bx1DrVd_FIaYNnhuqA,734
34
34
  lyrics_transcriber/frontend/index.html,sha256=KfqJVONzpUyPIwV73nZRiCWlwLnFWeB3z0vzxDPNudU,376
35
- lyrics_transcriber/frontend/package.json,sha256=kQ0_UiU4xp8wnu-hbTBTAxUB6S_cQMzHM83Dmm5x70s,1181
35
+ lyrics_transcriber/frontend/package.json,sha256=Jhcrbko3OfV2YYc0JCkluoEFMTXq8EEqYm5gcI7O8SU,1181
36
36
  lyrics_transcriber/frontend/public/vite.svg,sha256=SnSK_UQ5GLsWWRyDTEAdrjPoeGGrXbrQgRw6O0qSFPs,1497
37
- lyrics_transcriber/frontend/src/App.tsx,sha256=oS1p02iwKv76-psVVFYW8fIWVN3CSG4DjfTrPvJP9m4,6530
37
+ lyrics_transcriber/frontend/src/App.tsx,sha256=f1-dp-MU8vap18eAXacwVDO5P4eE2iG9zSvjau-7NJs,6533
38
38
  lyrics_transcriber/frontend/src/api.ts,sha256=UgqPc1jo8DEVgxh3_9Lyf9GBsHYpqMAqsPEE5BzTV4w,6640
39
39
  lyrics_transcriber/frontend/src/components/AddLyricsModal.tsx,sha256=ubJwQewryjUrXwpBkITQNu4POhoUtDbNA93cqa-yJKY,3416
40
40
  lyrics_transcriber/frontend/src/components/AudioPlayer.tsx,sha256=amjYyYW6HZ9TD5RwqQLSmGbwk-5Ec9mtXza3F3045n4,5337
41
41
  lyrics_transcriber/frontend/src/components/CorrectionMetrics.tsx,sha256=CoTZS9Z3pf4lfPrzpQ2hZvLqFvt-IarSGBSCxFxD-y4,6274
42
- lyrics_transcriber/frontend/src/components/EditModal.tsx,sha256=f1AoMcutIXnOhH5dU67BUpIp6upucGUi8FK6oBekB5A,24490
42
+ lyrics_transcriber/frontend/src/components/EditActionBar.tsx,sha256=nLRVA3m3bQFqLtqlYasn7WeZNXvPvpG0sXuIv5QXvDc,2174
43
+ lyrics_transcriber/frontend/src/components/EditModal.tsx,sha256=f2JUYKvFmREElhlmHY545HQinwTtE5aTyQ_9x_qmKQY,24541
44
+ lyrics_transcriber/frontend/src/components/EditTimelineSection.tsx,sha256=74dKgUv_Z9DxlHx2xiR-gShFehGUaMNG2XWsH-SUEOM,15165
45
+ lyrics_transcriber/frontend/src/components/EditWordList.tsx,sha256=hJPXdpW3vur9OFnnIS8xk79yWWTsOuQgy2FdWNQ8vLg,10465
43
46
  lyrics_transcriber/frontend/src/components/FileUpload.tsx,sha256=fwn2rMWtMLPTZLREMb3ps4prSf9nzxGwnjmeC6KYsJA,2383
44
47
  lyrics_transcriber/frontend/src/components/FindReplaceModal.tsx,sha256=U7duKns4IqNXwbWFbQfdyaswnvkSRpfsU0UG__-Serc,20192
45
- lyrics_transcriber/frontend/src/components/GlobalSyncEditor.tsx,sha256=KuEPB4WvCjVQDGK5rowZMTeID95VWl1Gaoha_6PLNJM,28080
46
- lyrics_transcriber/frontend/src/components/Header.tsx,sha256=3bgJ29W6WKO7FYRuBXQlqlo7-AYLHfxsG_Mr38y8W_Y,12303
47
- lyrics_transcriber/frontend/src/components/LyricsAnalyzer.tsx,sha256=piimIBZpgA25hMxlVQcvCEURZj_I6IfDY2GvZyQ-tkg,24844
48
+ lyrics_transcriber/frontend/src/components/Header.tsx,sha256=PKFMDITEyC77ndk0emOsU6LFbPTLkWmkTLxEcndKPJY,11657
49
+ lyrics_transcriber/frontend/src/components/LyricsAnalyzer.tsx,sha256=i6RFC-JB5LfURVZnAuNevci1LMxmEXjKTgGTZNj9uSQ,40701
48
50
  lyrics_transcriber/frontend/src/components/ModeSelector.tsx,sha256=OuCOqePGs5JC3NxZxrR-rDu5W5WSObuxrLVOIaqHDOs,1941
49
51
  lyrics_transcriber/frontend/src/components/PreviewVideoSection.tsx,sha256=-9_ljoaadHjAAvia_vhEUgCajPv2jFnRDVR6VWN_a0w,4166
50
- lyrics_transcriber/frontend/src/components/ReferenceView.tsx,sha256=QfK-VzpPcS4iUcYN6iAWE3yQK4rWQJJ-D80DzgixI3I,9436
52
+ lyrics_transcriber/frontend/src/components/ReferenceView.tsx,sha256=thpf2ojge9pvZojUnGaiQroeHfBmxhUesO7945RGSfk,9499
51
53
  lyrics_transcriber/frontend/src/components/ReviewChangesModal.tsx,sha256=zcGoIu5Iqs4ZXpGr3yeMIEKPf8FRLCP2i1TzNOmKzg0,13048
52
54
  lyrics_transcriber/frontend/src/components/SegmentDetailsModal.tsx,sha256=6ME02FkFwCgDAxW49yW260N4vbr80eAJ332Ex811GOo,1643
53
55
  lyrics_transcriber/frontend/src/components/TimelineEditor.tsx,sha256=Aa6ykDRVhWUNHcJ14KGzmUCPDCAltw9gXpdR5ogVQpc,12842
54
- lyrics_transcriber/frontend/src/components/TranscriptionView.tsx,sha256=gSs7ywxP1cPlUVlLQpXEgXuhyaqn2rZU887Kgog45Y4,7406
55
- lyrics_transcriber/frontend/src/components/WordDivider.tsx,sha256=DKA8jwD31YI6sRUvfH3NasrXAUOf-z3Iv_NBFtZiIE0,6446
56
- lyrics_transcriber/frontend/src/components/shared/components/HighlightedText.tsx,sha256=GHEpj6Hw_cUP4xKmg7sEfV4qiS0dVAVU28u2sCm8nTc,16085
57
- lyrics_transcriber/frontend/src/components/shared/components/SourceSelector.tsx,sha256=zZpnQd6RlcGlr2v6T90Eva1cdEkiWzIVE78xAaQPObA,1144
58
- lyrics_transcriber/frontend/src/components/shared/components/Word.tsx,sha256=zFblGPuy560gB0nGq6hYrZ09ygn_YRI69IiQibowQ5I,2181
56
+ lyrics_transcriber/frontend/src/components/TranscriptionView.tsx,sha256=It9alDqvlp3zu9ceEjFpqBOKDa2BFxP4AHm7v2K4AI0,7399
57
+ lyrics_transcriber/frontend/src/components/WordDivider.tsx,sha256=tOs_4WZGlJQ1o7sZFGLhwUoyX2jSKMa6vLZqa-1vzKY,6590
58
+ lyrics_transcriber/frontend/src/components/shared/components/HighlightedText.tsx,sha256=Iopa2n7ANnPtHFu2zq7vnfwQ4SOgmBUHUfNKwBQHBxY,16203
59
+ lyrics_transcriber/frontend/src/components/shared/components/SourceSelector.tsx,sha256=FpMn-0i1NFxdIHZN0dxHkWzIIsOEi9CJc_rQMpLyxVw,2031
60
+ lyrics_transcriber/frontend/src/components/shared/components/Word.tsx,sha256=4y1kyWsAO--phTwWvRgX8nAHwSKuBYKVSuJK6j8--rg,2153
59
61
  lyrics_transcriber/frontend/src/components/shared/constants.ts,sha256=25q1qjCwzV-hR72wSb_rJSe4dVuQ0l-piLMoZSpynGQ,488
60
62
  lyrics_transcriber/frontend/src/components/shared/hooks/useWordClick.ts,sha256=aRDzH144FYuK9N3Y0wyTp2c1-DJOT_Y3HWQHHGqiUsY,6196
61
63
  lyrics_transcriber/frontend/src/components/shared/styles.ts,sha256=J1jCSuRqpk1mOFYAqJudhxeozH-q1bi-dsOibLukBJU,411
62
64
  lyrics_transcriber/frontend/src/components/shared/types.js,sha256=1DqoH1vIn6o1ng-XyBS6JRVVkf8Hj7ub_UD4x8loMjA,77
63
- lyrics_transcriber/frontend/src/components/shared/types.ts,sha256=-HniySfrxsjmciMvtXu_bSNAyVHbVAZynRDTC90S5L4,3840
64
- lyrics_transcriber/frontend/src/components/shared/utils/keyboardHandlers.ts,sha256=PyzkwJMnm3FaRoX-scBUCSZHiMqhdhy6gDoEpULUVCQ,3918
65
+ lyrics_transcriber/frontend/src/components/shared/types.ts,sha256=TUjxwXxiahw0JrRUTUFk_ucUo-G16hB0Jpt8OgVULoU,3892
66
+ lyrics_transcriber/frontend/src/components/shared/utils/keyboardHandlers.ts,sha256=qtXin35bdVlitJSOmgju-WZP4QkwAJqjlYH3DuwfFPg,4522
65
67
  lyrics_transcriber/frontend/src/components/shared/utils/localStorage.ts,sha256=jpLT65Rk_toaB-8X2lRGyYZ9EoMQDI45GviUT7N9Bp0,3240
66
68
  lyrics_transcriber/frontend/src/components/shared/utils/referenceLineCalculator.ts,sha256=TJ2oHDitFFVxm83eFEhdlwvhx--mIt3054YbET2RiXs,2575
67
69
  lyrics_transcriber/frontend/src/components/shared/utils/segmentOperations.ts,sha256=m1pUrjZcAch85Xqm9EX43BuoHQjdvBjY5BZ70LWa1hk,11074
@@ -77,7 +79,7 @@ lyrics_transcriber/frontend/src/vite-env.d.ts,sha256=ZZlpNvuwQpFfe3SiAPzd5-QQ8yp
77
79
  lyrics_transcriber/frontend/tsconfig.app.json,sha256=7aUBVcaBqEtmtfQXsbwsgBxSUng06xzQi5t4QCgWQ3E,665
78
80
  lyrics_transcriber/frontend/tsconfig.json,sha256=AOS5v1AsNPL3wGc8bt58Ybh8HHpbYrlK91q0KIzaSgs,627
79
81
  lyrics_transcriber/frontend/tsconfig.node.json,sha256=oMBhK5xufBrVE7SkbADRxA3pxm8_L9m5YwtCOZSafsc,536
80
- lyrics_transcriber/frontend/tsconfig.tsbuildinfo,sha256=fJpJ17UBUxK7eUnWy-ZWbp2QftNCAqUyzJnDe_jo_Fc,1429
82
+ lyrics_transcriber/frontend/tsconfig.tsbuildinfo,sha256=F18wGtPeHvjZE8X3QcEFSzWXwT1zQP7dpWh8hpnFiHU,1505
81
83
  lyrics_transcriber/frontend/vite.config.d.ts,sha256=S5bdGf0pSdKM6A6RNBKwAm3EIeW_bDHYfHtesRtXU7Q,76
82
84
  lyrics_transcriber/frontend/vite.config.js,sha256=P4GuPgRZzwEWPQZpyujUe7eA3mjPoFAe2CgE5sQAXg8,232
83
85
  lyrics_transcriber/frontend/vite.config.ts,sha256=8FdW0dN8zDFqfhQSxX5h7sIu72X2piLYlp_TZYRQvBQ,216
@@ -146,8 +148,8 @@ lyrics_transcriber/transcribers/base_transcriber.py,sha256=T3m4ZCwZ9Bpv6Jvb2hNcn
146
148
  lyrics_transcriber/transcribers/whisper.py,sha256=YcCB1ic9H6zL1GS0jD0emu8-qlcH0QVEjjjYB4aLlIQ,13260
147
149
  lyrics_transcriber/types.py,sha256=d73cDstrEI_tVgngDYYYFwjZNs6OVBuAB_QDkga7dWA,19841
148
150
  lyrics_transcriber/utils/word_utils.py,sha256=-cMGpj9UV4F6IsoDKAV2i1aiqSO8eI91HMAm_igtVMk,958
149
- lyrics_transcriber-0.44.0.dist-info/LICENSE,sha256=BiPihPDxhxIPEx6yAxVfAljD5Bhm_XG2teCbPEj_m0Y,1069
150
- lyrics_transcriber-0.44.0.dist-info/METADATA,sha256=l736Hpfv8P3G8SKqfZ5GUJZRLt9WsMt1SQerfbc8p7I,6017
151
- lyrics_transcriber-0.44.0.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
152
- lyrics_transcriber-0.44.0.dist-info/entry_points.txt,sha256=kcp-bSFkCACAEA0t166Kek0HpaJUXRo5SlF5tVrqNBU,216
153
- lyrics_transcriber-0.44.0.dist-info/RECORD,,
151
+ lyrics_transcriber-0.46.0.dist-info/LICENSE,sha256=BiPihPDxhxIPEx6yAxVfAljD5Bhm_XG2teCbPEj_m0Y,1069
152
+ lyrics_transcriber-0.46.0.dist-info/METADATA,sha256=71tS3Z4R4N11CnTvkLAUpB4bggQAsRfVsrV3oN35930,6017
153
+ lyrics_transcriber-0.46.0.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
154
+ lyrics_transcriber-0.46.0.dist-info/entry_points.txt,sha256=kcp-bSFkCACAEA0t166Kek0HpaJUXRo5SlF5tVrqNBU,216
155
+ lyrics_transcriber-0.46.0.dist-info/RECORD,,