maze-blockly-wrapper 0.7.6 → 0.7.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -7
- package/dist/components/MusicDemo.d.ts +3 -0
- package/dist/components/music/GameControls.d.ts +11 -0
- package/dist/components/music/MusicBlocklyContainer.d.ts +41 -0
- package/dist/components/music/MusicCanvas.d.ts +14 -0
- package/dist/components/music/MusicEditor.d.ts +11 -0
- package/dist/components/music/MusicGame.d.ts +15 -0
- package/dist/components/music/MusicTabs.d.ts +21 -0
- package/dist/components/music/MusicVisualEditor.d.ts +14 -0
- package/dist/components/music/NoteDialog.d.ts +14 -0
- package/dist/components/music/audioEngine.d.ts +54 -0
- package/dist/components/music/blockly-messages.d.ts +5 -0
- package/dist/components/music/blocks.d.ts +4 -0
- package/dist/components/music/fields/FieldMusicNote.d.ts +2 -0
- package/dist/components/music/graphicsConfig.d.ts +3 -0
- package/dist/components/music/index.d.ts +12 -0
- package/dist/components/music/types.d.ts +76 -0
- package/dist/index.cjs.js +21 -9
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +21 -9
- package/dist/index.esm.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -131,16 +131,72 @@ interface MazeConfig {
|
|
|
131
131
|
```
|
|
132
132
|
|
|
133
133
|
### RunResult
|
|
134
|
+
Each game component returns a result object via the `onRunFinish` callback when specific conditions are met.
|
|
134
135
|
|
|
136
|
+
#### MazeGame Result
|
|
137
|
+
**When sent:** Triggered when the spider reaches the finish line OR when maximum moves are exceeded.
|
|
135
138
|
```typescript
|
|
136
139
|
interface RunResult {
|
|
137
|
-
steps: number;
|
|
138
|
-
reachedFinish: boolean;
|
|
139
|
-
maxMovesExceeded: boolean;
|
|
140
|
-
finalPosition: Position;
|
|
141
|
-
path: Position[];
|
|
142
|
-
executionTime: number;
|
|
143
|
-
|
|
140
|
+
steps: number; // Number of steps taken
|
|
141
|
+
reachedFinish: boolean; // True if spider reached the finish cell
|
|
142
|
+
maxMovesExceeded: boolean; // True if maxMoves limit was hit
|
|
143
|
+
finalPosition: Position; // Where the spider ended up
|
|
144
|
+
path: Position[]; // Array of positions visited (todo)
|
|
145
|
+
executionTime: number; // Time in ms (todo)
|
|
146
|
+
inventory: string[]; // Collected items (COIN, KEY, etc.)
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
#### FilmGame Result
|
|
151
|
+
**When sent:** Triggered when the user clicks the "Finish" button to check their movie against the target.
|
|
152
|
+
```typescript
|
|
153
|
+
interface RunResult {
|
|
154
|
+
commands: number; // Total drawing commands used
|
|
155
|
+
reachedTarget: boolean; // True if accuracy > 80%
|
|
156
|
+
maxCommandsExceeded: boolean;
|
|
157
|
+
shapes: Shape[]; // Array of shapes drawn by student
|
|
158
|
+
executionTime: number; // Time in ms
|
|
159
|
+
accuracy: number; // 0-1 score representing similarity to target
|
|
160
|
+
tickCount: number; // Final tick count
|
|
161
|
+
comparisonResult: { // Detailed breakdown
|
|
162
|
+
shapeCountMatch: boolean;
|
|
163
|
+
shapeTypesMatch: boolean;
|
|
164
|
+
positionAccuracy: number;
|
|
165
|
+
sizeAccuracy: number;
|
|
166
|
+
colorAccuracy: number;
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
#### DrawingGame Result
|
|
172
|
+
**When sent:** Triggered automatically when code execution completes.
|
|
173
|
+
```typescript
|
|
174
|
+
interface RunResult {
|
|
175
|
+
commands: number; // Total commands executed
|
|
176
|
+
reachedTarget: boolean; // True if game state marked as won (custom logic)
|
|
177
|
+
maxCommandsExceeded: boolean;
|
|
178
|
+
finalPosition: Position; // Final pen position
|
|
179
|
+
drawnPath: Position[]; // Array of points visited by pen
|
|
180
|
+
executionTime: number; // Time in ms
|
|
181
|
+
accuracy: number; // 0-1 score comparing drawn path to target path
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
#### MusicGame Result
|
|
186
|
+
**When sent:** Triggered automatically when the music finishes playing.
|
|
187
|
+
```typescript
|
|
188
|
+
interface RunResult {
|
|
189
|
+
commands: number; // Total notes/pauses played
|
|
190
|
+
reachedTarget: boolean; // True if accuracy is 100%
|
|
191
|
+
maxCommandsExceeded: boolean;
|
|
192
|
+
notes: Note[]; // Array of notes played
|
|
193
|
+
executionTime: number; // Playback time in ms
|
|
194
|
+
accuracy: number; // 0-100 score comparing played notes to editor notes
|
|
195
|
+
comparisonResult: {
|
|
196
|
+
noteCountMatch: boolean;
|
|
197
|
+
melodyAccuracy: number; // Pitch/Duration match score
|
|
198
|
+
rhythmAccuracy: number; // Timing match score
|
|
199
|
+
};
|
|
144
200
|
}
|
|
145
201
|
```
|
|
146
202
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface GameControlsProps {
|
|
3
|
+
isPlaying: boolean;
|
|
4
|
+
isPaused: boolean;
|
|
5
|
+
onPlay: () => void;
|
|
6
|
+
onPause: () => void;
|
|
7
|
+
onStop: () => void;
|
|
8
|
+
onReset: () => void;
|
|
9
|
+
}
|
|
10
|
+
declare const GameControls: React.FC<GameControlsProps>;
|
|
11
|
+
export default GameControls;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Component } from 'react';
|
|
2
|
+
import type { InstrumentType, MusicBlocklyConfig, NoteDuration, NoteName, NoteOctave } from './types';
|
|
3
|
+
interface MusicBlocklyContainerProps {
|
|
4
|
+
config: MusicBlocklyConfig;
|
|
5
|
+
onWorkspaceChange: (code: string) => void;
|
|
6
|
+
className?: string;
|
|
7
|
+
onPreloadInstruments?: (instruments: InstrumentType[]) => Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
interface MusicBlocklyContainerState {
|
|
10
|
+
initialized: boolean;
|
|
11
|
+
error: string | null;
|
|
12
|
+
showNoteDialog: boolean;
|
|
13
|
+
noteDialogValues: {
|
|
14
|
+
note: NoteName;
|
|
15
|
+
octave: NoteOctave;
|
|
16
|
+
duration: NoteDuration;
|
|
17
|
+
};
|
|
18
|
+
activeField: any | null;
|
|
19
|
+
}
|
|
20
|
+
declare class MusicBlocklyContainer extends Component<MusicBlocklyContainerProps, MusicBlocklyContainerState> {
|
|
21
|
+
private blocklyDiv;
|
|
22
|
+
private workspace;
|
|
23
|
+
private updateTimeout;
|
|
24
|
+
constructor(props: MusicBlocklyContainerProps);
|
|
25
|
+
componentDidMount(): void;
|
|
26
|
+
componentDidUpdate(prevProps: MusicBlocklyContainerProps): void;
|
|
27
|
+
componentWillUnmount(): void;
|
|
28
|
+
/**
|
|
29
|
+
* Preload common instruments when Blockly container is ready
|
|
30
|
+
*/
|
|
31
|
+
private preloadInstruments;
|
|
32
|
+
private initializeBlockly;
|
|
33
|
+
private generateCode;
|
|
34
|
+
private registerGenerators;
|
|
35
|
+
getWorkspace(): any;
|
|
36
|
+
private handleOpenNoteEditor;
|
|
37
|
+
private handleNoteSave;
|
|
38
|
+
private handleNoteClose;
|
|
39
|
+
render(): JSX.Element;
|
|
40
|
+
}
|
|
41
|
+
export default MusicBlocklyContainer;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type GraphicsConfig, type Note, type Pause } from './types';
|
|
3
|
+
interface MusicCanvasProps {
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
notes: (Note | Pause)[];
|
|
7
|
+
currentBeat: number;
|
|
8
|
+
isPlaying: boolean;
|
|
9
|
+
selectedRows: number;
|
|
10
|
+
graphicsConfig: GraphicsConfig;
|
|
11
|
+
editorNotes?: (Note | Pause)[];
|
|
12
|
+
}
|
|
13
|
+
declare const MusicCanvas: React.FC<MusicCanvasProps>;
|
|
14
|
+
export default MusicCanvas;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { MusicBlocklyConfig } from './types';
|
|
3
|
+
interface MusicEditorProps {
|
|
4
|
+
config: MusicBlocklyConfig;
|
|
5
|
+
onWorkspaceChange: (code: string) => void;
|
|
6
|
+
tempo: number;
|
|
7
|
+
onTempoChange: (tempo: number) => void;
|
|
8
|
+
blocklyRef?: React.RefObject<any>;
|
|
9
|
+
}
|
|
10
|
+
declare const MusicEditor: React.FC<MusicEditorProps>;
|
|
11
|
+
export default MusicEditor;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type WithTranslation } from 'react-i18next';
|
|
3
|
+
import { type GraphicsConfig, type MusicConfig, type RunResult } from './types';
|
|
4
|
+
interface MusicGameProps extends WithTranslation {
|
|
5
|
+
className?: string;
|
|
6
|
+
isEditable?: boolean;
|
|
7
|
+
configuration?: MusicConfig;
|
|
8
|
+
onChange?: (config: MusicConfig) => void;
|
|
9
|
+
onRunFinish?: (result: RunResult) => void;
|
|
10
|
+
maxCommands?: number;
|
|
11
|
+
showControls?: boolean;
|
|
12
|
+
graphicsConfig?: Partial<GraphicsConfig>;
|
|
13
|
+
}
|
|
14
|
+
declare const MusicGameWithTranslation: React.ComponentType<Omit<MusicGameProps, keyof WithTranslation>>;
|
|
15
|
+
export default MusicGameWithTranslation;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { GraphicsConfig, InstrumentType, MusicBlocklyConfig, MusicConfig, MusicState, Note, Pause } from './types';
|
|
3
|
+
interface MusicTabsProps {
|
|
4
|
+
musicConfig: MusicConfig;
|
|
5
|
+
gameState: MusicState;
|
|
6
|
+
editorState: MusicState;
|
|
7
|
+
generatedCode: string;
|
|
8
|
+
blocklyConfig: MusicBlocklyConfig;
|
|
9
|
+
onConfigChange: (config: MusicConfig) => void;
|
|
10
|
+
onCodeChange: (code: string) => void;
|
|
11
|
+
onEditorStateChange: (state: Partial<MusicState>) => void;
|
|
12
|
+
onEditorNotesChange?: (notes: (Note | Pause)[]) => void;
|
|
13
|
+
graphicsConfig: GraphicsConfig;
|
|
14
|
+
className?: string;
|
|
15
|
+
blocklyRef?: React.RefObject<any>;
|
|
16
|
+
editorBlocklyRef?: React.RefObject<any>;
|
|
17
|
+
editorNotes?: (Note | Pause)[];
|
|
18
|
+
onPreloadInstruments?: (instruments: InstrumentType[]) => Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
declare const MusicTabs: React.FC<MusicTabsProps>;
|
|
21
|
+
export default MusicTabs;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type GraphicsConfig, type InstrumentType, type Note, type Pause } from './types';
|
|
3
|
+
interface MusicVisualEditorProps {
|
|
4
|
+
tempo: number;
|
|
5
|
+
onTempoChange: (tempo: number) => void;
|
|
6
|
+
selectedRows: number;
|
|
7
|
+
onSelectedRowsChange: (rows: number) => void;
|
|
8
|
+
onCodeChange: (code: string) => void;
|
|
9
|
+
onNotesChange?: (notes: (Note | Pause)[]) => void;
|
|
10
|
+
graphicsConfig: GraphicsConfig;
|
|
11
|
+
onPreloadInstruments?: (instruments: InstrumentType[]) => Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
declare const MusicVisualEditor: React.FC<MusicVisualEditorProps>;
|
|
14
|
+
export default MusicVisualEditor;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { NoteDuration, NoteName, NoteOctave } from './types';
|
|
3
|
+
interface NoteDialogProps {
|
|
4
|
+
show: boolean;
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
onSave: (note: NoteName, octave: NoteOctave, duration: NoteDuration) => void;
|
|
7
|
+
initialValues: {
|
|
8
|
+
note: NoteName;
|
|
9
|
+
octave: NoteOctave;
|
|
10
|
+
duration: NoteDuration;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
declare const NoteDialog: React.FC<NoteDialogProps>;
|
|
14
|
+
export default NoteDialog;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type InstrumentType, type Note, type NoteDuration, type NoteOctave } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Audio engine for playing musical notes using real instrument samples (SoundFont)
|
|
4
|
+
*/
|
|
5
|
+
export declare class AudioEngine {
|
|
6
|
+
private audioContext;
|
|
7
|
+
private masterGain;
|
|
8
|
+
private activeNotes;
|
|
9
|
+
private loadedInstruments;
|
|
10
|
+
private loadingInstruments;
|
|
11
|
+
private readonly instrumentMap;
|
|
12
|
+
constructor();
|
|
13
|
+
private initAudioContext;
|
|
14
|
+
/**
|
|
15
|
+
* Pre-load one or more instruments (public method for proactive loading)
|
|
16
|
+
*/
|
|
17
|
+
preloadInstruments(instrumentTypes: InstrumentType[]): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Load an instrument SoundFont (lazy loading)
|
|
20
|
+
*/
|
|
21
|
+
private loadInstrument;
|
|
22
|
+
/**
|
|
23
|
+
* Play a single note using SoundFont samples
|
|
24
|
+
*/
|
|
25
|
+
playNote(note: Note, tempo: number, instrument?: InstrumentType, onComplete?: () => void): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Convert note name and octave to SoundFont format (e.g., "C4", "D#5")
|
|
28
|
+
*/
|
|
29
|
+
private getNoteNameForSoundfont;
|
|
30
|
+
/**
|
|
31
|
+
* Fallback: Play note using oscillator (for drums or when SoundFont fails)
|
|
32
|
+
*/
|
|
33
|
+
private playNoteWithOscillator;
|
|
34
|
+
/**
|
|
35
|
+
* Configure oscillator and gain based on instrument type with better synthesis
|
|
36
|
+
*/
|
|
37
|
+
private configureInstrument;
|
|
38
|
+
/**
|
|
39
|
+
* Play a keyboard key (for interactive playing)
|
|
40
|
+
*/
|
|
41
|
+
playKeyboardNote(noteName: string, octave: NoteOctave, duration?: NoteDuration, instrument?: InstrumentType): void;
|
|
42
|
+
/**
|
|
43
|
+
* Stop all playing notes
|
|
44
|
+
*/
|
|
45
|
+
stopAll(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Resume audio context (needed for browsers that suspend it)
|
|
48
|
+
*/
|
|
49
|
+
resume(): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Cleanup and close audio context
|
|
52
|
+
*/
|
|
53
|
+
dispose(): void;
|
|
54
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { default as MusicGame } from './MusicGame';
|
|
2
|
+
export { default as MusicCanvas } from './MusicCanvas';
|
|
3
|
+
export { default as MusicEditor } from './MusicEditor';
|
|
4
|
+
export { default as MusicVisualEditor } from './MusicVisualEditor';
|
|
5
|
+
export { default as MusicTabs } from './MusicTabs';
|
|
6
|
+
export { default as GameControls } from './GameControls';
|
|
7
|
+
export { default as MusicBlocklyContainer } from './MusicBlocklyContainer';
|
|
8
|
+
export * from './types';
|
|
9
|
+
export * from './blocks';
|
|
10
|
+
export * from './blockly-messages';
|
|
11
|
+
export * from './graphicsConfig';
|
|
12
|
+
export * from './audioEngine';
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export type NoteDuration = 'whole' | 'half' | 'quarter' | 'eighth' | 'sixteenth';
|
|
2
|
+
export type NoteName = 'C' | 'D' | 'E' | 'F' | 'G' | 'A' | 'B';
|
|
3
|
+
export type NoteOctave = 1 | 2 | 3 | 4 | 5;
|
|
4
|
+
export type InstrumentType = 'piano' | 'guitar' | 'acoustic_guitar' | 'electric_guitar' | 'bass' | 'drums' | 'flute' | 'violin' | 'saxophone';
|
|
5
|
+
export interface Note {
|
|
6
|
+
id: string;
|
|
7
|
+
name: NoteName;
|
|
8
|
+
octave: NoteOctave;
|
|
9
|
+
duration: NoteDuration;
|
|
10
|
+
row: number;
|
|
11
|
+
startBeat: number;
|
|
12
|
+
instrument?: InstrumentType;
|
|
13
|
+
}
|
|
14
|
+
export interface Pause {
|
|
15
|
+
id: string;
|
|
16
|
+
duration: NoteDuration;
|
|
17
|
+
row: number;
|
|
18
|
+
startBeat: number;
|
|
19
|
+
}
|
|
20
|
+
export type MusicCommand = Note | Pause;
|
|
21
|
+
export interface MusicState {
|
|
22
|
+
isPlaying: boolean;
|
|
23
|
+
isPaused: boolean;
|
|
24
|
+
currentBeat: number;
|
|
25
|
+
commands: MusicCommand[];
|
|
26
|
+
commandCount: number;
|
|
27
|
+
maxCommands: number;
|
|
28
|
+
selectedRows: number;
|
|
29
|
+
instrument: InstrumentType;
|
|
30
|
+
tempo: number;
|
|
31
|
+
}
|
|
32
|
+
export interface MusicConfig {
|
|
33
|
+
targetNotes: Note[];
|
|
34
|
+
maxCommands: number;
|
|
35
|
+
selectedRows: number;
|
|
36
|
+
tempo: number;
|
|
37
|
+
instrument: InstrumentType;
|
|
38
|
+
}
|
|
39
|
+
export interface MusicBlocklyConfig {
|
|
40
|
+
allowedTypes: Set<string>;
|
|
41
|
+
limits: Record<string, number>;
|
|
42
|
+
toolbox: string;
|
|
43
|
+
initialXml: string;
|
|
44
|
+
}
|
|
45
|
+
export interface RunResult {
|
|
46
|
+
commands: number;
|
|
47
|
+
reachedTarget: boolean;
|
|
48
|
+
maxCommandsExceeded: boolean;
|
|
49
|
+
notes: Note[];
|
|
50
|
+
executionTime: number;
|
|
51
|
+
accuracy: number;
|
|
52
|
+
comparisonResult?: {
|
|
53
|
+
noteCountMatch: boolean;
|
|
54
|
+
melodyAccuracy: number;
|
|
55
|
+
rhythmAccuracy: number;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export interface GraphicsConfig {
|
|
59
|
+
canvas: {
|
|
60
|
+
backgroundColor: string;
|
|
61
|
+
borderColor: string;
|
|
62
|
+
borderWidth: number;
|
|
63
|
+
};
|
|
64
|
+
staff: {
|
|
65
|
+
lineColor: string;
|
|
66
|
+
lineWidth: number;
|
|
67
|
+
spacing: number;
|
|
68
|
+
};
|
|
69
|
+
notes: {
|
|
70
|
+
fillColor: string;
|
|
71
|
+
strokeColor: string;
|
|
72
|
+
strokeWidth: number;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export declare const DURATION_TO_BEATS: Record<NoteDuration, number>;
|
|
76
|
+
export declare function getNoteFrequency(note: NoteName, octave: NoteOctave): number;
|
package/dist/index.cjs.js
CHANGED
|
@@ -2929,8 +2929,8 @@ class Browser {
|
|
|
2929
2929
|
}
|
|
2930
2930
|
}
|
|
2931
2931
|
Browser.type = "languageDetector";
|
|
2932
|
-
const common$2 = { "moves": "Tahy", "steps": "Kroky", "walls": "Steny", "running": "Spúšťam...", "runCode": "▶️ Spustiť kód", "reset": "🔄 Resetovať", "generating": "🔄 Generujem...", "generateNewMaze": "🎲 Generovať nový labyrint", "editor": "✏️ Editor", "game": "🎮 Hra a programovanie", "gameView": "Pohľad na hru", "programmingBlocks": "Programovacie bloky", "generatedCode": "Vygenerovaný kód:", "noCodeGenerated": "// Zatiaľ nebol vygenerovaný žiadny kód", "calculating": "Počítam...", "north": "Sever", "south": "Juh", "east": "Východ", "west": "Západ" };
|
|
2933
|
-
const game$2 = { "congratulations": "🎉 Gratulujeme! Dosiahli ste cieľ! 🎯", "gameOver": "❌ Koniec hry! Prekročili ste maximálny počet ťahov.", "movement": "Pohyb", "coins": "Mince", "letters": "Písmená", "keys": "Kľúče", "control": "Riadenie", "logic": "Logika", "math": "Matematika", "pen": "Pero", "status": "Stav hry", "commands": "Príkazy", "time": "Čas", "shapes": "Tvary", "penPosition": "Pozícia pera", "penDirection": "Smer pera", "penDown": "Pero dole", "penColor": "Farba pera", "yes": "Áno", "no": "Nie", "executing": "Spúšťam...", "run": "Spustiť", "reset": "Resetovať", "loading": "Načítavam...", "executingCommands": "Spúšťam príkazy...", "canvas": "Plátno", "blocks": "Bloky", "code": "Kód", "generatedCode": "Vygenerovaný kód", "noCodeGenerated": "// Zatiaľ nebol
|
|
2932
|
+
const common$2 = { "moves": "Tahy", "steps": "Kroky", "walls": "Steny", "running": "Spúšťam...", "runCode": "▶️ Spustiť kód", "reset": "🔄 Resetovať", "generating": "🔄 Generujem...", "generateNewMaze": "🎲 Generovať nový labyrint", "editor": "✏️ Editor", "game": "🎮 Hra a programovanie", "gameView": "Pohľad na hru", "programmingBlocks": "Programovacie bloky", "generatedCode": "Vygenerovaný kód:", "noCodeGenerated": "// Zatiaľ nebol vygenerovaný žiadny kód", "calculating": "Počítam...", "north": "Sever", "south": "Juh", "east": "Východ", "west": "Západ", "cancel": "Zrušiť", "save": "Uložiť" };
|
|
2933
|
+
const game$2 = { "congratulations": "🎉 Gratulujeme! Dosiahli ste cieľ! 🎯", "gameOver": "❌ Koniec hry! Prekročili ste maximálny počet ťahov.", "movement": "Pohyb", "coins": "Mince", "letters": "Písmená", "keys": "Kľúče", "control": "Riadenie", "logic": "Logika", "math": "Matematika", "pen": "Pero", "status": "Stav hry", "commands": "Príkazy", "time": "Čas", "shapes": "Tvary", "penPosition": "Pozícia pera", "penDirection": "Smer pera", "penDown": "Pero dole", "penColor": "Farba pera", "yes": "Áno", "no": "Nie", "executing": "Spúšťam...", "run": "Spustiť", "reset": "Resetovať", "loading": "Načítavam...", "executingCommands": "Spúšťam príkazy...", "canvas": "Plátno", "blocks": "Bloky", "code": "Kód", "generatedCode": "Vygenerovaný kód", "noCodeGenerated": "// Zatiaľ nebol vygenerován žiadny kód", "play": "Prehrať", "stop": "Zastaviť", "pause": "Pozastaviť" };
|
|
2934
2934
|
const blocks$2 = { "moveForward": "Posunúť sa dopredu", "turnLeft": "Otočiť sa vľavo", "turnRight": "Otočiť sa vpravo", "turnAround": "Otočiť sa okolo", "repeat": "Opakovať", "if": "Ak", "moveForwardTooltip": "Posunúť pavúka o jeden krok dopredu", "turnLeftTooltip": "Otočiť pavúka o 90 stupňov vľavo", "turnRightTooltip": "Otočiť pavúka o 90 stupňov vpravo", "turnAroundTooltip": "Otočiť pavúka o 180 stupňov okolo", "repeatTooltip": "Opakovať bloky vnútri zadaný počet krát", "whileTooltip": "Opakovať bloky vnútri, kým je podmienka pravdivá", "compareTooltip": "Porovnať dve čísla a vrátiť true alebo false", "numberTooltip": "Číslo", "collectCoinTooltip": "Zozbierať mincu, ak je na aktuálnej pozícii", "coinsCollectedTooltip": "Vráti počet zozbieraných mincí", "collectLetterTooltip": "Zozbierať písmeno, ak je na aktuálnej pozícii", "hasCoinTooltip": "Vráti true, ak je na aktuálnej pozícii minca", "hasLetterTooltip": "Vráti true, ak je na aktuálnej pozícii písmeno" };
|
|
2935
2935
|
const language$2 = { "select": "Vybrať jazyk", "slovak": "Slovenčina", "czech": "Čeština", "hungarian": "Maďarčina" };
|
|
2936
2936
|
const validation$2 = { "errors": "Chyby validácie:", "warnings": "Upozornenia:", "doorsNoKeys": "Labyrint má dvere, ale žiadne kľúče. Dvere sa nedajú prejsť bez kľúčov.", "keysNoDoors": "Labyrint má kľúče, ale žiadne dvere. Kľúče nie sú potrebné, ak nie sú dvere.", "moreDoorsThanKeys": "Labyrint má {{doors}} dverí, ale len {{keys}} kľúčov. Niektoré dvere môžu byť nedostupné.", "missingLetters": 'Cieľový reťazec "{{targetString}}" vyžaduje písmená, ktoré chýbajú v labyrinte: {{missingLetters}}', "extraLetters": "Labyrint obsahuje písmená, ktoré nie sú potrebné pre cieľový reťazec: {{extraLetters}}" };
|
|
@@ -2938,6 +2938,8 @@ const tools$2 = { "wall": "Stena", "clear": "Vymazať", "start": "Štart", "fini
|
|
|
2938
2938
|
const app$2 = { "imageGraphics": "Grafika obrázkov", "graphicsTest": "Test grafiky", "debugTest": "Debug test", "externalTest": "Test externého importu", "configTest": "Test konfigurácie", "drawingDemo": "Kreslenie" };
|
|
2939
2939
|
const gameStatus$2 = { "coins": "Mince", "keys": "Kľúče", "moves": "Tahy", "inventory": "Inventár", "itemsCollected": "Zozbierané predmety" };
|
|
2940
2940
|
const testing$2 = { "instructions": "Inštrukcie na testovanie:", "switchConfigurations": "Prepnutie konfigurácie:", "switchConfigurationsDesc": 'Kliknite na "Prepnutie konfigurácie" na testovanie rôznych grafických nastavení', "monitorLogs": "Sledovanie logov:", "monitorLogsDesc": "Sledujte logy, aby ste videli, kedy sa zmení grafická konfigurácia", "testImageLoading": "Testovanie načítania obrázkov:", "testImageLoadingDesc": "Overte, že sa obrázky načítajú správne a v prípade zlyhania sa použijú znaky", "testUrlValidity": "Testovanie platnosti URL:", "testUrlValidityDesc": "Použite URL tester na overenie platnosti URL obrázkov pred ich použitím", "testFallbackBehavior": "Testovanie záložného správania:", "testFallbackBehaviorDesc": "Konfigurácia 4 používa neplatné URL na testovanie záložných znakov", "checkToolSelection": "Kontrola výberu nástrojov:", "checkToolSelectionDesc": "Všimnite si, ako tlačidlá nástrojov teraz zobrazujú skutočné obrázky namiesto generických emoji", "verifyEditorGame": "Overenie editora/hry:", "verifyEditorGameDesc": "Skontrolujte, že oba taby editora a hry odrážajú zmeny" };
|
|
2941
|
+
const music$2 = { "play": "Prehrať", "stop": "Zastaviť", "pause": "Pozastaviť", "note": "Nota", "rest": "Pomlčka", "instrument": "Nástroj", "tempo": "Tempo", "volume": "Hlasitosť", "loop": "Slučka", "editNote": "Upraviť notu", "noteName": "Nota", "octave": "Oktáva", "duration": "Trvanie", "staff": "Notová osnova", "addNote": "Pridať notu", "settings": "Nastavenia", "rows": "Riadky", "instruments": "Nástroje", "clearAll": "Vymazať všetko", "totalNotes": "Celkom nôt", "clearRow": "Vymazať riadok", "clickToPlace": "Kliknite do osnovy pre pridanie noty.", "add": "Pridať", "cancel": "Zrušiť", "save": "Uložiť", "beat": "Doba", "row": "Riadok", "title": "Hudobný skladateľ" };
|
|
2942
|
+
const tempo$2 = { "slow": "Pomalé", "moderate": "Stredné", "fast": "Rýchle", "veryFast": "Veľmi rýchle" };
|
|
2941
2943
|
const sk = {
|
|
2942
2944
|
common: common$2,
|
|
2943
2945
|
game: game$2,
|
|
@@ -2947,10 +2949,12 @@ const sk = {
|
|
|
2947
2949
|
tools: tools$2,
|
|
2948
2950
|
app: app$2,
|
|
2949
2951
|
gameStatus: gameStatus$2,
|
|
2950
|
-
testing: testing$2
|
|
2952
|
+
testing: testing$2,
|
|
2953
|
+
music: music$2,
|
|
2954
|
+
tempo: tempo$2
|
|
2951
2955
|
};
|
|
2952
|
-
const common$1 = { "moves": "Tahy", "steps": "Kroky", "walls": "Stěny", "running": "Spouštím...", "runCode": "▶️ Spustit kód", "reset": "🔄 Resetovat", "generating": "🔄 Generuji...", "generateNewMaze": "🎲 Generovat nový labyrint", "editor": "✏️ Editor", "game": "🎮 Hra a programování", "gameView": "Pohled na hru", "programmingBlocks": "Programovací bloky", "generatedCode": "Vygenerovaný kód:", "noCodeGenerated": "// Zatím nebyl vygenerován žádný kód", "calculating": "Počítám...", "north": "Sever", "south": "Jih", "east": "Východ", "west": "Západ" };
|
|
2953
|
-
const game$1 = { "congratulations": "🎉 Gratulujeme! Dosáhli jste cíle! 🎯", "gameOver": "❌ Konec hry! Překročili jste maximální počet tahů.", "movement": "Pohyb", "coins": "Mince", "letters": "Písmena", "keys": "Klíče", "control": "Řízení", "logic": "Logika", "math": "Matematika", "pen": "Pero", "status": "Stav hry", "commands": "Příkazy", "time": "Čas", "shapes": "TV Tvary", "penPosition": "Pozice pera", "penDirection": "Směr pera", "penDown": "Pero dolů", "penColor": "Barva pera", "yes": "Ano", "no": "Ne", "executing": "Spouštím...", "run": "Spustit", "reset": "Resetovat", "loading": "Načítám...", "executingCommands": "Spouštím příkazy...", "canvas": "Plátno", "blocks": "Bloky", "code": "Kód", "generatedCode": "Vygenerovaný kód", "noCodeGenerated": "// Zatím nebyl vygenerován žádný kód" };
|
|
2956
|
+
const common$1 = { "moves": "Tahy", "steps": "Kroky", "walls": "Stěny", "running": "Spouštím...", "runCode": "▶️ Spustit kód", "reset": "🔄 Resetovat", "generating": "🔄 Generuji...", "generateNewMaze": "🎲 Generovat nový labyrint", "editor": "✏️ Editor", "game": "🎮 Hra a programování", "gameView": "Pohled na hru", "programmingBlocks": "Programovací bloky", "generatedCode": "Vygenerovaný kód:", "noCodeGenerated": "// Zatím nebyl vygenerován žádný kód", "calculating": "Počítám...", "north": "Sever", "south": "Jih", "east": "Východ", "west": "Západ", "cancel": "Zrušit", "save": "Uložit" };
|
|
2957
|
+
const game$1 = { "congratulations": "🎉 Gratulujeme! Dosáhli jste cíle! 🎯", "gameOver": "❌ Konec hry! Překročili jste maximální počet tahů.", "movement": "Pohyb", "coins": "Mince", "letters": "Písmena", "keys": "Klíče", "control": "Řízení", "logic": "Logika", "math": "Matematika", "pen": "Pero", "status": "Stav hry", "commands": "Příkazy", "time": "Čas", "shapes": "TV Tvary", "penPosition": "Pozice pera", "penDirection": "Směr pera", "penDown": "Pero dolů", "penColor": "Barva pera", "yes": "Ano", "no": "Ne", "executing": "Spouštím...", "run": "Spustit", "reset": "Resetovat", "loading": "Načítám...", "executingCommands": "Spouštím příkazy...", "canvas": "Plátno", "blocks": "Bloky", "code": "Kód", "generatedCode": "Vygenerovaný kód", "noCodeGenerated": "// Zatím nebyl vygenerován žádný kód", "play": "Přehrát", "stop": "Zastavit", "pause": "Pozastavit" };
|
|
2954
2958
|
const blocks$1 = { "moveForward": "Posunout se dopředu", "turnLeft": "Otočit se vlevo", "turnRight": "Otočit se vpravo", "turnAround": "Otočit se kolem", "repeat": "Opakovat", "if": "Pokud", "moveForwardTooltip": "Posunout pavouka o jeden krok dopředu", "turnLeftTooltip": "Otočit pavouka o 90 stupňů vlevo", "turnRightTooltip": "Otočit pavouka o 90 stupňů vpravo", "turnAroundTooltip": "Otočit pavouka o 180 stupňů kolem", "repeatTooltip": "Opakovat bloky uvnitř zadaný počet krát", "whileTooltip": "Opakovat bloky uvnitř, dokud je podmínka pravdivá", "compareTooltip": "Porovnat dvě čísla a vrátit true nebo false", "numberTooltip": "Číslo", "collectCoinTooltip": "Sebrat minci, pokud je na aktuální pozici", "coinsCollectedTooltip": "Vrátí počet sebraných mincí", "collectLetterTooltip": "Sebrat písmeno, pokud je na aktuální pozici", "hasCoinTooltip": "Vrátí true, pokud je na aktuální pozici mince", "hasLetterTooltip": "Vrátí true, pokud je na aktuální pozici písmeno" };
|
|
2955
2959
|
const language$1 = { "select": "Vybrat jazyk", "slovak": "Slovenština", "czech": "Čeština", "hungarian": "Maďarština" };
|
|
2956
2960
|
const validation$1 = { "errors": "Chyby validace:", "warnings": "Upozornění:", "doorsNoKeys": "Labyrint má dveře, ale žádné klíče. Dveře se nedají projít bez klíčů.", "keysNoDoors": "Labyrint má klíče, ale žádné dveře. Klíče nejsou potřeba, pokud nejsou dveře.", "moreDoorsThanKeys": "Labyrint má {{doors}} dveří, ale jen {{keys}} klíčů. Některé dveře mohou být nedostupné.", "missingLetters": 'Cílový řetězec "{{targetString}}" vyžaduje písmena, která chybí v labyrintu: {{missingLetters}}', "extraLetters": "Labyrint obsahuje písmena, která nejsou potřebná pro cílový řetězec: {{extraLetters}}" };
|
|
@@ -2958,6 +2962,8 @@ const tools$1 = { "wall": "Stěna", "clear": "Vymazat", "start": "Start", "finis
|
|
|
2958
2962
|
const app$1 = { "imageGraphics": "Grafika obrázků", "graphicsTest": "Test grafiky", "debugTest": "Debug test", "externalTest": "Test externího importu", "configTest": "Test konfigurace", "drawingDemo": "Kreslení" };
|
|
2959
2963
|
const gameStatus$1 = { "coins": "Mince", "keys": "Klíče", "moves": "Tahy", "inventory": "Inventář", "itemsCollected": "Sebrané předměty" };
|
|
2960
2964
|
const testing$1 = { "instructions": "Testovací instrukce:", "switchConfigurations": "Přepnutí konfigurace:", "switchConfigurationsDesc": 'Klikněte na "Přepnutí konfigurace" na testování různých grafických nastavení', "monitorLogs": "Sledování logů:", "monitorLogsDesc": "Sledujte logy, abyste viděli, kdy se změní grafická konfigurace", "testImageLoading": "Testování načítání obrázků:", "testImageLoadingDesc": "Ověřte, že se obrázky načítají správně a v případě selhání se použijí znaky", "testUrlValidity": "Testování platnosti URL:", "testUrlValidityDesc": "Použijte URL tester na ověření platnosti URL obrázků před jejich použitím", "testFallbackBehavior": "Testování záložního chování:", "testFallbackBehaviorDesc": "Konfigurace 4 používá neplatné URL na testování záložních znaků", "checkToolSelection": "Kontrola výběru nástrojů:", "checkToolSelectionDesc": "Všimněte si, jak tlačítka nástrojů nyní zobrazují skutečné obrázky místo generických emoji", "verifyEditorGame": "Ověření editoru/hry:", "verifyEditorGameDesc": "Zkontrolujte, že oba taby editoru a hry odrážejí změny" };
|
|
2965
|
+
const music$1 = { "play": "Přehrát", "stop": "Zastavit", "pause": "Pozastavit", "note": "Nota", "rest": "Pomlka", "instrument": "Nástroj", "tempo": "Tempo", "volume": "Hlasitost", "loop": "Smyčka", "editNote": "Upravit notu", "noteName": "Nota", "octave": "Oktáva", "duration": "Délka", "staff": "Notová osnova", "addNote": "Přidat notu", "settings": "Nastavení", "rows": "Řádky", "instruments": "Nástroje", "clearAll": "Vymazat vše", "totalNotes": "Celkem not", "clearRow": "Vymazat řádek", "clickToPlace": "Klikněte do osnovy pro přidání noty.", "add": "Přidat", "cancel": "Zrušit", "save": "Uložit", "beat": "Doba", "row": "Řádek", "title": "Hudební skladatel" };
|
|
2966
|
+
const tempo$1 = { "slow": "Pomalé", "moderate": "Střední", "fast": "Rychlé", "veryFast": "Velmi rychlé" };
|
|
2961
2967
|
const cs = {
|
|
2962
2968
|
common: common$1,
|
|
2963
2969
|
game: game$1,
|
|
@@ -2967,10 +2973,12 @@ const cs = {
|
|
|
2967
2973
|
tools: tools$1,
|
|
2968
2974
|
app: app$1,
|
|
2969
2975
|
gameStatus: gameStatus$1,
|
|
2970
|
-
testing: testing$1
|
|
2976
|
+
testing: testing$1,
|
|
2977
|
+
music: music$1,
|
|
2978
|
+
tempo: tempo$1
|
|
2971
2979
|
};
|
|
2972
|
-
const common = { "moves": "Lépések", "steps": "Lépések", "walls": "Falak", "running": "Futtatom...", "runCode": "▶️ Kód futtatása", "reset": "🔄 Visszaállítás", "generating": "🔄 Generálás...", "generateNewMaze": "🎲 Új labirintus generálása", "editor": "✏️ Szerkesztő", "game": "🎮 Játék és programozás", "gameView": "Játék nézet", "programmingBlocks": "Programozási blokkok", "generatedCode": "Generált kód:", "noCodeGenerated": "// Még nincs generált kód", "calculating": "Számítás...", "north": "Észak", "south": "Dél", "east": "Kelet", "west": "Nyugat" };
|
|
2973
|
-
const game = { "congratulations": "🎉 Gratulálunk! Elérted a célt! 🎯", "gameOver": "❌ Játék vége! Túllépted a maximális lépésszámot.", "movement": "Mozgás", "coins": "Érmék", "letters": "Betűk", "keys": "Kulcsok", "control": "Vezérlés", "logic": "Logika", "math": "Matematika", "pen": "Toll", "status": "Játék állapota", "commands": "Parancsok", "time": "Idő", "shapes": "Alakzatok", "penPosition": "Toll pozíciója", "penDirection": "Toll iránya", "penDown": "Toll le", "penColor": "Toll színe", "yes": "Igen", "no": "Nem", "executing": "Futtatás...", "run": "Futtatás", "reset": "Reset", "loading": "Betöltés...", "executingCommands": "Parancsok futtatása...", "canvas": "Vászon", "blocks": "Blokkok", "code": "Kód", "generatedCode": "Generált kód", "noCodeGenerated": "// Még nincs generált kód" };
|
|
2980
|
+
const common = { "moves": "Lépések", "steps": "Lépések", "walls": "Falak", "running": "Futtatom...", "runCode": "▶️ Kód futtatása", "reset": "🔄 Visszaállítás", "generating": "🔄 Generálás...", "generateNewMaze": "🎲 Új labirintus generálása", "editor": "✏️ Szerkesztő", "game": "🎮 Játék és programozás", "gameView": "Játék nézet", "programmingBlocks": "Programozási blokkok", "generatedCode": "Generált kód:", "noCodeGenerated": "// Még nincs generált kód", "calculating": "Számítás...", "north": "Észak", "south": "Dél", "east": "Kelet", "west": "Nyugat", "cancel": "Mégsem", "save": "Mentés" };
|
|
2981
|
+
const game = { "congratulations": "🎉 Gratulálunk! Elérted a célt! 🎯", "gameOver": "❌ Játék vége! Túllépted a maximális lépésszámot.", "movement": "Mozgás", "coins": "Érmék", "letters": "Betűk", "keys": "Kulcsok", "control": "Vezérlés", "logic": "Logika", "math": "Matematika", "pen": "Toll", "status": "Játék állapota", "commands": "Parancsok", "time": "Idő", "shapes": "Alakzatok", "penPosition": "Toll pozíciója", "penDirection": "Toll iránya", "penDown": "Toll le", "penColor": "Toll színe", "yes": "Igen", "no": "Nem", "executing": "Futtatás...", "run": "Futtatás", "reset": "Reset", "loading": "Betöltés...", "executingCommands": "Parancsok futtatása...", "canvas": "Vászon", "blocks": "Blokkok", "code": "Kód", "generatedCode": "Generált kód", "noCodeGenerated": "// Még nincs generált kód", "play": "Lejátszás", "stop": "Leállítás", "pause": "Szünet" };
|
|
2974
2982
|
const blocks = { "moveForward": "Előre lépés", "turnLeft": "Balra fordulás", "turnRight": "Jobbra fordulás", "turnAround": "Megfordulás", "repeat": "Ismétlés", "if": "Ha", "moveForwardTooltip": "A pók egy lépést előre mozgatása", "turnLeftTooltip": "A pók 90 fokkal balra fordítása", "turnRightTooltip": "A pók 90 fokkal jobbra fordítása", "turnAroundTooltip": "A pók 180 fokkal megfordítása", "repeatTooltip": "A blokkok megadott számú ismétlése", "whileTooltip": "A blokkok ismétlése, amíg a feltétel igaz", "compareTooltip": "Két szám összehasonlítása és true vagy false visszaadása", "numberTooltip": "Szám", "collectCoinTooltip": "Érme gyűjtése, ha van a jelenlegi pozíción", "coinsCollectedTooltip": "Az eddig gyűjtött érmék számát adja vissza", "collectLetterTooltip": "Betű gyűjtése, ha van a jelenlegi pozíción", "hasCoinTooltip": "True-t ad vissza, ha van érme a jelenlegi pozíción", "hasLetterTooltip": "True-t ad vissza, ha van betű a jelenlegi pozíción" };
|
|
2975
2983
|
const language = { "select": "Nyelv kiválasztása", "slovak": "Szlovák", "czech": "Cseh", "hungarian": "Magyar" };
|
|
2976
2984
|
const validation = { "errors": "Validációs hibák:", "warnings": "Figyelmeztetések:", "doorsNoKeys": "A labirintusnak vannak ajtói, de nincsenek kulcsok. Az ajtók nem járhatók át kulcs nélkül.", "keysNoDoors": "A labirintusnak vannak kulcsai, de nincsenek ajtók. A kulcsok nem szükségesek, ha nincsenek ajtók.", "moreDoorsThanKeys": "A labirintusnak {{doors}} ajtója van, de csak {{keys}} kulcsa. Néhány ajtó elérhetetlen lehet.", "missingLetters": 'A "{{targetString}}" célkarakterlánc olyan betűket igényel, amelyek hiányoznak a labirintusból: {{missingLetters}}', "extraLetters": "A labirintus olyan betűket tartalmaz, amelyekre nincs szükség a célkarakterlánc esetében: {{extraLetters}}" };
|
|
@@ -2978,6 +2986,8 @@ const tools = { "wall": "Fal", "clear": "Törlés", "start": "Kezdés", "finish"
|
|
|
2978
2986
|
const app = { "imageGraphics": "Képek grafikája", "graphicsTest": "Grafika teszt", "debugTest": "Debug teszt", "externalTest": "Külső import teszt", "configTest": "Konfiguráció teszt", "drawingDemo": "Rajzolás" };
|
|
2979
2987
|
const gameStatus = { "coins": "Érmék", "keys": "Kulcsok", "moves": "Lépések", "inventory": "Leltár", "itemsCollected": "Összegyűjtött tárgyak" };
|
|
2980
2988
|
const testing = { "instructions": "Tesztelési utasítások:", "switchConfigurations": "Konfiguráció váltás:", "switchConfigurationsDesc": 'Kattintson a "Konfiguráció váltás" gombra a különböző grafikai beállítások teszteléséhez', "monitorLogs": "Naplók figyelése:", "monitorLogsDesc": "Figyelje a naplókat, hogy lássa, mikor változik a grafikai konfiguráció", "testImageLoading": "Képek betöltésének tesztelése:", "testImageLoadingDesc": "Ellenőrizze, hogy a képek megfelelően töltődnek be, és hiba esetén karakterekre váltanak", "testUrlValidity": "URL érvényesség tesztelése:", "testUrlValidityDesc": "Használja az URL tesztelőt a kép URL-ek érvényességének ellenőrzéséhez használat előtt", "testFallbackBehavior": "Tartalék viselkedés tesztelése:", "testFallbackBehaviorDesc": "A 4. konfiguráció hibás URL-eket használ a tartalék karakterek teszteléséhez", "checkToolSelection": "Eszköz kiválasztás ellenőrzése:", "checkToolSelectionDesc": "Figyelje meg, hogyan jelenítik meg most az eszközgombok a tényleges képeket a generikus emoji helyett", "verifyEditorGame": "Szerkesztő/játék ellenőrzése:", "verifyEditorGameDesc": "Ellenőrizze, hogy mindkét szerkesztő és játék tab tükrözi a változásokat" };
|
|
2989
|
+
const music = { "play": "Lejátszás", "stop": "Leállítás", "pause": "Szünet", "note": "Hangjegy", "rest": "Szünetjel", "instrument": "Hangszer", "tempo": "Tempó", "volume": "Hangerő", "loop": "Ismétlés", "editNote": "Hangjegy szerkesztése", "noteName": "Hangjegy", "octave": "Oktáv", "duration": "Időtartam", "staff": "Kotta", "addNote": "Hangjegy hozzáadása", "settings": "Beállítások", "rows": "Sorok", "instruments": "Hangszerek", "clearAll": "Összes törlése", "totalNotes": "Összes hangjegy", "clearRow": "Sor törlése", "clickToPlace": "Kattintson a kottára egy hangjegy hozzáadásához.", "add": "Hozzáadás", "cancel": "Mégsem", "save": "Mentés", "beat": "Ütem", "row": "Sor", "title": "Zeneszerző" };
|
|
2990
|
+
const tempo = { "slow": "Lassú", "moderate": "Közepes", "fast": "Gyors", "veryFast": "Nagyon gyors" };
|
|
2981
2991
|
const hu = {
|
|
2982
2992
|
common,
|
|
2983
2993
|
game,
|
|
@@ -2987,7 +2997,9 @@ const hu = {
|
|
|
2987
2997
|
tools,
|
|
2988
2998
|
app,
|
|
2989
2999
|
gameStatus,
|
|
2990
|
-
testing
|
|
3000
|
+
testing,
|
|
3001
|
+
music,
|
|
3002
|
+
tempo
|
|
2991
3003
|
};
|
|
2992
3004
|
const resources = {
|
|
2993
3005
|
sk: {
|