@charlite/react-temporal 0.0.0-stage → 1.1.1

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.
Files changed (49) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/LICENSE +21 -0
  3. package/README.md +178 -2
  4. package/dist/hooks/useTemporalAdd.d.ts +7 -0
  5. package/dist/hooks/useTemporalCalendar.d.ts +4 -0
  6. package/dist/hooks/useTemporalClock.d.ts +5 -0
  7. package/dist/hooks/useTemporalCompare.d.ts +7 -0
  8. package/dist/hooks/useTemporalCountdown.d.ts +5 -0
  9. package/dist/hooks/useTemporalCountdownStatus.d.ts +11 -0
  10. package/dist/hooks/useTemporalDiff.d.ts +5 -0
  11. package/dist/hooks/useTemporalDuration.d.ts +5 -0
  12. package/dist/hooks/useTemporalElapsed.d.ts +5 -0
  13. package/dist/hooks/useTemporalFormat.d.ts +7 -0
  14. package/dist/hooks/useTemporalFrom.d.ts +5 -0
  15. package/dist/hooks/useTemporalInterval.d.ts +6 -0
  16. package/dist/hooks/useTemporalLocalDate.d.ts +5 -0
  17. package/dist/hooks/useTemporalMonth.d.ts +5 -0
  18. package/dist/hooks/useTemporalNow.d.ts +6 -0
  19. package/dist/hooks/useTemporalParse.d.ts +3 -0
  20. package/dist/hooks/useTemporalRange.d.ts +5 -0
  21. package/dist/hooks/useTemporalRelative.d.ts +6 -0
  22. package/dist/hooks/useTemporalSafeParse.d.ts +5 -0
  23. package/dist/hooks/useTemporalSchedule.d.ts +9 -0
  24. package/dist/hooks/useTemporalStopwatch.d.ts +11 -0
  25. package/dist/hooks/useTemporalTimeZone.d.ts +4 -0
  26. package/dist/hooks/useTemporalWeek.d.ts +5 -0
  27. package/dist/hooks/useTemporalWithin.d.ts +5 -0
  28. package/dist/hooks/useTemporalYear.d.ts +5 -0
  29. package/dist/hooks/useTemporalZonedNow.d.ts +6 -0
  30. package/dist/index.cjs +507 -0
  31. package/dist/index.cjs.map +1 -0
  32. package/dist/index.d.ts +29 -0
  33. package/dist/index.esm.js +477 -0
  34. package/dist/index.esm.js.map +1 -0
  35. package/dist/internal/durationKey.d.ts +5 -0
  36. package/dist/internal/useLatest.d.ts +2 -0
  37. package/dist/internal/useTemporalTicker.d.ts +11 -0
  38. package/dist/temporal.d.ts +20 -0
  39. package/dist/types.d.ts +35 -0
  40. package/dist/utils/formatRelative.d.ts +6 -0
  41. package/dist/utils/parseTemporal.d.ts +2 -0
  42. package/docs/README.md +53 -0
  43. package/docs/api-reference.md +331 -0
  44. package/docs/getting-started.md +111 -0
  45. package/docs/installation.md +87 -0
  46. package/docs/migration.md +143 -0
  47. package/docs/polyfill.md +89 -0
  48. package/docs/typescript.md +86 -0
  49. package/package.json +117 -4
