@bitcobblers/wod-wiki-lang 0.1.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/dist/browserRuntimeNow-SxxdmtB7.d.cts +2350 -0
- package/dist/browserRuntimeNow-SxxdmtB7.d.ts +2350 -0
- package/dist/chunk-F2TOS4AF.mjs +79 -0
- package/dist/chunk-F2TOS4AF.mjs.map +1 -0
- package/dist/index.cjs +12938 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +4076 -0
- package/dist/index.d.ts +4076 -0
- package/dist/index.mjs +12692 -0
- package/dist/index.mjs.map +1 -0
- package/dist/react.cjs +842 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.cts +640 -0
- package/dist/react.d.ts +640 -0
- package/dist/react.mjs +741 -0
- package/dist/react.mjs.map +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __export = (target, all) => {
|
|
3
|
+
for (var name in all)
|
|
4
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
// src/runtime/INowProvider.ts
|
|
8
|
+
var wallClockNow = {
|
|
9
|
+
now: () => /* @__PURE__ */ new Date(),
|
|
10
|
+
nowMs: () => Date.now()
|
|
11
|
+
};
|
|
12
|
+
function frozenNow(at) {
|
|
13
|
+
return { now: () => at, nowMs: () => at.getTime() };
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// src/runtime/browserRuntimeNow.ts
|
|
17
|
+
function getRuntimeNowMs() {
|
|
18
|
+
if (typeof window !== "undefined") {
|
|
19
|
+
const senderClock = window.__chromecast_senderClockTimeMs;
|
|
20
|
+
if (typeof senderClock === "function") {
|
|
21
|
+
try {
|
|
22
|
+
const value = senderClock();
|
|
23
|
+
if (Number.isFinite(value)) {
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
} catch {
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return Date.now();
|
|
31
|
+
}
|
|
32
|
+
function createBrowserRuntimeNow() {
|
|
33
|
+
return {
|
|
34
|
+
now: () => new Date(getRuntimeNowMs()),
|
|
35
|
+
nowMs: () => getRuntimeNowMs()
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// src/utils/formatTime.ts
|
|
40
|
+
var formatTimeMMSS = (ms) => {
|
|
41
|
+
if (ms === void 0 || ms === null || !Number.isFinite(ms)) {
|
|
42
|
+
return "--:--";
|
|
43
|
+
}
|
|
44
|
+
const isNegative = ms < 0;
|
|
45
|
+
const absMs = Math.abs(ms);
|
|
46
|
+
const totalSeconds = Math.floor(absMs / 1e3);
|
|
47
|
+
const minutes = Math.floor(totalSeconds / 60);
|
|
48
|
+
const seconds = totalSeconds % 60;
|
|
49
|
+
const sign = isNegative ? "-" : "";
|
|
50
|
+
return `${sign}${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
|
|
51
|
+
};
|
|
52
|
+
var formatTimeHHMMSS = (ms) => {
|
|
53
|
+
if (ms === void 0 || ms === null || !Number.isFinite(ms)) {
|
|
54
|
+
return "--:--:--";
|
|
55
|
+
}
|
|
56
|
+
const isNegative = ms < 0;
|
|
57
|
+
const absMs = Math.abs(ms);
|
|
58
|
+
const totalSeconds = Math.floor(absMs / 1e3);
|
|
59
|
+
const hours = Math.floor(totalSeconds / 3600);
|
|
60
|
+
const minutes = Math.floor(totalSeconds % 3600 / 60);
|
|
61
|
+
const seconds = totalSeconds % 60;
|
|
62
|
+
const sign = isNegative ? "-" : "";
|
|
63
|
+
return `${sign}${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
|
|
64
|
+
};
|
|
65
|
+
var formatDurationSmart = (ms) => {
|
|
66
|
+
if (ms === void 0 || ms === null || !Number.isFinite(ms)) {
|
|
67
|
+
return "--:--";
|
|
68
|
+
}
|
|
69
|
+
const absMs = Math.abs(ms);
|
|
70
|
+
const totalSeconds = Math.floor(absMs / 1e3);
|
|
71
|
+
if (totalSeconds >= 3600) {
|
|
72
|
+
return formatTimeHHMMSS(ms);
|
|
73
|
+
}
|
|
74
|
+
return formatTimeMMSS(ms);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export { __export, createBrowserRuntimeNow, formatDurationSmart, frozenNow, getRuntimeNowMs, wallClockNow };
|
|
78
|
+
//# sourceMappingURL=chunk-F2TOS4AF.mjs.map
|
|
79
|
+
//# sourceMappingURL=chunk-F2TOS4AF.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/INowProvider.ts","../src/runtime/browserRuntimeNow.ts","../src/utils/formatTime.ts"],"names":[],"mappings":"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","file":"chunk-F2TOS4AF.mjs","sourcesContent":["/**\n * INowProvider — the only seam for \"what time is it\" in the runtime.\n * Events, actions, and behaviors that need a timestamp take a now-fn\n * in their constructor; the runtime passes its single provider down.\n * Tests pass a frozen clock so the timeline is deterministic.\n */\nexport interface INowProvider {\n now(): Date;\n nowMs(): number;\n}\n\n/** Default provider: reads wall clock. */\nexport const wallClockNow: INowProvider = {\n now: () => new Date(),\n nowMs: () => Date.now(),\n};\n\n/** A provider that always returns the same Date (for tests). */\nexport function frozenNow(at: Date): INowProvider {\n return { now: () => at, nowMs: () => at.getTime() };\n}\n","import type { INowProvider } from './INowProvider';\n\ndeclare global {\n interface Window {\n __chromecast_senderClockTimeMs?: () => number;\n }\n}\n\n/**\n * Returns the canonical \"now\" used for runtime timer interpolation.\n *\n * Browser workbench: falls back to Date.now().\n * Chromecast receiver: uses sender-synchronized clock when available.\n */\nexport function getRuntimeNowMs(): number {\n if (typeof window !== 'undefined') {\n const senderClock = window.__chromecast_senderClockTimeMs;\n if (typeof senderClock === 'function') {\n try {\n const value = senderClock();\n if (Number.isFinite(value)) {\n return value;\n }\n } catch {\n // Ignore sender clock failures and fall back to Date.now().\n }\n }\n }\n\n return Date.now();\n}\n\n/** Creates an INowProvider that reads the browser sender-clock when available. */\nexport function createBrowserRuntimeNow(): INowProvider {\n return {\n now: () => new Date(getRuntimeNowMs()),\n nowMs: () => getRuntimeNowMs(),\n };\n}\n","/**\n * Canonical time formatting utilities\n * Consolidates 15+ inline formatter implementations across the codebase\n * \n * All formatters handle edge cases: null, undefined, negative numbers, non-finite values\n */\n\n/**\n * Formats milliseconds to MM:SS format\n * e.g., 65432 → \"01:05\" (~65 seconds)\n */\nexport const formatTimeMMSS = (ms: number): string => {\n if (ms === undefined || ms === null || !Number.isFinite(ms)) {\n return '--:--';\n }\n const isNegative = ms < 0;\n const absMs = Math.abs(ms);\n const totalSeconds = Math.floor(absMs / 1000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n const sign = isNegative ? '-' : '';\n return `${sign}${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n};\n\n/**\n * Formats milliseconds to HH:MM:SS format\n * e.g., 3665432 → \"01:01:05\" (~1 hour, 1 minute, 5 seconds)\n */\nexport const formatTimeHHMMSS = (ms: number): string => {\n if (ms === undefined || ms === null || !Number.isFinite(ms)) {\n return '--:--:--';\n }\n const isNegative = ms < 0;\n const absMs = Math.abs(ms);\n const totalSeconds = Math.floor(absMs / 1000);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n const sign = isNegative ? '-' : '';\n return `${sign}${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n};\n\n/**\n * Formats milliseconds to MM:SS.ms format (with centisecond precision)\n * e.g., 65432 → \"01:05.43\" (~65.4 seconds)\n */\nexport const formatTimePrecise = (ms: number): string => {\n if (ms === undefined || ms === null || !Number.isFinite(ms)) {\n return '--:--.--';\n }\n const isNegative = ms < 0;\n const absMs = Math.abs(ms);\n const totalSeconds = Math.floor(absMs / 1000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n const centiseconds = Math.floor((absMs % 1000) / 10);\n const sign = isNegative ? '-' : '';\n return `${sign}${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}.${centiseconds.toString().padStart(2, '0')}`;\n};\n\n/**\n * Formats seconds to MM:SS format\n * NOTE: Input is SECONDS, not milliseconds (unlike the ms variants above)\n * e.g., 65 → \"01:05\"\n * \n * Use this ONLY for callers that have seconds-based time values\n */\nexport const formatSecondsMMSS = (seconds: number): string => {\n if (seconds === undefined || seconds === null || !Number.isFinite(seconds)) {\n return '--:--';\n }\n const isNegative = seconds < 0;\n const absSeconds = Math.abs(seconds);\n const mins = Math.floor(absSeconds / 60);\n const secs = Math.floor(absSeconds % 60);\n const sign = isNegative ? '-' : '';\n return `${sign}${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\n};\n\n/**\n * Formats seconds to HH:MM:SS format\n * NOTE: Input is SECONDS, not milliseconds\n * e.g., 3665 → \"01:01:05\"\n */\nexport const formatSecondsHHMMSS = (seconds: number): string => {\n if (seconds === undefined || seconds === null || !Number.isFinite(seconds)) {\n return '--:--:--';\n }\n const isNegative = seconds < 0;\n const absSeconds = Math.abs(seconds);\n const hours = Math.floor(absSeconds / 3600);\n const mins = Math.floor((absSeconds % 3600) / 60);\n const secs = Math.floor(absSeconds % 60);\n const sign = isNegative ? '-' : '';\n return `${sign}${hours.toString().padStart(2, '0')}:${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\n};\n\n/**\n * Smart duration formatter: chooses MM:SS or HH:MM:SS based on total duration\n * If duration >= 1 hour: returns HH:MM:SS, else MM:SS\n * Input: milliseconds\n */\nexport const formatDurationSmart = (ms: number): string => {\n if (ms === undefined || ms === null || !Number.isFinite(ms)) {\n return '--:--';\n }\n const absMs = Math.abs(ms);\n const totalSeconds = Math.floor(absMs / 1000);\n if (totalSeconds >= 3600) {\n return formatTimeHHMMSS(ms);\n }\n return formatTimeMMSS(ms);\n};\n\n/**\n * Compact duration format: M:SS.m or MM:SS depending on magnitude\n * e.g., 5432 → \"5:43\", 65432 → \"01:05\"\n * Input: milliseconds\n * \n * Use this only for space-constrained UIs\n */\nexport const formatDurationCompact = (ms: number): string => {\n if (ms === undefined || ms === null || !Number.isFinite(ms)) {\n return '--:--';\n }\n const absMs = Math.abs(ms);\n const totalSeconds = Math.floor(absMs / 1000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n \n // If minutes < 10, use compact format without leading zero\n if (minutes < 10) {\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n }\n \n // Otherwise use standard MM:SS\n return formatTimeMMSS(ms);\n};\n\n/**\n * Formats a timestamp (Date or number) into HH:MM:SS format\n * e.g., new Date('2024-01-01T12:34:56Z') → \"12:34:56\"\n * Returns 'running' if date is undefined.\n */\nexport const formatTimestamp = (date?: Date | number): string => {\n if (!date) return 'running';\n const dateObj = typeof date === 'number' ? new Date(date) : date;\n return dateObj.toLocaleTimeString('en-US', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n });\n};\n"]}
|