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 CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.8
4
+
5
+ ### 修复
6
+
7
+ - 修复播放队列拖拽松手后顺序不变:dragstart 中不再同步 setState(避免 Chromium 取消拖拽),拖拽源索引用 ref 记录
8
+ - 拖到行与行之间的空隙也能落位(容器兜底按指针位置计算目标行)
9
+
3
10
  ## 0.3.7
4
11
 
5
12
  ### 变更
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
- (dragFrom === position ? ' is-dragging' : '') +
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
- setDragFrom(position)
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
- var from = dragFrom
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
- setDragFrom(null)
2213
+ dragFromRef.current = null
2211
2214
  setDragOver(null)
2212
2215
  },
2213
2216
  onDragEnd: function () {
2214
- setDragFrom(null)
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
- { className: 'mu-qoverlay-list' },
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.7",
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",