@hienlh/ppm 0.13.15 → 0.13.17

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.
Files changed (56) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/CLAUDE.md +5 -0
  3. package/assets/skills/ppm/SKILL.md +1 -1
  4. package/assets/skills/ppm/references/http-api.md +1 -1
  5. package/bun.lock +2135 -0
  6. package/bunfig.toml +2 -0
  7. package/dist/web/assets/{audio-preview-YOG6Biao.js → audio-preview-CEYHVcPO.js} +1 -1
  8. package/dist/web/assets/{chat-tab-DbdDJuLu.js → chat-tab-DgKpBVjE.js} +3 -3
  9. package/dist/web/assets/code-editor-Cq2IOaV8.js +8 -0
  10. package/dist/web/assets/{conflict-editor-DnGfriL5.js → conflict-editor-C3l0f_1F.js} +1 -1
  11. package/dist/web/assets/{database-viewer-AodppoTs.js → database-viewer-Bsj5g3RI.js} +1 -1
  12. package/dist/web/assets/{diff-viewer-DykLUwna.js → diff-viewer-LNzXRYQX.js} +1 -1
  13. package/dist/web/assets/{extension-webview-Bck7QuaB.js → extension-webview-ClSDQWq_.js} +1 -1
  14. package/dist/web/assets/file-store-DOxcU_7s.js +1 -0
  15. package/dist/web/assets/{glide-data-grid-BVt0mwcA.js → glide-data-grid-rA_8qdHA.js} +1 -1
  16. package/dist/web/assets/{image-preview-DaSmrIvY.js → image-preview-BEC5d-NV.js} +1 -1
  17. package/dist/web/assets/index-VDmxXycP.js +27 -0
  18. package/dist/web/assets/index-nC9UURj4.css +2 -0
  19. package/dist/web/assets/keybindings-store-CNsaPqyF.js +1 -0
  20. package/dist/web/assets/{markdown-renderer-B1me_hz2.js → markdown-renderer-CPVvj7aP.js} +1 -1
  21. package/dist/web/assets/{pdf-preview-Dci7TIL1.js → pdf-preview-Dn0-iiir.js} +1 -1
  22. package/dist/web/assets/{port-forwarding-tab-BeM40G-J.js → port-forwarding-tab-BTScoTXw.js} +1 -1
  23. package/dist/web/assets/{postgres-viewer-CGVBOwA9.js → postgres-viewer-zrm-uI0Y.js} +1 -1
  24. package/dist/web/assets/{settings-tab-CYS8VfNl.js → settings-tab-D3_bKOG3.js} +1 -1
  25. package/dist/web/assets/{sql-query-editor-DstPySPF.js → sql-query-editor-CGIWCq6O.js} +1 -1
  26. package/dist/web/assets/{sqlite-viewer-SUGEk_G1.js → sqlite-viewer-Bvd2SXu-.js} +1 -1
  27. package/dist/web/assets/{terminal-tab-CJvjF79J.js → terminal-tab-BwdYHHa4.js} +1 -1
  28. package/dist/web/assets/{video-preview-gJSKmPQr.js → video-preview-onuXf7EW.js} +1 -1
  29. package/dist/web/index.html +3 -3
  30. package/dist/web/sw.js +1 -1
  31. package/package.json +1 -1
  32. package/src/index.ts +0 -0
  33. package/src/server/routes/files.ts +15 -0
  34. package/src/services/file.service.ts +15 -0
  35. package/src/web/components/editor/editor-breadcrumb.tsx +88 -36
  36. package/src/web/components/explorer/file-actions.tsx +12 -129
  37. package/src/web/components/explorer/file-icon-map.ts +69 -0
  38. package/src/web/components/explorer/file-tree.tsx +177 -362
  39. package/src/web/components/explorer/inline-tree-input.tsx +120 -0
  40. package/src/web/components/explorer/tree-node-context-menu.tsx +97 -0
  41. package/src/web/components/explorer/tree-node.tsx +343 -0
  42. package/src/web/components/explorer/use-file-upload-drag.ts +84 -0
  43. package/src/web/components/explorer/use-tree-keyboard-nav.ts +126 -0
  44. package/src/web/components/layout/mobile-nav.tsx +73 -84
  45. package/src/web/components/layout/project-bottom-sheet.tsx +61 -82
  46. package/src/web/components/ui/adaptive-context-menu.tsx +245 -0
  47. package/src/web/components/ui/mobile-bottom-sheet.tsx +155 -0
  48. package/src/web/hooks/use-is-mobile.ts +28 -0
  49. package/src/web/hooks/use-swipe-to-dismiss.ts +51 -0
  50. package/src/web/stores/file-store.ts +74 -3
  51. package/src/web/stores/git-status-store.ts +87 -2
  52. package/dist/web/assets/code-editor-C4nuAsy6.js +0 -8
  53. package/dist/web/assets/file-store-4BpOJthN.js +0 -1
  54. package/dist/web/assets/index-CSK33ACc.css +0 -2
  55. package/dist/web/assets/index-gZKF1YKy.js +0 -27
  56. package/dist/web/assets/keybindings-store-DBKLTPrk.js +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.13.17] - 2026-04-25
