opendevbrowser 0.0.31 → 0.0.33
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/README.md +18 -5
- package/dist/{accessibility-snapshot-CQ4ZKWKC.js → accessibility-snapshot-JSPFVWZ6.js} +12 -12
- package/dist/{active-window-TD5HYJ72.js → active-window-2OB2MSCR.js} +12 -12
- package/dist/{annotate-VTLFS2XV.js → annotate-VDZBZBKZ.js} +11 -11
- package/dist/{artifacts-KJ6RNDO2.js → artifacts-JHDUUJGQ.js} +2 -2
- package/dist/{attr-BCI5KYCW.js → attr-7XIO4MCH.js} +11 -11
- package/dist/browser/canvas-manager.d.ts.map +1 -1
- package/dist/canvas/guidance.d.ts +7 -0
- package/dist/canvas/guidance.d.ts.map +1 -1
- package/dist/canvas/repair-examples.d.ts +45 -0
- package/dist/canvas/repair-examples.d.ts.map +1 -0
- package/dist/{canvas-5DFEEOKM.js → canvas-N4PAA274.js} +26 -11
- package/dist/canvas-N4PAA274.js.map +1 -0
- package/dist/{capture-desktop-HFTTWY4Z.js → capture-desktop-T5YO3EBI.js} +12 -12
- package/dist/{capture-window-X63XPIFF.js → capture-window-UKEUBWKH.js} +12 -12
- package/dist/{check-LWAUY7GC.js → check-PQB6KKMN.js} +11 -11
- package/dist/{checked-ZSOUKVYT.js → checked-RNZIMCU6.js} +11 -11
- package/dist/{chunk-6B5WAQV7.js → chunk-27W46IKI.js} +42 -11
- package/dist/chunk-27W46IKI.js.map +1 -0
- package/dist/{chunk-WHQZBUNY.js → chunk-3WLCWHIV.js} +2 -2
- package/dist/{chunk-WHQZBUNY.js.map → chunk-3WLCWHIV.js.map} +1 -1
- package/dist/{chunk-PPUWQKIC.js → chunk-52ZIOWVU.js} +4 -4
- package/dist/{chunk-IPE7TF2P.js → chunk-7BNU6DFI.js} +8 -5
- package/dist/chunk-7BNU6DFI.js.map +1 -0
- package/dist/{chunk-3ILXPKSJ.js → chunk-BUVYTJZR.js} +2 -1
- package/dist/chunk-BUVYTJZR.js.map +1 -0
- package/dist/{chunk-QOMWCRE3.js → chunk-EOX6U6Q4.js} +47 -19
- package/dist/chunk-EOX6U6Q4.js.map +1 -0
- package/dist/{chunk-4BEJVZRK.js → chunk-FBKPDILE.js} +3625 -289
- package/dist/chunk-FBKPDILE.js.map +1 -0
- package/dist/{chunk-2I3YS3DV.js → chunk-FDBUB7BM.js} +7 -3
- package/dist/chunk-FDBUB7BM.js.map +1 -0
- package/dist/{chunk-COAOWH3G.js → chunk-HMRANSDX.js} +120 -28
- package/dist/chunk-HMRANSDX.js.map +1 -0
- package/dist/{chunk-KZ2IXVQT.js → chunk-IBIHDGTZ.js} +40 -5
- package/dist/chunk-IBIHDGTZ.js.map +1 -0
- package/dist/{chunk-T4GMCW6Z.js → chunk-J3KYGJRQ.js} +3 -3
- package/dist/{chunk-AHEWXOKY.js → chunk-JROW6ZNN.js} +4 -4
- package/dist/{chunk-6PVZ2ABC.js → chunk-L3YNUGYF.js} +2 -2
- package/dist/{chunk-MD655IPO.js → chunk-MJF67OTH.js} +11 -4
- package/dist/chunk-MJF67OTH.js.map +1 -0
- package/dist/{chunk-JZXD6FWR.js → chunk-NURQB55J.js} +2 -2
- package/dist/{chunk-STGGGVYT.js → chunk-QMHKAFYX.js} +2 -2
- package/dist/{chunk-RPXWUCQQ.js → chunk-SKFB5ICF.js} +2 -2
- package/dist/{chunk-2SIMIPLY.js → chunk-W6YPVNDX.js} +3 -3
- package/dist/{chunk-GQJ5S3BL.js → chunk-YRRRUGSQ.js} +3 -3
- package/dist/{chunk-37VSRUW4.js → chunk-ZGCTC5YM.js} +39 -7
- package/dist/chunk-ZGCTC5YM.js.map +1 -0
- package/dist/{chunk-KDSNXS6N.js → chunk-ZMNEWS7A.js} +2 -2
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/commands/canvas.d.ts +12 -0
- package/dist/cli/commands/canvas.d.ts.map +1 -1
- package/dist/cli/commands/daemon.d.ts +19 -2
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/inspiredesign.d.ts +6 -1
- package/dist/cli/commands/inspiredesign.d.ts.map +1 -1
- package/dist/cli/commands/serve.d.ts +12 -3
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/types.d.ts +1 -0
- package/dist/cli/commands/types.d.ts.map +1 -1
- package/dist/cli/daemon-client.d.ts.map +1 -1
- package/dist/cli/daemon-commands.d.ts.map +1 -1
- package/dist/cli/daemon-mismatch.d.ts +15 -0
- package/dist/cli/daemon-mismatch.d.ts.map +1 -0
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/errors.d.ts +4 -2
- package/dist/cli/errors.d.ts.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.js +91 -90
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/installers/postinstall-skill-sync.js +2 -2
- package/dist/cli/utils/workflow-message.d.ts +1 -1
- package/dist/cli/utils/workflow-message.d.ts.map +1 -1
- package/dist/{click-2AILSEIZ.js → click-U7ZFKSB4.js} +11 -11
- package/dist/{clone-component-TPJS3PEG.js → clone-component-SWYAORTU.js} +10 -10
- package/dist/{clone-page-LE74CIFC.js → clone-page-WJ6UJOJG.js} +10 -10
- package/dist/{close-HN4YI47K.js → close-NAVIHZ2T.js} +10 -10
- package/dist/{close-WFERRHX6.js → close-VKIGIKVT.js} +10 -10
- package/dist/{connect-RWBV2UCQ.js → connect-XVG2MOZL.js} +11 -11
- package/dist/{console-poll-PP4YYPDF.js → console-poll-XI5BZPL7.js} +11 -11
- package/dist/{cookie-import-6IP776FC.js → cookie-import-QELKE7TK.js} +10 -10
- package/dist/{cookie-list-O2KG6DPU.js → cookie-list-QDA6KWIY.js} +10 -10
- package/dist/{daemon-2BSAZXLT.js → daemon-CA4UIIZQ.js} +26 -13
- package/dist/daemon-CA4UIIZQ.js.map +1 -0
- package/dist/daemon-fingerprint.json +1 -1
- package/dist/{debug-trace-snapshot-F3BDVZXS.js → debug-trace-snapshot-AT4GAO57.js} +11 -11
- package/dist/{dialog-6JQYUWMQ.js → dialog-O3V2IBFH.js} +11 -11
- package/dist/{disconnect-763TP7GH.js → disconnect-NAX5TPTG.js} +10 -10
- package/dist/{enabled-DLYQFNIP.js → enabled-VT4FJXDX.js} +11 -11
- package/dist/{goto-S346TJJH.js → goto-GBJG5NC4.js} +11 -11
- package/dist/guidance/context.d.ts +44 -0
- package/dist/guidance/context.d.ts.map +1 -0
- package/dist/guidance/index.d.ts +7 -0
- package/dist/guidance/index.d.ts.map +1 -0
- package/dist/guidance/readiness.d.ts +7 -0
- package/dist/guidance/readiness.d.ts.map +1 -0
- package/dist/guidance/recipes/generic.d.ts +3 -0
- package/dist/guidance/recipes/generic.d.ts.map +1 -0
- package/dist/guidance/recipes/pinterest.d.ts +5 -0
- package/dist/guidance/recipes/pinterest.d.ts.map +1 -0
- package/dist/guidance/recipes/site-recipe-types.d.ts +2 -0
- package/dist/guidance/recipes/site-recipe-types.d.ts.map +1 -0
- package/dist/guidance/recipes/site-registry.d.ts +5 -0
- package/dist/guidance/recipes/site-registry.d.ts.map +1 -0
- package/dist/guidance/renderers.d.ts +22 -0
- package/dist/guidance/renderers.d.ts.map +1 -0
- package/dist/guidance/router.d.ts +8 -0
- package/dist/guidance/router.d.ts.map +1 -0
- package/dist/guidance/types.d.ts +139 -0
- package/dist/guidance/types.d.ts.map +1 -0
- package/dist/{help-U7KBQME6.js → help-SUI4H77K.js} +14 -9
- package/dist/help-SUI4H77K.js.map +1 -0
- package/dist/{hover-6JVJFGO7.js → hover-476ZNQZE.js} +11 -11
- package/dist/{html-EVOSPBIT.js → html-5C4TXOV3.js} +11 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +47 -18
- package/dist/index.js.map +1 -1
- package/dist/{inspector-H57BVUJP.js → inspector-73ARPCIV.js} +13 -13
- package/dist/{inspector-audit-NQBAJWC7.js → inspector-audit-QT6QY7KS.js} +15 -15
- package/dist/{inspector-plan-ZDIQVND3.js → inspector-plan-JRNSGN2Z.js} +13 -13
- package/dist/inspiredesign/capture.d.ts +4 -0
- package/dist/inspiredesign/capture.d.ts.map +1 -1
- package/dist/inspiredesign/contract.d.ts +24 -0
- package/dist/inspiredesign/contract.d.ts.map +1 -1
- package/dist/inspiredesign/handoff.d.ts +9 -3
- package/dist/inspiredesign/handoff.d.ts.map +1 -1
- package/dist/inspiredesign/meta-prompt.d.ts +9 -0
- package/dist/inspiredesign/meta-prompt.d.ts.map +1 -0
- package/dist/inspiredesign/reference-discovery.d.ts +29 -0
- package/dist/inspiredesign/reference-discovery.d.ts.map +1 -0
- package/dist/inspiredesign/reference-pattern-board.d.ts +38 -1
- package/dist/inspiredesign/reference-pattern-board.d.ts.map +1 -1
- package/dist/inspiredesign/visual-evidence.d.ts +46 -0
- package/dist/inspiredesign/visual-evidence.d.ts.map +1 -0
- package/dist/inspiredesign/visual-policy.d.ts +17 -0
- package/dist/inspiredesign/visual-policy.d.ts.map +1 -0
- package/dist/{inspiredesign-IEUL4PX3.js → inspiredesign-IPVZDLSQ.js} +73 -21
- package/dist/inspiredesign-IPVZDLSQ.js.map +1 -0
- package/dist/{launch-EK66VQPF.js → launch-B35YDRQC.js} +11 -11
- package/dist/{list-ADZAQ2IU.js → list-JV55JVGB.js} +10 -10
- package/dist/{list-KKUKN467.js → list-YETWKTKY.js} +10 -10
- package/dist/{macro-resolve-6DOQJ7CA.js → macro-resolve-DQK4B3W3.js} +12 -12
- package/dist/{native-UPLVQ2SG.js → native-J2DFLOLP.js} +3 -3
- package/dist/{network-poll-NUL4PDPY.js → network-poll-4GWHCJXI.js} +11 -11
- package/dist/{new-5NKYPEFT.js → new-XDCQPIEG.js} +10 -10
- package/dist/{open-NR3BPLXV.js → open-GIM3ZCSV.js} +10 -10
- package/dist/opendevbrowser.d.ts.map +1 -1
- package/dist/opendevbrowser.js +47 -18
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/{perf-HJ36ZI6H.js → perf-26VBXDPI.js} +11 -11
- package/dist/{pointer-down-IYTTQWXZ.js → pointer-down-O3VSNAXW.js} +12 -12
- package/dist/{pointer-drag-A2YC5PWI.js → pointer-drag-WQ5QGE6J.js} +12 -12
- package/dist/{pointer-move-W5K5FUI4.js → pointer-move-4N4D7JY2.js} +12 -12
- package/dist/{pointer-up-6GWVO64Y.js → pointer-up-CQC4NPDX.js} +12 -12
- package/dist/{press-A3V5WB3S.js → press-XGJD45CU.js} +11 -11
- package/dist/{product-video-52REKWF3.js → product-video-HD4ZOUI7.js} +13 -13
- package/dist/providers/browser-native-discovery.d.ts +23 -0
- package/dist/providers/browser-native-discovery.d.ts.map +1 -0
- package/dist/providers/renderer.d.ts +9 -1
- package/dist/providers/renderer.d.ts.map +1 -1
- package/dist/providers/workflow-handoff.d.ts +4 -0
- package/dist/providers/workflow-handoff.d.ts.map +1 -1
- package/dist/providers/workflows.d.ts +45 -3
- package/dist/providers/workflows.d.ts.map +1 -1
- package/dist/{providers-IMFYMMHQ.js → providers-KKNPJSQK.js} +4 -4
- package/dist/public-surface/generated-manifest.d.ts +14 -5
- package/dist/public-surface/generated-manifest.d.ts.map +1 -1
- package/dist/public-surface/source.d.ts +7 -7
- package/dist/public-surface/source.d.ts.map +1 -1
- package/dist/{research-WB6BBCDD.js → research-VUWWEQ4R.js} +13 -13
- package/dist/{review-BGWVY4RA.js → review-LZ3TA7U7.js} +12 -12
- package/dist/{review-desktop-LEORC5VS.js → review-desktop-LAO7U7T3.js} +12 -12
- package/dist/{rpc-4TSKSFGC.js → rpc-HKNIVFGC.js} +11 -11
- package/dist/{run-3NBLVWXD.js → run-SHCF53FO.js} +9 -9
- package/dist/{screencast-start-UZVIT3IN.js → screencast-start-JHMQZVWJ.js} +11 -11
- package/dist/{screencast-stop-NOSJSIUO.js → screencast-stop-RWQTWWQS.js} +11 -11
- package/dist/{screenshot-LARG4JQG.js → screenshot-QHFYO6PB.js} +11 -11
- package/dist/{scroll-VNFMV6TW.js → scroll-L3FTMAV4.js} +11 -11
- package/dist/{scroll-into-view-VYRT3JPT.js → scroll-into-view-JVDHX4WU.js} +11 -11
- package/dist/{select-KJTUZDVO.js → select-X4BO7GTB.js} +11 -11
- package/dist/{serve-EV7K4HKR.js → serve-JIMIBCNO.js} +49 -25
- package/dist/serve-JIMIBCNO.js.map +1 -0
- package/dist/{shopping-DTXHVQ2X.js → shopping-EGSDP2GL.js} +13 -13
- package/dist/{skill-lifecycle-5UAZGKSN.js → skill-lifecycle-OWZYBPFS.js} +3 -3
- package/dist/skills/bundled-skill-directories.d.ts.map +1 -1
- package/dist/skills/skill-loader.js +2 -2
- package/dist/{skills-NSXDX6YM.js → skills-KHMRNOE4.js} +3 -3
- package/dist/{snapshot-3XQMCMRJ.js → snapshot-QGJ7RDNV.js} +11 -11
- package/dist/{status-YUMDP5KY.js → status-CKGPNYIH.js} +21 -13
- package/dist/status-CKGPNYIH.js.map +1 -0
- package/dist/{status-OXSYA5XD.js → status-LEBY2X7N.js} +12 -12
- package/dist/{status-capabilities-P4KDSE2Y.js → status-capabilities-6QTWNGKM.js} +12 -12
- package/dist/{text-V3B7UVIH.js → text-VUZU7D3L.js} +11 -11
- package/dist/tools/inspiredesign_run.d.ts.map +1 -1
- package/dist/{type-IYBN3ZLR.js → type-N5SURP74.js} +11 -11
- package/dist/{uncheck-SG737EGI.js → uncheck-JFMK3SSY.js} +11 -11
- package/dist/{uninstall-KYKGJAX7.js → uninstall-FW5ORBIN.js} +3 -3
- package/dist/{update-skill-modes-BVX7IVMW.js → update-skill-modes-3ULKJK3Y.js} +3 -3
- package/dist/{upload-KH6ZABJA.js → upload-KFUYLL7M.js} +11 -11
- package/dist/{use-7YDKO3U4.js → use-CNMPP2ED.js} +10 -10
- package/dist/{value-RZBWSKKM.js → value-J335MPZE.js} +11 -11
- package/dist/{visible-BSFTAKXR.js → visible-YQZWWPBZ.js} +11 -11
- package/dist/{wait-TMTEAYOP.js → wait-IC7YJJPJ.js} +11 -11
- package/dist/{windows-HIZ23OHS.js → windows-AGVQ3KX3.js} +12 -12
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
- package/skills/AGENTS.md +2 -1
- package/skills/opendevbrowser-best-practices/SKILL.md +16 -3
- package/skills/opendevbrowser-best-practices/artifacts/canvas-governance-playbook.md +4 -4
- package/skills/opendevbrowser-best-practices/artifacts/skill-runtime-surface-matrix.md +4 -3
- package/skills/opendevbrowser-best-practices/assets/templates/mode-flag-matrix.json +7 -0
- package/skills/opendevbrowser-best-practices/assets/templates/skill-runtime-pack-matrix.json +49 -3
- package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +31 -2
- package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +7 -0
- package/skills/opendevbrowser-design-agent/SKILL.md +11 -6
- package/skills/opendevbrowser-design-agent/artifacts/design-workflows.md +4 -3
- package/skills/opendevbrowser-design-agent/artifacts/research-harvest-workflow.md +110 -41
- package/skills/opendevbrowser-design-agent/artifacts/scroll-reveal-surface-planning.md +2 -0
- package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +21 -5
- package/skills/opendevbrowser-design-agent/scripts/design-workflow.sh +5 -2
- package/skills/opendevbrowser-design-agent/scripts/validate-skill-assets.sh +8 -2
- package/skills/opendevbrowser-motion-design/SKILL.md +129 -0
- package/skills/opendevbrowser-motion-design/artifacts/accessibility-reduced-motion.md +37 -0
- package/skills/opendevbrowser-motion-design/artifacts/device-breakpoint-posture.md +40 -0
- package/skills/opendevbrowser-motion-design/artifacts/motion-anti-patterns.md +29 -0
- package/skills/opendevbrowser-motion-design/artifacts/motion-pattern-catalog.md +430 -0
- package/skills/opendevbrowser-motion-design/artifacts/motion-release-gate.md +28 -0
- package/skills/opendevbrowser-motion-design/artifacts/motion-terminology.md +46 -0
- package/skills/opendevbrowser-motion-design/artifacts/open-dev-browser-motion-evidence.md +48 -0
- package/skills/opendevbrowser-motion-design/artifacts/performance-frame-budget.md +38 -0
- package/skills/opendevbrowser-motion-design/artifacts/platform-framework-guide.md +166 -0
- package/skills/opendevbrowser-motion-design/assets/templates/motion-audit-report.v1.md +70 -0
- package/skills/opendevbrowser-motion-design/assets/templates/motion-contract.v1.json +79 -0
- package/skills/opendevbrowser-motion-design/assets/templates/motion-release-gate.v1.json +18 -0
- package/skills/opendevbrowser-motion-design/assets/templates/motion-viewport-matrix.v1.json +76 -0
- package/skills/opendevbrowser-motion-design/scripts/motion-workflow.sh +163 -0
- package/skills/opendevbrowser-motion-design/scripts/validate-skill-assets.sh +375 -0
- package/dist/canvas-5DFEEOKM.js.map +0 -1
- package/dist/chunk-2I3YS3DV.js.map +0 -1
- package/dist/chunk-37VSRUW4.js.map +0 -1
- package/dist/chunk-3ILXPKSJ.js.map +0 -1
- package/dist/chunk-4BEJVZRK.js.map +0 -1
- package/dist/chunk-6B5WAQV7.js.map +0 -1
- package/dist/chunk-COAOWH3G.js.map +0 -1
- package/dist/chunk-IPE7TF2P.js.map +0 -1
- package/dist/chunk-KZ2IXVQT.js.map +0 -1
- package/dist/chunk-MD655IPO.js.map +0 -1
- package/dist/chunk-QOMWCRE3.js.map +0 -1
- package/dist/daemon-2BSAZXLT.js.map +0 -1
- package/dist/help-U7KBQME6.js.map +0 -1
- package/dist/inspiredesign-IEUL4PX3.js.map +0 -1
- package/dist/serve-EV7K4HKR.js.map +0 -1
- package/dist/status-YUMDP5KY.js.map +0 -1
- /package/dist/{accessibility-snapshot-CQ4ZKWKC.js.map → accessibility-snapshot-JSPFVWZ6.js.map} +0 -0
- /package/dist/{active-window-TD5HYJ72.js.map → active-window-2OB2MSCR.js.map} +0 -0
- /package/dist/{annotate-VTLFS2XV.js.map → annotate-VDZBZBKZ.js.map} +0 -0
- /package/dist/{artifacts-KJ6RNDO2.js.map → artifacts-JHDUUJGQ.js.map} +0 -0
- /package/dist/{attr-BCI5KYCW.js.map → attr-7XIO4MCH.js.map} +0 -0
- /package/dist/{capture-desktop-HFTTWY4Z.js.map → capture-desktop-T5YO3EBI.js.map} +0 -0
- /package/dist/{capture-window-X63XPIFF.js.map → capture-window-UKEUBWKH.js.map} +0 -0
- /package/dist/{check-LWAUY7GC.js.map → check-PQB6KKMN.js.map} +0 -0
- /package/dist/{checked-ZSOUKVYT.js.map → checked-RNZIMCU6.js.map} +0 -0
- /package/dist/{chunk-PPUWQKIC.js.map → chunk-52ZIOWVU.js.map} +0 -0
- /package/dist/{chunk-T4GMCW6Z.js.map → chunk-J3KYGJRQ.js.map} +0 -0
- /package/dist/{chunk-AHEWXOKY.js.map → chunk-JROW6ZNN.js.map} +0 -0
- /package/dist/{chunk-6PVZ2ABC.js.map → chunk-L3YNUGYF.js.map} +0 -0
- /package/dist/{chunk-JZXD6FWR.js.map → chunk-NURQB55J.js.map} +0 -0
- /package/dist/{chunk-STGGGVYT.js.map → chunk-QMHKAFYX.js.map} +0 -0
- /package/dist/{chunk-RPXWUCQQ.js.map → chunk-SKFB5ICF.js.map} +0 -0
- /package/dist/{chunk-2SIMIPLY.js.map → chunk-W6YPVNDX.js.map} +0 -0
- /package/dist/{chunk-GQJ5S3BL.js.map → chunk-YRRRUGSQ.js.map} +0 -0
- /package/dist/{chunk-KDSNXS6N.js.map → chunk-ZMNEWS7A.js.map} +0 -0
- /package/dist/{click-2AILSEIZ.js.map → click-U7ZFKSB4.js.map} +0 -0
- /package/dist/{clone-component-TPJS3PEG.js.map → clone-component-SWYAORTU.js.map} +0 -0
- /package/dist/{clone-page-LE74CIFC.js.map → clone-page-WJ6UJOJG.js.map} +0 -0
- /package/dist/{close-HN4YI47K.js.map → close-NAVIHZ2T.js.map} +0 -0
- /package/dist/{close-WFERRHX6.js.map → close-VKIGIKVT.js.map} +0 -0
- /package/dist/{connect-RWBV2UCQ.js.map → connect-XVG2MOZL.js.map} +0 -0
- /package/dist/{console-poll-PP4YYPDF.js.map → console-poll-XI5BZPL7.js.map} +0 -0
- /package/dist/{cookie-import-6IP776FC.js.map → cookie-import-QELKE7TK.js.map} +0 -0
- /package/dist/{cookie-list-O2KG6DPU.js.map → cookie-list-QDA6KWIY.js.map} +0 -0
- /package/dist/{debug-trace-snapshot-F3BDVZXS.js.map → debug-trace-snapshot-AT4GAO57.js.map} +0 -0
- /package/dist/{dialog-6JQYUWMQ.js.map → dialog-O3V2IBFH.js.map} +0 -0
- /package/dist/{disconnect-763TP7GH.js.map → disconnect-NAX5TPTG.js.map} +0 -0
- /package/dist/{enabled-DLYQFNIP.js.map → enabled-VT4FJXDX.js.map} +0 -0
- /package/dist/{goto-S346TJJH.js.map → goto-GBJG5NC4.js.map} +0 -0
- /package/dist/{hover-6JVJFGO7.js.map → hover-476ZNQZE.js.map} +0 -0
- /package/dist/{html-EVOSPBIT.js.map → html-5C4TXOV3.js.map} +0 -0
- /package/dist/{inspector-H57BVUJP.js.map → inspector-73ARPCIV.js.map} +0 -0
- /package/dist/{inspector-audit-NQBAJWC7.js.map → inspector-audit-QT6QY7KS.js.map} +0 -0
- /package/dist/{inspector-plan-ZDIQVND3.js.map → inspector-plan-JRNSGN2Z.js.map} +0 -0
- /package/dist/{launch-EK66VQPF.js.map → launch-B35YDRQC.js.map} +0 -0
- /package/dist/{list-ADZAQ2IU.js.map → list-JV55JVGB.js.map} +0 -0
- /package/dist/{list-KKUKN467.js.map → list-YETWKTKY.js.map} +0 -0
- /package/dist/{macro-resolve-6DOQJ7CA.js.map → macro-resolve-DQK4B3W3.js.map} +0 -0
- /package/dist/{native-UPLVQ2SG.js.map → native-J2DFLOLP.js.map} +0 -0
- /package/dist/{network-poll-NUL4PDPY.js.map → network-poll-4GWHCJXI.js.map} +0 -0
- /package/dist/{new-5NKYPEFT.js.map → new-XDCQPIEG.js.map} +0 -0
- /package/dist/{open-NR3BPLXV.js.map → open-GIM3ZCSV.js.map} +0 -0
- /package/dist/{perf-HJ36ZI6H.js.map → perf-26VBXDPI.js.map} +0 -0
- /package/dist/{pointer-down-IYTTQWXZ.js.map → pointer-down-O3VSNAXW.js.map} +0 -0
- /package/dist/{pointer-drag-A2YC5PWI.js.map → pointer-drag-WQ5QGE6J.js.map} +0 -0
- /package/dist/{pointer-move-W5K5FUI4.js.map → pointer-move-4N4D7JY2.js.map} +0 -0
- /package/dist/{pointer-up-6GWVO64Y.js.map → pointer-up-CQC4NPDX.js.map} +0 -0
- /package/dist/{press-A3V5WB3S.js.map → press-XGJD45CU.js.map} +0 -0
- /package/dist/{product-video-52REKWF3.js.map → product-video-HD4ZOUI7.js.map} +0 -0
- /package/dist/{providers-IMFYMMHQ.js.map → providers-KKNPJSQK.js.map} +0 -0
- /package/dist/{research-WB6BBCDD.js.map → research-VUWWEQ4R.js.map} +0 -0
- /package/dist/{review-BGWVY4RA.js.map → review-LZ3TA7U7.js.map} +0 -0
- /package/dist/{review-desktop-LEORC5VS.js.map → review-desktop-LAO7U7T3.js.map} +0 -0
- /package/dist/{rpc-4TSKSFGC.js.map → rpc-HKNIVFGC.js.map} +0 -0
- /package/dist/{run-3NBLVWXD.js.map → run-SHCF53FO.js.map} +0 -0
- /package/dist/{screencast-start-UZVIT3IN.js.map → screencast-start-JHMQZVWJ.js.map} +0 -0
- /package/dist/{screencast-stop-NOSJSIUO.js.map → screencast-stop-RWQTWWQS.js.map} +0 -0
- /package/dist/{screenshot-LARG4JQG.js.map → screenshot-QHFYO6PB.js.map} +0 -0
- /package/dist/{scroll-VNFMV6TW.js.map → scroll-L3FTMAV4.js.map} +0 -0
- /package/dist/{scroll-into-view-VYRT3JPT.js.map → scroll-into-view-JVDHX4WU.js.map} +0 -0
- /package/dist/{select-KJTUZDVO.js.map → select-X4BO7GTB.js.map} +0 -0
- /package/dist/{shopping-DTXHVQ2X.js.map → shopping-EGSDP2GL.js.map} +0 -0
- /package/dist/{skill-lifecycle-5UAZGKSN.js.map → skill-lifecycle-OWZYBPFS.js.map} +0 -0
- /package/dist/{skills-NSXDX6YM.js.map → skills-KHMRNOE4.js.map} +0 -0
- /package/dist/{snapshot-3XQMCMRJ.js.map → snapshot-QGJ7RDNV.js.map} +0 -0
- /package/dist/{status-OXSYA5XD.js.map → status-LEBY2X7N.js.map} +0 -0
- /package/dist/{status-capabilities-P4KDSE2Y.js.map → status-capabilities-6QTWNGKM.js.map} +0 -0
- /package/dist/{text-V3B7UVIH.js.map → text-VUZU7D3L.js.map} +0 -0
- /package/dist/{type-IYBN3ZLR.js.map → type-N5SURP74.js.map} +0 -0
- /package/dist/{uncheck-SG737EGI.js.map → uncheck-JFMK3SSY.js.map} +0 -0
- /package/dist/{uninstall-KYKGJAX7.js.map → uninstall-FW5ORBIN.js.map} +0 -0
- /package/dist/{update-skill-modes-BVX7IVMW.js.map → update-skill-modes-3ULKJK3Y.js.map} +0 -0
- /package/dist/{upload-KH6ZABJA.js.map → upload-KFUYLL7M.js.map} +0 -0
- /package/dist/{use-7YDKO3U4.js.map → use-CNMPP2ED.js.map} +0 -0
- /package/dist/{value-RZBWSKKM.js.map → value-J335MPZE.js.map} +0 -0
- /package/dist/{visible-BSFTAKXR.js.map → visible-YQZWWPBZ.js.map} +0 -0
- /package/dist/{wait-TMTEAYOP.js.map → wait-IC7YJJPJ.js.map} +0 -0
- /package/dist/{windows-HIZ23OHS.js.map → windows-AGVQ3KX3.js.map} +0 -0
|
@@ -100,6 +100,8 @@ const skillDocMarkers = [
|
|
|
100
100
|
"plan_invalid",
|
|
101
101
|
"plan_accepted",
|
|
102
102
|
"recommendedNextCommands",
|
|
103
|
+
"nextStepGuidance.readiness",
|
|
104
|
+
"social/pinterest",
|
|
103
105
|
"canvas.plan.set",
|
|
104
106
|
"canvas.history.undo",
|
|
105
107
|
"canvas.history.redo",
|
|
@@ -129,7 +131,9 @@ const designWorkflowMarkers = [
|
|
|
129
131
|
"handshake_read",
|
|
130
132
|
"plan_invalid",
|
|
131
133
|
"plan_accepted",
|
|
132
|
-
"recommendedNextCommands"
|
|
134
|
+
"recommendedNextCommands",
|
|
135
|
+
"guidance.nextStepGuidance",
|
|
136
|
+
"guidance.paramsExamples"
|
|
133
137
|
];
|
|
134
138
|
|
|
135
139
|
const workflowOutputMarkers = {
|
|
@@ -145,7 +149,9 @@ const workflowOutputMarkers = {
|
|
|
145
149
|
"handshake_read",
|
|
146
150
|
"plan_invalid",
|
|
147
151
|
"plan_accepted",
|
|
148
|
-
"recommendedNextCommands"
|
|
152
|
+
"recommendedNextCommands",
|
|
153
|
+
"guidance.nextStepGuidance",
|
|
154
|
+
"guidance.paramsExamples"
|
|
149
155
|
]
|
|
150
156
|
};
|
|
151
157
|
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opendevbrowser-motion-design
|
|
3
|
+
description: Deterministic motion and animation design guidance for OpenDevBrowser agents building web and mobile UI with real-browser temporal evidence.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Motion Design Skill
|
|
8
|
+
|
|
9
|
+
Use this skill when a task asks for animation, motion language, transition systems, scroll choreography, gesture motion, reduced-motion audits, browser replay evidence, or motion-heavy UI implementation.
|
|
10
|
+
|
|
11
|
+
## Pack Contents
|
|
12
|
+
|
|
13
|
+
- `artifacts/motion-terminology.md`
|
|
14
|
+
- `artifacts/motion-pattern-catalog.md`
|
|
15
|
+
- `artifacts/platform-framework-guide.md`
|
|
16
|
+
- `artifacts/device-breakpoint-posture.md`
|
|
17
|
+
- `artifacts/accessibility-reduced-motion.md`
|
|
18
|
+
- `artifacts/performance-frame-budget.md`
|
|
19
|
+
- `artifacts/open-dev-browser-motion-evidence.md`
|
|
20
|
+
- `artifacts/motion-release-gate.md`
|
|
21
|
+
- `artifacts/motion-anti-patterns.md`
|
|
22
|
+
- `assets/templates/motion-contract.v1.json`
|
|
23
|
+
- `assets/templates/motion-audit-report.v1.md`
|
|
24
|
+
- `assets/templates/motion-viewport-matrix.v1.json`
|
|
25
|
+
- `assets/templates/motion-release-gate.v1.json`
|
|
26
|
+
- `scripts/motion-workflow.sh`
|
|
27
|
+
- `scripts/validate-skill-assets.sh`
|
|
28
|
+
|
|
29
|
+
## Quick Start
|
|
30
|
+
|
|
31
|
+
1. Load `opendevbrowser-best-practices` first for OpenDevBrowser runtime rules.
|
|
32
|
+
2. Load `opendevbrowser-design-agent` for the parent UI implementation workflow, design contract, `/canvas`, and real-surface validation.
|
|
33
|
+
3. Load `opendevbrowser-motion-design` for motion language, pattern selection, platform policy, device posture, reduced motion, frame budget, and temporal proof.
|
|
34
|
+
4. Validate this pack before relying on its assets. From the loaded `opendevbrowser-motion-design` skill root, run:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
./scripts/validate-skill-assets.sh
|
|
38
|
+
./scripts/motion-workflow.sh contract-first
|
|
39
|
+
./scripts/motion-workflow.sh temporal-proof
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## InspireDesign Harvest Inputs
|
|
43
|
+
|
|
44
|
+
When an InspireDesign harvest bundle is available, inspect `nextStepGuidance.readiness` and `doNotProceedIf` before selecting motion patterns. Read `meta-prompt.md`, `ranked-references.json`, `visual-evidence.json`, `screenshot-index.json`, and the referenced PNG files only after the bundle is ready or while following recovery guidance. Treat harvested motion posture as evidence-backed design intent, not permission to add dependencies or copy source-brand choreography. Carry accepted cues into the motion contract with explicit reduced-motion behavior, device posture, frame budget, and temporal proof requirements.
|
|
45
|
+
|
|
46
|
+
## Motion Contract
|
|
47
|
+
|
|
48
|
+
Motion is a contract field, not decoration. Before implementation, fill `assets/templates/motion-contract.v1.json` and connect it to the design-agent `motionSystem`, `performanceModel`, `responsiveSystem`, and `accessibilityPolicy` fields.
|
|
49
|
+
|
|
50
|
+
The contract must define:
|
|
51
|
+
|
|
52
|
+
- intent and user value
|
|
53
|
+
- selected patterns from `artifacts/motion-pattern-catalog.md`
|
|
54
|
+
- timing tokens, easing tokens, and spring tokens
|
|
55
|
+
- driver ownership for scroll, viewport, gesture, route, and state transitions
|
|
56
|
+
- device and breakpoint posture from `artifacts/device-breakpoint-posture.md`
|
|
57
|
+
- `prefers-reduced-motion` behavior from `artifacts/accessibility-reduced-motion.md`
|
|
58
|
+
- performance budget from `artifacts/performance-frame-budget.md`
|
|
59
|
+
- verification plan from `artifacts/open-dev-browser-motion-evidence.md`
|
|
60
|
+
|
|
61
|
+
## Pattern Selection
|
|
62
|
+
|
|
63
|
+
Choose patterns by user job, not visual novelty. Start with the smallest motion grammar that clarifies hierarchy or state:
|
|
64
|
+
|
|
65
|
+
- no-motion for stable task surfaces
|
|
66
|
+
- opacity or fade-through for low-attention state changes
|
|
67
|
+
- shared element, FLIP, or layout transition when continuity is the point
|
|
68
|
+
- sheet, modal, popover, toast, and progressive disclosure motion for containment
|
|
69
|
+
- scroll reveal, parallax, pinned stage, or scroll snap only when the narrative depends on viewport progress
|
|
70
|
+
- gesture, inertia, spring settle, interruptibility, and haptics only when direct manipulation matters
|
|
71
|
+
- Lottie, Rive, 3D transform, or WebGL/spatial motion only when the illustration or spatial model carries meaning
|
|
72
|
+
|
|
73
|
+
Every selected pattern needs a reduced-motion fallback, device posture, and temporal evidence.
|
|
74
|
+
|
|
75
|
+
## Platform And Framework Policy
|
|
76
|
+
|
|
77
|
+
Frameworks are implementation primitives, not permission to add dependencies. Prefer existing project libraries and platform primitives. New runtime dependencies require separate explicit approval and must be recorded in `libraryPolicy`.
|
|
78
|
+
|
|
79
|
+
Use `artifacts/platform-framework-guide.md` for CSS transitions, CSS keyframes, Web Animations API, View Transition API, CSS scroll-driven animations, Motion for React with `motion/react`, GSAP 3.x, Anime.js 4.x, react-spring, Lottie, Rive, Three.js, react-three-fiber, Spline/WebGL advisory, SwiftUI, UIKit/Core Animation, Jetpack Compose, Android MotionLayout, React Native Reanimated 4.x, Flutter animation APIs, and haptics.
|
|
80
|
+
|
|
81
|
+
## Device Posture
|
|
82
|
+
|
|
83
|
+
Motion must change across phones, tablets, laptops, desktops, large monitors, short viewports, coarse pointers, fine pointers, keyboard-only use, reduced-power devices, high-refresh displays, and foldable posture. Use `artifacts/device-breakpoint-posture.md` and `assets/templates/motion-viewport-matrix.v1.json` before coding responsive animation.
|
|
84
|
+
|
|
85
|
+
## Reduced Motion
|
|
86
|
+
|
|
87
|
+
Reduced motion is mandatory. Follow WCAG 2.2 SC 2.3.3 and `prefers-reduced-motion`. The reduced path must preserve meaning and task completion. It may remove travel, parallax, pinning, looping, and large transform distance, but it must not hide information, reorder focus, or remove feedback.
|
|
88
|
+
|
|
89
|
+
## Verification
|
|
90
|
+
|
|
91
|
+
Prove motion in a real browser. Static code review is not enough for timing, choreography, scroll stages, or gesture behavior.
|
|
92
|
+
|
|
93
|
+
Required evidence for motion-heavy work:
|
|
94
|
+
|
|
95
|
+
- `snapshot`
|
|
96
|
+
- `screenshot`
|
|
97
|
+
- `debug-trace-snapshot`
|
|
98
|
+
- `screencast-start`
|
|
99
|
+
- interaction or scroll sequence
|
|
100
|
+
- `screencast-stop`
|
|
101
|
+
- console and network stability checks
|
|
102
|
+
- viewport matrix checks
|
|
103
|
+
- reduced-motion checks
|
|
104
|
+
- `/canvas` preview evidence when using design-agent canvas workflow
|
|
105
|
+
|
|
106
|
+
Use `scripts/motion-workflow.sh temporal-proof` and `artifacts/open-dev-browser-motion-evidence.md`.
|
|
107
|
+
|
|
108
|
+
## Anti-patterns
|
|
109
|
+
|
|
110
|
+
Do not ship motion when any of these are true:
|
|
111
|
+
|
|
112
|
+
- the motion has no user value
|
|
113
|
+
- the progress owner is unclear
|
|
114
|
+
- multiple scroll observers fight the same narrative
|
|
115
|
+
- layout properties animate in hot paths
|
|
116
|
+
- reduced motion removes meaning
|
|
117
|
+
- hover is the only affordance
|
|
118
|
+
- mobile travel is long enough to disorient
|
|
119
|
+
- pinned scroll traps reading order or focus
|
|
120
|
+
- gesture animation cannot be interrupted or retargeted
|
|
121
|
+
- a new dependency was added without approval
|
|
122
|
+
|
|
123
|
+
Use `artifacts/motion-anti-patterns.md` before release.
|
|
124
|
+
|
|
125
|
+
## Related Skills
|
|
126
|
+
|
|
127
|
+
- `opendevbrowser-best-practices`: runtime, CLI, browser, evidence, and release governance.
|
|
128
|
+
- `opendevbrowser-design-agent`: parent UI design, InspireDesign harvest review, and `/canvas` implementation workflow.
|
|
129
|
+
- `opendevbrowser-motion-design`: motion-specific terminology, pattern catalog, platform policy, device posture, reduced motion, performance, and temporal evidence.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Accessibility And Reduced Motion
|
|
2
|
+
|
|
3
|
+
Motion must satisfy WCAG 2.2 SC 2.3.3 Animation from Interactions and respect `prefers-reduced-motion`.
|
|
4
|
+
|
|
5
|
+
## Essential Versus Non-essential Motion
|
|
6
|
+
|
|
7
|
+
Essential motion is required to understand spatial continuity, preserve orientation, or complete a task. Non-essential motion is decorative, atmospheric, or brand-only. Non-essential motion must be disableable. Essential motion still needs a reduced alternative that preserves meaning.
|
|
8
|
+
|
|
9
|
+
## Required Rules
|
|
10
|
+
|
|
11
|
+
- Provide a `prefers-reduced-motion` path for every selected pattern.
|
|
12
|
+
- Preserve all information in the reduced path.
|
|
13
|
+
- Do not remove task feedback, labels, focus, or completion state when reducing motion.
|
|
14
|
+
- Do not rely on motion-only feedback; pair it with text, state, color, icon, or ARIA where relevant.
|
|
15
|
+
- Avoid vestibular triggers: large parallax, zoom, spinning, unbounded loops, forced pinning, and long-distance travel.
|
|
16
|
+
- Keep keyboard order and visual order coherent.
|
|
17
|
+
- Keep focus stable before, during, and after animation.
|
|
18
|
+
- Provide pause, disable, or non-looping behavior for decorative repeated animation.
|
|
19
|
+
- Screen-reader alternatives must describe state changes when animation communicates status.
|
|
20
|
+
- Use ARIA live regions for async status only when they are relevant and not noisy.
|
|
21
|
+
|
|
22
|
+
## Reduced-motion Examples
|
|
23
|
+
|
|
24
|
+
- Shared element transition becomes fade-through or instant route change with heading focus.
|
|
25
|
+
- Pinned scroll stage becomes stacked static sections.
|
|
26
|
+
- Parallax becomes a static layered image.
|
|
27
|
+
- Skeleton shimmer becomes a static skeleton with loading text.
|
|
28
|
+
- Drag overshoot becomes direct snap to final target.
|
|
29
|
+
- Lottie or Rive loop becomes a poster frame.
|
|
30
|
+
|
|
31
|
+
## Blocking Failures
|
|
32
|
+
|
|
33
|
+
- Reduced motion removes content.
|
|
34
|
+
- Reduced motion leaves content hidden because the reveal animation never runs.
|
|
35
|
+
- Focus moves to an invisible or offscreen element.
|
|
36
|
+
- A hover animation is the only affordance.
|
|
37
|
+
- A loop cannot be paused or stopped.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Device And Breakpoint Posture
|
|
2
|
+
|
|
3
|
+
Motion must adapt to posture, pointer, viewport height, power, and refresh rate. Do not assume desktop timing scales down.
|
|
4
|
+
|
|
5
|
+
## Posture Matrix
|
|
6
|
+
|
|
7
|
+
| Posture | Motion Changes |
|
|
8
|
+
|---|---|
|
|
9
|
+
| Mobile portrait | Shorter duration, shorter travel, no default parallax, avoid pinned scroll, larger gesture thresholds, protect touch targets. |
|
|
10
|
+
| Mobile landscape | Reduce vertical choreography, avoid blocking short viewports, keep primary actions visible. |
|
|
11
|
+
| Tablet portrait | Moderate travel, sheet or side panel based on density, touch-friendly drag thresholds. |
|
|
12
|
+
| Tablet landscape | Can use wider spatial transitions, but preserve reading order and pointer/touch parity. |
|
|
13
|
+
| Laptop and desktop | Fine pointer allows hover and richer route continuity, but keyboard parity remains required. |
|
|
14
|
+
| Large monitor | Avoid excessive travel across long distances; anchor transitions to local regions. |
|
|
15
|
+
| Short viewport | Disable pinning, reduce stage count, avoid vertical reveal dependency. |
|
|
16
|
+
| Coarse pointer | Prefer press/tap feedback, larger handles, drag thresholds, no hover-only affordance. |
|
|
17
|
+
| Fine pointer | Hover/focus microinteractions allowed with keyboard equivalent. |
|
|
18
|
+
| Trackpad | Scroll and inertia can be richer, but must not fight native scroll. |
|
|
19
|
+
| Touch gesture context | Use interruptible, retargetable, threshold-based motion. |
|
|
20
|
+
| Keyboard-only context | Motion cannot change focus order or hide reachable controls. |
|
|
21
|
+
| Reduced-power devices | Prefer opacity, transform, static skeletons, fewer simultaneous animations. |
|
|
22
|
+
| High-refresh displays | Validate smoothness at high refresh and avoid timing tied to frame counts. |
|
|
23
|
+
| Foldable/device posture | Treat `device-posture` as experimental progressive enhancement only. Default to responsive breakpoints first. |
|
|
24
|
+
|
|
25
|
+
## What Changes By Posture
|
|
26
|
+
|
|
27
|
+
- Duration: shorter on phones, reduced-power devices, and repeated workflows.
|
|
28
|
+
- Distance: local on mobile and large monitors; never force long travel across the screen.
|
|
29
|
+
- Pinned-scroll allowance: desktop only by default, disabled on short viewports and most phones.
|
|
30
|
+
- Parallax allowance: off by default on mobile and reduced motion.
|
|
31
|
+
- Gesture thresholds: larger for touch, smaller for precision pointer, always cancellable.
|
|
32
|
+
- Touch target protection: animation must not shrink active targets below usable size.
|
|
33
|
+
- Density: reduce stagger count and choreography in dense content.
|
|
34
|
+
- Viewport-height constraints: no stage should require more height than the viewport can provide.
|
|
35
|
+
- Fallback behavior: static, stacked, and readable content must exist for every scroll stage.
|
|
36
|
+
- Reduced-motion handling: remove travel, pinning, parallax, loops, and non-essential gesture flourish.
|
|
37
|
+
|
|
38
|
+
## Foldable Rule
|
|
39
|
+
|
|
40
|
+
`device-posture` is experimental. Use it only as progressive enhancement after the default responsive layout and motion contract already work without it.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Motion Anti-patterns
|
|
2
|
+
|
|
3
|
+
Do not ship these motion failures.
|
|
4
|
+
|
|
5
|
+
- Decorative motion without user value.
|
|
6
|
+
- Missing progress owner for route, state, scroll, or gesture animation.
|
|
7
|
+
- Competing scroll observers for the same narrative.
|
|
8
|
+
- Layout-property animation in hot paths.
|
|
9
|
+
- Long-distance mobile travel.
|
|
10
|
+
- Default parallax without vestibular and reduced-motion review.
|
|
11
|
+
- Pinned scroll without escape condition.
|
|
12
|
+
- Hover-only affordance.
|
|
13
|
+
- Hidden focus or reading-order changes.
|
|
14
|
+
- Reduced motion that removes meaning.
|
|
15
|
+
- Unbounded loops.
|
|
16
|
+
- Fake progress.
|
|
17
|
+
- Unapproved runtime dependency.
|
|
18
|
+
- Haptic spam.
|
|
19
|
+
- Index-keyed animated lists.
|
|
20
|
+
- Non-interruptible gesture animation.
|
|
21
|
+
- Motion-only status feedback.
|
|
22
|
+
- Skeleton shimmer that never resolves.
|
|
23
|
+
- Shared element transition with unstable identity.
|
|
24
|
+
- WebGL or canvas motion without static accessible equivalent.
|
|
25
|
+
- Animation cleanup leaks after unmount or route change.
|
|
26
|
+
|
|
27
|
+
## Fix Pattern
|
|
28
|
+
|
|
29
|
+
For every anti-pattern, either remove the motion, reduce it to a simpler pattern, or rewrite the motion contract with a clear owner, fallback, and evidence plan.
|