From 78b9358539326be3ceb41b39555c0b7ab291a96e Mon Sep 17 00:00:00 2001 From: 3dtours Date: Wed, 22 Jul 2026 20:44:07 +0700 Subject: [PATCH] =?UTF-8?q?feat:=20b=E1=BB=95=20sung=20ph=E1=BA=A7n=20menu?= =?UTF-8?q?=20insert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/static/js/app.jsx | 21 ++++++++++++++++++++- app/static/js/app.precompiled.js | 21 ++++++++++++++++++++- app/storage/sonicforge.db | Bin 45056 -> 45056 bytes md/31_TAB_CLONE.md | 1 + 4 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 md/31_TAB_CLONE.md 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 52340cf0e99fa3e526a70ed95108d6969b109452..1c628e3ba17ca75c156a21d55a6f688fb48cf1c5 100644 GIT binary patch delta 38 ucmZp8z|`=7X@WH4>4`GVjHfpyIG1x8{(GVShk=1jXk#NE+vZ)hZbkqr&koK2 delta 38 ucmZp8z|`=7X@WH4iHS1Kj3+iGIG1zktzJ>h!oa{Lw6T$oZS$^LHzNQTTMdQ) 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