@@ -0,0 +1,477 @@
1
+ import { Temporal as Temporal$1 } from 'temporal-polyfill';
2
+ import { useRef, useEffect, useState, useCallback, useMemo } from 'react';
3
+
4
+ /**
5
+ * True when the host exposes a native `globalThis.Temporal` implementation.
6
+ */
7
+ function hasNativeTemporal() {
8
+ return typeof globalThis !== 'undefined' && globalThis.Temporal !== undefined;
9
+ }
10
+ /**
11
+ * Returns the Temporal namespace, preferring native host support
12
+ * (Chrome 144+, Firefox 139+, Edge 144+, Node.js 26+) and falling back to
13
+ * `temporal-polyfill` (smaller, spec-current) when native is missing.
14
+ *
15
+ * You may still install `@js-temporal/polyfill` in your app for typing or tooling;
16
+ * this package does not load it automatically.
17
+ */
18
+ function getTemporal() {
19
+ if (hasNativeTemporal()) {
20
+ return globalThis.Temporal;
21
+ }
22
+ return Temporal$1;
23
+ }
24
+ /** Cached Temporal namespace for hot paths inside hooks. */
25
+ const Temporal = getTemporal();
26
+
27
+ /** Keeps a ref to the latest value (for callbacks inside intervals/timeouts). */
28
+ function useLatest(value) {
29
+ const ref = useRef(value);
30
+ useEffect(() => {
31
+ ref.current = value;
32
+ }, [value]);
33
+ return ref;
34
+ }
35
+
36
+ /**
37
+ * Shared interval driver for live clock hooks.
38
+ */
39
+ function useTemporalTicker({ intervalMs, getSnapshot, pauseWhenHidden = false, enabled = true, }) {
40
+ const getSnapshotRef = useLatest(getSnapshot);
41
+ const [value, setValue] = useState(() => getSnapshotRef.current());
42
+ useEffect(() => {
43
+ if (!enabled) {
44
+ return;
45
+ }
46
+ const tick = () => setValue(getSnapshotRef.current());
47
+ if (pauseWhenHidden && typeof document !== 'undefined') {
48
+ const onVisibility = () => {
49
+ if (!document.hidden) {
50
+ tick();
51
+ }
52
+ };
53
+ document.addEventListener('visibilitychange', onVisibility);
54
+ const id = setInterval(() => {
55
+ if (!document.hidden) {
56
+ tick();
57
+ }
58
+ }, intervalMs);
59
+ return () => {
60
+ clearInterval(id);
61
+ document.removeEventListener('visibilitychange', onVisibility);
62
+ };
63
+ }
64
+ const id = setInterval(tick, intervalMs);
65
+ return () => clearInterval(id);
66
+ }, [enabled, intervalMs, pauseWhenHidden, getSnapshotRef]);
67
+ return value;
68
+ }
69
+
70
+ /**
71
+ * Returns the current time as a Temporal.Instant (or ZonedDateTime when timeZone is set),
72
+ * updating at the configured interval.
73
+ */
74
+ function useTemporalNow(options) {
75
+ const { intervalMs = 1000, timeZone, pauseWhenHidden = false } = options ?? {};
76
+ const getNow = useCallback(() => timeZone ? Temporal.Now.zonedDateTimeISO(timeZone) : Temporal.Now.instant(), [timeZone]);
77
+ return useTemporalTicker({
78
+ intervalMs,
79
+ pauseWhenHidden,
80
+ getSnapshot: getNow,
81
+ });
82
+ }
83
+
84
+ /**
85
+ * Returns the current Temporal.Instant, updating at a configurable interval.
86
+ */
87
+ function useTemporalClock(options) {
88
+ const { intervalMs = 1000, pauseWhenHidden = false } = options ?? {};
89
+ const getNow = useCallback(() => Temporal.Now.instant(), []);
90
+ return useTemporalTicker({
91
+ intervalMs,
92
+ pauseWhenHidden,
93
+ getSnapshot: getNow,
94
+ });
95
+ }
96
+
97
+ /**
98
+ * Returns the current Temporal.ZonedDateTime for the given IANA time zone,
99
+ * updating at a configurable interval.
100
+ */
101
+ function useTemporalZonedNow(timeZone, options) {
102
+ const { intervalMs = 1000, pauseWhenHidden = false } = options ?? {};
103
+ const getNow = useCallback(() => Temporal.Now.zonedDateTimeISO(timeZone), [timeZone]);
104
+ return useTemporalTicker({
105
+ intervalMs,
106
+ pauseWhenHidden,
107
+ getSnapshot: getNow,
108
+ });
109
+ }
110
+
111
+ /** Stable string key for `Temporal.DurationLike` values in hook dependency arrays. */
112
+ function durationKey(duration) {
113
+ return Temporal.Duration.from(duration).toString();
114
+ }
115
+ /** Milliseconds for a duration-like value (for timers). */
116
+ function durationToMilliseconds(duration) {
117
+ return Temporal.Duration.from(duration).total({ unit: 'milliseconds' });
118
+ }
119
+
120
+ /**
121
+ * Runs a callback at a given Temporal.Duration interval.
122
+ * Duration values are normalized for stable effect dependencies.
123
+ */
124
+ function useTemporalInterval(callback, duration) {
125
+ const savedCallback = useLatest(callback);
126
+ const key = durationKey(duration);
127
+ useEffect(() => {
128
+ const ms = durationToMilliseconds(duration);
129
+ const id = setInterval(() => savedCallback.current(), ms);
130
+ return () => clearInterval(id);
131
+ }, [key, savedCallback]);
132
+ }
133
+
134
+ /**
135
+ * Returns a Temporal.Duration between two instants.
136
+ */
137
+ function useTemporalDuration(start, end) {
138
+ return useMemo(() => start.until(end), [start, end]);
139
+ }
140
+
141
+ /**
142
+ * Validates and returns the calendar ID for a given calendar name.
143
+ */
144
+ function useTemporalCalendar(id) {
145
+ return useMemo(() => Temporal.PlainDate.from({ year: 2000, month: 1, day: 1, calendar: id }).calendarId, [id]);
146
+ }
147
+
148
+ /**
149
+ * Validates and returns the time zone ID for a given IANA time zone name.
150
+ */
151
+ function useTemporalTimeZone(id) {
152
+ return useMemo(() => Temporal.ZonedDateTime.from({
153
+ year: 2000,
154
+ month: 1,
155
+ day: 1,
156
+ timeZone: id,
157
+ }).timeZoneId, [id]);
158
+ }
159
+
160
+ /**
161
+ * Formats a Temporal object using Intl via Temporal's toLocaleString.
162
+ */
163
+ function useTemporalFormat(temporalObj, locales, options) {
164
+ return useMemo(() => temporalObj.toLocaleString(locales, options), [temporalObj, locales, options]);
165
+ }
166
+
167
+ /**
168
+ * Returns an array of Temporal.PlainDate between start and end (inclusive).
169
+ */
170
+ function useTemporalRange(start, end) {
171
+ return useMemo(() => {
172
+ const dates = [];
173
+ let current = start;
174
+ while (Temporal.PlainDate.compare(current, end) <= 0) {
175
+ dates.push(current);
176
+ current = current.add({ days: 1 });
177
+ }
178
+ return dates;
179
+ }, [start, end]);
180
+ }
181
+
182
+ const RELATIVE_UNITS = [
183
+ { unit: 'year', seconds: 31_536_000 },
184
+ { unit: 'month', seconds: 2_592_000 },
185
+ { unit: 'week', seconds: 604_800 },
186
+ { unit: 'day', seconds: 86_400 },
187
+ { unit: 'hour', seconds: 3_600 },
188
+ { unit: 'minute', seconds: 60 },
189
+ { unit: 'second', seconds: 1 },
190
+ ];
191
+ /**
192
+ * Formats the span from `from` to `to` with Intl.RelativeTimeFormat.
193
+ * Chooses the coarsest unit that still represents the span without awkward rounding
194
+ * (e.g. 90 minutes instead of 2 hours).
195
+ */
196
+ function formatRelativeTime(totalSeconds, locales, options) {
197
+ const rtf = new Intl.RelativeTimeFormat(locales, { numeric: 'auto', ...options });
198
+ const abs = Math.abs(totalSeconds);
199
+ for (const entry of RELATIVE_UNITS) {
200
+ if (abs < entry.seconds) {
201
+ continue;
202
+ }
203
+ const value = totalSeconds / entry.seconds;
204
+ const rounded = Math.round(value);
205
+ if (entry.unit === 'hour' &&
206
+ Math.abs(rounded) >= 1 &&
207
+ Math.abs(value - rounded) > 0.01 &&
208
+ abs >= 60) {
209
+ return rtf.format(Math.round(totalSeconds / 60), 'minute');
210
+ }
211
+ return rtf.format(rounded, entry.unit);
212
+ }
213
+ return rtf.format(0, 'second');
214
+ }
215
+
216
+ /**
217
+ * Returns a locale-aware relative time string between two instants
218
+ * (e.g. "in 3 hours", "2 days ago") using Intl.RelativeTimeFormat.
219
+ */
220
+ function useTemporalRelative(from, to, locales, options) {
221
+ return useMemo(() => {
222
+ const totalSeconds = from.until(to).total('seconds');
223
+ return formatRelativeTime(totalSeconds, locales, options);
224
+ }, [from, to, locales, options]);
225
+ }
226
+
227
+ /**
228
+ * Returns the remaining seconds until a target Temporal.Instant.
229
+ */
230
+ function useTemporalCountdown(target, options) {
231
+ const { intervalMs = 1000, onComplete } = options ?? {};
232
+ const completedRef = useRef(false);
233
+ const onCompleteRef = useLatest(onComplete ?? (() => { }));
234
+ const getRemaining = useCallback(() => Math.max(0, Math.floor(Temporal.Now.instant().until(target).total('seconds'))), [target]);
235
+ const remaining = useTemporalTicker({
236
+ intervalMs,
237
+ getSnapshot: getRemaining,
238
+ });
239
+ useEffect(() => {
240
+ completedRef.current = false;
241
+ }, [target]);
242
+ useEffect(() => {
243
+ if (remaining === 0 && !completedRef.current) {
244
+ completedRef.current = true;
245
+ onCompleteRef.current();
246
+ }
247
+ }, [remaining, onCompleteRef]);
248
+ return remaining;
249
+ }
250
+
251
+ /**
252
+ * Countdown with structured status (seconds + completion flag).
253
+ */
254
+ function useTemporalCountdownStatus(target, options) {
255
+ const seconds = useTemporalCountdown(target, options);
256
+ return useMemo(() => ({
257
+ seconds,
258
+ isComplete: seconds === 0,
259
+ }), [seconds]);
260
+ }
261
+
262
+ /**
263
+ * Schedules a callback to run at a specific Temporal.Instant.
264
+ */
265
+ function useTemporalSchedule(callback, instant, options) {
266
+ const { runIfPast = true } = options ?? {};
267
+ const savedCallback = useLatest(callback);
268
+ useEffect(() => {
269
+ const now = Temporal.Now.instant();
270
+ const ms = instant.epochMilliseconds - now.epochMilliseconds;
271
+ if (ms <= 0) {
272
+ if (runIfPast) {
273
+ savedCallback.current();
274
+ }
275
+ return;
276
+ }
277
+ const id = setTimeout(() => savedCallback.current(), ms);
278
+ return () => clearTimeout(id);
279
+ }, [instant, runIfPast, savedCallback]);
280
+ }
281
+
282
+ function parseTemporal(kind, input) {
283
+ switch (kind) {
284
+ case 'instant':
285
+ return Temporal.Instant.from(input);
286
+ case 'plainDate':
287
+ return Temporal.PlainDate.from(input);
288
+ case 'plainTime':
289
+ return Temporal.PlainTime.from(input);
290
+ case 'plainDateTime':
291
+ return Temporal.PlainDateTime.from(input);
292
+ case 'zonedDateTime':
293
+ return Temporal.ZonedDateTime.from(input);
294
+ default: {
295
+ const _exhaustive = kind;
296
+ return _exhaustive;
297
+ }
298
+ }
299
+ }
300
+
301
+ /**
302
+ * Parses an ISO string into the requested Temporal type (memoized on `input`).
303
+ */
304
+ function useTemporalFrom(kind, input) {
305
+ return useMemo(() => parseTemporal(kind, input), [kind, input]);
306
+ }
307
+
308
+ /** Parses an ISO string to Temporal.Instant. */
309
+ function useTemporalParse(isoString) {
310
+ return useTemporalFrom('instant', isoString);
311
+ }
312
+
313
+ /**
314
+ * Like `useTemporalFrom`, but returns `{ value, error }` instead of throwing.
315
+ */
316
+ function useTemporalSafeParse(kind, input) {
317
+ return useMemo(() => {
318
+ try {
319
+ return { value: parseTemporal(kind, input), error: null };
320
+ }
321
+ catch (error) {
322
+ return {
323
+ value: null,
324
+ error: error instanceof Error ? error : new Error(String(error)),
325
+ };
326
+ }
327
+ }, [kind, input]);
328
+ }
329
+
330
+ /**
331
+ * Returns the difference between two instants as a Temporal.Duration.
332
+ */
333
+ function useTemporalDiff(a, b) {
334
+ return useMemo(() => a.until(b), [a, b]);
335
+ }
336
+
337
+ /**
338
+ * Returns all dates in the ISO week (Monday–Sunday) containing the given PlainDate.
339
+ */
340
+ function useTemporalWeek(date) {
341
+ return useMemo(() => {
342
+ const weekDay = date.dayOfWeek;
343
+ const start = date.subtract({ days: weekDay - 1 });
344
+ return Array.from({ length: 7 }, (_, i) => start.add({ days: i }));
345
+ }, [date]);
346
+ }
347
+
348
+ /**
349
+ * Returns all dates in the month of a given Temporal.PlainDate.
350
+ */
351
+ function useTemporalMonth(date) {
352
+ return useMemo(() => {
353
+ const days = Temporal.PlainDate.from({
354
+ year: date.year,
355
+ month: date.month,
356
+ day: 1,
357
+ }).daysInMonth;
358
+ return Array.from({ length: days }, (_, i) => Temporal.PlainDate.from({ year: date.year, month: date.month, day: i + 1 }));
359
+ }, [date]);
360
+ }
361
+
362
+ /**
363
+ * Returns the first day of each month in the year of a given Temporal.PlainDate.
364
+ */
365
+ function useTemporalYear(date) {
366
+ return useMemo(() => Array.from({ length: 12 }, (_, i) => Temporal.PlainDate.from({ year: date.year, month: i + 1, day: 1 })), [date]);
367
+ }
368
+
369
+ /**
370
+ * Returns elapsed whole seconds since a past `Temporal.Instant` (0 if the instant is in the future).
371
+ */
372
+ function useTemporalElapsed(since, options) {
373
+ const { intervalMs = 1000, pauseWhenHidden = false } = options ?? {};
374
+ const getElapsed = useCallback(() => {
375
+ const seconds = since.until(Temporal.Now.instant()).total('seconds');
376
+ return Math.max(0, Math.floor(seconds));
377
+ }, [since]);
378
+ return useTemporalTicker({
379
+ intervalMs,
380
+ pauseWhenHidden,
381
+ getSnapshot: getElapsed,
382
+ });
383
+ }
384
+
385
+ /**
386
+ * Live stopwatch from a fixed start instant, updating on an interval.
387
+ */
388
+ function useTemporalStopwatch(start, options) {
389
+ const { intervalMs = 100, pauseWhenHidden = false } = options ?? {};
390
+ const getElapsed = useCallback(() => start.until(Temporal.Now.instant()), [start]);
391
+ const elapsed = useTemporalTicker({
392
+ intervalMs,
393
+ pauseWhenHidden,
394
+ getSnapshot: getElapsed,
395
+ });
396
+ const seconds = useMemo(() => Math.max(0, Math.floor(elapsed.total('seconds'))), [elapsed]);
397
+ return { elapsed, seconds };
398
+ }
399
+
400
+ /**
401
+ * Returns today's calendar date in the given IANA time zone, updating across midnight.
402
+ */
403
+ function useTemporalLocalDate(timeZone, options) {
404
+ const { intervalMs = 60_000, pauseWhenHidden = false } = options ?? {};
405
+ const getDate = useCallback(() => Temporal.Now.zonedDateTimeISO(timeZone).toPlainDate(), [timeZone]);
406
+ return useTemporalTicker({
407
+ intervalMs,
408
+ pauseWhenHidden,
409
+ getSnapshot: getDate,
410
+ });
411
+ }
412
+
413
+ function isInstant$1(value) {
414
+ return typeof value === 'object' && value !== null && 'epochMilliseconds' in value && !('year' in value);
415
+ }
416
+ function isPlainDate$1(value) {
417
+ return (typeof value === 'object' &&
418
+ value !== null &&
419
+ 'year' in value &&
420
+ 'month' in value &&
421
+ 'day' in value &&
422
+ !('epochMilliseconds' in value));
423
+ }
424
+ function compareValues(a, b) {
425
+ if (isInstant$1(a) && isInstant$1(b)) {
426
+ return Temporal.Instant.compare(a, b);
427
+ }
428
+ if (isPlainDate$1(a) && isPlainDate$1(b)) {
429
+ return Temporal.PlainDate.compare(a, b);
430
+ }
431
+ throw new TypeError('useTemporalCompare requires two Instants or two PlainDates');
432
+ }
433
+ /**
434
+ * Memoized Temporal compare result: negative if `a` is before `b`, positive if after, 0 if equal.
435
+ */
436
+ function useTemporalCompare(a, b) {
437
+ return useMemo(() => compareValues(a, b), [a, b]);
438
+ }
439
+
440
+ function isInstant(value) {
441
+ return typeof value === 'object' && value !== null && 'epochMilliseconds' in value && !('year' in value);
442
+ }
443
+ function isPlainDate(value) {
444
+ return (typeof value === 'object' &&
445
+ value !== null &&
446
+ 'year' in value &&
447
+ 'month' in value &&
448
+ 'day' in value &&
449
+ !('epochMilliseconds' in value));
450
+ }
451
+ /**
452
+ * True when `value` is inclusively between `start` and `end`.
453
+ */
454
+ function useTemporalWithin(value, start, end) {
455
+ return useMemo(() => {
456
+ if (isInstant(value) && isInstant(start) && isInstant(end)) {
457
+ return (Temporal.Instant.compare(value, start) >= 0 &&
458
+ Temporal.Instant.compare(value, end) <= 0);
459
+ }
460
+ if (isPlainDate(value) && isPlainDate(start) && isPlainDate(end)) {
461
+ return (Temporal.PlainDate.compare(value, start) >= 0 &&
462
+ Temporal.PlainDate.compare(value, end) <= 0);
463
+ }
464
+ throw new TypeError('useTemporalWithin requires matching Instant or PlainDate operands');
465
+ }, [value, start, end]);
466
+ }
467
+
468
+ /**
469
+ * Memoized `temporal.add(duration)` for PlainDate or Instant values.
470
+ */
471
+ function useTemporalAdd(value, duration) {
472
+ const key = durationKey(duration);
473
+ return useMemo(() => value.add(duration), [value, key]);
474
+ }
475
+
476
+ export { Temporal, getTemporal, hasNativeTemporal, useTemporalAdd, useTemporalCalendar, useTemporalClock, useTemporalCompare, useTemporalCountdown, useTemporalCountdownStatus, useTemporalDiff, useTemporalDuration, useTemporalElapsed, useTemporalFormat, useTemporalFrom, useTemporalInterval, useTemporalLocalDate, useTemporalMonth, useTemporalNow, useTemporalParse, useTemporalRange, useTemporalRelative, useTemporalSafeParse, useTemporalSchedule, useTemporalStopwatch, useTemporalTimeZone, useTemporalWeek, useTemporalWithin, useTemporalYear, useTemporalZonedNow };
477
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/temporal.ts","../src/internal/useLatest.ts","../src/internal/useTemporalTicker.ts","../src/hooks/useTemporalNow.ts","../src/hooks/useTemporalClock.ts","../src/hooks/useTemporalZonedNow.ts","../src/internal/durationKey.ts","../src/hooks/useTemporalInterval.ts","../src/hooks/useTemporalDuration.ts","../src/hooks/useTemporalCalendar.ts","../src/hooks/useTemporalTimeZone.ts","../src/hooks/useTemporalFormat.ts","../src/hooks/useTemporalRange.ts","../src/utils/formatRelative.ts","../src/hooks/useTemporalRelative.ts","../src/hooks/useTemporalCountdown.ts","../src/hooks/useTemporalCountdownStatus.ts","../src/hooks/useTemporalSchedule.ts","../src/utils/parseTemporal.ts","../src/hooks/useTemporalFrom.ts","../src/hooks/useTemporalParse.ts","../src/hooks/useTemporalSafeParse.ts","../src/hooks/useTemporalDiff.ts","../src/hooks/useTemporalWeek.ts","../src/hooks/useTemporalMonth.ts","../src/hooks/useTemporalYear.ts","../src/hooks/useTemporalElapsed.ts","../src/hooks/useTemporalStopwatch.ts","../src/hooks/useTemporalLocalDate.ts","../src/hooks/useTemporalCompare.ts","../src/hooks/useTemporalWithin.ts","../src/hooks/useTemporalAdd.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["TemporalPolyfill","isInstant","isPlainDate"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { TemporalDurationLike } from '../types';
2
+ /** Stable string key for `Temporal.DurationLike` values in hook dependency arrays. */
3
+ export declare function durationKey(duration: TemporalDurationLike): string;
4
+ /** Milliseconds for a duration-like value (for timers). */
5
+ export declare function durationToMilliseconds(duration: TemporalDurationLike): number;
@@ -0,0 +1,2 @@
1
+ /** Keeps a ref to the latest value (for callbacks inside intervals/timeouts). */
2
+ export declare function useLatest<T>(value: T): import("react").RefObject<T>;
@@ -0,0 +1,11 @@
1
+ export interface UseTemporalTickerOptions<T> {
2
+ intervalMs: number;
3
+ getSnapshot: () => T;
4
+ /** When true, pauses updates while `document.hidden` (browser only). */
5
+ pauseWhenHidden?: boolean;
6
+ enabled?: boolean;
7
+ }
8
+ /**
9
+ * Shared interval driver for live clock hooks.
10
+ */
11
+ export declare function useTemporalTicker<T>({ intervalMs, getSnapshot, pauseWhenHidden, enabled, }: UseTemporalTickerOptions<T>): T;
@@ -0,0 +1,20 @@
1
+ import { Temporal as TemporalPolyfill } from 'temporal-polyfill';
2
+ export type TemporalNamespace = typeof TemporalPolyfill;
3
+ declare global {
4
+ var Temporal: TemporalNamespace | undefined;
5
+ }
6
+ /**
7
+ * True when the host exposes a native `globalThis.Temporal` implementation.
8
+ */
9
+ export declare function hasNativeTemporal(): boolean;
10
+ /**
11
+ * Returns the Temporal namespace, preferring native host support
12
+ * (Chrome 144+, Firefox 139+, Edge 144+, Node.js 26+) and falling back to
13
+ * `temporal-polyfill` (smaller, spec-current) when native is missing.
14
+ *
15
+ * You may still install `@js-temporal/polyfill` in your app for typing or tooling;
16
+ * this package does not load it automatically.
17
+ */
18
+ export declare function getTemporal(): TemporalNamespace;
19
+ /** Cached Temporal namespace for hot paths inside hooks. */
20
+ export declare const Temporal: TemporalNamespace;
@@ -0,0 +1,35 @@
1
+ import type { Temporal } from 'temporal-polyfill';
2
+ /** Temporal namespace types (for annotations). Value access via `import { Temporal } from '@charlite/react-temporal'`. */
3
+ export type TemporalTypes = typeof Temporal;
4
+ export type TemporalInstant = Temporal.Instant;
5
+ export type TemporalPlainDate = Temporal.PlainDate;
6
+ export type TemporalPlainTime = Temporal.PlainTime;
7
+ export type TemporalPlainDateTime = Temporal.PlainDateTime;
8
+ export type TemporalZonedDateTime = Temporal.ZonedDateTime;
9
+ export type TemporalDuration = Temporal.Duration;
10
+ export type TemporalDurationLike = Temporal.DurationLike;
11
+ export interface UseTemporalNowOptions {
12
+ /** Tick interval in milliseconds. Defaults to 1000. */
13
+ intervalMs?: number;
14
+ /** IANA time zone for zoned output. When set, returns ZonedDateTime instead of Instant. */
15
+ timeZone?: string;
16
+ /** Pause ticking while the document is hidden (browser). */
17
+ pauseWhenHidden?: boolean;
18
+ }
19
+ export interface UseTemporalClockOptions {
20
+ /** Tick interval in milliseconds. Defaults to 1000. */
21
+ intervalMs?: number;
22
+ pauseWhenHidden?: boolean;
23
+ }
24
+ export interface UseTemporalCountdownOptions {
25
+ /** Update interval in milliseconds. Defaults to 1000. */
26
+ intervalMs?: number;
27
+ /** Called once when the target instant is reached or passed. */
28
+ onComplete?: () => void;
29
+ }
30
+ export type TemporalParseKind = 'instant' | 'plainDate' | 'plainTime' | 'plainDateTime' | 'zonedDateTime';
31
+ export type TemporalParsedValue<K extends TemporalParseKind> = K extends 'instant' ? TemporalInstant : K extends 'plainDate' ? TemporalPlainDate : K extends 'plainTime' ? TemporalPlainTime : K extends 'plainDateTime' ? TemporalPlainDateTime : TemporalZonedDateTime;
32
+ export interface TemporalSafeParseResult<T> {
33
+ value: T | null;
34
+ error: Error | null;
35
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Formats the span from `from` to `to` with Intl.RelativeTimeFormat.
3
+ * Chooses the coarsest unit that still represents the span without awkward rounding
4
+ * (e.g. 90 minutes instead of 2 hours).
5
+ */
6
+ export declare function formatRelativeTime(totalSeconds: number, locales?: string | string[], options?: Intl.RelativeTimeFormatOptions): string;
@@ -0,0 +1,2 @@
1
+ import type { TemporalParseKind, TemporalParsedValue } from '../types';
2
+ export declare function parseTemporal<K extends TemporalParseKind>(kind: K, input: string): TemporalParsedValue<K>;
package/docs/README.md ADDED
@@ -0,0 +1,53 @@
1
+ # react-temporal Documentation
2
+
3
+ React hooks for date and time built on the JavaScript [Temporal API](https://tc39.es/proposal-temporal/).
4
+
5
+ ## Table of contents
6
+
7
+ | Document | Description |
8
+ | --- | --- |
9
+ | [Getting started](./getting-started.md) | Install, configure, and write your first component |
10
+ | [Installation](./installation.md) | Package managers, peer dependencies, and polyfill options |
11
+ | [Polyfill guide](./polyfill.md) | Native vs polyfill runtime, SSR, and browser support |
12
+ | [API reference](./api-reference.md) | Every hook, utility, and type export |
13
+ | [TypeScript](./typescript.md) | Type imports, generics, and IDE support |
14
+ | [Migration guide](./migration.md) | Upgrading across major versions |
15
+ | [Examples](../examples/README.md) | Copy-paste React components for each hook |
16
+ | [Agent knowledge (OKF)](../knowledge/index.md) | OKF v0.2 bundle for AI agents |
17
+
18
+ ## Quick reference
19
+
20
+ ```tsx
21
+ import {
22
+ useTemporalNow,
23
+ useTemporalZonedNow,
24
+ useTemporalRelative,
25
+ Temporal,
26
+ } from '@charlite/react-temporal';
27
+
28
+ function Dashboard() {
29
+ const now = useTemporalNow();
30
+ const tokyo = useTemporalZonedNow('Asia/Tokyo');
31
+ const deadline = Temporal.Instant.from('2026-12-31T23:59:59Z');
32
+ const relative = useTemporalRelative(Temporal.Now.instant(), deadline, 'en');
33
+
34
+ return (
35
+ <div>
36
+ <p>UTC: {now.toString()}</p>
37
+ <p>Tokyo: {tokyo.toLocaleString()}</p>
38
+ <p>Deadline: {relative}</p>
39
+ </div>
40
+ );
41
+ }
42
+ ```
43
+
44
+ ## Requirements
45
+
46
+ - **Node.js** 26+ (development and CI)
47
+ - **React** 17, 18, or 19
48
+ - **Temporal** — native in modern browsers and Node.js 26+, or a polyfill elsewhere (see [Polyfill guide](./polyfill.md))
49
+
50
+ ## Support
51
+
52
+ - [GitHub Issues](https://github.com/charlite/react-temporal/issues)
53
+ - [Changelog](../CHANGELOG.md)