{"_id":"@edv4h/usketch-plugin-timter","_rev":"14-70390a8cc5c4f2283275d1cec1879213","name":"@edv4h/usketch-plugin-timter","dist-tags":{"latest":"0.3.11"},"versions":{"0.1.0":{"name":"@edv4h/usketch-plugin-timter","version":"0.1.0","license":"MIT","_id":"@edv4h/usketch-plugin-timter@0.1.0","maintainers":[{"name":"myuske","email":"circlemountain.ym@gmail.com"}],"homepage":"https://github.com/EdV4H/usketch#readme","bugs":{"url":"https://github.com/EdV4H/usketch/issues"},"dist":{"shasum":"f7bf0c9d325b490aba3810557d06aa60348848f5","tarball":"https://registry.npmjs.org/@edv4h/usketch-plugin-timter/-/usketch-plugin-timter-0.1.0.tgz","fileCount":18,"integrity":"sha512-dAK2aK2HDiaBf/xMJlHkAMMw8RDbqD9cVP9Ai5XmlfOQBwlCYH+DOaUS26b3gEcHscnV/AO0+0G2Q+KOQ7stkA==","signatures":[{"sig":"MEUCICXhyT3AcuFIBwkj8RPjJAuCEgjraAA1am55HyeTc6LEAiEAy3sKWwylIyTgP7emt2oHUox/84/7w7hTywQfVaWYKTI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54471},"main":"./dist/index.js","type":"module","_from":"file:edv4h-usketch-plugin-timter-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"myuske","email":"circlemountain.ym@gmail.com"},"_resolved":"/tmp/33c4c762535769304d5c247a9b329512/edv4h-usketch-plugin-timter-0.1.0.tgz","_integrity":"sha512-dAK2aK2HDiaBf/xMJlHkAMMw8RDbqD9cVP9Ai5XmlfOQBwlCYH+DOaUS26b3gEcHscnV/AO0+0G2Q+KOQ7stkA==","repository":{"url":"git+https://github.com/EdV4H/usketch.git","type":"git","directory":"plugins/usketch-plugin-timter"},"_npmVersion":"11.16.0","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@edv4h/usketch-sync":"1.1.0","@edv4h/usketch-store":"3.3.1","@edv4h/usketch-shared":"4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","typescript":"7.0.2","@types/react":"19.2.17"},"peerDependencies":{"react":">=19"},"_npmOperationalInternal":{"tmp":"tmp/usketch-plugin-timter_0.1.0_1784277621534_0.8336327894289177","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@edv4h/usketch-plugin-timter","version":"0.2.0","license":"MIT","_id":"@edv4h/usketch-plugin-timter@0.2.0","maintainers":[{"name":"myuske","email":"circlemountain.ym@gmail.com"}],"homepage":"https://github.com/EdV4H/usketch#readme","bugs":{"url":"https://github.com/EdV4H/usketch/issues"},"dist":{"shasum":"8e4e4ea511961800e741744963b997e47903ae71","tarball":"https://registry.npmjs.org/@edv4h/usketch-plugin-timter/-/usketch-plugin-timter-0.2.0.tgz","fileCount":19,"integrity":"sha512-62kghswzgBM90xXGXb7nw/JPdia5MIcaRV881KQdlLgAmqKaZIXMTpBdpe5EYhRbaB9lB//BgMqz7e7AL4nv8g==","signatures":[{"sig":"MEUCID3XpclCIRaPuMb8KrafWPKh9D7NmSetsFqGCV8jYDHCAiEAvmSyi4VVHGq4VvQEVKBsCcBzwcbZmiP431hbEwWbaGs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71421},"main":"./dist/index.js","type":"module","_from":"file:edv4h-usketch-plugin-timter-0.2.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"myuske","email":"circlemountain.ym@gmail.com"},"_resolved":"/tmp/0a17a27bb006aeb1e9e401f742a493c2/edv4h-usketch-plugin-timter-0.2.0.tgz","_integrity":"sha512-62kghswzgBM90xXGXb7nw/JPdia5MIcaRV881KQdlLgAmqKaZIXMTpBdpe5EYhRbaB9lB//BgMqz7e7AL4nv8g==","repository":{"url":"git+https://github.com/EdV4H/usketch.git","type":"git","directory":"plugins/usketch-plugin-timter"},"_npmVersion":"11.16.0","description":"Shared timers as **canvas shapes** (single source of truth). A `timer` shape is placeable/movable and syncs through the normal shapes map; timing runs against a shared `ServerClock` so every user agrees on \"now\". The plugin also surfaces every timer in th","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@edv4h/usketch-sync":"1.1.0","@edv4h/usketch-store":"3.3.1","@edv4h/usketch-shared":"4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","typescript":"7.0.2","@types/react":"19.2.17"},"peerDependencies":{"react":">=19"},"_npmOperationalInternal":{"tmp":"tmp/usketch-plugin-timter_0.2.0_1784616315276_0.7938978653421482","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@edv4h/usketch-plugin-timter","version":"0.3.0","license":"MIT","_id":"@edv4h/usketch-plugin-timter@0.3.0","maintainers":[{"name":"myuske","email":"circlemountain.ym@gmail.com"}],"homepage":"https://github.com/EdV4H/usketch#readme","bugs":{"url":"https://github.com/EdV4H/usketch/issues"},"dist":{"shasum":"422363018087249ef000d85ade1e81525c7b7c03","tarball":"https://registry.npmjs.org/@edv4h/usketch-plugin-timter/-/usketch-plugin-timter-0.3.0.tgz","fileCount":19,"integrity":"sha512-mKQpR8ARqXI7ef7QZ+TBF5+6MGGFNfJvHW4N5E8vsVhL9VLt52/xy5dl4uJTpUMKwR5BrG3+3G52n4/vpda37w==","signatures":[{"sig":"MEUCIQCAKORf1jlong0/UCmHji4mBAVoSunZl9Vu53HCctpTdwIgJQCVj+ymNWntX6K14kZo/0GZeGK5Z7gAxhyES7A5oSQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77227},"main":"./dist/index.js","type":"module","_from":"file:edv4h-usketch-plugin-timter-0.3.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"myuske","email":"circlemountain.ym@gmail.com"},"_resolved":"/tmp/1318d2f6a05b9c3dea99fd439e8e75b9/edv4h-usketch-plugin-timter-0.3.0.tgz","_integrity":"sha512-mKQpR8ARqXI7ef7QZ+TBF5+6MGGFNfJvHW4N5E8vsVhL9VLt52/xy5dl4uJTpUMKwR5BrG3+3G52n4/vpda37w==","repository":{"url":"git+https://github.com/EdV4H/usketch.git","type":"git","directory":"plugins/usketch-plugin-timter"},"_npmVersion":"11.16.0","description":"Shared timers as **canvas shapes** (single source of truth). A `timer` shape is placeable/movable and syncs through the normal shapes map; timing runs against a shared `ServerClock` so every user agrees on \"now\". The plugin also surfaces every timer in th","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@edv4h/usketch-sync":"1.1.0","@edv4h/usketch-store":"3.4.0","@edv4h/usketch-shared":"4.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","typescript":"7.0.2","@types/react":"19.2.17"},"peerDependencies":{"react":">=19"},"_npmOperationalInternal":{"tmp":"tmp/usketch-plugin-timter_0.3.0_1785237790675_0.5898479565328798","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@edv4h/usketch-plugin-timter","version":"0.3.1","license":"MIT","_id":"@edv4h/usketch-plugin-timter@0.3.1","maintainers":[{"name":"myuske","email":"circlemountain.ym@gmail.com"}],"homepage":"https://github.com/EdV4H/usketch#readme","bugs":{"url":"https://github.com/EdV4H/usketch/issues"},"dist":{"shasum":"08fa617e55011db981235fa18396a33ebba47d01","tarball":"https://registry.npmjs.org/@edv4h/usketch-plugin-timter/-/usketch-plugin-timter-0.3.1.tgz","fileCount":19,"integrity":"sha512-UiP7t4SjY/tmoxOH5O+Xl3sAqJw7ZPMNhIi2jPA63O27zmeS2g4W8/cJuDat5YoUHfMIAvwfk/wfBxa+tMU/Ow==","signatures":[{"sig":"MEYCIQDpQcTcV83jtuMXlpIdxsH6DSiv84QEcZo1FbF0RphxqAIhAOPca0PLJ3V8cJlID5sDHzdQZWMnSUkVUzT/9mha+cax","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77227},"main":"./dist/index.js","type":"module","_from":"file:edv4h-usketch-plugin-timter-0.3.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"myuske","email":"circlemountain.ym@gmail.com"},"_resolved":"/tmp/3f56e9046003362925e5fc6841d2dedb/edv4h-usketch-plugin-timter-0.3.1.tgz","_integrity":"sha512-UiP7t4SjY/tmoxOH5O+Xl3sAqJw7ZPMNhIi2jPA63O27zmeS2g4W8/cJuDat5YoUHfMIAvwfk/wfBxa+tMU/Ow==","repository":{"url":"git+https://github.com/EdV4H/usketch.git","type":"git","directory":"plugins/usketch-plugin-timter"},"_npmVersion":"11.16.0","description":"Shared timers as **canvas shapes** (single source of truth). A `timer` shape is placeable/movable and syncs through the normal shapes map; timing runs against a shared `ServerClock` so every user agrees on \"now\". The plugin also surfaces every timer in th","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@edv4h/usketch-sync":"1.1.0","@edv4h/usketch-store":"3.4.1","@edv4h/usketch-shared":"4.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","typescript":"7.0.2","@types/react":"19.2.17"},"peerDependencies":{"react":">=19"},"_npmOperationalInternal":{"tmp":"tmp/usketch-plugin-timter_0.3.1_1785291321594_0.8220834982555834","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@edv4h/usketch-plugin-timter","version":"0.3.2","license":"MIT","_id":"@edv4h/usketch-plugin-timter@0.3.2","maintainers":[{"name":"myuske","email":"circlemountain.ym@gmail.com"}],"homepage":"https://github.com/EdV4H/usketch#readme","bugs":{"url":"https://github.com/EdV4H/usketch/issues"},"dist":{"shasum":"9176f3ab9d741fc2761f023119b639dac76d2276","tarball":"https://registry.npmjs.org/@edv4h/usketch-plugin-timter/-/usketch-plugin-timter-0.3.2.tgz","fileCount":19,"integrity":"sha512-YLr+NCbKOEk0pfPzNlgsXpwEFd7/IGXjrDo1ScfZ9bG84gumMCaI/1+Gi8bIuutb1D1v9fzwgskIR4DwqTK7zw==","signatures":[{"sig":"MEUCIHVnynOfzr5SUj1wGw9ZSe4EmSA7zBZ3phOrkrHX3W4SAiEAjd0lJxBEw96GxMzobYKmpZh1HtNumiEHop+qMWcE/yk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77227},"main":"./dist/index.js","type":"module","_from":"file:edv4h-usketch-plugin-timter-0.3.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"myuske","email":"circlemountain.ym@gmail.com"},"_resolved":"/tmp/e20f9cad3da1a3a74d15b837b6cefa5f/edv4h-usketch-plugin-timter-0.3.2.tgz","_integrity":"sha512-YLr+NCbKOEk0pfPzNlgsXpwEFd7/IGXjrDo1ScfZ9bG84gumMCaI/1+Gi8bIuutb1D1v9fzwgskIR4DwqTK7zw==","repository":{"url":"git+https://github.com/EdV4H/usketch.git","type":"git","directory":"plugins/usketch-plugin-timter"},"_npmVersion":"11.16.0","description":"Shared timers as **canvas shapes** (single source of truth). A `timer` shape is placeable/movable and syncs through the normal shapes map; timing runs against a shared `ServerClock` so every user agrees on \"now\". The plugin also surfaces every timer in th","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@edv4h/usketch-sync":"1.1.0","@edv4h/usketch-store":"3.5.0","@edv4h/usketch-shared":"4.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","typescript":"7.0.2","@types/react":"19.2.17"},"peerDependencies":{"react":">=19"},"_npmOperationalInternal":{"tmp":"tmp/usketch-plugin-timter_0.3.2_1785303581296_0.6871816764806689","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@edv4h/usketch-plugin-timter","version":"0.3.3","license":"MIT","_id":"@edv4h/usketch-plugin-timter@0.3.3","maintainers":[{"name":"myuske","email":"circlemountain.ym@gmail.com"}],"homepage":"https://github.com/EdV4H/usketch#readme","bugs":{"url":"https://github.com/EdV4H/usketch/issues"},"dist":{"shasum":"f80c43a9c7c71c52525af43b3b3f0d161708991d","tarball":"https://registry.npmjs.org/@edv4h/usketch-plugin-timter/-/usketch-plugin-timter-0.3.3.tgz","fileCount":19,"integrity":"sha512-2IWI4vjBrIDM6ZUZHFDJVJg3EmOp8KySECKZTZqDOfD1vQClz9cQVBukl5ctvzVFuKQ2rxylQjpRTb+KL2cB/g==","signatures":[{"sig":"MEYCIQCw+vWeH4tYGNnHHVB0JkcgxR26Q4HIOVkQagoU8NOs5gIhAOZ2NA/IfMTMGDPaElGP4MulCDw61nMrH9VOS4rC87QH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77227},"main":"./dist/index.js","type":"module","_from":"file:edv4h-usketch-plugin-timter-0.3.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"myuske","email":"circlemountain.ym@gmail.com"},"_resolved":"/tmp/0b47d6dcbd7b7ef8e2048e0e74f2b660/edv4h-usketch-plugin-timter-0.3.3.tgz","_integrity":"sha512-2IWI4vjBrIDM6ZUZHFDJVJg3EmOp8KySECKZTZqDOfD1vQClz9cQVBukl5ctvzVFuKQ2rxylQjpRTb+KL2cB/g==","repository":{"url":"git+https://github.com/EdV4H/usketch.git","type":"git","directory":"plugins/usketch-plugin-timter"},"_npmVersion":"11.16.0","description":"Shared timers as **canvas shapes** (single source of truth). A `timer` shape is placeable/movable and syncs through the normal shapes map; timing runs against a shared `ServerClock` so every user agrees on \"now\". The plugin also surfaces every timer in th","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@edv4h/usketch-sync":"1.1.0","@edv4h/usketch-store":"3.5.1","@edv4h/usketch-shared":"4.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","typescript":"7.0.2","@types/react":"19.2.18"},"peerDependencies":{"react":">=19"},"_npmOperationalInternal":{"tmp":"tmp/usketch-plugin-timter_0.3.3_1785915794463_0.3282779039536887","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@edv4h/usketch-plugin-timter","version":"0.3.4","license":"MIT","_id":"@edv4h/usketch-plugin-timter@0.3.4","maintainers":[{"name":"myuske","email":"circlemountain.ym@gmail.com"}],"homepage":"https://github.com/EdV4H/usketch#readme","bugs":{"url":"https://github.com/EdV4H/usketch/issues"},"dist":{"shasum":"9b9e85286885d20ea7136ae76ff37ccefe5198bf","tarball":"https://registry.npmjs.org/@edv4h/usketch-plugin-timter/-/usketch-plugin-timter-0.3.4.tgz","fileCount":19,"integrity":"sha512-wljoOpyglQ8JM02OxpJBm26gahIb0er1GwUzwxOh0S+SOs3htmerh2aHWAyw/xKm8a6xmS2NhU8aVjsBSecgAg==","signatures":[{"sig":"MEUCIQCHU2m6hZ2tQXCNPHTGvTe0Yn3E1pjvdpXQ8ObeZ8TmqQIgNKigk4Ama6jOhnJcHuuEqPS3Hb3/r5yizyYEY+5Qj/g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77228},"main":"./dist/index.js","type":"module","_from":"file:edv4h-usketch-plugin-timter-0.3.4.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"myuske","email":"circlemountain.ym@gmail.com"},"_resolved":"/tmp/a10b0a0fc0eaace9270770ac91abe006/edv4h-usketch-plugin-timter-0.3.4.tgz","_integrity":"sha512-wljoOpyglQ8JM02OxpJBm26gahIb0er1GwUzwxOh0S+SOs3htmerh2aHWAyw/xKm8a6xmS2NhU8aVjsBSecgAg==","repository":{"url":"git+https://github.com/EdV4H/usketch.git","type":"git","directory":"plugins/usketch-plugin-timter"},"_npmVersion":"11.16.0","description":"Shared timers as **canvas shapes** (single source of truth). A `timer` shape is placeable/movable and syncs through the normal shapes map; timing runs against a shared `ServerClock` so every user agrees on \"now\". The plugin also surfaces every timer in th","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@edv4h/usketch-sync":"1.1.0","@edv4h/usketch-store":"3.5.2","@edv4h/usketch-shared":"4.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","typescript":"7.0.2","@types/react":"19.2.18"},"peerDependencies":{"react":">=19"},"_npmOperationalInternal":{"tmp":"tmp/usketch-plugin-timter_0.3.4_1785982583166_0.4933840826836533","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@edv4h/usketch-plugin-timter","version":"0.3.5","license":"MIT","_id":"@edv4h/usketch-plugin-timter@0.3.5","maintainers":[{"name":"myuske","email":"circlemountain.ym@gmail.com"}],"homepage":"https://github.com/EdV4H/usketch#readme","bugs":{"url":"https://github.com/EdV4H/usketch/issues"},"dist":{"shasum":"5f9eb25fad9c3abea8b59a28afd4a01fa0ad8a3a","tarball":"https://registry.npmjs.org/@edv4h/usketch-plugin-timter/-/usketch-plugin-timter-0.3.5.tgz","fileCount":19,"integrity":"sha512-bTOX/5MnfIgGmqJ8w2h5MmExDzlWoWcOvIVazIwO5xscMlOmj8gibuNubmTTumTLsdeIdVrRRt7zeUgoCNNkzA==","signatures":[{"sig":"MEYCIQDhj1U9/AVrKMIgNyOOivARW2f5GRSyfYtuiwqNok9n4wIhAIG3dCv1VYwhZeyZDS8WXKTyejna55MkbNYRFr3T38iu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77228},"main":"./dist/index.js","type":"module","_from":"file:edv4h-usketch-plugin-timter-0.3.5.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"myuske","email":"circlemountain.ym@gmail.com"},"_resolved":"/tmp/646f63de1961b6572341c684f087d146/edv4h-usketch-plugin-timter-0.3.5.tgz","_integrity":"sha512-bTOX/5MnfIgGmqJ8w2h5MmExDzlWoWcOvIVazIwO5xscMlOmj8gibuNubmTTumTLsdeIdVrRRt7zeUgoCNNkzA==","repository":{"url":"git+https://github.com/EdV4H/usketch.git","type":"git","directory":"plugins/usketch-plugin-timter"},"_npmVersion":"11.16.0","description":"Shared timers as **canvas shapes** (single source of truth). A `timer` shape is placeable/movable and syncs through the normal shapes map; timing runs against a shared `ServerClock` so every user agrees on \"now\". The plugin also surfaces every timer in th","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@edv4h/usketch-sync":"1.2.0","@edv4h/usketch-store":"3.5.2","@edv4h/usketch-shared":"4.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","typescript":"7.0.2","@types/react":"19.2.18"},"peerDependencies":{"react":">=19"},"_npmOperationalInternal":{"tmp":"tmp/usketch-plugin-timter_0.3.5_1786365375001_0.6633473293567387","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@edv4h/usketch-plugin-timter","version":"0.3.6","license":"MIT","_id":"@edv4h/usketch-plugin-timter@0.3.6","maintainers":[{"name":"myuske","email":"circlemountain.ym@gmail.com"}],"homepage":"https://github.com/EdV4H/usketch#readme","bugs":{"url":"https://github.com/EdV4H/usketch/issues"},"dist":{"shasum":"53ba97a3fd3849793913951dfe7ab2d6c498957b","tarball":"https://registry.npmjs.org/@edv4h/usketch-plugin-timter/-/usketch-plugin-timter-0.3.6.tgz","fileCount":19,"integrity":"sha512-0SZ3JTNB+mJrsRE6kIouLFlL+MJpm4/svTPXtnya3u54WuyuDydugP3nsL12q3qwJtYNvo5iwU90fCyrxcdAmQ==","signatures":[{"sig":"MEUCIQDsDjpEJk/Hz2Mtm7RO5z0OG5dh37Vm61kMtY2YNKibiQIgNA7NCrCblCjPEydvVImipN3EjrwC6c7/hCnz2rGEmmw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77228},"main":"./dist/index.js","type":"module","_from":"file:edv4h-usketch-plugin-timter-0.3.6.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"myuske","email":"circlemountain.ym@gmail.com"},"_resolved":"/tmp/6d04619193d097f1ccd52c8b7415fcfc/edv4h-usketch-plugin-timter-0.3.6.tgz","_integrity":"sha512-0SZ3JTNB+mJrsRE6kIouLFlL+MJpm4/svTPXtnya3u54WuyuDydugP3nsL12q3qwJtYNvo5iwU90fCyrxcdAmQ==","repository":{"url":"git+https://github.com/EdV4H/usketch.git","type":"git","directory":"plugins/usketch-plugin-timter"},"_npmVersion":"11.16.0","description":"Shared timers as **canvas shapes** (single source of truth). A `timer` shape is placeable/movable and syncs through the normal shapes map; timing runs against a shared `ServerClock` so every user agrees on \"now\". The plugin also surfaces every timer in th","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@edv4h/usketch-sync":"1.2.0","@edv4h/usketch-store":"3.5.3","@edv4h/usketch-shared":"4.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","typescript":"7.0.2","@types/react":"19.2.18"},"peerDependencies":{"react":">=19"},"_npmOperationalInternal":{"tmp":"tmp/usketch-plugin-timter_0.3.6_1786535643649_0.10201706624454121","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@edv4h/usketch-plugin-timter","version":"0.3.7","license":"MIT","_id":"@edv4h/usketch-plugin-timter@0.3.7","maintainers":[{"name":"myuske","email":"circlemountain.ym@gmail.com"}],"homepage":"https://github.com/EdV4H/usketch#readme","bugs":{"url":"https://github.com/EdV4H/usketch/issues"},"dist":{"shasum":"20aabb3ca7f55f725d57c554ef36258c390e9876","tarball":"https://registry.npmjs.org/@edv4h/usketch-plugin-timter/-/usketch-plugin-timter-0.3.7.tgz","fileCount":19,"integrity":"sha512-cL7k9RiDqFxlF30bNJWRIdQd4xN+WxCQEjchLTMWGnrvRRjsPLZon6f+ouGvd+lEHC5+YMiyPAc6fEgO9K/Yfw==","signatures":[{"sig":"MEUCIQCUjsnowDyOyH2oBJ2mY8yuEc9hpcvXNnHxIy4ATpvmMAIgE9YoWqE5LSeqGr+RLmkYBJuwBgN8w7yrlGRRfT1b3TM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77228},"main":"./dist/index.js","type":"module","_from":"file:edv4h-usketch-plugin-timter-0.3.7.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"myuske","email":"circlemountain.ym@gmail.com"},"_resolved":"/tmp/3264c41c8ae31bd271def4da4813df63/edv4h-usketch-plugin-timter-0.3.7.tgz","_integrity":"sha512-cL7k9RiDqFxlF30bNJWRIdQd4xN+WxCQEjchLTMWGnrvRRjsPLZon6f+ouGvd+lEHC5+YMiyPAc6fEgO9K/Yfw==","repository":{"url":"git+https://github.com/EdV4H/usketch.git","type":"git","directory":"plugins/usketch-plugin-timter"},"_npmVersion":"11.17.0","description":"Shared timers as **canvas shapes** (single source of truth). A `timer` shape is placeable/movable and syncs through the normal shapes map; timing runs against a shared `ServerClock` so every user agrees on \"now\". The plugin also surfaces every timer in th","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@edv4h/usketch-sync":"1.3.0","@edv4h/usketch-store":"3.5.3","@edv4h/usketch-shared":"4.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","typescript":"7.0.2","@types/react":"19.2.18"},"peerDependencies":{"react":">=19"},"_npmOperationalInternal":{"tmp":"tmp/usketch-plugin-timter_0.3.7_1786687720471_0.5860661356250059","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"@edv4h/usketch-plugin-timter","version":"0.3.8","license":"MIT","_id":"@edv4h/usketch-plugin-timter@0.3.8","maintainers":[{"name":"myuske","email":"circlemountain.ym@gmail.com"}],"homepage":"https://github.com/EdV4H/usketch#readme","bugs":{"url":"https://github.com/EdV4H/usketch/issues"},"dist":{"shasum":"e97bb3394c69cca26ab8e0bd4d400437621be812","tarball":"https://registry.npmjs.org/@edv4h/usketch-plugin-timter/-/usketch-plugin-timter-0.3.8.tgz","fileCount":19,"integrity":"sha512-QcrEEw8YBRKkegEj/1Lv+AiDQrCUP7zXkgGFaJxRC3WOAf17GZpMuBNuKaO3j1SLHvpj291c1/ds0Ws5C3FulQ==","signatures":[{"sig":"MEUCIBoO6Gn6TTe2Zj1Gvx2NoKa6GtG0NrAhJXywbWjIOC6mAiEA0L6p0yy6kyQy0SXHfAjaMpdVxRugoR8bqFq2jfaGtPI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77228},"main":"./dist/index.js","type":"module","_from":"file:edv4h-usketch-plugin-timter-0.3.8.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"myuske","email":"circlemountain.ym@gmail.com"},"_resolved":"/tmp/a2800a7912d72030ebcd6e05a0655e9f/edv4h-usketch-plugin-timter-0.3.8.tgz","_integrity":"sha512-QcrEEw8YBRKkegEj/1Lv+AiDQrCUP7zXkgGFaJxRC3WOAf17GZpMuBNuKaO3j1SLHvpj291c1/ds0Ws5C3FulQ==","repository":{"url":"git+https://github.com/EdV4H/usketch.git","type":"git","directory":"plugins/usketch-plugin-timter"},"_npmVersion":"11.17.0","description":"Shared timers as **canvas shapes** (single source of truth). A `timer` shape is placeable/movable and syncs through the normal shapes map; timing runs against a shared `ServerClock` so every user agrees on \"now\". The plugin also surfaces every timer in th","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@edv4h/usketch-sync":"1.3.0","@edv4h/usketch-store":"3.5.4","@edv4h/usketch-shared":"4.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.11","typescript":"7.0.2","@types/react":"19.2.18"},"peerDependencies":{"react":">=19"},"_npmOperationalInternal":{"tmp":"tmp/usketch-plugin-timter_0.3.8_1787292672389_0.08237024163326079","host":"s3://npm-registry-packages-npm-production"}},"0.3.9":{"name":"@edv4h/usketch-plugin-timter","version":"0.3.9","license":"MIT","_id":"@edv4h/usketch-plugin-timter@0.3.9","maintainers":[{"name":"myuske","email":"circlemountain.ym@gmail.com"}],"homepage":"https://github.com/EdV4H/usketch#readme","bugs":{"url":"https://github.com/EdV4H/usketch/issues"},"dist":{"shasum":"98fc8aa141b29c3226f81d49fca1baec381ac923","tarball":"https://registry.npmjs.org/@edv4h/usketch-plugin-timter/-/usketch-plugin-timter-0.3.9.tgz","fileCount":19,"integrity":"sha512-3YJ+r94BLwl2dDrpeJpQPJSXrEBrcdcqT/Jw2whpp32rBNZTd2TPjGl2Sa3pEMKaQnohMT5mtwstueGI+HWpSg==","signatures":[{"sig":"MEQCIHxCLc4sHnTfIDkOZhJBmxmOI3tsxT152KShexbrmJIkAiBCCtMvokZq5E+Gg5eKugmxKNZa84+FdaDlP5mI3gWkMA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@edv4h%2fusketch-plugin-timter@0.3.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":77228},"main":"./dist/index.js","type":"module","_from":"file:edv4h-usketch-plugin-timter-0.3.9.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7ec3b00b-aa42-4e4e-bcec-7e5b146220b7"}},"_resolved":"/tmp/2dddbfc9a4d94a88497070bf955f8799/edv4h-usketch-plugin-timter-0.3.9.tgz","_integrity":"sha512-3YJ+r94BLwl2dDrpeJpQPJSXrEBrcdcqT/Jw2whpp32rBNZTd2TPjGl2Sa3pEMKaQnohMT5mtwstueGI+HWpSg==","repository":{"url":"git+https://github.com/EdV4H/usketch.git","type":"git","directory":"plugins/usketch-plugin-timter"},"_npmVersion":"12.0.2","description":"Shared timers as **canvas shapes** (single source of truth). A `timer` shape is placeable/movable and syncs through the normal shapes map; timing runs against a shared `ServerClock` so every user agrees on \"now\". The plugin also surfaces every timer in th","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@edv4h/usketch-sync":"1.3.0","@edv4h/usketch-store":"3.6.0","@edv4h/usketch-shared":"4.13.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.11","typescript":"7.0.2","@types/react":"19.2.18"},"peerDependencies":{"react":">=19"},"_npmOperationalInternal":{"tmp":"tmp/usketch-plugin-timter_0.3.9_1788762627121_0.6504768602757731","host":"s3://npm-registry-packages-npm-production"}},"0.3.10":{"name":"@edv4h/usketch-plugin-timter","version":"0.3.10","license":"MIT","_id":"@edv4h/usketch-plugin-timter@0.3.10","maintainers":[{"name":"myuske","email":"circlemountain.ym@gmail.com"}],"homepage":"https://github.com/EdV4H/usketch#readme","bugs":{"url":"https://github.com/EdV4H/usketch/issues"},"dist":{"shasum":"b20e914cffdece4449c662eabb0dbee6d4f1b739","tarball":"https://registry.npmjs.org/@edv4h/usketch-plugin-timter/-/usketch-plugin-timter-0.3.10.tgz","fileCount":19,"integrity":"sha512-2USlWjzGBuN03xAIaeTlVMJwNwuUF4/XqC2i2xCtixYcduX88sJGie/0liXEXIKc+Q7IIe5FDEAN+p0HlMTVqA==","signatures":[{"sig":"MEYCIQCkgdpzm41BQIbV2TpUCA4Y6QpQvESOiUBGfAQnO0R8VwIhANun1kkRo1MI2xaWs6qi0gke4W6ixgOHbZc/hb2yu4Jt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@edv4h%2fusketch-plugin-timter@0.3.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":77229},"main":"./dist/index.js","type":"module","_from":"file:edv4h-usketch-plugin-timter-0.3.10.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7ec3b00b-aa42-4e4e-bcec-7e5b146220b7"}},"_resolved":"/tmp/b3e497ad9ae59c68a63d5689d000cddf/edv4h-usketch-plugin-timter-0.3.10.tgz","_integrity":"sha512-2USlWjzGBuN03xAIaeTlVMJwNwuUF4/XqC2i2xCtixYcduX88sJGie/0liXEXIKc+Q7IIe5FDEAN+p0HlMTVqA==","repository":{"url":"git+https://github.com/EdV4H/usketch.git","type":"git","directory":"plugins/usketch-plugin-timter"},"_npmVersion":"12.0.2","description":"Shared timers as **canvas shapes** (single source of truth). A `timer` shape is placeable/movable and syncs through the normal shapes map; timing runs against a shared `ServerClock` so every user agrees on \"now\". The plugin also surfaces every timer in th","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@edv4h/usketch-sync":"1.3.0","@edv4h/usketch-store":"3.7.0","@edv4h/usketch-shared":"4.13.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.11","typescript":"7.0.2","@types/react":"19.2.18"},"peerDependencies":{"react":">=19"},"_npmOperationalInternal":{"tmp":"tmp/usketch-plugin-timter_0.3.10_1788773875174_0.832928164651884","host":"s3://npm-registry-packages-npm-production"}},"0.3.11":{"_id":"@edv4h/usketch-plugin-timter@0.3.11","bugs":{"url":"https://github.com/EdV4H/usketch/issues"},"dist":{"shasum":"ac2328e038fe9cc69d4931c1e59f0148d59881e6","tarball":"https://registry.npmjs.org/@edv4h/usketch-plugin-timter/-/usketch-plugin-timter-0.3.11.tgz","fileCount":19,"integrity":"sha512-HD6oB+3zxT1unpwcQ3VU+9rd+syaWi6djDb2KK5INOmzHUA7vfCfOajAB3POT919ZWt269VauKeYZzwHlxshKQ==","signatures":[{"sig":"MEYCIQCSDIzBiSw1gD9USjq3ELEJvJnJNuRuX4D9J/+lz9s/UwIhAM9VNY+z8TNIyk7W7/YaITgUCNubSzq3XP8Qhz0RMCI2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIE2t2zbCQSYTN5GJ6DQExh9SzQhz0gd/oBvkfblVnz4mAiA23FiUFS1VyqE7ljQZOm8fJNZKv/jVdRx8dpettOU57Q=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@edv4h%2fusketch-plugin-timter@0.3.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":77229},"main":"./dist/index.js","name":"@edv4h/usketch-plugin-timter","type":"module","_from":"file:edv4h-usketch-plugin-timter-0.3.11.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"}},"license":"MIT","scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"version":"0.3.11","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7ec3b00b-aa42-4e4e-bcec-7e5b146220b7"}},"homepage":"https://github.com/EdV4H/usketch#readme","_resolved":"/tmp/eff9be82cf73bdd70edcbbfe3170635e/edv4h-usketch-plugin-timter-0.3.11.tgz","_integrity":"sha512-HD6oB+3zxT1unpwcQ3VU+9rd+syaWi6djDb2KK5INOmzHUA7vfCfOajAB3POT919ZWt269VauKeYZzwHlxshKQ==","repository":{"url":"git+https://github.com/EdV4H/usketch.git","type":"git","directory":"plugins/usketch-plugin-timter"},"_npmVersion":"12.1.0","description":"Shared timers as **canvas shapes** (single source of truth). A `timer` shape is placeable/movable and syncs through the normal shapes map; timing runs against a shared `ServerClock` so every user agrees on \"now\". The plugin also surfaces every timer in th","directories":{},"maintainers":[{"name":"myuske","email":"circlemountain.ym@gmail.com"}],"_nodeVersion":"24.20.0","dependencies":{"@edv4h/usketch-sync":"1.3.0","@edv4h/usketch-store":"3.8.0","@edv4h/usketch-shared":"4.14.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.11","typescript":"7.0.2","@types/react":"19.2.18"},"peerDependencies":{"react":">=19"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/usketch-plugin-timter_0.3.11_1790238038830_0.48449197650286546"}}},"time":{"created":"2026-07-17T08:40:21.389Z","modified":"2026-09-24T08:20:39.303Z","0.1.0":"2026-07-17T08:40:21.661Z","0.2.0":"2026-07-21T06:45:15.399Z","0.3.0":"2026-07-28T11:23:10.858Z","0.3.1":"2026-07-29T02:15:21.748Z","0.3.2":"2026-07-29T05:39:41.446Z","0.3.3":"2026-08-05T07:43:14.636Z","0.3.4":"2026-08-06T02:16:23.328Z","0.3.5":"2026-08-10T12:36:15.144Z","0.3.6":"2026-08-12T11:54:03.826Z","0.3.7":"2026-08-14T06:08:40.622Z","0.3.8":"2026-08-21T06:11:12.555Z","0.3.9":"2026-09-07T06:30:27.257Z","0.3.10":"2026-09-07T09:37:55.320Z","0.3.11":"2026-09-24T08:20:38.936Z"},"bugs":{"url":"https://github.com/EdV4H/usketch/issues"},"license":"MIT","homepage":"https://github.com/EdV4H/usketch#readme","repository":{"url":"git+https://github.com/EdV4H/usketch.git","type":"git","directory":"plugins/usketch-plugin-timter"},"description":"Shared timers as **canvas shapes** (single source of truth). A `timer` shape is placeable/movable and syncs through the normal shapes map; timing runs against a shared `ServerClock` so every user agrees on \"now\". The plugin also surfaces every timer in th","maintainers":[{"name":"myuske","email":"circlemountain.ym@gmail.com"}],"readme":"# @edv4h/usketch-plugin-timter\n\nShared timers as **canvas shapes** (single source of truth). A `timer` shape is\nplaceable/movable and syncs through the normal shapes map; timing runs against a\nshared `ServerClock` so every user agrees on \"now\". The plugin also surfaces\nevery timer in the Debug HUD's Controls dock (group \"Timter\").\n\nThe domain model (`timer-model`) is pure, framework-free, and time-source\nagnostic — every function takes an explicit `serverNow`.\n\n## Install\n\n```ts\nimport { createTimterPlugin } from \"@edv4h/usketch-plugin-timter\";\n\nconst timter = createTimterPlugin({\n  serverClock, // your shared ServerClock\n  userId,      // optional, attribution (reserved)\n});\n```\n\n## Customizing the shape's look — `renderShape`\n\nBy default the timer renders with a built-in visual. To match your own design\n(hand-drawn theme, design tokens, custom controls), pass a `renderShape`\nrender-prop. It receives the shape, its live `TimerCore`, a fresh `serverNow`\n(recomputed on every self-tick while running), and the timer `actions`. The\nplugin owns the tick and the store writes — your renderer only draws and calls\nactions.\n\n```tsx\nimport {\n  createTimterPlugin,\n  displayMs,\n  formatDuration,\n  isDone,\n} from \"@edv4h/usketch-plugin-timter\";\n\ncreateTimterPlugin({\n  serverClock,\n  renderShape: ({ shape, core, serverNow, actions }) => (\n    <div className=\"my-timer\" data-done={isDone(core, serverNow)}>\n      <span className=\"my-timer__time\">\n        {formatDuration(displayMs(core, serverNow))}\n      </span>\n      <button type=\"button\" onClick={actions.toggle}>\n        {shape.running ? \"pause\" : \"start\"}\n      </button>\n      <button type=\"button\" onClick={actions.reset}>reset</button>\n    </div>\n  ),\n});\n```\n\n`actions`:\n\n| action | effect |\n| --- | --- |\n| `toggle()` | start if paused, pause if running |\n| `reset()` | back to the configured, stopped state |\n| `switchType()` | advance to the next registered kind (paused only) |\n| `adjust(deltaMs)` | change the configured duration by `deltaMs` (duration-based kinds, paused only) |\n\n> Buttons should call `e.stopPropagation()` on `onPointerDown` so the click\n> doesn't start a canvas drag — see `defaultRenderTimerShape` for the pattern.\n\n### Extend, don't replace\n\n`defaultRenderTimerShape` is exported, so you can wrap the built-in visual\ninstead of rewriting it:\n\n```tsx\nimport { defaultRenderTimerShape } from \"@edv4h/usketch-plugin-timter\";\n\ncreateTimterPlugin({\n  serverClock,\n  renderShape: (ctx) => (\n    <div className=\"my-frame\">{defaultRenderTimerShape(ctx)}</div>\n  ),\n});\n```\n\n## Adding a timer type — `registerTimerKind`\n\n`countdown` and `stopwatch` are built in. Register your own kind (e.g.\n`pomodoro`) once at startup; the model transitions, the shape renderer, and the\nControls dock all treat it like a built-in. `switchType()` cycles through every\nregistered kind.\n\n```ts\nimport { registerTimerKind, TIMER_KINDS } from \"@edv4h/usketch-plugin-timter\";\n\nregisterTimerKind(\"pomodoro\", {\n  ...TIMER_KINDS.countdown, // reuse countdown transitions\n  icon: \"🍅\",\n  // always a 25-minute work block\n  initial: () => ({ anchorAt: null, accumMs: 25 * 60_000, durationMs: 25 * 60_000 }),\n});\n```\n\nA `TimerKind` defines pure transitions over `TimerCore`:\n\n```ts\ninterface TimerKind {\n  icon?: string; // glyph used by the built-in renderer / Controls dock\n  displayMs(c, serverNow): number;\n  isDone(c, serverNow): boolean;\n  onStart(c, serverNow): Pick<TimerCore, \"anchorAt\" | \"accumMs\">;\n  onPause(c, serverNow): Pick<TimerCore, \"anchorAt\" | \"accumMs\">;\n  initial(durationMs): Pick<TimerCore, \"anchorAt\" | \"accumMs\" | \"durationMs\">;\n}\n```\n\n## Model exports\n\n`start` · `pause` · `reset` · `initialCore` · `displayMs` · `isDone` ·\n`formatDuration` · `getTimerKind` · `timerTypes` · `registerTimerKind` ·\n`TIMER_KINDS` — plus types `TimerCore` · `TimerType` · `TimerKind`.\n\nShape exports: `TIMER_SHAPE_TYPE` · `TimerShapeData` · `defaultRenderTimerShape`\n· `makeTimerShape` · `dispatchTimerShapeAction` — plus types\n`TimerShapeRenderer` · `TimerRenderContext` · `TimerShapeActions`.\n","readmeFilename":"README.md"}