4
+
5
+ ### Fixed
6
+ - **Swipe-to-dismiss stale closure**: Bottom sheet swipe gesture could fail to dismiss due to stale `dragY` state in touch end handler — now uses ref for reliable threshold check
7
+ - **No upload progress feedback**: Dragging files into the file tree showed no visual feedback — now shows toast with loading spinner, success/error result
8
+ - **Duplicate Loader2 import**: Consolidated duplicate lucide-react import in file-tree.tsx
9
+
10
+ ## [0.13.16] - 2026-04-25
11
+
12
+ ### Added
13
+ - **File tree explorer overhaul**: VS Code-style file explorer with git decorations, inline rename/create, drag-to-move, cut/copy/paste, collapse all, keyboard navigation (arrow keys, Enter, F2, Delete), multi-selection (Ctrl+Click, Shift+Click), compact folders, reveal active file
14
+ - **File copy API**: `POST /files/copy` endpoint for copying files/folders within a project
15
+ - **File icon map**: 40+ file type icons with color coding in the explorer tree
16
+ - **Adaptive context menu**: Unified component (`adaptive-context-menu.tsx`) — right-click menu on desktop, long-press bottom sheet on mobile. Drop-in replacement for radix ContextMenu
17
+ - **Reusable bottom sheet**: Shared `BottomSheet` component with swipe-to-dismiss gesture, used by context menus, project selector, and mobile nav action sheets
18
+ - **Mobile detection hook**: Centralized `useIsMobile()` hook for reactive breakpoint checks
19
+
20
+ ### Changed
21
+ - **Project bottom sheet**: Migrated to shared `BottomSheet` component with swipe-to-dismiss
22
+ - **Mobile nav action sheets**: Migrated to shared `BottomSheet` component with swipe-to-dismiss
23
+ - **File tree modularized**: Split into tree-node, context menu, inline input, keyboard nav, file upload drag, and file icon map modules
24
+
25
+ ### Fixed
26
+ - **Double context menu on mobile**: Nested radix ContextMenus caused two menus to open on long-press — resolved by adaptive component with stopPropagation
27
+ - **File opens during long-press**: Click event suppressed after long-press context menu trigger on mobile
28
+ - **Git folder decorations broken**: `isDir` variable used before declaration in tree-node git status selector
29
+ - **Missing useState import**: `useState` removed from file-tree.tsx imports but still used — restored
30
+ - **Global clipboard shortcuts**: Ctrl+X/C/V was intercepting all keyboard events globally — scoped to file tree container focus
31
+
3
32
  ## [0.13.15] - 2026-04-24
4
33
 
5
34
  ### Fixed
package/CLAUDE.md CHANGED
@@ -76,6 +76,11 @@ When creating or modifying any UI component, you MUST read and follow `docs/desi
76
76
  - Thumb zone: primary actions in bottom 1/3 of screen for one-handed use
77
77
  - Always test both mobile and desktop layouts
78
78
 
79
+ ### Reusable Adaptive Components
80
+
81
+ - **Context menus**: Always use `@/components/ui/adaptive-context-menu` instead of `@/components/ui/context-menu`. It auto-detects mobile (< 768px) and renders a bottom sheet with long-press trigger instead of radix right-click menu. Same API — just swap the import path. Sub-menus are flattened inline on mobile.
82
+ - **Mobile detection**: Use `useIsMobile()` from `@/hooks/use-is-mobile` for reactive mobile breakpoint checks.
83
+
79
84
  ## Roadmap & Context
80
85
 
81
86
  Before planning or implementing a new feature, read `docs/project-roadmap.md` to understand:
@@ -71,4 +71,4 @@ This skill covers the `ppm` CLI, its HTTP API, and its config DB. It does **not*
71
71
  - Third-party extensions (inspect via `ppm ext list`).
72
72
  - The Claude Agent SDK internals (separate skill).
73
73
 
74
- <!-- Generated for PPM v0.13.15 at build time. Re-run `ppm export skill --install` to refresh. -->
74
+ <!-- Generated for PPM v0.13.17 at build time. Re-run `ppm export skill --install` to refresh. -->
@@ -201,4 +201,4 @@ _Base URL: `http://localhost:8080` (default; override via `ppm config set port <
201
201
  - `ws://<host>/ws/terminal` — PTY terminal multiplexer
202
202
  - `ws://<host>/ws/extensions` — extension host channel
203
203
 
204
- <!-- Generated from src/server/routes/ for PPM v0.13.15 -->
204
+ <!-- Generated from src/server/routes/ for PPM v0.13.17 -->