@jikan0/ui 0.0.3
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 +1 -0
- package/package.json +15 -0
- package/src/index.d.ts +1 -0
- package/src/index.js +5 -0
- package/src/index.js.map +1 -0
- package/src/lib/ui.d.ts +150 -0
- package/src/lib/ui.js +218 -0
- package/src/lib/ui.js.map +1 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
UI reducers
|
package/package.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jikan0/ui",
|
|
3
|
+
"version": "0.0.3",
|
|
4
|
+
"dependencies": {
|
|
5
|
+
"tslib": "^2.3.0",
|
|
6
|
+
"@jikan0/fsm": "*",
|
|
7
|
+
"@jikan0/utils": "*"
|
|
8
|
+
},
|
|
9
|
+
"type": "commonjs",
|
|
10
|
+
"main": "./src/index.js",
|
|
11
|
+
"typings": "./src/index.d.ts",
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
}
|
|
15
|
+
}
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib/ui';
|
package/src/index.js
ADDED
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../ui/src/index.ts"],"names":[],"mappings":";;;AAAA,mDAAyB"}
|
package/src/lib/ui.d.ts
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { NonEmptyState as NonEmptyFsmState } from '@jikan0/fsm';
|
|
2
|
+
export type StartClickedEvent = {
|
|
3
|
+
_tag: 'StartClicked';
|
|
4
|
+
};
|
|
5
|
+
export declare const StartClickedEvent: () => StartClickedEvent;
|
|
6
|
+
export type StopClickedEvent = {
|
|
7
|
+
_tag: 'StopClicked';
|
|
8
|
+
};
|
|
9
|
+
export declare const StopClickedEvent: () => StopClickedEvent;
|
|
10
|
+
export type PauseClickedEvent = {
|
|
11
|
+
_tag: 'PauseClicked';
|
|
12
|
+
};
|
|
13
|
+
export declare const PauseClickedEvent: () => PauseClickedEvent;
|
|
14
|
+
export type ContinueClickedEvent = {
|
|
15
|
+
_tag: 'ContinueClicked';
|
|
16
|
+
};
|
|
17
|
+
export declare const ContinueClickedEvent: () => ContinueClickedEvent;
|
|
18
|
+
export type TimePassedEvent = {
|
|
19
|
+
_tag: 'TimePassed';
|
|
20
|
+
timeMs: bigint;
|
|
21
|
+
};
|
|
22
|
+
export declare const TimePassedEvent: (timeMs: bigint) => TimePassedEvent;
|
|
23
|
+
declare const SIMPLE_MODE: "simple";
|
|
24
|
+
type SimpleMode = typeof SIMPLE_MODE;
|
|
25
|
+
declare const MODES: readonly ["simple"];
|
|
26
|
+
type Mode = (typeof MODES)[number];
|
|
27
|
+
export declare const DEFAULT_MODE: "simple";
|
|
28
|
+
export declare const DEFAULT_EXERCISE_TIME_MS: bigint;
|
|
29
|
+
export declare const DEFAULT_REST_TIME_MS: bigint;
|
|
30
|
+
export declare const DEFAULT_ROUNDS: bigint;
|
|
31
|
+
export type ModeSelectedEvent<M extends Mode = Mode> = {
|
|
32
|
+
_tag: 'ModeSelected';
|
|
33
|
+
mode: M;
|
|
34
|
+
};
|
|
35
|
+
export declare const ModeSelectedEvent: <M extends "simple">(mode: M) => ModeSelectedEvent<M>;
|
|
36
|
+
export type Event = StartClickedEvent | StopClickedEvent | PauseClickedEvent | ContinueClickedEvent | ModeSelectedEvent | TimePassedEvent;
|
|
37
|
+
export type Action = Event;
|
|
38
|
+
declare const RUNNING_STATE_RUNNING: "running";
|
|
39
|
+
declare const RUNNING_STATE_PAUSED: "paused";
|
|
40
|
+
declare const RUNNING_STATE_STOPPED: "stopped";
|
|
41
|
+
type RunningStateRunning = typeof RUNNING_STATE_RUNNING;
|
|
42
|
+
type RunningStatePaused = typeof RUNNING_STATE_PAUSED;
|
|
43
|
+
type RunningStateStopped = typeof RUNNING_STATE_STOPPED;
|
|
44
|
+
type Button<E> = {
|
|
45
|
+
active: true;
|
|
46
|
+
onClick: E;
|
|
47
|
+
} | {
|
|
48
|
+
active: false;
|
|
49
|
+
};
|
|
50
|
+
type ActiveButton<E> = Button<E> & {
|
|
51
|
+
active: true;
|
|
52
|
+
};
|
|
53
|
+
type InactiveButton<E = never> = Button<E> & {
|
|
54
|
+
active: false;
|
|
55
|
+
};
|
|
56
|
+
type ViewActiveValue = {
|
|
57
|
+
startButton: Button<StartClickedEvent>;
|
|
58
|
+
stopButton: Button<StopClickedEvent>;
|
|
59
|
+
pauseButton: Button<PauseClickedEvent>;
|
|
60
|
+
continueButton: Button<ContinueClickedEvent>;
|
|
61
|
+
};
|
|
62
|
+
type State<M extends Mode = Mode> = {
|
|
63
|
+
mode: ModeSelectorState<M>;
|
|
64
|
+
} & ({
|
|
65
|
+
running: RunningStateRunning | RunningStatePaused;
|
|
66
|
+
fsmState: NonEmptyFsmState<StepPerMode[M]>;
|
|
67
|
+
} | {
|
|
68
|
+
running: RunningStateStopped;
|
|
69
|
+
});
|
|
70
|
+
export type ModeSelectorSettingsValue = {
|
|
71
|
+
mode: Mode;
|
|
72
|
+
} & {
|
|
73
|
+
mode: SimpleMode;
|
|
74
|
+
exerciseTimeMs: bigint;
|
|
75
|
+
restTimeMs: bigint;
|
|
76
|
+
rounds: bigint;
|
|
77
|
+
};
|
|
78
|
+
export type ModeSelectorSettings = Readonly<{
|
|
79
|
+
[k in Mode]: Readonly<Omit<ModeSelectorSettingsValue & {
|
|
80
|
+
mode: k;
|
|
81
|
+
}, 'mode'>>;
|
|
82
|
+
}>;
|
|
83
|
+
export type ModeSelectorState<M extends Mode> = Readonly<{
|
|
84
|
+
selected: M;
|
|
85
|
+
settings: ModeSelectorSettings;
|
|
86
|
+
}>;
|
|
87
|
+
export declare const modeSelectorState0: Readonly<{
|
|
88
|
+
selected: "simple";
|
|
89
|
+
settings: Readonly<{
|
|
90
|
+
simple: Readonly<{
|
|
91
|
+
exerciseTimeMs: bigint;
|
|
92
|
+
restTimeMs: bigint;
|
|
93
|
+
rounds: bigint;
|
|
94
|
+
}>;
|
|
95
|
+
}>;
|
|
96
|
+
}>;
|
|
97
|
+
export declare const state0: State<SimpleMode>;
|
|
98
|
+
declare const SIMPLE_PROGRAM_STEPS: readonly ["preparation", "exercise", "rest"];
|
|
99
|
+
type SimpleProgramStep = (typeof SIMPLE_PROGRAM_STEPS)[number];
|
|
100
|
+
type StepPerMode = {
|
|
101
|
+
[k in Mode]: string;
|
|
102
|
+
} & {
|
|
103
|
+
simple: SimpleProgramStep;
|
|
104
|
+
};
|
|
105
|
+
export type ModeSelectorSettingsViewValue = ModeSelectorSettingsValue;
|
|
106
|
+
export type ModeSelectorSettingsViewActions = {
|
|
107
|
+
[m in Mode]: {
|
|
108
|
+
onSelect: ModeSelectedEvent<m>;
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
type TimerStatsCurrent<RoundKind extends string = string> = {
|
|
112
|
+
current: bigint;
|
|
113
|
+
kind: RoundKind;
|
|
114
|
+
};
|
|
115
|
+
type TimerStats<RoundKind extends string = string> = {
|
|
116
|
+
rounds: bigint;
|
|
117
|
+
round: TimerStatsCurrent<RoundKind>;
|
|
118
|
+
};
|
|
119
|
+
export type ViewValue = ViewActiveValue & {
|
|
120
|
+
modeSelector: {
|
|
121
|
+
value: ModeSelectorSettingsViewValue;
|
|
122
|
+
};
|
|
123
|
+
} & ({
|
|
124
|
+
running: 'running';
|
|
125
|
+
startButton: InactiveButton;
|
|
126
|
+
stopButton: InactiveButton;
|
|
127
|
+
pauseButton: ActiveButton<PauseClickedEvent>;
|
|
128
|
+
continueButton: InactiveButton;
|
|
129
|
+
timerStats: TimerStats;
|
|
130
|
+
} | {
|
|
131
|
+
running: 'paused';
|
|
132
|
+
startButton: InactiveButton;
|
|
133
|
+
stopButton: ActiveButton<StopClickedEvent>;
|
|
134
|
+
pauseButton: InactiveButton;
|
|
135
|
+
continueButton: ActiveButton<ContinueClickedEvent>;
|
|
136
|
+
} | {
|
|
137
|
+
running: 'stopped';
|
|
138
|
+
startButton: ActiveButton<StartClickedEvent>;
|
|
139
|
+
stopButton: InactiveButton;
|
|
140
|
+
pauseButton: InactiveButton;
|
|
141
|
+
continueButton: InactiveButton;
|
|
142
|
+
modeSelector: {
|
|
143
|
+
actions: ModeSelectorSettingsViewActions;
|
|
144
|
+
};
|
|
145
|
+
});
|
|
146
|
+
type View_<S, R> = (state: S) => R;
|
|
147
|
+
export type View = View_<State, ViewValue>;
|
|
148
|
+
export declare const view: <M extends "simple" = "simple">(state: State<M>) => ViewValue;
|
|
149
|
+
export declare const reduce: (action: Action) => (state: State) => State;
|
|
150
|
+
export {};
|
package/src/lib/ui.js
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.reduce = exports.view = exports.state0 = exports.modeSelectorState0 = exports.ModeSelectedEvent = exports.DEFAULT_ROUNDS = exports.DEFAULT_REST_TIME_MS = exports.DEFAULT_EXERCISE_TIME_MS = exports.DEFAULT_MODE = exports.TimePassedEvent = exports.ContinueClickedEvent = exports.PauseClickedEvent = exports.StopClickedEvent = exports.StartClickedEvent = void 0;
|
|
4
|
+
const fsm_1 = require("@jikan0/fsm");
|
|
5
|
+
const utils_1 = require("@jikan0/utils");
|
|
6
|
+
const StartClickedEvent = () => ({
|
|
7
|
+
_tag: 'StartClicked',
|
|
8
|
+
});
|
|
9
|
+
exports.StartClickedEvent = StartClickedEvent;
|
|
10
|
+
const StopClickedEvent = () => ({
|
|
11
|
+
_tag: 'StopClicked',
|
|
12
|
+
});
|
|
13
|
+
exports.StopClickedEvent = StopClickedEvent;
|
|
14
|
+
const PauseClickedEvent = () => ({
|
|
15
|
+
_tag: 'PauseClicked',
|
|
16
|
+
});
|
|
17
|
+
exports.PauseClickedEvent = PauseClickedEvent;
|
|
18
|
+
const ContinueClickedEvent = () => ({
|
|
19
|
+
_tag: 'ContinueClicked',
|
|
20
|
+
});
|
|
21
|
+
exports.ContinueClickedEvent = ContinueClickedEvent;
|
|
22
|
+
const TimePassedEvent = (timeMs) => ({
|
|
23
|
+
_tag: 'TimePassed',
|
|
24
|
+
timeMs,
|
|
25
|
+
});
|
|
26
|
+
exports.TimePassedEvent = TimePassedEvent;
|
|
27
|
+
const SIMPLE_MODE = 'simple';
|
|
28
|
+
const MODES = [SIMPLE_MODE];
|
|
29
|
+
exports.DEFAULT_MODE = SIMPLE_MODE;
|
|
30
|
+
exports.DEFAULT_EXERCISE_TIME_MS = BigInt(30000);
|
|
31
|
+
exports.DEFAULT_REST_TIME_MS = BigInt(10000);
|
|
32
|
+
exports.DEFAULT_ROUNDS = BigInt(10);
|
|
33
|
+
const ModeSelectedEvent = (mode) => ({
|
|
34
|
+
_tag: 'ModeSelected',
|
|
35
|
+
mode,
|
|
36
|
+
});
|
|
37
|
+
exports.ModeSelectedEvent = ModeSelectedEvent;
|
|
38
|
+
const RUNNING_STATE_RUNNING = 'running';
|
|
39
|
+
const RUNNING_STATE_PAUSED = 'paused';
|
|
40
|
+
const RUNNING_STATE_STOPPED = 'stopped';
|
|
41
|
+
const _RUNNING_STATES = [
|
|
42
|
+
RUNNING_STATE_RUNNING,
|
|
43
|
+
RUNNING_STATE_PAUSED,
|
|
44
|
+
RUNNING_STATE_STOPPED,
|
|
45
|
+
];
|
|
46
|
+
exports.modeSelectorState0 = Object.freeze({
|
|
47
|
+
selected: exports.DEFAULT_MODE,
|
|
48
|
+
settings: Object.freeze({
|
|
49
|
+
simple: Object.freeze({
|
|
50
|
+
exerciseTimeMs: exports.DEFAULT_EXERCISE_TIME_MS,
|
|
51
|
+
restTimeMs: exports.DEFAULT_REST_TIME_MS,
|
|
52
|
+
rounds: exports.DEFAULT_ROUNDS,
|
|
53
|
+
}),
|
|
54
|
+
}),
|
|
55
|
+
});
|
|
56
|
+
const selectorToProgram = (selector) => {
|
|
57
|
+
const settings = selector.settings[selector.selected];
|
|
58
|
+
switch (selector.selected) {
|
|
59
|
+
case SIMPLE_MODE: {
|
|
60
|
+
return simpleModeSelectorToProgram(settings);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
exports.state0 = Object.freeze({
|
|
65
|
+
running: RUNNING_STATE_STOPPED,
|
|
66
|
+
mode: exports.modeSelectorState0,
|
|
67
|
+
});
|
|
68
|
+
const PREPARATION_STEP = 'preparation';
|
|
69
|
+
const EXERCISE_STEP = 'exercise';
|
|
70
|
+
const REST_STEP = 'rest';
|
|
71
|
+
const SIMPLE_PROGRAM_STEPS = [
|
|
72
|
+
PREPARATION_STEP,
|
|
73
|
+
EXERCISE_STEP,
|
|
74
|
+
REST_STEP,
|
|
75
|
+
];
|
|
76
|
+
const PREPARATION_STEPS_SIMPLE = [
|
|
77
|
+
{
|
|
78
|
+
kind: PREPARATION_STEP,
|
|
79
|
+
duration: 3000 /*TODO make configurable*/,
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
const simpleModeSelectorToProgram = (settings) => Object.freeze([...Array(settings.rounds).keys()].flatMap((i) => [
|
|
83
|
+
...(i === 0 ? PREPARATION_STEPS_SIMPLE : []),
|
|
84
|
+
{ kind: EXERCISE_STEP, duration: Number(settings.exerciseTimeMs) },
|
|
85
|
+
...(Number(settings.rounds) === i + 1
|
|
86
|
+
? []
|
|
87
|
+
: [{ kind: REST_STEP, duration: Number(settings.restTimeMs) }]),
|
|
88
|
+
]));
|
|
89
|
+
const simpleModeQueueToStats = (q) => ({
|
|
90
|
+
current: BigInt(q.filter((x) => x.kind === EXERCISE_STEP).length),
|
|
91
|
+
kind: (0, utils_1.lastRNEA)(q).kind,
|
|
92
|
+
});
|
|
93
|
+
const modeSelectorSettingsViewActions = {
|
|
94
|
+
simple: {
|
|
95
|
+
onSelect: (0, exports.ModeSelectedEvent)('simple'),
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
const view = (state) => {
|
|
99
|
+
const modeSelectorValue = Object.assign({ mode: state.mode.selected }, state.mode.settings[state.mode.selected]);
|
|
100
|
+
switch (state.running) {
|
|
101
|
+
case RUNNING_STATE_RUNNING: {
|
|
102
|
+
const s = state;
|
|
103
|
+
return {
|
|
104
|
+
running: state.running,
|
|
105
|
+
startButton: {
|
|
106
|
+
active: false,
|
|
107
|
+
},
|
|
108
|
+
stopButton: {
|
|
109
|
+
active: false,
|
|
110
|
+
},
|
|
111
|
+
pauseButton: {
|
|
112
|
+
active: true,
|
|
113
|
+
onClick: (0, exports.PauseClickedEvent)(),
|
|
114
|
+
},
|
|
115
|
+
continueButton: {
|
|
116
|
+
active: false,
|
|
117
|
+
},
|
|
118
|
+
modeSelector: {
|
|
119
|
+
value: modeSelectorValue,
|
|
120
|
+
},
|
|
121
|
+
timerStats: {
|
|
122
|
+
// dupe but it's a "view"!
|
|
123
|
+
rounds: modeSelectorValue.rounds,
|
|
124
|
+
round: simpleModeQueueToStats(s.fsmState.queue),
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
case RUNNING_STATE_PAUSED: {
|
|
129
|
+
return {
|
|
130
|
+
running: state.running,
|
|
131
|
+
startButton: {
|
|
132
|
+
active: false,
|
|
133
|
+
},
|
|
134
|
+
stopButton: {
|
|
135
|
+
active: true,
|
|
136
|
+
onClick: (0, exports.StopClickedEvent)(),
|
|
137
|
+
},
|
|
138
|
+
pauseButton: {
|
|
139
|
+
active: false,
|
|
140
|
+
},
|
|
141
|
+
continueButton: {
|
|
142
|
+
active: true,
|
|
143
|
+
onClick: (0, exports.ContinueClickedEvent)(),
|
|
144
|
+
},
|
|
145
|
+
modeSelector: {
|
|
146
|
+
value: modeSelectorValue,
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
case RUNNING_STATE_STOPPED: {
|
|
151
|
+
return {
|
|
152
|
+
running: state.running,
|
|
153
|
+
startButton: {
|
|
154
|
+
active: true,
|
|
155
|
+
onClick: (0, exports.StartClickedEvent)(),
|
|
156
|
+
},
|
|
157
|
+
stopButton: {
|
|
158
|
+
active: false,
|
|
159
|
+
},
|
|
160
|
+
pauseButton: {
|
|
161
|
+
active: false,
|
|
162
|
+
},
|
|
163
|
+
continueButton: {
|
|
164
|
+
active: false,
|
|
165
|
+
},
|
|
166
|
+
modeSelector: {
|
|
167
|
+
value: modeSelectorValue,
|
|
168
|
+
actions: modeSelectorSettingsViewActions,
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
exports.view = view;
|
|
175
|
+
const reduce = (action) => (state) => {
|
|
176
|
+
switch (action._tag) {
|
|
177
|
+
case 'TimePassed': {
|
|
178
|
+
if (state.running !== 'running')
|
|
179
|
+
return state;
|
|
180
|
+
const timeMs = Number(action.timeMs);
|
|
181
|
+
const fsmState = (0, utils_1.pipe)(state.fsmState, (0, fsm_1.tick)(timeMs), ([s]) => s);
|
|
182
|
+
if (fsmState === state.fsmState)
|
|
183
|
+
return state;
|
|
184
|
+
return (0, fsm_1.isEmpty)(fsmState)
|
|
185
|
+
? Object.assign(Object.assign({}, state), { running: 'stopped' }) : Object.assign(Object.assign({}, state), { fsmState });
|
|
186
|
+
}
|
|
187
|
+
case 'StartClicked': {
|
|
188
|
+
if (state.running === 'running' || state.running === 'paused')
|
|
189
|
+
return state;
|
|
190
|
+
const program = selectorToProgram(state.mode);
|
|
191
|
+
return Object.assign(Object.assign({}, state), { running: 'running', fsmState: (0, utils_1.pipe)(fsm_1.empty, (0, fsm_1.push)(program), (s) => s) });
|
|
192
|
+
}
|
|
193
|
+
case 'StopClicked': {
|
|
194
|
+
if (state.running === 'stopped' ||
|
|
195
|
+
state.running === 'running' /*pause before stopping*/)
|
|
196
|
+
return state;
|
|
197
|
+
return Object.assign(Object.assign({}, state), { running: 'stopped' });
|
|
198
|
+
}
|
|
199
|
+
case 'PauseClicked': {
|
|
200
|
+
if (state.running === 'stopped' || state.running === 'paused')
|
|
201
|
+
return state;
|
|
202
|
+
return Object.assign(Object.assign({}, state), { running: 'paused' });
|
|
203
|
+
}
|
|
204
|
+
case 'ContinueClicked': {
|
|
205
|
+
if (state.running === 'stopped' || state.running === 'running')
|
|
206
|
+
return state;
|
|
207
|
+
return Object.assign(Object.assign({}, state), { running: 'running' });
|
|
208
|
+
}
|
|
209
|
+
case 'ModeSelected': {
|
|
210
|
+
if (state.mode.selected === action.mode)
|
|
211
|
+
return state;
|
|
212
|
+
// TODO deep change tools?
|
|
213
|
+
return Object.assign(Object.assign({}, state), { mode: Object.assign(Object.assign({}, state.mode), { selected: action.mode }) });
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
exports.reduce = reduce;
|
|
218
|
+
//# sourceMappingURL=ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../../ui/src/lib/ui.ts"],"names":[],"mappings":"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"}
|