dsh-music-panel 0.3.7 → 0.3.8
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/CHANGELOG.md +7 -0
- package/client.js +46 -8
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/client.js
CHANGED
|
@@ -2124,8 +2124,11 @@ window.__ModuleLoader__.load({
|
|
|
2124
2124
|
function QueueOverlay() {
|
|
2125
2125
|
var [open, setOpen] = useState(queueOverlaySnapshot())
|
|
2126
2126
|
var [snap, setSnap] = useState(player.getSnapshot())
|
|
2127
|
-
var [dragFrom, setDragFrom] = useState(null)
|
|
2128
2127
|
var [dragOver, setDragOver] = useState(null)
|
|
2128
|
+
// Keep the source index in a ref: calling setState from dragstart makes
|
|
2129
|
+
// React re-render the dragged node synchronously, which cancels the
|
|
2130
|
+
// browser's drag in Chromium.
|
|
2131
|
+
var dragFromRef = useRef(null)
|
|
2129
2132
|
var ref = useRef(null)
|
|
2130
2133
|
|
|
2131
2134
|
useEffect(function () {
|
|
@@ -2168,14 +2171,13 @@ window.__ModuleLoader__.load({
|
|
|
2168
2171
|
className:
|
|
2169
2172
|
'mu-queue-row' +
|
|
2170
2173
|
(visibleCurrent ? ' is-current' : '') +
|
|
2171
|
-
(
|
|
2172
|
-
(dragOver === position && dragFrom !== position ? ' is-drop-target' : ''),
|
|
2174
|
+
(dragOver === position ? ' is-drop-target' : ''),
|
|
2173
2175
|
draggable: true,
|
|
2174
2176
|
onClick: function () {
|
|
2175
2177
|
player.select(snap.queue, originalIndex)
|
|
2176
2178
|
},
|
|
2177
2179
|
onDragStart: function (event) {
|
|
2178
|
-
|
|
2180
|
+
dragFromRef.current = position
|
|
2179
2181
|
setDragOver(position)
|
|
2180
2182
|
if (event.dataTransfer !== null && event.dataTransfer !== undefined) {
|
|
2181
2183
|
event.dataTransfer.effectAllowed = 'move'
|
|
@@ -2198,7 +2200,8 @@ window.__ModuleLoader__.load({
|
|
|
2198
2200
|
},
|
|
2199
2201
|
onDrop: function (event) {
|
|
2200
2202
|
event.preventDefault()
|
|
2201
|
-
|
|
2203
|
+
event.stopPropagation()
|
|
2204
|
+
var from = dragFromRef.current
|
|
2202
2205
|
if (from !== null && from !== position) {
|
|
2203
2206
|
var order = queueView.map(function (item) {
|
|
2204
2207
|
return item.originalIndex
|
|
@@ -2207,11 +2210,11 @@ window.__ModuleLoader__.load({
|
|
|
2207
2210
|
order.splice(position, 0, moved)
|
|
2208
2211
|
player.reorderQueue(order)
|
|
2209
2212
|
}
|
|
2210
|
-
|
|
2213
|
+
dragFromRef.current = null
|
|
2211
2214
|
setDragOver(null)
|
|
2212
2215
|
},
|
|
2213
2216
|
onDragEnd: function () {
|
|
2214
|
-
|
|
2217
|
+
dragFromRef.current = null
|
|
2215
2218
|
setDragOver(null)
|
|
2216
2219
|
},
|
|
2217
2220
|
},
|
|
@@ -2260,7 +2263,42 @@ window.__ModuleLoader__.load({
|
|
|
2260
2263
|
),
|
|
2261
2264
|
h(
|
|
2262
2265
|
'div',
|
|
2263
|
-
{
|
|
2266
|
+
{
|
|
2267
|
+
className: 'mu-qoverlay-list',
|
|
2268
|
+
onDragOver: function (event) {
|
|
2269
|
+
event.preventDefault()
|
|
2270
|
+
if (event.dataTransfer !== null && event.dataTransfer !== undefined) {
|
|
2271
|
+
event.dataTransfer.dropEffect = 'move'
|
|
2272
|
+
}
|
|
2273
|
+
},
|
|
2274
|
+
// Dropping in the gap between rows (no row handles it) still
|
|
2275
|
+
// reorders: pick the row under the pointer.
|
|
2276
|
+
onDrop: function (event) {
|
|
2277
|
+
event.preventDefault()
|
|
2278
|
+
var from = dragFromRef.current
|
|
2279
|
+
if (from === null) return
|
|
2280
|
+
var rowEls = event.currentTarget.querySelectorAll('.mu-queue-row')
|
|
2281
|
+
var target = queueView.length - 1
|
|
2282
|
+
for (var i = 0; i < rowEls.length; i += 1) {
|
|
2283
|
+
var rect = rowEls[i].getBoundingClientRect()
|
|
2284
|
+
if (event.clientY < rect.top + rect.height / 2) {
|
|
2285
|
+
target = i
|
|
2286
|
+
break
|
|
2287
|
+
}
|
|
2288
|
+
target = i
|
|
2289
|
+
}
|
|
2290
|
+
if (target !== from) {
|
|
2291
|
+
var order = queueView.map(function (item) {
|
|
2292
|
+
return item.originalIndex
|
|
2293
|
+
})
|
|
2294
|
+
var moved = order.splice(from, 1)[0]
|
|
2295
|
+
order.splice(target, 0, moved)
|
|
2296
|
+
player.reorderQueue(order)
|
|
2297
|
+
}
|
|
2298
|
+
dragFromRef.current = null
|
|
2299
|
+
setDragOver(null)
|
|
2300
|
+
},
|
|
2301
|
+
},
|
|
2264
2302
|
snap.queue.length === 0 ? h('div', { className: 'mu-state-sub' }, t('page.queueEmpty')) : rows,
|
|
2265
2303
|
),
|
|
2266
2304
|
)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-music-panel",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Local music library for DeepSeek Harness: scan a folder, browse tracks with cover art and tags, and play through a sidebar-panel player with loop, shuffle and volume. · DSH 本地音乐插件:扫描音乐目录、读取封面与标签、侧栏入口 + 全屏播放器。",
|
|
6
6
|
"license": "MIT",
|