[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M70WXTA2JQ9SN3QZPHHCYB90":3,"skill-same:01M70WXTA2JQ9SN3QZPHHCYB90":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":16,"sourceHtmlUrl":17,"categories":18,"keywords":19,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":40,"commitSha":41,"skillDirectory":5,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":6,"ownerHtmlUrl":44,"ownerBlogUrl":6,"ownerDescription":45,"updatedAt":46,"install":47,"resources":60},"01M70WXTA2JQ9SN3QZPHHCYB90","gestures",null,"Build or fix web drag, swipe, sheet, reorder, and hold interactions: direct tracking, rubber banding, release velocity, momentum, snap points, and interruption. Not native React Native or Swift.","malinskibeniamin\u002Fskills","malinskibeniamin","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9860550?v=4","01M6HR395Z9MM67BCKMW1WKTJS","Beniamin Malinski","01M6HR39AP95WH9NHANQ91FAJ0",4,"MIT","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fgestures\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fgestures\u002FSKILL.md",[],[5,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"snap","react native","drag","web","velocity","native","build","release","sheet","fix","tracking","direct","swipe","react","swift","2026-11-10 10:12:30",false,"---\nname: gestures\ndescription: \"Build or fix web drag, swipe, sheet, reorder, and hold interactions: direct tracking, rubber banding, release velocity, momentum, snap points, and interruption. Not native React Native or Swift.\"\n---\n\nMake direct manipulation follow the pointer, then settle predictably after release.\nAdapted from Emil Kowalski; [source and compatibility](..\u002Fshared\u002FEMIL-SKILLS-CREDITS.md).\nQuestions\u002Freviews return guidance or findings without edits; build\u002Ffix follows project\nTDD, verification and delivery. Loading this skill grants no installs or device access.\n\n## Choose the owner\n\nInspect the component, input paths, installed library\u002Fversion and existing UI wrapper.\nReuse its drawer, dialog, toast or reorder primitive before hand-rolling physics.\nConsider Vaul only if it fits the stack and requested scope; retain its focus trap,\nEscape, focus return, scroll locking and dismissal behavior. A gesture is not a reason\nto replace a working library. Check installed types and current official docs for APIs.\n\n## Gesture loop\n\n1. **Define intent.** Identify the axis, handle, bounds\u002Fsnap points, commit action,\n   cancel path and non-drag alternative. Prefer native scroll\u002Fsnap when it fits.\n   Separate press feedback from activation; preserve accessible click\u002Fsubmit controls.\n2. **Arbitrate input.** Let scrolling, text selection and interactive children keep\n   their native behavior. For custom pointer handling, track the active pointer id,\n   capture only the owned drag, and handle `pointercancel`, `lostpointercapture`,\n   extra pointers and unmount. Cancellation must not commit a dismiss\u002Fdelete\u002Freorder.\n   Set scoped `touch-action` before the gesture; preserve pinch zoom. For phone\u002Fbrowser\n   symptoms, load [mobile-native](..\u002Fmobile-native\u002FSKILL.md).\n3. **Track directly.** Within bounds, map pointer displacement 1:1 from the element's\n   current visual position. Use the library's motion value or a direct transform,\n   without a tracking spring\u002Ftransition or per-move React renders. Apply resistance\n   only beyond the permitted boundary. Avoid driving large descendant trees through\n   an inherited per-frame CSS variable; profile the actual update path.\n4. **Resolve release.** Read current displacement and recent signed velocity on the\n   owned axis. Choose a snap\u002Fdismiss target from distance OR a deliberate flick in\n   the allowed direction; use consistent units. Reposition-only drags can stop on\n   release. Fling interactions can use inertia; spring settling can inherit velocity.\n   Keep one release driver: library momentum and a custom spring must not compete.\n5. **Stay catchable.** On re-grab, stop the release driver, read its current position,\n   and rebase the new drag origin there. Retarget from the current value\u002Fvelocity\n   where supported. Neither a spring nor CSS automatically guarantees this handoff.\n   Keep related overlay\u002Fscale values derived from the same drag progress; prevent\n   stale completion callbacks from unmounting or committing after interruption.\n6. **Settle accessibly.** Under reduced motion, retain necessary direct tracking but\n   remove decorative bounce and long momentum; settle promptly or instantly. Keep\n   the outcome available via buttons\u002Fkeyboard and a non-drag pointer path. Holds show\n   elapsed time linearly, cancel on early release\u002Fescape\u002Flost capture, and commit once.\n   A hold is not the sole way to perform an action or a substitute for confirmation.\n\nFor threshold units, resistance, sheets and hold-specific checks, read\n[REFERENCE.md](REFERENCE.md). Treat its numbers as tuning candidates, not fixed rules.\nFor multi-element timing and transition craft, load [animate](..\u002Fanimate\u002FSKILL.md);\nfor measured drag stutter, load [animation-performance](..\u002Fanimation-performance\u002FSKILL.md).\nUse the [dependency-loading contract](..\u002Fwriting-for-agents\u002FSKILL-MECHANICS.md#loading-dependencies).\n\n## Verify and hand off\n\nExercise slow drag, short fast flick, reverse direction, boundary resistance, snap-back,\nre-grab during settling, nested scroll, child activation, cancellation, multiple pointers,\nresize\u002Funmount and reduced motion. Test keyboard\u002Fnon-drag equivalence and retained focus.\nUse the real component; record normal-speed\u002Fframe-stepped interaction only when needed\nto resolve continuity. Code inspection cannot prove feel, frame rate or phone behavior.\nPhysical-device checks require available authorized hardware; report missing coverage\nwithout exposing a dev server or installing tooling just to satisfy this skill.\n\nReport track\u002Frelease choices, thresholds and units, cancellation\u002Falternative behavior,\nobserved verification and remaining device limits. Keep review findings separate from taste.\n","Make direct manipulation follow the pointer, then settle predictably after release.\nAdapted from Emil Kowalski; [source and compatibility](..\u002Fshared\u002FEMIL-SKILLS-CREDITS.md).\nQuestions\u002Freviews return guidance or findings without edits; build\u002Ffix follows project\nTDD, verification and delivery. Loading this skill grants no installs or device access.\n\n## Choose the owner\n\nInspect the component, input paths, installed library\u002Fversion and existing UI wrapper.\nReuse its drawer, dialog, toast or reorder primitive before hand-rolling physics.\nConsider Vaul only if it fits the stack and requested scope; retain its focus trap,\nEscape, focus return, scroll locking and dismissal behavior. A gesture is not a reason\nto replace a working library. Check installed types and current official docs for APIs.\n\n## Gesture loop\n\n1. **Define intent.** Identify the axis, handle, bounds\u002Fsnap points, commit action,\n   cancel path and non-drag alternative. Prefer native scroll\u002Fsnap when it fits.\n   Separate press feedback from activation; preserve accessible click\u002Fsubmit controls.\n2. **Arbitrate input.** Let scrolling, text selection and interactive children keep\n   their native behavior. For custom pointer handling, track the active pointer id,\n   capture only the owned drag, and handle `pointercancel`, `lostpointercapture`,\n   extra pointers and unmount. Cancellation must not commit a dismiss\u002Fdelete\u002Freorder.\n   Set scoped `touch-action` before the gesture; preserve pinch zoom. For phone\u002Fbrowser\n   symptoms, load [mobile-native](..\u002Fmobile-native\u002FSKILL.md).\n3. **Track directly.** Within bounds, map pointer displacement 1:1 from the element's\n   current visual position. Use the library's motion value or a direct transform,\n   without a tracking spring\u002Ftransition or per-move React renders. Apply resistance\n   only beyond the permitted boundary. Avoid driving large descendant trees through\n   an inherited per-frame CSS variable; profile the actual update path.\n4. **Resolve release.** Read current displacement and recent signed velocity on the\n   owned axis. Choose a snap\u002Fdismiss target from distance OR a deliberate flick in\n   the allowed direction; use consistent units. Reposition-only drags can stop on\n   release. Fling interactions can use inertia; spring settling can inherit velocity.\n   Keep one release driver: library momentum and a custom spring must not compete.\n5. **Stay catchable.** On re-grab, stop the release driver, read its current position,\n   and rebase the new drag origin there. Retarget from the current value\u002Fvelocity\n   where supported. Neither a spring nor CSS automatically guarantees this handoff.\n   Keep related overlay\u002Fscale values derived from the same drag progress; prevent\n   stale completion callbacks from unmounting or committing after interruption.\n6. **Settle accessibly.** Under reduced motion, retain necessary direct tracking but\n   remove decorative bounce and long momentum; settle promptly or instantly. Keep\n   the outcome available via buttons\u002Fkeyboard and a non-drag pointer path. Holds show\n   elapsed time linearly, cancel on early release\u002Fescape\u002Flost capture, and commit once.\n   A hold is not the sole way to perform an action or a substitute for confirmation.\n\nFor threshold units, resistance, sheets and hold-specific checks, read\n[REFERENCE.md](REFERENCE.md). Treat its numbers as tuning candidates, not fixed rules.\nFor multi-element timing and transition craft, load [animate](..\u002Fanimate\u002FSKILL.md);\nfor measured drag stutter, load [animation-performance](..\u002Fanimation-performance\u002FSKILL.md).\nUse the [dependency-loading contract](..\u002Fwriting-for-agents\u002FSKILL-MECHANICS.md#loading-dependencies).\n\n## Verify and hand off\n\nExercise slow drag, short fast flick, reverse direction, boundary resistance, snap-back,\nre-grab during settling, nested scroll, child activation, cancellation, multiple pointers,\nresize\u002Funmount and reduced motion. Test keyboard\u002Fnon-drag equivalence and retained focus.\nUse the real component; record normal-speed\u002Fframe-stepped interaction only when needed\nto resolve continuity. Code inspection cannot prove feel, frame rate or phone behavior.\nPhysical-device checks require available authorized hardware; report missing coverage\nwithout exposing a dev server or installing tooling just to satisfy this skill.\n\nReport track\u002Frelease choices, thresholds and units, cancellation\u002Falternative behavior,\nobserved verification and remaining device limits. Keep review findings separate from taste.\n",{"name":5,"description":7},"main","33ce54f34e30fc6576782912ce0d571729558427",1,"https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin","Software Engineer ","2026-11-13 00:59:00",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add malinskibeniamin\u002Fskills --skill gestures",{"tool":53,"command":54},"bunx","bunx skills add malinskibeniamin\u002Fskills --skill gestures",{"tool":56,"command":57},"pnpm","pnpm dlx skills add malinskibeniamin\u002Fskills --skill gestures","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fgestures\u002FSKILL.md",true,[61,65],{"path":62,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":64,"sourceHtmlUrl":16},"LICENSE","许可证",1070,{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"REFERENCE.md","REFERENCE","参考文档",5869,"https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fgestures\u002FREFERENCE.md",[72,94,99,104,128,142],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":35},"01M70WY35N42VJT16W9MA8CCGX","hill-climb","Optimize a defined outcome through bounded evaluation loops. Use for hill-climb requests or repeated improvement against an executable eval, benchmark, or visual comparison; not a one-pass review.","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fhill-climb\u002FSKILL.md",[],[79,80,81,82,83,84,85,86,87,88,89,90,91,92,93],"hill climb","bounded","requests","review","visual","comparison","use","eval","benchmark","Evaluation","outcome","for","improvement","optimize","loops",{"skillNo":95,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":35},"01M70WKSB2PTJGVH7C9XC1FEED","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fcodex-skills\u002Fhill-climb\u002FSKILL.md",[],[79,92,87,88,89,90,81,91,93,86,80,82,83,84,85],{"skillNo":100,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":35},"01M70WKGYKGN1J786GK8N3RGH1","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fcodex-skills\u002Fgestures\u002FSKILL.md",[],[5,27,31,34,28,29,30,33,32,25,24,23,22,21,20,26],{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":108,"sourceHtmlUrl":109,"categories":110,"keywords":111,"publishedAt":35},"01M6HS2326AZFPF8G9C2KW4AT0","improve-animations","Audit existing web UI motion and prioritize concrete improvements or self-contained implementation plans. Use for a motion roadmap; animate owns implementation and diff review.","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fimprove-animations\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fimprove-animations\u002FSKILL.md",[],[112,113,90,114,115,23,116,117,118,119,82,120,121,122,85,123,124,125,126,127],"improve animations","improve","audit","diff","self","prioritize","ui","ui motion","web ui","roadmap","Existing","animate","motion","implementation","plans","diff review",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":132,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":35},"01M6HS0AADDXBB0S8B42R0G82K","effect-ts","Use when setting up a repository that uses the Effect TypeScript library.","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Feffect-ts\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Feffect-ts\u002FSKILL.md",[],[136,137,138,139,85,140,141],"effect ts","effect","repository","library","typescript","up",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":148,"publishedAt":35},"01M6HRDWAEFX9PKNCZSSXM3PQD","matt-chief-of-staff","Use the pinned Matt Pocock chief-of-staff skill with host compatibility rules.","https:\u002F\u002Fgithub.com\u002Fmalinskibeniamin\u002Fskills\u002Fblob\u002Fmain\u002Fcodex-skills\u002Fmatt-chief-of-staff\u002FSKILL.md",[],[149,150,151,152,153,154,155,85,156,157,158],"chief","chief of staff","matt chief of staff","chief-of-staff","compatibility","Rules","matt pocock","host","true","with"]