@edv4h/usketch-plugin-timter 0.1.0 → 0.2.0
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 +122 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +9 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +4 -4
- package/dist/plugin.js.map +1 -1
- package/dist/timer-model.d.ts +61 -7
- package/dist/timer-model.d.ts.map +1 -1
- package/dist/timer-model.js +77 -8
- package/dist/timer-model.js.map +1 -1
- package/dist/timer-shape.d.ts +41 -3
- package/dist/timer-shape.d.ts.map +1 -1
- package/dist/timer-shape.js +72 -41
- package/dist/timer-shape.js.map +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# @edv4h/usketch-plugin-timter
|
|
2
|
+
|
|
3
|
+
Shared timers as **canvas shapes** (single source of truth). A `timer` shape is
|
|
4
|
+
placeable/movable and syncs through the normal shapes map; timing runs against a
|
|
5
|
+
shared `ServerClock` so every user agrees on "now". The plugin also surfaces
|
|
6
|
+
every timer in the Debug HUD's Controls dock (group "Timter").
|
|
7
|
+
|
|
8
|
+
The domain model (`timer-model`) is pure, framework-free, and time-source
|
|
9
|
+
agnostic — every function takes an explicit `serverNow`.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { createTimterPlugin } from "@edv4h/usketch-plugin-timter";
|
|
15
|
+
|
|
16
|
+
const timter = createTimterPlugin({
|
|
17
|
+
serverClock, // your shared ServerClock
|
|
18
|
+
userId, // optional, attribution (reserved)
|
|
19
|
+
});
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Customizing the shape's look — `renderShape`
|
|
23
|
+
|
|
24
|
+
By default the timer renders with a built-in visual. To match your own design
|
|
25
|
+
(hand-drawn theme, design tokens, custom controls), pass a `renderShape`
|
|
26
|
+
render-prop. It receives the shape, its live `TimerCore`, a fresh `serverNow`
|
|
27
|
+
(recomputed on every self-tick while running), and the timer `actions`. The
|
|
28
|
+
plugin owns the tick and the store writes — your renderer only draws and calls
|
|
29
|
+
actions.
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import {
|
|
33
|
+
createTimterPlugin,
|
|
34
|
+
displayMs,
|
|
35
|
+
formatDuration,
|
|
36
|
+
isDone,
|
|
37
|
+
} from "@edv4h/usketch-plugin-timter";
|
|
38
|
+
|
|
39
|
+
createTimterPlugin({
|
|
40
|
+
serverClock,
|
|
41
|
+
renderShape: ({ shape, core, serverNow, actions }) => (
|
|
42
|
+
<div className="my-timer" data-done={isDone(core, serverNow)}>
|
|
43
|
+
<span className="my-timer__time">
|
|
44
|
+
{formatDuration(displayMs(core, serverNow))}
|
|
45
|
+
</span>
|
|
46
|
+
<button type="button" onClick={actions.toggle}>
|
|
47
|
+
{shape.running ? "pause" : "start"}
|
|
48
|
+
</button>
|
|
49
|
+
<button type="button" onClick={actions.reset}>reset</button>
|
|
50
|
+
</div>
|
|
51
|
+
),
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
`actions`:
|
|
56
|
+
|
|
57
|
+
| action | effect |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| `toggle()` | start if paused, pause if running |
|
|
60
|
+
| `reset()` | back to the configured, stopped state |
|
|
61
|
+
| `switchType()` | advance to the next registered kind (paused only) |
|
|
62
|
+
| `adjust(deltaMs)` | change the configured duration by `deltaMs` (duration-based kinds, paused only) |
|
|
63
|
+
|
|
64
|
+
> Buttons should call `e.stopPropagation()` on `onPointerDown` so the click
|
|
65
|
+
> doesn't start a canvas drag — see `defaultRenderTimerShape` for the pattern.
|
|
66
|
+
|
|
67
|
+
### Extend, don't replace
|
|
68
|
+
|
|
69
|
+
`defaultRenderTimerShape` is exported, so you can wrap the built-in visual
|
|
70
|
+
instead of rewriting it:
|
|
71
|
+
|
|
72
|
+
```tsx
|
|
73
|
+
import { defaultRenderTimerShape } from "@edv4h/usketch-plugin-timter";
|
|
74
|
+
|
|
75
|
+
createTimterPlugin({
|
|
76
|
+
serverClock,
|
|
77
|
+
renderShape: (ctx) => (
|
|
78
|
+
<div className="my-frame">{defaultRenderTimerShape(ctx)}</div>
|
|
79
|
+
),
|
|
80
|
+
});
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Adding a timer type — `registerTimerKind`
|
|
84
|
+
|
|
85
|
+
`countdown` and `stopwatch` are built in. Register your own kind (e.g.
|
|
86
|
+
`pomodoro`) once at startup; the model transitions, the shape renderer, and the
|
|
87
|
+
Controls dock all treat it like a built-in. `switchType()` cycles through every
|
|
88
|
+
registered kind.
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
import { registerTimerKind, TIMER_KINDS } from "@edv4h/usketch-plugin-timter";
|
|
92
|
+
|
|
93
|
+
registerTimerKind("pomodoro", {
|
|
94
|
+
...TIMER_KINDS.countdown, // reuse countdown transitions
|
|
95
|
+
icon: "🍅",
|
|
96
|
+
// always a 25-minute work block
|
|
97
|
+
initial: () => ({ anchorAt: null, accumMs: 25 * 60_000, durationMs: 25 * 60_000 }),
|
|
98
|
+
});
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
A `TimerKind` defines pure transitions over `TimerCore`:
|
|
102
|
+
|
|
103
|
+
```ts
|
|
104
|
+
interface TimerKind {
|
|
105
|
+
icon?: string; // glyph used by the built-in renderer / Controls dock
|
|
106
|
+
displayMs(c, serverNow): number;
|
|
107
|
+
isDone(c, serverNow): boolean;
|
|
108
|
+
onStart(c, serverNow): Pick<TimerCore, "anchorAt" | "accumMs">;
|
|
109
|
+
onPause(c, serverNow): Pick<TimerCore, "anchorAt" | "accumMs">;
|
|
110
|
+
initial(durationMs): Pick<TimerCore, "anchorAt" | "accumMs" | "durationMs">;
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Model exports
|
|
115
|
+
|
|
116
|
+
`start` · `pause` · `reset` · `initialCore` · `displayMs` · `isDone` ·
|
|
117
|
+
`formatDuration` · `getTimerKind` · `timerTypes` · `registerTimerKind` ·
|
|
118
|
+
`TIMER_KINDS` — plus types `TimerCore` · `TimerType` · `TimerKind`.
|
|
119
|
+
|
|
120
|
+
Shape exports: `TIMER_SHAPE_TYPE` · `TimerShapeData` · `defaultRenderTimerShape`
|
|
121
|
+
· `makeTimerShape` · `dispatchTimerShapeAction` — plus types
|
|
122
|
+
`TimerShapeRenderer` · `TimerRenderContext` · `TimerShapeActions`.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { createTimterPlugin, type TimterPluginOptions } from "./plugin.js";
|
|
2
|
-
export { displayMs, formatDuration, initialCore, isDone, pause, reset, start, type TimerCore, type TimerType, } from "./timer-model.js";
|
|
3
|
-
export { TIMER_SHAPE_TYPE, type TimerShapeData } from "./timer-shape.js";
|
|
2
|
+
export { displayMs, formatDuration, getTimerKind, initialCore, isDone, pause, registerTimerKind, reset, resolveTimerKind, start, TIMER_KINDS, type TimerCore, type TimerKind, type TimerType, timerTypes, } from "./timer-model.js";
|
|
3
|
+
export { defaultRenderTimerShape, dispatchTimerShapeAction, makeTimerShape, TIMER_SHAPE_TYPE, type TimerRenderContext, type TimerShapeActions, type TimerShapeData, type TimerShapeRenderer, } from "./timer-shape.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EACN,SAAS,EACT,cAAc,EACd,WAAW,EACX,MAAM,EACN,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,SAAS,EACd,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EACN,SAAS,EACT,cAAc,EACd,YAAY,EACZ,WAAW,EACX,MAAM,EACN,KAAK,EACL,iBAAiB,EACjB,KAAK,EACL,gBAAgB,EAChB,KAAK,EACL,WAAW,EACX,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACd,UAAU,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,uBAAuB,EACvB,wBAAwB,EACxB,cAAc,EACd,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACvB,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { createTimterPlugin } from "./plugin.js";
|
|
2
|
-
export { displayMs, formatDuration, initialCore, isDone, pause, reset, start, } from "./timer-model.js";
|
|
3
|
-
export { TIMER_SHAPE_TYPE } from "./timer-shape.js";
|
|
2
|
+
export { displayMs, formatDuration, getTimerKind, initialCore, isDone, pause, registerTimerKind, reset, resolveTimerKind, start, TIMER_KINDS, timerTypes, } from "./timer-model.js";
|
|
3
|
+
export { defaultRenderTimerShape, dispatchTimerShapeAction, makeTimerShape, TIMER_SHAPE_TYPE, } from "./timer-shape.js";
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA4B,MAAM,aAAa,CAAC;AAC3E,OAAO,EACN,SAAS,EACT,cAAc,EACd,WAAW,EACX,MAAM,EACN,KAAK,EACL,KAAK,EACL,KAAK,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA4B,MAAM,aAAa,CAAC;AAC3E,OAAO,EACN,SAAS,EACT,cAAc,EACd,YAAY,EACZ,WAAW,EACX,MAAM,EACN,KAAK,EACL,iBAAiB,EACjB,KAAK,EACL,gBAAgB,EAChB,KAAK,EACL,WAAW,EAIX,UAAU,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,uBAAuB,EACvB,wBAAwB,EACxB,cAAc,EACd,gBAAgB,GAKhB,MAAM,kBAAkB,CAAC"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { type UsketchPlugin } from "@edv4h/usketch-shared";
|
|
2
2
|
import type { ServerClock } from "@edv4h/usketch-sync";
|
|
3
|
+
import { type TimerShapeRenderer } from "./timer-shape.js";
|
|
3
4
|
export interface TimterPluginOptions {
|
|
4
5
|
/** Shared server clock so all users agree on "now". */
|
|
5
6
|
serverClock: ServerClock;
|
|
6
7
|
/** Attribution for created-by (reserved). Defaults to "local". */
|
|
7
8
|
userId?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Replace the built-in timer-shape visual with a host renderer (theme /
|
|
11
|
+
* hand-drawn look / design tokens). Receives the shape, its live
|
|
12
|
+
* {@link TimerCore}, a fresh `serverNow`, and toggle/reset/switchType/adjust
|
|
13
|
+
* actions. Omit to use the built-in renderer (`defaultRenderTimerShape`),
|
|
14
|
+
* which you can also import and wrap.
|
|
15
|
+
*/
|
|
16
|
+
renderShape?: TimerShapeRenderer;
|
|
8
17
|
}
|
|
9
18
|
/**
|
|
10
19
|
* Shared timers as **canvas shapes** (single source of truth). The `timer` shape
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,aAAa,EAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,aAAa,EAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQvD,OAAO,EAON,KAAK,kBAAkB,EACvB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,mBAAmB;IACnC,uDAAuD;IACvD,WAAW,EAAE,WAAW,CAAC;IACzB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,aAAa,CA0I9E"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { generateId, } from "@edv4h/usketch-shared";
|
|
2
2
|
import { createAddShapeCommand } from "@edv4h/usketch-store";
|
|
3
|
-
import { displayMs, formatDuration, isDone } from "./timer-model.js";
|
|
3
|
+
import { displayMs, formatDuration, isDone, resolveTimerKind, } from "./timer-model.js";
|
|
4
4
|
import { coreOf, dispatchTimerShapeAction, makeTimerShape, registerTimerShape, TIMER_SHAPE_TYPE, } from "./timer-shape.js";
|
|
5
5
|
/**
|
|
6
6
|
* Shared timers as **canvas shapes** (single source of truth). The `timer` shape
|
|
@@ -17,7 +17,7 @@ export function createTimterPlugin(options) {
|
|
|
17
17
|
setup(ctx) {
|
|
18
18
|
const now = () => options.serverClock.now();
|
|
19
19
|
// ── Timer shape (placeable, movable) — the source of truth ──
|
|
20
|
-
const disposeShape = registerTimerShape(ctx, options.serverClock, options.userId ?? "local");
|
|
20
|
+
const disposeShape = registerTimerShape(ctx, options.serverClock, options.userId ?? "local", options.renderShape);
|
|
21
21
|
const listTimers = () => [...ctx.store.getShapes().values()]
|
|
22
22
|
.filter((s) => s.type === TIMER_SHAPE_TYPE)
|
|
23
23
|
.sort((a, b) => (a.createdAt ?? 0) - (b.createdAt ?? 0) || a.id.localeCompare(b.id));
|
|
@@ -80,8 +80,8 @@ export function createTimterPlugin(options) {
|
|
|
80
80
|
const serverNow = now();
|
|
81
81
|
timers.forEach((s, idx) => {
|
|
82
82
|
const n = idx + 1;
|
|
83
|
-
const icon = s.timerType
|
|
84
|
-
const done =
|
|
83
|
+
const icon = resolveTimerKind(s.timerType).icon ?? "⏱";
|
|
84
|
+
const done = isDone(coreOf(s), serverNow);
|
|
85
85
|
const time = formatDuration(displayMs(coreOf(s), serverNow));
|
|
86
86
|
perTimerOffs.push(ctx.actions.register({
|
|
87
87
|
id: `timter:${s.id}:toggle`,
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,GAIV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/timer-model.d.ts
CHANGED
|
@@ -3,11 +3,20 @@
|
|
|
3
3
|
* function takes an explicit `serverNow` so the same logic runs against the
|
|
4
4
|
* shared server clock). The core timing state ({@link TimerCore}) is deliberately
|
|
5
5
|
* envelope-free so it can be embedded both in the collaborative `timters` map
|
|
6
|
-
* (as {@link TimerEntry}) and in a canvas timer shape.
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* (as {@link TimerEntry}) and in a canvas timer shape.
|
|
7
|
+
*
|
|
8
|
+
* New timer types are added by registering one {@link TimerKind} via
|
|
9
|
+
* {@link registerTimerKind} (hosts can add e.g. a `pomodoro` kind); the
|
|
10
|
+
* transitions ({@link start} / {@link pause} / {@link reset}) stay type-agnostic
|
|
11
|
+
* and dispatch through the kind registry. `"countdown"` and `"stopwatch"` are
|
|
12
|
+
* built in.
|
|
9
13
|
*/
|
|
10
|
-
|
|
14
|
+
/**
|
|
15
|
+
* A timer kind's id. The two built-ins are named for autocomplete; the
|
|
16
|
+
* `(string & {})` arm keeps any host-registered kind assignable while still
|
|
17
|
+
* suggesting the built-ins. Register new ids with {@link registerTimerKind}.
|
|
18
|
+
*/
|
|
19
|
+
export type TimerType = "countdown" | "stopwatch" | (string & {});
|
|
11
20
|
/** The minimal timing state shared by every timer representation. */
|
|
12
21
|
export interface TimerCore {
|
|
13
22
|
type: TimerType;
|
|
@@ -19,14 +28,60 @@ export interface TimerCore {
|
|
|
19
28
|
/** Configured length (countdown); 0 for stopwatch. */
|
|
20
29
|
durationMs: number;
|
|
21
30
|
}
|
|
22
|
-
|
|
31
|
+
/**
|
|
32
|
+
* The behavior of one timer kind. Register a custom kind (e.g. `pomodoro`) with
|
|
33
|
+
* {@link registerTimerKind}; the model's transitions and the shape renderer then
|
|
34
|
+
* treat it like a built-in. All methods are pure — timing flows through the
|
|
35
|
+
* explicit `serverNow`, never `Date.now()`.
|
|
36
|
+
*/
|
|
37
|
+
export interface TimerKind {
|
|
38
|
+
/** Optional glyph used by the built-in shape renderer / Controls dock. */
|
|
39
|
+
icon?: string;
|
|
23
40
|
displayMs(c: TimerCore, serverNow: number): number;
|
|
24
41
|
isDone(c: TimerCore, serverNow: number): boolean;
|
|
25
42
|
onStart(c: TimerCore, serverNow: number): Pick<TimerCore, "anchorAt" | "accumMs">;
|
|
26
43
|
onPause(c: TimerCore, serverNow: number): Pick<TimerCore, "anchorAt" | "accumMs">;
|
|
27
44
|
initial(durationMs: number): Pick<TimerCore, "anchorAt" | "accumMs" | "durationMs">;
|
|
28
45
|
}
|
|
29
|
-
|
|
46
|
+
/**
|
|
47
|
+
* The kind registry. Built-ins are seeded here; hosts extend it via
|
|
48
|
+
* {@link registerTimerKind}. Read via {@link getTimerKind} / {@link timerTypes}
|
|
49
|
+
* (this record is the live registry — treat it as read-only and mutate only
|
|
50
|
+
* through `registerTimerKind`).
|
|
51
|
+
*/
|
|
52
|
+
export declare const TIMER_KINDS: Record<string, TimerKind>;
|
|
53
|
+
/**
|
|
54
|
+
* Register (or replace) a timer kind so custom types behave like the built-ins.
|
|
55
|
+
* Call once at startup, before any timer of that type is created. Example:
|
|
56
|
+
*
|
|
57
|
+
* ```ts
|
|
58
|
+
* registerTimerKind("pomodoro", {
|
|
59
|
+
* // 25-min work block — behaves like a countdown
|
|
60
|
+
* ...TIMER_KINDS.countdown,
|
|
61
|
+
* icon: "🍅",
|
|
62
|
+
* initial: () => ({ anchorAt: null, accumMs: 25 * 60_000, durationMs: 25 * 60_000 }),
|
|
63
|
+
* });
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function registerTimerKind(type: string, kind: TimerKind): void;
|
|
67
|
+
/**
|
|
68
|
+
* The registered kind for `type`. **Throws** if the kind was never registered —
|
|
69
|
+
* the strict getter, for callers that control the type and want to fail loudly
|
|
70
|
+
* on a typo. Rendering / display of *synced* shape data (whose `timerType` is
|
|
71
|
+
* untrusted — stale documents, remote updates for a kind this client never
|
|
72
|
+
* registered) must use {@link resolveTimerKind} instead so a bad value can't
|
|
73
|
+
* crash the render tree.
|
|
74
|
+
*/
|
|
75
|
+
export declare function getTimerKind(type: TimerType): TimerKind;
|
|
76
|
+
/**
|
|
77
|
+
* Like {@link getTimerKind} but **never throws** — returns {@link FALLBACK_KIND}
|
|
78
|
+
* for an unregistered type. Use everywhere a timer's kind is resolved from
|
|
79
|
+
* synced/untrusted shape data (render, LOD, Controls rebuild, transitions) so an
|
|
80
|
+
* unknown kind degrades to an inert display instead of crashing the canvas.
|
|
81
|
+
*/
|
|
82
|
+
export declare function resolveTimerKind(type: TimerType): TimerKind;
|
|
83
|
+
/** All registered timer-type ids, in registration order. */
|
|
84
|
+
export declare function timerTypes(): TimerType[];
|
|
30
85
|
/** Fresh, stopped core for a type + configured duration. */
|
|
31
86
|
export declare function initialCore(type: TimerType, durationMs: number): TimerCore;
|
|
32
87
|
export declare function displayMs(c: TimerCore, serverNow: number): number;
|
|
@@ -39,5 +94,4 @@ export declare function pause(c: TimerCore, serverNow: number): TimerCore;
|
|
|
39
94
|
export declare function reset(c: TimerCore): TimerCore;
|
|
40
95
|
/** Format ms as `M:SS` (or `H:MM:SS` past an hour). Negative clamps to 0. */
|
|
41
96
|
export declare function formatDuration(ms: number): string;
|
|
42
|
-
export {};
|
|
43
97
|
//# sourceMappingURL=timer-model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timer-model.d.ts","sourceRoot":"","sources":["../src/timer-model.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"timer-model.d.ts","sourceRoot":"","sources":["../src/timer-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElE,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,gHAAgH;IAChH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACzB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IACnD,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACjD,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC;IAClF,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC;IAClF,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC;CACpF;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAiBjD,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAErE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAKvD;AAiBD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAE3D;AAED,4DAA4D;AAC5D,wBAAgB,UAAU,IAAI,SAAS,EAAE,CAExC;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAE1E;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,yEAAyE;AACzE,wBAAgB,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAGhE;AAED,sEAAsE;AACtE,wBAAgB,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAGhE;AAED,wEAAwE;AACxE,wBAAgB,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAE7C;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQjD"}
|
package/dist/timer-model.js
CHANGED
|
@@ -3,12 +3,23 @@
|
|
|
3
3
|
* function takes an explicit `serverNow` so the same logic runs against the
|
|
4
4
|
* shared server clock). The core timing state ({@link TimerCore}) is deliberately
|
|
5
5
|
* envelope-free so it can be embedded both in the collaborative `timters` map
|
|
6
|
-
* (as {@link TimerEntry}) and in a canvas timer shape.
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* (as {@link TimerEntry}) and in a canvas timer shape.
|
|
7
|
+
*
|
|
8
|
+
* New timer types are added by registering one {@link TimerKind} via
|
|
9
|
+
* {@link registerTimerKind} (hosts can add e.g. a `pomodoro` kind); the
|
|
10
|
+
* transitions ({@link start} / {@link pause} / {@link reset}) stay type-agnostic
|
|
11
|
+
* and dispatch through the kind registry. `"countdown"` and `"stopwatch"` are
|
|
12
|
+
* built in.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* The kind registry. Built-ins are seeded here; hosts extend it via
|
|
16
|
+
* {@link registerTimerKind}. Read via {@link getTimerKind} / {@link timerTypes}
|
|
17
|
+
* (this record is the live registry — treat it as read-only and mutate only
|
|
18
|
+
* through `registerTimerKind`).
|
|
9
19
|
*/
|
|
10
20
|
export const TIMER_KINDS = {
|
|
11
21
|
countdown: {
|
|
22
|
+
icon: "⏳",
|
|
12
23
|
displayMs: (c, now) => (c.running ? Math.max(0, (c.anchorAt ?? now) - now) : c.accumMs),
|
|
13
24
|
isDone: (c, now) => (c.running ? (c.anchorAt ?? now) - now <= 0 : c.accumMs <= 0),
|
|
14
25
|
onStart: (c, now) => ({ anchorAt: now + c.accumMs, accumMs: c.accumMs }),
|
|
@@ -16,6 +27,7 @@ export const TIMER_KINDS = {
|
|
|
16
27
|
initial: (d) => ({ anchorAt: null, accumMs: d, durationMs: d }),
|
|
17
28
|
},
|
|
18
29
|
stopwatch: {
|
|
30
|
+
icon: "⏱",
|
|
19
31
|
displayMs: (c, now) => (c.running ? now - (c.anchorAt ?? now) + c.accumMs : c.accumMs),
|
|
20
32
|
isDone: () => false,
|
|
21
33
|
onStart: (c, now) => ({ anchorAt: now, accumMs: c.accumMs }),
|
|
@@ -23,27 +35,84 @@ export const TIMER_KINDS = {
|
|
|
23
35
|
initial: () => ({ anchorAt: null, accumMs: 0, durationMs: 0 }),
|
|
24
36
|
},
|
|
25
37
|
};
|
|
38
|
+
/**
|
|
39
|
+
* Register (or replace) a timer kind so custom types behave like the built-ins.
|
|
40
|
+
* Call once at startup, before any timer of that type is created. Example:
|
|
41
|
+
*
|
|
42
|
+
* ```ts
|
|
43
|
+
* registerTimerKind("pomodoro", {
|
|
44
|
+
* // 25-min work block — behaves like a countdown
|
|
45
|
+
* ...TIMER_KINDS.countdown,
|
|
46
|
+
* icon: "🍅",
|
|
47
|
+
* initial: () => ({ anchorAt: null, accumMs: 25 * 60_000, durationMs: 25 * 60_000 }),
|
|
48
|
+
* });
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export function registerTimerKind(type, kind) {
|
|
52
|
+
TIMER_KINDS[type] = kind;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The registered kind for `type`. **Throws** if the kind was never registered —
|
|
56
|
+
* the strict getter, for callers that control the type and want to fail loudly
|
|
57
|
+
* on a typo. Rendering / display of *synced* shape data (whose `timerType` is
|
|
58
|
+
* untrusted — stale documents, remote updates for a kind this client never
|
|
59
|
+
* registered) must use {@link resolveTimerKind} instead so a bad value can't
|
|
60
|
+
* crash the render tree.
|
|
61
|
+
*/
|
|
62
|
+
export function getTimerKind(type) {
|
|
63
|
+
const kind = TIMER_KINDS[type];
|
|
64
|
+
if (!kind)
|
|
65
|
+
throw new Error(`[timter] unknown timer type "${type}" (register it with registerTimerKind)`);
|
|
66
|
+
return kind;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A safe, inert kind used for unregistered types: the displayed time stays frozen
|
|
70
|
+
* at the stored `accumMs` and it is never "done" (start/pause still flip the
|
|
71
|
+
* `running` flag but leave `anchorAt`/`accumMs` untouched, so the reading doesn't
|
|
72
|
+
* move). Keeps a malformed or unknown `timerType` from throwing mid-render.
|
|
73
|
+
*/
|
|
74
|
+
const FALLBACK_KIND = {
|
|
75
|
+
icon: "⏱",
|
|
76
|
+
displayMs: (c) => c.accumMs,
|
|
77
|
+
isDone: () => false,
|
|
78
|
+
onStart: (c) => ({ anchorAt: c.anchorAt, accumMs: c.accumMs }),
|
|
79
|
+
onPause: (c) => ({ anchorAt: c.anchorAt, accumMs: c.accumMs }),
|
|
80
|
+
initial: (d) => ({ anchorAt: null, accumMs: d, durationMs: d }),
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Like {@link getTimerKind} but **never throws** — returns {@link FALLBACK_KIND}
|
|
84
|
+
* for an unregistered type. Use everywhere a timer's kind is resolved from
|
|
85
|
+
* synced/untrusted shape data (render, LOD, Controls rebuild, transitions) so an
|
|
86
|
+
* unknown kind degrades to an inert display instead of crashing the canvas.
|
|
87
|
+
*/
|
|
88
|
+
export function resolveTimerKind(type) {
|
|
89
|
+
return TIMER_KINDS[type] ?? FALLBACK_KIND;
|
|
90
|
+
}
|
|
91
|
+
/** All registered timer-type ids, in registration order. */
|
|
92
|
+
export function timerTypes() {
|
|
93
|
+
return Object.keys(TIMER_KINDS);
|
|
94
|
+
}
|
|
26
95
|
/** Fresh, stopped core for a type + configured duration. */
|
|
27
96
|
export function initialCore(type, durationMs) {
|
|
28
|
-
return { type, running: false, ...
|
|
97
|
+
return { type, running: false, ...resolveTimerKind(type).initial(durationMs) };
|
|
29
98
|
}
|
|
30
99
|
export function displayMs(c, serverNow) {
|
|
31
|
-
return
|
|
100
|
+
return resolveTimerKind(c.type).displayMs(c, serverNow);
|
|
32
101
|
}
|
|
33
102
|
export function isDone(c, serverNow) {
|
|
34
|
-
return
|
|
103
|
+
return resolveTimerKind(c.type).isDone(c, serverNow);
|
|
35
104
|
}
|
|
36
105
|
/** Start or resume. Returns the same core (no-op) if already running. */
|
|
37
106
|
export function start(c, serverNow) {
|
|
38
107
|
if (c.running)
|
|
39
108
|
return c;
|
|
40
|
-
return { ...c, ...
|
|
109
|
+
return { ...c, ...resolveTimerKind(c.type).onStart(c, serverNow), running: true };
|
|
41
110
|
}
|
|
42
111
|
/** Pause, snapshotting remaining/elapsed. No-op if already paused. */
|
|
43
112
|
export function pause(c, serverNow) {
|
|
44
113
|
if (!c.running)
|
|
45
114
|
return c;
|
|
46
|
-
return { ...c, ...
|
|
115
|
+
return { ...c, ...resolveTimerKind(c.type).onPause(c, serverNow), running: false };
|
|
47
116
|
}
|
|
48
117
|
/** Return to the stopped, initial state for the configured duration. */
|
|
49
118
|
export function reset(c) {
|
package/dist/timer-model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timer-model.js","sourceRoot":"","sources":["../src/timer-model.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"timer-model.js","sourceRoot":"","sources":["../src/timer-model.ts"],"names":[],"mappings":"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"}
|
package/dist/timer-shape.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type PluginContext, type ShapeData } from "@edv4h/usketch-shared";
|
|
2
2
|
import type { ServerClock } from "@edv4h/usketch-sync";
|
|
3
|
+
import { type ReactElement } from "react";
|
|
3
4
|
import { type TimerCore, type TimerType } from "./timer-model.js";
|
|
4
5
|
export declare const TIMER_SHAPE_TYPE = "timer";
|
|
5
6
|
/** A timer as a placeable canvas shape. Timing state mirrors {@link TimerCore}. */
|
|
@@ -14,7 +15,9 @@ export interface TimerShapeData extends ShapeData {
|
|
|
14
15
|
export type ShapeAction = {
|
|
15
16
|
id: string;
|
|
16
17
|
action: "toggle" | "reset" | "switch-type";
|
|
17
|
-
}
|
|
18
|
+
}
|
|
19
|
+
/** `value` is a delta in **milliseconds** applied to the configured duration. */
|
|
20
|
+
| {
|
|
18
21
|
id: string;
|
|
19
22
|
action: "adjust";
|
|
20
23
|
value: number;
|
|
@@ -23,6 +26,40 @@ export declare const coreOf: (s: TimerShapeData) => TimerCore;
|
|
|
23
26
|
declare function emit(detail: ShapeAction): void;
|
|
24
27
|
/** Dispatch a timer-shape action (toggle/reset/…) — used by the Controls actions too. */
|
|
25
28
|
export declare const dispatchTimerShapeAction: typeof emit;
|
|
29
|
+
/**
|
|
30
|
+
* Live actions handed to a timer-shape renderer. Each dispatches the same event
|
|
31
|
+
* the built-in buttons use, so a custom renderer stays in sync with the Controls
|
|
32
|
+
* dock and never touches the store directly.
|
|
33
|
+
*/
|
|
34
|
+
export interface TimerShapeActions {
|
|
35
|
+
/** Start if paused, pause if running. */
|
|
36
|
+
toggle(): void;
|
|
37
|
+
/** Return to the configured, stopped state. */
|
|
38
|
+
reset(): void;
|
|
39
|
+
/** Advance to the next registered timer kind (only while paused). */
|
|
40
|
+
switchType(): void;
|
|
41
|
+
/** Change the configured duration by `deltaMs` (duration-based kinds, while paused). */
|
|
42
|
+
adjust(deltaMs: number): void;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Everything a timer-shape renderer needs. `core` / `serverNow` are recomputed on
|
|
46
|
+
* every self-tick while running, so a renderer can read `displayMs(core, serverNow)`
|
|
47
|
+
* / `isDone(core, serverNow)` straight from the model without its own clock.
|
|
48
|
+
*/
|
|
49
|
+
export interface TimerRenderContext {
|
|
50
|
+
shape: TimerShapeData;
|
|
51
|
+
core: TimerCore;
|
|
52
|
+
serverNow: number;
|
|
53
|
+
actions: TimerShapeActions;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Replaces the built-in timer-shape visual. Supplied via
|
|
57
|
+
* `TimterPluginOptions.renderShape`; when omitted the plugin uses
|
|
58
|
+
* {@link defaultRenderTimerShape}. Wrap the default to extend rather than replace.
|
|
59
|
+
*/
|
|
60
|
+
export type TimerShapeRenderer = (ctx: TimerRenderContext) => ReactElement;
|
|
61
|
+
/** The built-in timer-shape renderer. Exported so hosts can wrap/extend it. */
|
|
62
|
+
export declare function defaultRenderTimerShape({ shape, core, serverNow, actions, }: TimerRenderContext): ReactElement;
|
|
26
63
|
/** Build a started timer shape of a given type/duration (used by Controls "add"). */
|
|
27
64
|
export declare function makeTimerShape(params: {
|
|
28
65
|
id: string;
|
|
@@ -35,8 +72,9 @@ export declare function makeTimerShape(params: {
|
|
|
35
72
|
/**
|
|
36
73
|
* Register the timer shape, its draw tool, and the button-action listener.
|
|
37
74
|
* `serverClock` is closed over by the renderer so every client computes the
|
|
38
|
-
* remaining/elapsed time against the shared server clock.
|
|
75
|
+
* remaining/elapsed time against the shared server clock. `renderShape`
|
|
76
|
+
* overrides the built-in visual (defaults to {@link defaultRenderTimerShape}).
|
|
39
77
|
*/
|
|
40
|
-
export declare function registerTimerShape(ctx: PluginContext, serverClock: ServerClock, _userId: string): () => void;
|
|
78
|
+
export declare function registerTimerShape(ctx: PluginContext, serverClock: ServerClock, _userId: string, renderShape?: TimerShapeRenderer): () => void;
|
|
41
79
|
export {};
|
|
42
80
|
//# sourceMappingURL=timer-shape.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timer-shape.d.ts","sourceRoot":"","sources":["../src/timer-shape.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,aAAa,EAGlB,KAAK,SAAS,EAEd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"timer-shape.d.ts","sourceRoot":"","sources":["../src/timer-shape.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,aAAa,EAGlB,KAAK,SAAS,EAEd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,KAAK,YAAY,EAAyB,MAAM,OAAO,CAAC;AACjE,OAAO,EASN,KAAK,SAAS,EACd,KAAK,SAAS,EAEd,MAAM,kBAAkB,CAAC;AAE1B,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAIxC,mFAAmF;AACnF,MAAM,WAAW,cAAe,SAAQ,SAAS;IAChD,IAAI,EAAE,OAAO,gBAAgB,CAAC;IAC9B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,GACpB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAA;CAAE;AAC5D,iFAAiF;GAC/E;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnD,eAAO,MAAM,MAAM,MAAO,cAAc,KAAG,SAMzC,CAAC;AAUH,iBAAS,IAAI,CAAC,MAAM,EAAE,WAAW,QAEhC;AAED,yFAAyF;AACzF,eAAO,MAAM,wBAAwB,aAAO,CAAC;AAI7C;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IACjC,yCAAyC;IACzC,MAAM,IAAI,IAAI,CAAC;IACf,+CAA+C;IAC/C,KAAK,IAAI,IAAI,CAAC;IACd,qEAAqE;IACrE,UAAU,IAAI,IAAI,CAAC;IACnB,wFAAwF;IACxF,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,iBAAiB,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,kBAAkB,KAAK,YAAY,CAAC;AAe3E,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,EACvC,KAAK,EACL,IAAI,EACJ,SAAS,EACT,OAAO,GACP,EAAE,kBAAkB,GAAG,YAAY,CA8GnC;AAmJD,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CAClB,GAAG,cAAc,CAOjB;AAYD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CACjC,GAAG,EAAE,aAAa,EAClB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,kBAA4C,GACvD,MAAM,IAAI,CAgHZ"}
|
package/dist/timer-shape.js
CHANGED
|
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { generateId, } from "@edv4h/usketch-shared";
|
|
3
3
|
import { createAddShapeCommand } from "@edv4h/usketch-store";
|
|
4
4
|
import { useEffect, useReducer } from "react";
|
|
5
|
-
import { displayMs, formatDuration, initialCore, isDone, pause, reset, start, } from "./timer-model.js";
|
|
5
|
+
import { displayMs, formatDuration, initialCore, isDone, pause, reset, resolveTimerKind, start, timerTypes, } from "./timer-model.js";
|
|
6
6
|
export const TIMER_SHAPE_TYPE = "timer";
|
|
7
7
|
const DEFAULT_MINUTES = 5;
|
|
8
8
|
const ACTION_EVENT = "usketch:timter-shape-action";
|
|
@@ -25,7 +25,6 @@ function emit(detail) {
|
|
|
25
25
|
}
|
|
26
26
|
/** Dispatch a timer-shape action (toggle/reset/…) — used by the Controls actions too. */
|
|
27
27
|
export const dispatchTimerShapeAction = emit;
|
|
28
|
-
// ── View ──
|
|
29
28
|
const btn = {
|
|
30
29
|
border: "1px solid #d1d5db",
|
|
31
30
|
borderRadius: 6,
|
|
@@ -36,21 +35,13 @@ const btn = {
|
|
|
36
35
|
lineHeight: 1,
|
|
37
36
|
padding: "4px 8px",
|
|
38
37
|
};
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
const stopEvent = (e) => e.stopPropagation();
|
|
39
|
+
/** The built-in timer-shape renderer. Exported so hosts can wrap/extend it. */
|
|
40
|
+
export function defaultRenderTimerShape({ shape, core, serverNow, actions, }) {
|
|
41
41
|
const running = shape.running;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return;
|
|
46
|
-
const id = setInterval(force, 250);
|
|
47
|
-
return () => clearInterval(id);
|
|
48
|
-
}, [running]);
|
|
49
|
-
const core = coreOf(shape);
|
|
50
|
-
const serverNow = serverClock.now();
|
|
51
|
-
const done = shape.timerType === "countdown" && isDone(core, serverNow);
|
|
52
|
-
const icon = shape.timerType === "countdown" ? "⏳" : "⏱";
|
|
53
|
-
const stop = (e) => e.stopPropagation();
|
|
42
|
+
const done = isDone(core, serverNow);
|
|
43
|
+
const icon = resolveTimerKind(shape.timerType).icon ?? "⏱";
|
|
44
|
+
const durationBased = core.durationMs > 0;
|
|
54
45
|
return (_jsxs("div", { style: {
|
|
55
46
|
width: "100%",
|
|
56
47
|
height: "100%",
|
|
@@ -66,28 +57,56 @@ function TimerShapeView({ shape, serverClock, }) {
|
|
|
66
57
|
borderRadius: 10,
|
|
67
58
|
fontFamily: "system-ui, sans-serif",
|
|
68
59
|
userSelect: "none",
|
|
69
|
-
}, children: [_jsxs("div", { style: { display: "flex", alignItems: "center", gap: 6 }, children: [!running && (_jsx("button", { type: "button", title: "\u7A2E\u5225\u3092\u5207\u66FF", style: btn, onPointerDown:
|
|
70
|
-
|
|
71
|
-
|
|
60
|
+
}, children: [_jsxs("div", { style: { display: "flex", alignItems: "center", gap: 6 }, children: [!running && (_jsx("button", { type: "button", title: "\u7A2E\u5225\u3092\u5207\u66FF", style: btn, onPointerDown: stopEvent, onClick: (e) => {
|
|
61
|
+
stopEvent(e);
|
|
62
|
+
actions.switchType();
|
|
72
63
|
}, children: icon })), running && _jsx("span", { style: { fontSize: 16 }, children: icon }), _jsx("span", { style: {
|
|
73
64
|
fontVariantNumeric: "tabular-nums",
|
|
74
65
|
fontSize: 30,
|
|
75
66
|
fontWeight: 700,
|
|
76
67
|
color: done ? "#b91c1c" : "#1e1e1e",
|
|
77
|
-
}, children: formatDuration(displayMs(core, serverNow)) })] }), !running &&
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}, children: "\u2212" }), _jsx("button", { type: "button", title: "+1\u5206", style: btn, onPointerDown:
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}, children: "\uFF0B" })] })), _jsxs("div", { style: { display: "flex", gap: 8 }, children: [_jsx("button", { type: "button", title: running ? "一時停止" : "開始", style: btn, onPointerDown:
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}, children: running ? "⏸" : "▶" }), _jsx("button", { type: "button", title: "\u30EA\u30BB\u30C3\u30C8", style: btn, onPointerDown:
|
|
87
|
-
|
|
88
|
-
|
|
68
|
+
}, children: formatDuration(displayMs(core, serverNow)) })] }), !running && durationBased && (_jsxs("div", { style: { display: "flex", alignItems: "center", gap: 6 }, children: [_jsx("button", { type: "button", title: "\u22121\u5206", style: btn, onPointerDown: stopEvent, onClick: (e) => {
|
|
69
|
+
stopEvent(e);
|
|
70
|
+
actions.adjust(-60_000);
|
|
71
|
+
}, children: "\u2212" }), _jsx("button", { type: "button", title: "+1\u5206", style: btn, onPointerDown: stopEvent, onClick: (e) => {
|
|
72
|
+
stopEvent(e);
|
|
73
|
+
actions.adjust(60_000);
|
|
74
|
+
}, children: "\uFF0B" })] })), _jsxs("div", { style: { display: "flex", gap: 8 }, children: [_jsx("button", { type: "button", title: running ? "一時停止" : "開始", style: btn, onPointerDown: stopEvent, onClick: (e) => {
|
|
75
|
+
stopEvent(e);
|
|
76
|
+
actions.toggle();
|
|
77
|
+
}, children: running ? "⏸" : "▶" }), _jsx("button", { type: "button", title: "\u30EA\u30BB\u30C3\u30C8", style: btn, onPointerDown: stopEvent, onClick: (e) => {
|
|
78
|
+
stopEvent(e);
|
|
79
|
+
actions.reset();
|
|
89
80
|
}, children: "\u21BA" })] })] }));
|
|
90
81
|
}
|
|
82
|
+
// ── View ──
|
|
83
|
+
/**
|
|
84
|
+
* Host wrapper around a timer-shape renderer. Owns the self-tick (so the display
|
|
85
|
+
* counts down without writing to the store), recomputes `core`/`serverNow` each
|
|
86
|
+
* render, and builds the {@link TimerShapeActions} that emit the shared action
|
|
87
|
+
* event. Delegates the actual visual to `render` (a host `renderShape` or the
|
|
88
|
+
* built-in {@link defaultRenderTimerShape}).
|
|
89
|
+
*/
|
|
90
|
+
function TimerShapeView({ shape, serverClock, render, }) {
|
|
91
|
+
const [, force] = useReducer((n) => n + 1, 0);
|
|
92
|
+
const running = shape.running;
|
|
93
|
+
// Self-tick while running so the display counts without writing to the store.
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (!running)
|
|
96
|
+
return;
|
|
97
|
+
const id = setInterval(force, 250);
|
|
98
|
+
return () => clearInterval(id);
|
|
99
|
+
}, [running]);
|
|
100
|
+
const core = coreOf(shape);
|
|
101
|
+
const serverNow = serverClock.now();
|
|
102
|
+
const actions = {
|
|
103
|
+
toggle: () => emit({ id: shape.id, action: "toggle" }),
|
|
104
|
+
reset: () => emit({ id: shape.id, action: "reset" }),
|
|
105
|
+
switchType: () => emit({ id: shape.id, action: "switch-type" }),
|
|
106
|
+
adjust: (deltaMs) => emit({ id: shape.id, action: "adjust", value: deltaMs }),
|
|
107
|
+
};
|
|
108
|
+
return render({ shape, core, serverNow, actions });
|
|
109
|
+
}
|
|
91
110
|
function SimplifiedTimer({ shape }) {
|
|
92
111
|
// LOD: static time, no controls (LOD is non-interactive).
|
|
93
112
|
const s = shape;
|
|
@@ -111,7 +130,7 @@ function SimplifiedTimer({ shape }) {
|
|
|
111
130
|
overflow: "hidden",
|
|
112
131
|
transform: rotation ? `rotate(${rotation}deg)` : undefined,
|
|
113
132
|
transformOrigin: "center center",
|
|
114
|
-
}, children: [s.timerType
|
|
133
|
+
}, children: [resolveTimerKind(s.timerType).icon ?? "⏱", " ", formatDuration(s.accumMs)] }));
|
|
115
134
|
}
|
|
116
135
|
// ── Geometry ──
|
|
117
136
|
function getBounds(data) {
|
|
@@ -182,7 +201,9 @@ function createDefault(params) {
|
|
|
182
201
|
/** Build a started timer shape of a given type/duration (used by Controls "add"). */
|
|
183
202
|
export function makeTimerShape(params) {
|
|
184
203
|
const base = createDefault({ id: params.id, x: params.x, y: params.y });
|
|
185
|
-
|
|
204
|
+
// The kind's `initial` decides how (or whether) the duration is used —
|
|
205
|
+
// non-duration kinds like stopwatch ignore it.
|
|
206
|
+
const dur = params.durationMs ?? DEFAULT_MINUTES * 60_000;
|
|
186
207
|
const core = start(initialCore(params.timerType, dur), params.serverNow);
|
|
187
208
|
return { ...base, ...corePatch(core) };
|
|
188
209
|
}
|
|
@@ -192,12 +213,13 @@ function TimerToolIcon() {
|
|
|
192
213
|
/**
|
|
193
214
|
* Register the timer shape, its draw tool, and the button-action listener.
|
|
194
215
|
* `serverClock` is closed over by the renderer so every client computes the
|
|
195
|
-
* remaining/elapsed time against the shared server clock.
|
|
216
|
+
* remaining/elapsed time against the shared server clock. `renderShape`
|
|
217
|
+
* overrides the built-in visual (defaults to {@link defaultRenderTimerShape}).
|
|
196
218
|
*/
|
|
197
|
-
export function registerTimerShape(ctx, serverClock, _userId) {
|
|
219
|
+
export function registerTimerShape(ctx, serverClock, _userId, renderShape = defaultRenderTimerShape) {
|
|
198
220
|
const now = () => serverClock.now();
|
|
199
221
|
ctx.shapes.register(TIMER_SHAPE_TYPE, {
|
|
200
|
-
render: (shape) => _jsx(TimerShapeView, { shape: shape, serverClock: serverClock }),
|
|
222
|
+
render: (shape) => (_jsx(TimerShapeView, { shape: shape, serverClock: serverClock, render: renderShape })),
|
|
201
223
|
getBounds,
|
|
202
224
|
hitTest,
|
|
203
225
|
resize,
|
|
@@ -225,15 +247,24 @@ export function registerTimerShape(ctx, serverClock, _userId) {
|
|
|
225
247
|
case "switch-type": {
|
|
226
248
|
if (core.running)
|
|
227
249
|
return;
|
|
228
|
-
|
|
229
|
-
const
|
|
230
|
-
|
|
250
|
+
// Cycle through every registered kind (built-ins + host-registered).
|
|
251
|
+
const types = timerTypes();
|
|
252
|
+
const idx = types.indexOf(core.type);
|
|
253
|
+
// Unknown/removed kind: don't silently switch to the first kind — leave
|
|
254
|
+
// the shape untouched (the model treats unregistered types as an error).
|
|
255
|
+
if (idx < 0)
|
|
256
|
+
return;
|
|
257
|
+
const nextType = types[(idx + 1) % types.length] ?? core.type;
|
|
258
|
+
// Carry a sensible duration forward; non-duration kinds (e.g. stopwatch)
|
|
259
|
+
// ignore it via their own `initial`.
|
|
260
|
+
next = initialCore(nextType, core.durationMs || DEFAULT_MINUTES * 60_000);
|
|
231
261
|
break;
|
|
232
262
|
}
|
|
233
263
|
case "adjust": {
|
|
234
|
-
|
|
264
|
+
// `value` is a millisecond delta; only duration-based kinds respond.
|
|
265
|
+
if (core.running || core.durationMs <= 0)
|
|
235
266
|
return;
|
|
236
|
-
next = initialCore(
|
|
267
|
+
next = initialCore(core.type, Math.max(60_000, core.durationMs + detail.value));
|
|
237
268
|
break;
|
|
238
269
|
}
|
|
239
270
|
default:
|
package/dist/timer-shape.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timer-shape.js","sourceRoot":"","sources":["../src/timer-shape.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"timer-shape.js","sourceRoot":"","sources":["../src/timer-shape.tsx"],"names":[],"mappings":"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"}
|