diff --git a/app/static/js/app.jsx b/app/static/js/app.jsx index 249e622..7667d55 100644 --- a/app/static/js/app.jsx +++ b/app/static/js/app.jsx @@ -8728,6 +8728,25 @@ const App = () => { handleDeleteTrack(); } }] + }, { + label: 'Insert', + items: [{ + label: 'Insert Section', + icon: 'folder-plus', + action: () => showToast('Insert section', 'info') + }, { + label: 'Insert MIDI item', + icon: 'music', + action: () => showToast('Insert MIDI item', 'info') + }, { + label: 'Insert sound clip', + icon: 'file-input', + action: () => showToast('Insert sound clip', 'info') + }, { + label: 'Insert track', + icon: 'plus', + action: addNewTrack + }] }, { label: 'View', items: [{ @@ -8780,7 +8799,7 @@ const App = () => { onClick: () => setMenuOpen(menuOpen === menu.label ? null : menu.label), className: `px-3 py-1 text-xs font-medium transition rounded ${menuOpen === menu.label ? 'bg-zinc-700 text-zinc-100' : 'text-zinc-400 hover:text-zinc-200 hover:bg-zinc-800'}` }, menu.label), menuOpen === menu.label && /*#__PURE__*/React.createElement("div", { - className: "absolute top-full left-0 mt-0.5 bg-[#2a2a2a] border border-zinc-700 rounded-lg shadow-2xl py-1 w-64 z-50", + className: `absolute top-full left-0 mt-0.5 bg-[#2a2a2a] border border-zinc-700 rounded-lg shadow-2xl py-1 z-50 ${menu.label === 'Edit' ? 'w-72' : 'w-64'}`, onClick: () => setMenuOpen(null) }, menu.items.map((item, i) => item.sep ? /*#__PURE__*/React.createElement("div", { key: i, diff --git a/app/static/js/app.precompiled.js b/app/static/js/app.precompiled.js index 3dae6e1..dccd472 100644 --- a/app/static/js/app.precompiled.js +++ b/app/static/js/app.precompiled.js @@ -9219,6 +9219,25 @@ const App = () => { handleDeleteTrack(); } }] + }, { + label: 'Insert', + items: [{ + label: 'Insert Section', + icon: 'folder-plus', + action: () => showToast('Insert section', 'info') + }, { + label: 'Insert MIDI item', + icon: 'music', + action: () => showToast('Insert MIDI item', 'info') + }, { + label: 'Insert sound clip', + icon: 'file-input', + action: () => showToast('Insert sound clip', 'info') + }, { + label: 'Insert track', + icon: 'plus', + action: addNewTrack + }] }, { label: 'View', items: [{ @@ -9271,7 +9290,7 @@ const App = () => { onClick: () => setMenuOpen(menuOpen === menu.label ? null : menu.label), className: `px-3 py-1 text-xs font-medium transition rounded ${menuOpen === menu.label ? 'bg-zinc-700 text-zinc-100' : 'text-zinc-400 hover:text-zinc-200 hover:bg-zinc-800'}` }, menu.label), menuOpen === menu.label && /*#__PURE__*/React.createElement("div", { - className: "absolute top-full left-0 mt-0.5 bg-[#2a2a2a] border border-zinc-700 rounded-lg shadow-2xl py-1 w-64 z-50", + className: `absolute top-full left-0 mt-0.5 bg-[#2a2a2a] border border-zinc-700 rounded-lg shadow-2xl py-1 z-50 ${menu.label === 'Edit' ? 'w-72' : 'w-64'}`, onClick: () => setMenuOpen(null) }, menu.items.map((item, i) => item.sep ? /*#__PURE__*/React.createElement("div", { key: i, diff --git a/app/storage/sonicforge.db b/app/storage/sonicforge.db index 52340cf..1c628e3 100644 Binary files a/app/storage/sonicforge.db and b/app/storage/sonicforge.db differ diff --git a/md/31_TAB_CLONE.md b/md/31_TAB_CLONE.md new file mode 100644 index 0000000..8ecdd14 --- /dev/null +++ b/md/31_TAB_CLONE.md @@ -0,0 +1 @@ +
TRACKS (2)
TMTempo
BPM
01Track 01
Vol:0dB
Pan:C
02Track 02
Vol:0dB
Pan:C
0.00s
1.00s
2.00s
3.00s
4.00s
5.00s
6.00s
7.00s
8.00s
9.00s
Kéo clip xuống hoặc Click tạo Track

Export

DSP Tools

Track: Track 01
Range: Chưa chọn vùng
Channels: 0
Peak Vol: N/A
Selection
Start
End
Len0s
Begin Bar
End Bar
# Bars1

Media Explorer

// Placeholder: Media files browser
\ No newline at end of file