From 1e211364f028c7a486ecf76b675e3813943b266c Mon Sep 17 00:00:00 2001 From: Michael McRae Date: Wed, 15 Apr 2026 11:45:26 +1000 Subject: [PATCH 01/18] Tempo tidy --- .../library/src/common/temporal.library.ts | 38 +- .../library/src/common/temporal.polyfill.ts | 18 +- packages/tempo/README.md | 85 ++- packages/tempo/doc/vision.md | 14 +- packages/tempo/package.json | 12 +- packages/tempo/plan/doc_cleanup.md | 0 packages/tempo/scripts/setup.full.ts | 1 - packages/tempo/scripts/setup.polyfill.ts | 21 + packages/tempo/src/core.index.ts | 8 +- .../src/plugin/module/module.composer.ts | 1 - .../tempo/src/plugin/module/module.mutate.ts | 197 ++++++ .../tempo/src/plugin/module/module.term.ts | 41 +- packages/tempo/src/plugin/plugin.util.ts | 38 +- packages/tempo/src/tempo.class.ts | 564 ++++-------------- packages/tempo/src/tempo.default.ts | 20 +- packages/tempo/src/tempo.index.ts | 15 +- packages/tempo/src/tempo.symbol.ts | 6 +- packages/tempo/test/instance.set.test.ts | 16 +- vitest.workspace.ts | 6 +- 19 files changed, 549 insertions(+), 552 deletions(-) create mode 100644 packages/tempo/plan/doc_cleanup.md delete mode 100644 packages/tempo/scripts/setup.full.ts create mode 100644 packages/tempo/scripts/setup.polyfill.ts create mode 100644 packages/tempo/src/plugin/module/module.mutate.ts diff --git a/packages/library/src/common/temporal.library.ts b/packages/library/src/common/temporal.library.ts index cc9deaf5..a68041bf 100644 --- a/packages/library/src/common/temporal.library.ts +++ b/packages/library/src/common/temporal.library.ts @@ -21,9 +21,9 @@ export function unix() { return Math.trunc(instant().epochMilliseconds / 1_000); } -/** return the current Unix timestamp (milliseconds) */ +/** return the current Unix timestamp (nanoseconds) */ export function epoch() { - return instant().epochMilliseconds; + return instant().epochNanoseconds; } /** return the January and July offsets (nanoseconds) for a given timezone and year */ @@ -71,3 +71,37 @@ export function normaliseFractionalDurations(payload: Record) { return payload; } + +// ── Temporal Factory Helpers ───────────────────── +// These centralise all runtime Temporal constructor +// access so that consuming modules never need to +// import a polyfill directly. +// ───────────────────────────────────────────────── + +/** + * ## zonedDateTimeFrom + * Create a `Temporal.ZonedDateTime` from a + * property-bag (year, month, day, …, timeZone, calendar). + */ +export function toZonedDateTime(bag: Temporal.ZonedDateTimeLike & { timeZone: Temporal.TimeZoneLike, calendar?: Temporal.CalendarLike }): Temporal.ZonedDateTime { + return Temporal.ZonedDateTime.from(bag); +} + +/** + * ## plainDateFrom + * Create a `Temporal.PlainDate` from a + * property-bag or ISO string. + */ +export function toPlainDate(bag: Temporal.PlainDateLike | string): Temporal.PlainDate { + return Temporal.PlainDate.from(bag); +} + +/** + * ## instantFromEpochNs + * Create a `Temporal.Instant` from epoch + * nanoseconds (bigint). + */ +export function toInstant(epochNanoseconds: bigint): Temporal.Instant { + return Temporal.Instant.fromEpochNanoseconds(epochNanoseconds); +} + diff --git a/packages/library/src/common/temporal.polyfill.ts b/packages/library/src/common/temporal.polyfill.ts index 7bd0a042..baa8fb33 100644 --- a/packages/library/src/common/temporal.polyfill.ts +++ b/packages/library/src/common/temporal.polyfill.ts @@ -1,13 +1,19 @@ /** * This file verifies native Temporal API support. - * Any library that depends on the Temporal API should ensure this is loaded first. + * It does NOT import or bundle any polyfill. + * If Temporal is not available, a clear error is thrown. + * + * Consumers who need polyfill support should load one + * (e.g. `@js-temporal/polyfill`) at their application + * entry point, before importing this library. */ -import { Temporal } from '@js-temporal/polyfill'; - -// @ts-ignore -if (!globalThis.Temporal) { - Object.defineProperty(globalThis, 'Temporal', { value: Temporal, enumerable: false, configurable: true, writable: true }); +if (typeof globalThis.Temporal === 'undefined') { + throw new Error( + 'Temporal API is not available. ' + + 'Please use a runtime with native Temporal support (Node 22+, Deno, Bun) ' + + 'or load a polyfill (e.g. @js-temporal/polyfill) before importing this library.' + ); } export { } diff --git a/packages/tempo/README.md b/packages/tempo/README.md index 47d44ab2..6af2af41 100644 --- a/packages/tempo/README.md +++ b/packages/tempo/README.md @@ -7,8 +7,10 @@ [![TypeScript Ready](https://img.shields.io/badge/TypeScript-Ready-blue?logo=typescript)](https://www.typescriptlang.org/) [![Native ESM](https://img.shields.io/badge/Native-ESM-green)](https://nodejs.org/api/esm.html) -## 🚀 Overview - +
+ +🚀 Overview + Working with `Date` in JavaScript has historically been painful. The new `Temporal` standard (Stage 4) fixes this, but it can be verbose and strict when parsing strings. **Tempo** bridges that gap by providing: @@ -19,25 +21,42 @@ Working with `Date` in JavaScript has historically been painful. The new `Tempor - **Plugin**: Extend core functionality safely; built-ins (like the Ticker) are ready-to-use in the full package, or can be opted-into via side-effect imports when using the lean Core engine. - **Terms**: Access complex date ranges (Quarters, Seasons, Zodiacs) easily. - **Immutable**: Operations (like `set` and `add`) return a new `Tempo` instance, ensuring thread safety and predictability. - -```javascript -// v2.1.2 - Automatic registration via side-effect import -import '@magmacomputing/tempo/ticker'; -``` - -## 🤔 Why Tempo? - +___ +
+
+ + 🤔 Why Tempo? + If you're looking for a **modern date library** that leverages the native power of the browser's `Temporal` API, Tempo is for you. - **Type Safety**: Built from the ground up with TypeScript. - **Performance**: High-performance wrapper with minimal overhead. - **Familiarity**: If you like the fluent syntax of **Moment** or **Day.js**, you'll feel right at home. - **Future-Proof**: Built on the TC39 `Temporal` standard. +___ +
+
+ + 🎯 Target Audience + -## 🎯 Target Audience Tempo is built for **modern JavaScript developers** who require a premium, type-safe, and developer-friendly interface over the native Temporal API. It is ideal for those migrating from legacy libraries like **Moment.js**, **Day.js**, or **Luxon**, as well as teams building complex, time-sensitive applications that demand reliability, immutability, and high-performance parsing. +Tempo is designed for a broad spectrum of developers and teams who interact with date and time data in JavaScript: -## 📦 Installation +### 1. Modern JavaScript Developers +For those who want to leverage the power of the native `Temporal` API today but find its raw implementation too verbose or strict for rapid development. + +### 2. Teams Migrating from Legacy Libraries +Ideal for organizations looking to move away from **Moment.js**, **Day.js**, or **Luxon** without sacrificing the fluent, chainable API and flexible parsing on which they've come to rely. + +### 3. Enterprise Application Architects +For those building complex, time-sensitive systems (such as financial platforms, scheduling engines, or global logistics trackers) that demand the precision of Temporal combined with a premium, type-safe developer experience. +___ +
+
+ + 📦 Installation + ```bash npm install @magmacomputing/tempo @@ -82,8 +101,12 @@ For environments without `importmap` support or simple prototypes, use the bundl console.log(t.toString()); ``` - -## 🛠️ Quick Start +___ +
+
+ + 🛠️ Quick Start + ```javascript import { Tempo } from '@magmacomputing/tempo'; @@ -101,13 +124,17 @@ const startOfMonth = now.set({ start: 'month' }); console.log(now.format('{dd} {mmm} {yyyy}')); // using custom format with tokens: "24 Jan 2026" console.log(now.fmt.date); // using pre-built formats: "2026-01-24" ``` - -## 📚 Documentation - -> [!IMPORTANT] -> **Documentation Update**: We have been made aware that the documentation links between npmjs.com (the package host) and GitHub (the source repository) were broken a short while back. To overcome this, we have altered our Publish process to now include the doc/ subfolder (along with dist/ folder). We sincerely apologize for any past trouble and thank you for your support. - -## ✨ New in v2.1.2 +___ +
+
+ + 📚 Documentation + + +
+ + ✨ New in v2.1.2 + Tempo v2.1.2 is a major milestone, delivering a more reactive architecture and rock-solid stability. @@ -129,8 +156,13 @@ Tempo v2.1.2 continues the architectural improvements started in v2.0: - **Modular Architecture**: Use optional modules for `duration` and `format` to keep your bundle lean. - **Automatic Registration**: Built-ins self-register on import (just import the module). +___ +
+
+ + 📚 Detailed technical guides + -For detailed technical guides, please refer to: - [Vision & Value Proposition](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/vision.md) - [Tempo vs. Native Temporal](./doc/tempo-vs-temporal.md) ([v2.1.2](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/tempo-vs-temporal.md)) - [Tempo vs. The Competition](./doc/comparison.md) ([v2.1.2](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/comparison.md)) @@ -142,8 +174,14 @@ For detailed technical guides, please refer to: - [Configuration Guide](./doc/tempo.config.md) ([v2.1.2](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/tempo.config.md)) - [Architecture & Internal Protection](./doc/architecture.md) ([v2.1.2](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/architecture.md)) - [Commercial Support](./doc/commercial.md) ([v2.1.2](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/commercial.md)) +___ +
+
-## 💖 Support the Project +
+ +💖 Support the Project + If you find **Tempo** useful and want to support its development, please consider sponsoring us on GitHub! Your support helps keep the project active and premium. @@ -186,3 +224,4 @@ How are we doing? Let us know with a simple reaction! ## ⚖️ License Distributed under the MIT License. See `LICENSE` for more information. +
diff --git a/packages/tempo/doc/vision.md b/packages/tempo/doc/vision.md index 853e36ee..96137925 100644 --- a/packages/tempo/doc/vision.md +++ b/packages/tempo/doc/vision.md @@ -15,19 +15,7 @@ Data in the real world is messy. Tempo's **Layout** and **Snippet** engine allow Tempo extends beyond simple date arithmetic through its **Terms** system. By providing declarative access to complex calculations—such as fiscal quarters, meteorological seasons, and zodiac signs, Tempo moves domain-specific logic out of the application code and into a reusable, extensible plugin architecture. ### 4. Lean but Robust -Tempo is designed to be a thin, highly capable layer. It prioritizes a lightweight API surface for the developer while maintaining robust internal logic to handle the complexities of timezones, calendars, and durations. - -## Target Audience -Tempo is designed for a broad spectrum of developers and teams who interact with date and time data in JavaScript: - -### 1. Modern JavaScript Developers -For those who want to leverage the power of the native `Temporal` API today but find its raw implementation too verbose or strict for rapid development. - -### 2. Teams Migrating from Legacy Libraries -Ideal for organizations looking to move away from **Moment.js**, **Day.js**, or **Luxon** without sacrificing the fluent, chainable API and flexible parsing on which they've come to rely. - -### 3. Enterprise Application Architects -For those building complex, time-sensitive systems (such as financial platforms, scheduling engines, or global logistics trackers) that demand the precision of Temporal combined with a premium, type-safe developer experience. +Tempo is designed to be a thin, highly capable layer. It prioritizes a lightweight API surface for the developer while maintaining robust internal logic to handle the complexities of timezones, calendars, and durations ## Conclusion Tempo is not intended to replace Temporal, but to humanize it. It is the tool for developers who want the future of JavaScript dates today, without the overhead of building their own high-level utility library from scratch. diff --git a/packages/tempo/package.json b/packages/tempo/package.json index 5ee6d96c..a63d3aed 100644 --- a/packages/tempo/package.json +++ b/packages/tempo/package.json @@ -43,6 +43,10 @@ "development": "./src/plugin/module/module.format.ts", "default": "./dist/plugin/module/module.format.js" }, + "#tempo/mutate": { + "development": "./src/plugin/module/module.mutate.ts", + "default": "./dist/plugin/module/module.mutate.js" + }, "#tempo/ticker": { "development": "./src/plugin/extend/extend.ticker.ts", "default": "./dist/plugin/extend/extend.ticker.js" @@ -125,6 +129,10 @@ "types": "./dist/plugin/module/module.format.d.ts", "import": "./dist/plugin/module/module.format.js" }, + "./mutate": { + "types": "./dist/plugin/module/module.mutate.d.ts", + "import": "./dist/plugin/module/module.mutate.js" + }, "./library": { "types": "./dist/library.index.d.ts", "import": "./dist/library.index.js" @@ -140,8 +148,8 @@ }, "scripts": { "test": "vitest run --workspace ../../vitest.workspace.ts", - "repl": "tsx --conditions=development -i --import ./scripts/repl.ts", - "core": "tsx --conditions=development -i --import ./scripts/core.ts", + "repl": "tsx --conditions=development -i --import ./scripts/setup.polyfill.ts --import ./scripts/repl.ts", + "core": "tsx --conditions=development -i --import ./scripts/setup.polyfill.ts --import ./scripts/core.ts", "build": "tsc -b && npm run build:bundle && npm run build:resolve", "build:bundle": "rollup -c", "build:resolve": "tsx scripts/resolve-types.ts", diff --git a/packages/tempo/plan/doc_cleanup.md b/packages/tempo/plan/doc_cleanup.md new file mode 100644 index 00000000..e69de29b diff --git a/packages/tempo/scripts/setup.full.ts b/packages/tempo/scripts/setup.full.ts deleted file mode 100644 index ea779e6b..00000000 --- a/packages/tempo/scripts/setup.full.ts +++ /dev/null @@ -1 +0,0 @@ -import '#tempo'; diff --git a/packages/tempo/scripts/setup.polyfill.ts b/packages/tempo/scripts/setup.polyfill.ts new file mode 100644 index 00000000..58d8dfab --- /dev/null +++ b/packages/tempo/scripts/setup.polyfill.ts @@ -0,0 +1,21 @@ +/** + * Test/Dev Polyfill Bootstrap + * + * This file loads the @js-temporal/polyfill into + * globalThis so that the passive assertion in + * temporal.polyfill.ts succeeds. + * + * This is the "bring your own polyfill" entry point + * for development and testing environments that do + * not yet have native Temporal support. + */ +import { Temporal } from '@js-temporal/polyfill'; + +if (typeof globalThis.Temporal === 'undefined') { + Object.defineProperty(globalThis, 'Temporal', { + value: Temporal, + enumerable: false, + configurable: true, + writable: true, + }); +} diff --git a/packages/tempo/src/core.index.ts b/packages/tempo/src/core.index.ts index a8b98bb1..26ccb2e5 100644 --- a/packages/tempo/src/core.index.ts +++ b/packages/tempo/src/core.index.ts @@ -1,11 +1,5 @@ export * from './tempo.class.js'; export { default as enums } from './tempo.enum.js'; -// export items specifically from #library if they are required in the Tempo API -export { enumify } from '#library/enumerate.library.js'; -export { stringify, objectify, cloneify } from '#library/serialize.library.js'; -export { getType } from '#library/type.library.js'; -export { Pledge } from '#library/pledge.class.js'; - // export common patterns and symbols for custom Layouts -export { Token, Snippet, Match, Default } from './tempo.default.js'; +export { Token, Snippet, Match, Default, Guard } from './tempo.default.js'; diff --git a/packages/tempo/src/plugin/module/module.composer.ts b/packages/tempo/src/plugin/module/module.composer.ts index cd48396f..921dee97 100644 --- a/packages/tempo/src/plugin/module/module.composer.ts +++ b/packages/tempo/src/plugin/module/module.composer.ts @@ -1,4 +1,3 @@ -import '#library/temporal.polyfill.js'; import { isNumeric } from '#library/coercion.library.js'; import { Match } from '../../tempo.default.js'; import { TemporalObject, TypeValue, isInstant, isZonedDateTime, isPlainDate, isPlainDateTime, isTempo } from '#library/type.library.js'; diff --git a/packages/tempo/src/plugin/module/module.mutate.ts b/packages/tempo/src/plugin/module/module.mutate.ts new file mode 100644 index 00000000..958a69ac --- /dev/null +++ b/packages/tempo/src/plugin/module/module.mutate.ts @@ -0,0 +1,197 @@ +import { isDefined, isObject, isString, isUndefined, isZonedDateTime } from '#library/type.library.js'; +import { singular } from '#library/string.library.js'; +import sym from '../../tempo.symbol.js'; +import enums from '../../tempo.enum.js'; +import { defineInterpreterModule, findTermPlugin, getHost, REGISTRY } from '../plugin.util.js'; +import { resolveTermMutation } from './module.term.js'; +import type { Tempo } from '../../tempo.class.js'; +import type * as t from '../../tempo.type.js'; + +/** + * MutateModule logic for Tempo.add and Tempo.set + */ +function mutate(this: Tempo, type: 'add' | 'set', args?: any, options: t.Options = {}) { + const state = (this as any)[sym.$Internal](); + if (!isZonedDateTime(state.zdt)) return this; + + const { zdt: selfZdt, parse: internalParse } = state; + const TempoClass = getHost(this); + + + const overrides = { + timeZone: options.timeZone ?? this.tz, + calendar: options.calendar ?? this.cal, + sphere: options.sphere ?? this.config.sphere + } as Required; + + if (type === 'set' && isObject(args) && args.constructor === Object) { + const { timeZone, calendar } = args as Record; + if (timeZone) overrides.timeZone = timeZone; + if (calendar) overrides.calendar = calendar; + } + + // Shift the current instance to the target timezone first + let zdt = selfZdt.withTimeZone(overrides.timeZone).withCalendar(overrides.calendar); + state.parseDepth++; + const isRoot = state.parseDepth === 1; + if (isRoot) state.matches = [...this.parse.result]; + + try { + if (isDefined(args)) { + // 1. Shorthand String + if (isString(args) && args.startsWith('#')) { + const resolveType = type === 'add' ? 'add' : 'start'; + const res = resolveTermMutation(TempoClass, this, resolveType, args, (type === 'add' ? 1 : args), zdt); + if (res === null) state.errored = true; + else zdt = res; + } + // 2. Mutation Object + else if (isObject(args) && args.constructor === Object) { + zdt = Object.entries(args ?? {}) + .reduce((currZdt, [key, adjust]) => { + if (key === 'timeZone' || key === 'calendar') return currZdt; + + try { + // @ts-ignore - access to mutation guard + if (++state.mutateDepth > 100) { + // @ts-ignore - access to static logger + TempoClass[sym.$logError](this.config, `Infinite recursion detected in mutation engine for key: ${key}, adjust: ${adjust}, depth: ${state.mutateDepth}`); + state.errored = true; + return currZdt; + } + + const { mutate: op, offset, single, term } = ((key, adjust, type) => { + const isTerm = key.startsWith('#'); + if (type === 'add') { + const isTermPlugin = !isTerm && !!findTermPlugin(key as string); + const isStandard = ['period', 'event', 'time', 'date', 'dow', 'wkd'].includes(key as string); + return { + mutate: 'add', + offset: adjust, + single: isTerm || (isTermPlugin && !isStandard) ? 'term' : singular(key), + term: isTerm ? (key as string) : (isTermPlugin ? key : undefined) + } + } + + switch (key) { + case 'start': + case 'mid': + case 'end': { + const val = adjust?.toString() ?? ''; + const isTermVal = val.startsWith('#'); + return { mutate: key as any, offset: val, single: isTermVal ? 'term' : singular(val), term: isTermVal ? val : undefined }; + } + default: { + const isTermPlugin = !isTerm && !!findTermPlugin(key as string); + const isStandard = ['period', 'event', 'time', 'date', 'dow', 'wkd'].includes(key as string); + return { + mutate: 'set', + offset: adjust, + single: isTerm || (isTermPlugin && !isStandard) ? 'term' : singular(key as string), + term: isTerm ? (key as string) : (isTermPlugin ? key : undefined) + } + } + } + })(key, adjust, type); + + const slug = `${op}.${single}`; + + // Term-based mutations + if (slug.endsWith('.term')) { + const res = resolveTermMutation(TempoClass, this, op as any, term!, adjust, currZdt); + if (res === null) state.errored = true; + return res ?? currZdt; + } + + // Standard temporal units + switch (slug) { + case 'add.year': case 'add.month': case 'add.week': case 'add.day': + case 'add.hour': case 'add.minute': case 'add.second': + case 'add.millisecond': case 'add.microsecond': case 'add.nanosecond': + return currZdt.add({ [singular(single) + 's']: offset }); + + case 'set.timeZone': return currZdt.withTimeZone(offset as Temporal.TimeZoneLike); + case 'set.calendar': return currZdt.withCalendar(offset as Temporal.CalendarLike); + + case 'set.period': case 'set.time': case 'set.date': case 'set.event': + case 'set.dow': case 'set.wkd': { + const res = internalParse(offset, currZdt, term); + if (isUndefined(res)) state.errored = true; + return res ?? currZdt; + } + + case 'set.year': case 'set.month': case 'set.week': case 'set.day': + case 'set.hour': case 'set.minute': case 'set.second': + case 'set.millisecond': case 'set.microsecond': case 'set.nanosecond': + return currZdt.with({ [single]: offset }); + + case 'set.yy': case 'set.mm': case 'set.dd': case 'set.hh': + case 'set.mi': case 'set.ss': case 'set.ms': case 'set.us': case 'set.ns': { + const value = enums.ELEMENT[single as t.Element]; + return currZdt.with({ [value]: offset }); + } + + case 'start.year': return currZdt.with({ month: enums.MONTH.Jan, day: 1 }).startOfDay(); + case 'start.month': return currZdt.with({ day: 1 }).startOfDay(); + case 'start.week': return currZdt.add({ days: -(this.dow - enums.WEEKDAY.Mon) }).startOfDay(); + case 'start.day': return currZdt.startOfDay(); + case 'start.hour': case 'start.minute': case 'start.second': + return currZdt.round({ smallestUnit: offset as any, roundingMode: 'trunc' }); + + case 'mid.year': return currZdt.with({ month: enums.MONTH.Jul, day: 1 }).startOfDay(); + case 'mid.month': return currZdt.with({ day: Math.trunc(currZdt.daysInMonth / 2) }).startOfDay(); + case 'mid.week': return currZdt.add({ days: -(this.dow - enums.WEEKDAY.Thu) }).startOfDay(); + case 'mid.day': return currZdt.round({ smallestUnit: 'day', roundingMode: 'trunc' }).add({ hours: 12 }); + case 'mid.hour': return currZdt.round({ smallestUnit: 'hour', roundingMode: 'trunc' }).add({ minutes: 30 }); + case 'mid.minute': return currZdt.round({ smallestUnit: 'minute', roundingMode: 'trunc' }).add({ seconds: 30 }); + case 'mid.second': return currZdt.round({ smallestUnit: 'second', roundingMode: 'trunc' }).add({ milliseconds: 500 }); + + case 'end.year': return currZdt.add({ years: 1 }).with({ month: enums.MONTH.Jan, day: 1 }).startOfDay().subtract({ nanoseconds: 1 }); + case 'end.month': return currZdt.add({ months: 1 }).with({ day: 1 }).startOfDay().subtract({ nanoseconds: 1 }); + case 'end.week': return currZdt.add({ days: (enums.WEEKDAY.Sun - this.dow) + 1 }).startOfDay().subtract({ nanoseconds: 1 }); + case 'end.day': case 'end.hour': case 'end.minute': case 'end.second': + return currZdt.round({ smallestUnit: offset as any, roundingMode: 'ceil' }).subtract({ nanoseconds: 1 }); + + default: + // @ts-ignore + TempoClass[sym.$logError](this.config, `Unexpected method(${op}), unit(${key}) and offset(${adjust})`); + state.errored = true; + return currZdt; + } + } finally { + // @ts-ignore + state.mutateDepth--; + } + }, zdt); + } + else if (type === 'add') { + // Handle legacy .add(Tempo) or other types if supported + } + else { + // @ts-ignore - access to private constructor fallback + return new TempoClass(args, { ...state.options, ...overrides, ...options, result: state.matches, anchor: zdt, [sym.$errored]: state.errored, [sym.$mutateDepth]: state.mutateDepth }); + } + } + + if (state.errored) { + // @ts-ignore - access to private constructor fallback + return new TempoClass(null, { ...state.options, ...overrides, ...options, result: state.matches, [sym.$errored]: true }); + } + + // @ts-ignore + return new TempoClass(zdt, { ...state.options, ...overrides, ...options, result: state.matches, anchor: zdt, [sym.$errored]: state.errored }); + + } finally { + if (isRoot) state.matches = undefined; + state.parseDepth--; + } +} + +/** + * MutateModule registration + */ +// @ts-ignore +// Eagerly register with the global registry to ensure availability even if .extend() is delayed +REGISTRY.modules['MutateModule'] = mutate; + +export const MutateModule = defineInterpreterModule('MutateModule', mutate); diff --git a/packages/tempo/src/plugin/module/module.term.ts b/packages/tempo/src/plugin/module/module.term.ts index 2875bf93..1f3ebe1f 100644 --- a/packages/tempo/src/plugin/module/module.term.ts +++ b/packages/tempo/src/plugin/module/module.term.ts @@ -1,11 +1,11 @@ -import { Temporal } from '@js-temporal/polyfill'; - -import { isDefined, isObject, isString, isZonedDateTime } from '#library/type.library.js'; +import { toZonedDateTime, toInstant } from '#library/temporal.library.js'; +import { isDefined, isString, isZonedDateTime } from '#library/type.library.js'; import { isNumeric } from '#library/coercion.library.js'; + import sym from '../../tempo.symbol.js'; import { getSafeFallbackStep } from '../../tempo.util.js'; import { Match } from '../../tempo.default.js'; -import { REGISTRY, getRange, getTermRange, resolveTermShift, findTermPlugin } from '../plugin.util.js'; +import { getRange, getTermRange, resolveTermShift, findTermPlugin } from '../plugin.util.js'; import { parseModifier } from './module.lexer.js'; /** @@ -77,7 +77,7 @@ export function resolveTermMutation(Tempo: any, instance: any, mutate: string, u } const starts = candidates.map(c => { - const s = Temporal.ZonedDateTime.from({ + const s = toZonedDateTime({ year: c.year ?? jump.year, month: c.month ?? 1, day: c.day ?? 1, @@ -139,7 +139,7 @@ export function resolveTermMutation(Tempo: any, instance: any, mutate: string, u } const resolved = rawList.map(c => { - const start = Temporal.ZonedDateTime.from({ + const start = toZonedDateTime({ year: c.year ?? jump.year, month: c.month ?? 1, day: c.day ?? 1, @@ -323,7 +323,7 @@ export function resolveTermMutation(Tempo: any, instance: any, mutate: string, u const startNs = finalRange.start.toDateTime().epochNanoseconds as bigint; const endNs = finalRange.end.toDateTime().epochNanoseconds as bigint; const midNs = startNs + (endNs - startNs) / BigInt(2); - return Temporal.Instant.fromEpochNanoseconds(midNs).toZonedDateTimeISO(tz).withCalendar(cal); + return toInstant(midNs).toZonedDateTimeISO(tz).withCalendar(cal); } return finalRange.end.toDateTime().subtract({ nanoseconds: 1 }).withTimeZone(tz).withCalendar(cal); } @@ -335,32 +335,25 @@ export function resolveTermMutation(Tempo: any, instance: any, mutate: string, u if (isString(offset) && !offset.startsWith('#') && !isNumericString) { let jump = zdt; - // Determine the shifted target by recursively calling .set on a temporary strict instance - let nextInstance = new instance.constructor(jump, { ...instance.config, mode: 'strict' }).set({ [unit]: offset }); - if (!nextInstance.isValid) return null; - let next = nextInstance.toDateTime(); + const range = termObj.define.call(new Tempo(jump, { ...instance.config, mode: 'strict' }), false); + const step = getSafeFallbackStep(range as any, termObj.scope ?? (unit === '#period' ? 'period' : undefined)); + let next = jump.add(step); let iterations = 0; while (next.epochNanoseconds <= zdt.epochNanoseconds) { if (++iterations > 50) { // Safety-Valve: prevent infinite look-ahead - const range = termObj.define.call(new instance.constructor(jump, { ...instance.config, mode: 'strict' }), false); + const range = termObj.define.call(new Tempo(jump, { ...instance.config, mode: 'strict' }), false); const step = getSafeFallbackStep(range as any, termObj.scope ?? (unit === '#period' ? 'period' : undefined)); jump = jump.add(step); } else { - const range = termObj.define.call(new instance.constructor(jump, { ...instance.config, mode: 'strict' }), false); - if (isObject(range) && (range as any).end) { - jump = (range as any).end.toDateTime(); - } else { - const step = (unit === '#period' || termObj.scope === 'period') ? { days: 1 } : { years: 1 }; - jump = jump.add(step); - } + const range = termObj.define.call(new Tempo(jump, { ...instance.config, mode: 'strict' }), false); + const step = getSafeFallbackStep(range as any, termObj.scope ?? (unit === '#period' ? 'period' : undefined)); + jump = jump.add(step); + next = jump; } - - nextInstance = new instance.constructor(jump, { ...instance.config, mode: 'strict' }).set({ [unit]: offset }); - if (!nextInstance.isValid) return null; - next = nextInstance.toDateTime(); } - return next; + const res = new Tempo(offset, { ...instance.config, anchor: next, mode: 'strict' }).toDateTime(); + return isZonedDateTime(res) ? res : next; } // 3. Handle Numeric Shifts or Term Shifting diff --git a/packages/tempo/src/plugin/plugin.util.ts b/packages/tempo/src/plugin/plugin.util.ts index 1fc18566..1131c4cd 100644 --- a/packages/tempo/src/plugin/plugin.util.ts +++ b/packages/tempo/src/plugin/plugin.util.ts @@ -1,4 +1,4 @@ -import { Temporal } from '@js-temporal/polyfill'; +import { toZonedDateTime, toPlainDate, toInstant } from '#library/temporal.library.js'; import { isDefined, isFunction, isString } from '#library/type.library.js'; import { secure } from '#library/utility.library.js'; import { SCHEMA, getLargestUnit } from '../tempo.util.js'; @@ -15,6 +15,14 @@ const _REGISTRY = { modules: secureRef({} as Record) } +/** + * # STATE + * Mutable internal state for Tempo. + */ +export const STATE = { + mutateDepth: 0 +} + /** * # REGISTRY * Internal registry for registered components. @@ -40,7 +48,7 @@ export const REGISTRY = new Proxy(_REGISTRY, { }); /** internal helper to resolve the class-host from either an instance or the class itself */ -function getHost(t: any): any { +export function getHost(t: any): any { const isFn = typeof t === 'function'; if (isFn) return t?.[lib.$Target] ?? t; const host = (t as any)?.constructor ?? (isDefined(t) ? Reflect.get(Object(t), 'constructor') : Object); @@ -65,7 +73,11 @@ export function interpret(t: any, module: string, methodOrFallback?: any, ...arg return logic.apply(t, args); } catch (err) { - host[sym.$logError](t?.config, err); + if (isFunction(host?.[sym.$logError])) { + host[sym.$logError](t?.config, err); + } else { + console.error(`Tempo [${module}]:`, err); + } } return (isFunction(methodOrFallback) ? methodOrFallback() : undefined); @@ -96,17 +108,19 @@ export const defineModule = (module: T): T => { export const defineInterpreterModule = (name: string, logic: any) => defineModule((options: any, TempoClass: any) => { // 1. Secure the Global Registry - if (isDefined(REGISTRY.modules[name]) && REGISTRY.modules[name] !== logic) { - throw new Error(`Tempo Security: Core Module clash for '${name}'. Logic is already defined.`); + if (isDefined(REGISTRY.modules[name])) { + if (REGISTRY.modules[name] !== logic) throw new Error(`Tempo Security: Core Module clash for '${name}'. Logic is already defined.`); + } else { + REGISTRY.modules[name] = logic; } - REGISTRY.modules[name] = logic; // 2. Fallback for legacy class-local access TempoClass[sym.$Interpreter] ??= secureRef({}); - if (isDefined(TempoClass[sym.$Interpreter][name]) && TempoClass[sym.$Interpreter][name] !== logic) { - throw new Error(`Tempo Interpreter Module clash: '${name}' logic is already defined.`); + if (isDefined(TempoClass[sym.$Interpreter][name])) { + if (TempoClass[sym.$Interpreter][name] !== logic) throw new Error(`Tempo Interpreter Module clash: '${name}' logic is already defined.`); + } else { + TempoClass[sym.$Interpreter][name] = logic; } - TempoClass[sym.$Interpreter][name] = logic; }); /** @@ -196,7 +210,7 @@ export function getTermRange(tempo: Tempo, list: Range[], keyOnly = true, anchor } } // @ts-ignore - const zdt = Temporal.ZonedDateTime.from({ ...obj, timeZone: anchor.timeZoneId, calendar: anchor.calendarId }); + const zdt = toZonedDateTime({ ...obj, timeZone: anchor.timeZoneId, calendar: anchor.calendarId }); // @ts-ignore return new tempo.constructor(zdt, (tempo as any).config); } @@ -269,7 +283,7 @@ export function resolveTermAnchor(tempo: Tempo, terms: any[], offset: string, mu const endNs = range.end.toDateTime().epochNanoseconds as bigint; const midNs = startNs + (endNs - startNs) / BigInt(2); // @ts-ignore - return new tempo.constructor(Temporal.Instant.fromEpochNanoseconds(midNs).toZonedDateTimeISO((range.start as any).tz).withCalendar((range.start as any).cal), (tempo as any).config); + return new tempo.constructor(toInstant(midNs).toZonedDateTimeISO((range.start as any).tz).withCalendar((range.start as any).cal), (tempo as any).config); } if (mutate === 'end') return range.end.subtract({ nanoseconds: 1 }); @@ -327,7 +341,7 @@ export function resolveCycleWindow(t: Tempo, template: Range[], anchor?: any) { // Handle Daily Cycles (e.g. TimelineTerm) if (largest === 'hour' || largest === 'minute') { const list: Range[] = []; - const base = Temporal.PlainDate.from(source); + const base = toPlainDate(source); for (const offset of [-1, 0, 1]) { const date = base.add({ days: offset }); diff --git a/packages/tempo/src/tempo.class.ts b/packages/tempo/src/tempo.class.ts index e6cae659..0d17425e 100644 --- a/packages/tempo/src/tempo.class.ts +++ b/packages/tempo/src/tempo.class.ts @@ -10,8 +10,8 @@ import lib, { markConfig } from '#library/symbol.library.js'; import { getContext, CONTEXT } from '#library/utility.library.js'; import { enumify } from '#library/enumerate.library.js'; import { ownKeys, ownEntries, getAccessors, omit } from '#library/reflection.library.js'; -import { pad, singular, trimAll } from '#library/string.library.js'; -import { getType, asType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction, isClass, isZonedDateTime, isPlainDate, isPlainTime } from '#library/type.library.js'; +import { pad, trimAll } from '#library/string.library.js'; +import { getType, asType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isNumber, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction, isClass, isZonedDateTime, isPlainDate, isPlainTime } from '#library/type.library.js'; import { getResolvedOptions, getHemisphere, canonicalLocale } from '#library/international.library.js'; import { instant } from '#library/temporal.library.js'; import type { Property, TypeValue, Secure } from '#library/type.library.js'; @@ -19,15 +19,30 @@ import type { Property, TypeValue, Secure } from '#library/type.library.js'; import { compose } from './plugin/module/module.composer.js'; import { resolveTermMutation, resolveTermValue } from './plugin/module/module.term.js'; import { prefix, parseWeekday, parseDate, parseTime, parseZone } from './plugin/module/module.lexer.js'; -import { REGISTRY, registerPlugin, registerTerm, getRange, getTermRange, interpret, findTermPlugin } from './plugin/plugin.util.js' +import { REGISTRY, registerPlugin, registerTerm, getRange, getTermRange, interpret } from './plugin/plugin.util.js' import sym, { isTempo, registerHook } from './tempo.symbol.js'; -import { Match, Token, Snippet, Layout, Event, Period, Default } from './tempo.default.js'; +import { Match, Token, Snippet, Layout, Event, Period, Default, Guard } from './tempo.default.js'; import enums, { STATE, DISCOVERY, registryUpdate, registryReset } from './tempo.enum.js'; import * as t from './tempo.type.js'; // namespaced types (Tempo.*) - +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const Context = getContext(); // current execution context +/** set a mutable, enumerable property on a target */ +const setProperty = (target: object, key: PropertyKey, value: T) => + Object.defineProperty(target, key, { + value, writable: true, configurable: true, enumerable: true + }); + +/** return the Prototype parent of an object */ +const proto = (obj: object) => Object.getPrototypeOf(obj); +/** test object has own property with the given key */ +const hasOwn = (obj: object, key: string) => Object.hasOwn(obj, key); +/** return whether the shape is 'local' or 'global' */ +const isLocal = (shape: { config: { scope: string } }) => shape.config.scope === 'local'; +/** create an object based on a prototype */ +const create = (obj: object, name: string): T => Object.create(proto(obj)[name]); +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ namespace Internal { export type State = t.Internal.State; export type Parse = t.Internal.Parse; @@ -43,13 +58,12 @@ namespace Internal { (fmt: F, options: t.Options): t.FormatType; } } - +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * # Tempo * A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects. * Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API. */ - @Serializable @Immutable export class Tempo { @@ -73,12 +87,19 @@ export class Tempo { /** check if Tempo is currently initializing */ static get isInitializing() { return Tempo.#lifecycle.extendDepth > 0 || !Tempo.#lifecycle.ready } /** check if Tempo is currently extending */ static get isExtending() { return Tempo.#lifecycle.extendDepth > 0 } - static #dbg = new Logify('Tempo', { debug: Default?.debug ?? false, catch: Default?.catch ?? false }) + /** Tempo state for the global configuration */ static #global = {} as Internal.State + /** cache for next-available 'usr' Token key */ static #usrCount = 0; + /** mutable list of registered term plugins */ static #terms: t.TermPlugin[] = REGISTRY.terms; + /** mapping of terms to their resolved values */ static #termMap: Map = new Map(); + /** flag to prevent recursion during init */ static #lifecycle = { bootstrap: true, initialising: false, extendDepth: 0, ready: false }; + /** Master Guard predicate (implements RegExp-like interface) */static #guard: { test(str: string): boolean } = { test: () => true }; + /** Set of allowed lowercased tokens for the Master Guard */ static #allowedTokens: Set = new Set(); + /** handle internal errors using the global config */ static [sym.$logError](...msg: any[]): void { const config = (isObject(msg[0]) && (msg[0] as any)[lib.$Logify] === true) ? msg.shift() : Tempo.#global.config; @@ -86,23 +107,16 @@ export class Tempo { Tempo.#dbg.error(config, ...msg); } + /** internal key for signaling pre-errored state in constructor */ + static [sym.$errored] = sym.$errored; + /** guard against infinite mutation recursion */ + static [sym.$mutateDepth] = 0; + /** handle internal debug info using the global config */ static [sym.$logDebug](...msg: any[]): void { Tempo.#dbg.debug(...msg); } - /** a collection of parse rule-matches */ #matches: Internal.Match[] | undefined; - - /** Tempo state for the global configuration */ static #global = {} as Internal.State - /** cache for next-available 'usr' Token key */ static #usrCount = 0; - /** guard against infinite mutation recursion */ static #mutateDepth = 0; - /** mutable list of registered term plugins */ static #terms: t.TermPlugin[] = REGISTRY.terms; - /** current parsing depth to manage state isolation */ #parseDepth = 0; - /** mapping of terms to their resolved values */ static #termMap: Map = new Map(); - /** flag to prevent recursion during init */ static #lifecycle = { bootstrap: true, initialising: false, extendDepth: 0, ready: false }; - /** Master Guard predicate (implements RegExp-like interface) */ static #guard: { test(str: string): boolean } = { test: () => true }; - /** Set of allowed lowercased tokens for the Master Guard */ static #allowedTokens: Set = new Set(); - /** Centralized error dispatcher for Term resolution failures */ static [sym.$termError](config: t.Options, term: string): void { const hint = Tempo.#terms.length === 0 ? ". (No term plugins are registered—did you forget to call Tempo.extend(TermsModule)?)" : ""; @@ -111,12 +125,6 @@ export class Tempo { if (config.catch !== true) throw new Error(msg); } - //** prototype helpers */ - /** return the Prototype parent of an object */ static #proto(obj: object) { return Object.getPrototypeOf(obj) } - /** test object has own property with the given key */ static #hasOwn(obj: object, key: string) { return Object.hasOwn(obj, key) } - /** return whether the shape is 'local' or 'global' */ static #isLocal(shape: Internal.State) { return shape.config.scope === 'local' } - /** create an object based on a prototype */ static #create(obj: object, name: string): T { return Object.create(Tempo.#proto(obj)[name]) } - /** * {dt} is a layout that combines date-related {snippets} (e.g. dd, mm -or- evt) into a pattern against which a string can be tested. * because it will also include a list of events (e.g. 'new_years' | 'xmas'), we need to rebuild {dt} if the user adds a new event @@ -124,7 +132,7 @@ export class Tempo { // TODO: check all Layouts which reference "{evt}" and update them static #setEvents(shape: Internal.State) { const events = ownEntries(shape.parse.event, true); - if (Tempo.#isLocal(shape) && !Tempo.#hasOwn(shape.parse, 'event') && !Tempo.#hasOwn(shape.parse, 'isMonthDay')) + if (isLocal(shape) && !hasOwn(shape.parse, 'event') && !hasOwn(shape.parse, 'isMonthDay')) return; // no local change needed const src = shape.config.scope.substring(0, 1); // 'g'lobal or 'l'ocal @@ -133,33 +141,23 @@ export class Tempo { .join('|') // make an 'Or' pattern for the event-keys if (groups) { - const protoEvt = Tempo.#proto(shape.parse.snippet)[Token.evt]?.source; - if (!Tempo.#isLocal(shape) || groups !== protoEvt) { - if (Tempo.#isLocal(shape) && !Tempo.#hasOwn(shape.parse, 'snippet')) - shape.parse.snippet = Tempo.#create(shape.parse, 'snippet'); - - Object.defineProperty(shape.parse.snippet, Token.evt, { - value: new RegExp(groups), - enumerable: true, - writable: true, - configurable: true - }); + const protoEvt = proto(shape.parse.snippet)[Token.evt]?.source; + if (!isLocal(shape) || groups !== protoEvt) { + if (isLocal(shape) && !hasOwn(shape.parse, 'snippet')) + shape.parse.snippet = create(shape.parse, 'snippet'); + + setProperty(shape.parse.snippet, Token.evt, new RegExp(groups)); } } if (shape.parse.isMonthDay) { - const protoDt = Tempo.#proto(shape.parse.layout)[Token.dt] as string; + const protoDt = proto(shape.parse.layout)[Token.dt] as string; const localDt = '{mm}{sep}?{dd}({sep}?{yy})?|{mod}?({evt})'; - if (!Tempo.#isLocal(shape) || localDt !== protoDt) { - if (Tempo.#isLocal(shape) && !Tempo.#hasOwn(shape.parse, 'layout')) - shape.parse.layout = Tempo.#create(shape.parse, 'layout'); - - Object.defineProperty(shape.parse.layout, Token.dt, { - value: localDt, - enumerable: true, - writable: true, - configurable: true - }); + if (!isLocal(shape) || localDt !== protoDt) { + if (isLocal(shape) && !hasOwn(shape.parse, 'layout')) + shape.parse.layout = create(shape.parse, 'layout'); + + setProperty(shape.parse.layout, Token.dt, localDt); } } } @@ -171,7 +169,7 @@ export class Tempo { // TODO: check all Layouts which reference "{per}" and update them static #setPeriods(shape: Internal.State) { const periods = ownEntries(shape.parse.period, true); - if (Tempo.#isLocal(shape) && !Tempo.#hasOwn(shape.parse, 'period')) + if (isLocal(shape) && !hasOwn(shape.parse, 'period')) return; // no local change needed const src = (shape.config.scope ?? "global").substring(0, 1); // 'g'lobal or 'l'ocal @@ -180,17 +178,12 @@ export class Tempo { .join('|') // make an 'or' pattern for the period-keys if (groups) { - const protoPer = Tempo.#proto(shape.parse.snippet)[Token.per]?.source; - if (!Tempo.#isLocal(shape) || groups !== protoPer) { - if (Tempo.#isLocal(shape) && !Tempo.#hasOwn(shape.parse, 'snippet')) - shape.parse.snippet = Tempo.#create(shape.parse, 'snippet'); - - Object.defineProperty(shape.parse.snippet, Token.per, { - value: new RegExp(groups), - enumerable: true, - writable: true, - configurable: true - }); + const protoPer = proto(shape.parse.snippet)[Token.per]?.source; + if (!isLocal(shape) || groups !== protoPer) { + if (isLocal(shape) && !hasOwn(shape.parse, 'snippet')) + shape.parse.snippet = create(shape.parse, 'snippet'); + + setProperty(shape.parse.snippet, Token.per, new RegExp(groups)); } } } @@ -214,7 +207,7 @@ export class Tempo { static #isMonthDay(shape: Internal.State) { const monthDay = [...asArray(Tempo.#global.parse.mdyLocales)]; - if (Tempo.#isLocal(shape) && Tempo.#hasOwn(shape.parse, 'mdyLocales')) + if (isLocal(shape) && hasOwn(shape.parse, 'mdyLocales')) monthDay.push(...shape.parse.mdyLocales); // append local mdyLocales (not overwrite global) return monthDay.some(mdy => { @@ -278,7 +271,6 @@ export class Tempo { * This is needed because we allow the user to flexibly provide detail as {[key]:val} or {[key]:val}[] or [key,val][] */ static #setConfig(shape: Internal.State, ...options: t.Options[]) { - const providedOptions: t.Options = Object.assign({}, ...options); const storeKey = providedOptions.store; const mergedOptions: t.Options = storeKey @@ -322,8 +314,8 @@ export class Tempo { case 'event': case 'period': // lazy-shadowing: only create local object if it doesn't already exist on local shape - if (!Tempo.#hasOwn(shape.parse, optKey)) - shape.parse[optKey] = Tempo.#create(shape.parse, optKey); + if (!hasOwn(shape.parse, optKey)) + shape.parse[optKey] = create(shape.parse, optKey); const rule = shape.parse[optKey]; if (['snippet', 'layout'].includes(optKey)) { @@ -356,12 +348,17 @@ export class Tempo { case 'timeZone': { const zone = String(arg.value).toLowerCase() as t.TIMEZONE; - Object.defineProperty(shape.config, 'timeZone', { value: enums.TIMEZONE[zone] ?? arg.value, writable: true, configurable: true, enumerable: true }); + setProperty(shape.config, 'timeZone', enums.TIMEZONE[zone] ?? arg.value); + break; + } + + case 'calendar': { + setProperty(shape.config, 'calendar', String(arg.value)); break; } case 'formats': - if (Tempo.#isLocal(shape) && !Tempo.#hasOwn(shape.config, 'formats')) + if (isLocal(shape) && !hasOwn(shape.config, 'formats')) shape.config.formats = shape.config.formats.extend({}) as t.FormatRegistry; // shadow parent prototype if (isObject(arg.value)) @@ -369,7 +366,7 @@ export class Tempo { break; case 'discovery': - Object.defineProperty(shape.config, 'discovery', { value: isSymbol(optVal) ? Symbol.keyFor(optVal) as string : optVal, writable: true, configurable: true, enumerable: true }); + setProperty(shape.config, 'discovery', isSymbol(optVal) ? Symbol.keyFor(optVal) as string : optVal); break; case 'plugins': @@ -385,13 +382,13 @@ export class Tempo { break; // internal anchor used for relativity parsing default: // else just add to config - Object.defineProperty(shape.config, optKey, { value: optVal, writable: true, configurable: true, enumerable: true }); + setProperty(shape.config, optKey, optVal); break; } }) const isMonthDay = Tempo.#isMonthDay(shape); - if (isMonthDay !== Tempo.#proto(shape.parse).isMonthDay)// this will always set on 'global', conditionally on 'local' + if (isMonthDay !== proto(shape.parse).isMonthDay) // this will always set on 'global', conditionally on 'local' shape.parse.isMonthDay = isMonthDay; shape.config.sphere = Tempo.#setSphere(shape, mergedOptions); @@ -464,7 +461,7 @@ export class Tempo { snippet[Token.afx] = new RegExp(`((s)? (?${Match.affix.source}))?${snippet[Token.sep].source}?`); // ensure we have our own Map to mutate (shadow if local) - if (!Tempo.#hasOwn(shape.parse, 'pattern')) + if (!hasOwn(shape.parse, 'pattern')) shape.parse.pattern = new Map(shape.parse.pattern); // preserve inherited entries while shadowing const layouts = { ...shape.parse.layout }; // shallow-copy to include inherited properties @@ -495,10 +492,7 @@ export class Tempo { ...[Token.slk], ...Tempo.#terms.map(t => t.key), ...Tempo.#terms.map(t => t.scope), - 'am', 'pm', 'ago', 'hence', 'this', 'next', 'prev', 'last', 'from', 'now', 'today', 'yesterday', 'tomorrow', 'start', 'mid', 'end', - 'year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond', - 'years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds', 'milliseconds', 'microseconds', 'nanoseconds', - 'mondays', 'tuesdays', 'wednesdays', 'thursdays', 'fridays', 'saturdays', 'sundays' + ...Guard ].filter(w => isString(w) || isSymbol(w)) .map(w => (isSymbol(w) ? w.description : (w as string))!.toLowerCase()) .filter(Boolean); @@ -564,6 +558,12 @@ export class Tempo { } } + /** @internal resolve a global discovery config object by symbol key */ + static #getConfig(sym: symbol) { + const discovery = (globalThis as Record)[sym]; + return proxify(omit({ ...discovery, scope: 'discovery' }, 'value')); + } + /** * Unified loader for library extensions. * @@ -845,11 +845,6 @@ export class Tempo { return proxify(out); } - /** global discovery configuration */ - static #getConfig(sym: symbol) { - const discovery = (globalThis as Record)[sym]; - return proxify(omit({ ...discovery, scope: 'discovery' }, 'value')); - } /** global discovery configuration */ static get discovery() { @@ -933,9 +928,50 @@ export class Tempo { return !!(instance?.[sym.$isTempo]) } + static { // Static initialization block to sequence the bootstrap phase + // Define the reactive register hook + registerHook(sym.$Register, (plugin: t.Plugin | t.Plugin[]) => { if (!Tempo.isExtending) Tempo.extend(plugin) }); + + Tempo.init(); // synchronously initialize the library + } + + /** constructor tempo */ #tempo?: t.DateTime; + /** constructor options */ #options = {} as t.Options; + /** instantiation Temporal Instant */ #now: Temporal.Instant; + /** underlying Temporal ZonedDateTime */ #zdt!: Temporal.ZonedDateTime; + /** indicator that the instance failed to parse */ #errored = false; + /** temporary anchor used during parsing */ #anchor?: Temporal.ZonedDateTime | undefined; + /** prebuilt formats, for convenience */ #fmt!: any; + /** mapping of terms to their resolved values */ #term!: any; + /** a collection of parse rule-matches */ #matches: Internal.Match[] | undefined; + /** current parsing depth to manage state isolation */ #parseDepth = 0; + /** current mutation depth to manage infinite recursion */#mutateDepth = 0; + /** instance values to complement static values */ #local = { + /** instance configuration */ config: { [lib.$Logify]: true } as unknown as Internal.Config, + /** instance parse rules (only populated if provided) */ parse: { result: [] as Internal.Match[] } as Internal.Parse + } as Internal.State; + + /** internal access to instance private state */ + [sym.$Internal]() { + const self = this; + return { + get zdt() { return self.#zdt }, + set zdt(val) { self.#zdt = val }, + get errored() { return self.#errored }, + set errored(val) { self.#errored = val }, + get parseDepth() { return self.#parseDepth }, + set parseDepth(val) { self.#parseDepth = val }, + get mutateDepth() { return self.#mutateDepth }, + set mutateDepth(val) { self.#mutateDepth = val }, + get matches() { return self.#matches }, + set matches(val) { self.#matches = val }, + get options() { return self.#options }, + parse: (tempo: any, anchor: any, term?: any) => self.#parse(tempo, anchor, term) + } + } + /** allow for auto-convert of Tempo to BigInt, Number or String */ [Symbol.toPrimitive](hint?: 'string' | 'number' | 'default') { - // Tempo.#dbg.info(this.config, getType(this), '.hint: ', hint); switch (hint) { case 'string': return this.toString(); // ISO 8601 string case 'number': return this.epoch.ms; // Unix epoch (milliseconds) @@ -954,27 +990,6 @@ export class Tempo { get [sym.$isTempo]() { return true } - /** constructor tempo */ #tempo?: t.DateTime; - /** constructor options */ #options = {} as t.Options; - /** instantiation Temporal Instant */ #now: Temporal.Instant; - /** underlying Temporal ZonedDateTime */ #zdt!: Temporal.ZonedDateTime; - /** indicator that the instance failed to parse */ #errored = false; - /** temporary anchor used during parsing */ #anchor?: Temporal.ZonedDateTime | undefined; - /** prebuilt formats, for convenience */ #fmt!: any; - /** mapping of terms to their resolved values */ #term!: any; - /** instance values to complement static values */ #local = { - /** instance configuration */ config: { [lib.$Logify]: true } as unknown as Internal.Config, - /** instance parse rules (only populated if provided) */ parse: { result: [] as Internal.Match[] } as Internal.Parse - } as Internal.State; - - /** Static initialization block to sequence the bootstrap phase */ - static { - // Define the reactive register hook - registerHook(sym.$Register, (plugin: t.Plugin | t.Plugin[]) => { if (!Tempo.isExtending) Tempo.extend(plugin) }); - - Tempo.init(); // synchronously initialize the library - } - /** * Instantiates a new `Tempo` object. * @@ -1002,8 +1017,8 @@ export class Tempo { this.#term = this.#setDelegator('term'); // initialize the term-delegator this.#anchor = this.#options.anchor; - if ((this.#options as any)[sym.$errored]) - this.#errored = true; + if ((this.#options as any)[sym.$errored]) this.#errored = true; + if (isNumber((this.#options as any)[sym.$mutateDepth])) this.#mutateDepth = (this.#options as any)[sym.$mutateDepth]; if (!this.#local.parse.lazy) this.#ensureParsed(); // attempt to interpret immediately (if not lazy) } @@ -1207,8 +1222,8 @@ export class Tempo { markConfig(out); - if (!Object.hasOwn(out, 'mode')) Object.defineProperty(out, 'mode', { value: this.#local.parse.mode, enumerable: true, writable: true, configurable: true }); - if (!Object.hasOwn(out, 'lazy')) Object.defineProperty(out, 'lazy', { value: this.#local.parse.lazy, enumerable: true, writable: true, configurable: true }); + if (!Object.hasOwn(out, 'mode')) setProperty(out, 'mode', this.#local.parse.mode); + if (!Object.hasOwn(out, 'lazy')) setProperty(out, 'lazy', this.#local.parse.lazy); Object.defineProperty(out, 'toJSON', { value: () => Object.fromEntries( // bare-bones: only show local overrides @@ -1261,8 +1276,8 @@ export class Tempo { return interpret(this, 'duration', undefined, 'since', ...args); } - /** returns a new `Tempo` with specific duration added. */add(tempo?: t.Add, options?: t.Options) { this.#ensureParsed(); return this.#add(tempo, options); } - /** returns a new `Tempo` with specific offsets. */ set(tempo?: t.Set, options?: t.Options) { this.#ensureParsed(); return this.#set(tempo, options); } + /** returns a new `Tempo` with specific duration added. */add(tempo?: t.Add, options?: t.Options): Tempo { this.#ensureParsed(); return interpret(this, 'MutateModule', () => { throw new Error('Tempo MutateModule not loaded. Did you forget to Tempo.extend(MutateModule)?') }, 'add', tempo, options); } + /** returns a new `Tempo` with specific offsets. */ set(tempo?: t.Set, options?: t.Options): Tempo { this.#ensureParsed(); return interpret(this, 'MutateModule', () => { throw new Error('Tempo MutateModule not loaded. Did you forget to Tempo.extend(MutateModule)?') }, 'set', tempo, options); } /** returns a clone of the current `Tempo` instance. */ clone() { return new this.#Tempo(this, this.config) } /** returns the underlying Temporal.ZonedDateTime */ @@ -1299,12 +1314,7 @@ export class Tempo { Object.assign(this.#local.config, { scope: 'local' }); this.#local.parse = markConfig(Object.create(Tempo.#global.parse)); - Object.defineProperty(this.#local.parse, 'result', { - value: [...(options.result ?? [])], - writable: true, - enumerable: true, - configurable: true - }); + setProperty(this.#local.parse, 'result', [...(options.result ?? [])]); Tempo.#setConfig(this.#local, options); // set #local config } @@ -1419,12 +1429,7 @@ export class Tempo { if (Reflect.isExtensible(this.#local.parse)) { // ensure 'result' array is present and append our discovered matches if (isUndefined(this.#local.parse.result)) { - Object.defineProperty(this.#local.parse, 'result', { - value: [...(this.#matches ?? [])], - writable: true, - enumerable: true, - configurable: true - }); + setProperty(this.#local.parse, 'result', [...(this.#matches ?? [])]); } else { this.#local.parse.result.push(...(this.#matches ?? [])); } @@ -1770,325 +1775,6 @@ export class Tempo { return dateTime; } - - #add = (args?: any, options: t.Options = {}) => { - if (!isZonedDateTime(this.#zdt)) return this; - - const overrides = { - timeZone: options.timeZone ?? this.tz, - calendar: options.calendar ?? this.cal, - sphere: options.sphere ?? this.config.sphere - } as Required; - - let zdt = this.#zdt.withTimeZone(overrides.timeZone).withCalendar(overrides.calendar); - this.#parseDepth++; - - const isRoot = this.#parseDepth === 1; - if (isRoot) this.#matches = [...this.parse.result]; - - try { - if (isDefined(args)) { - // 1. Intercept Shorthand String (e.g. .add('#quarter')) - if (isString(args) && args.startsWith('#')) { - zdt = resolveTermMutation(Tempo, this, 'add', args, 1, zdt); - if (zdt === null) this.#errored = true; - } - // 2. Process Mutation Object - else if (isObject(args) && args.constructor === Object) { - const mutate = 'add'; - zdt = Object.entries(args ?? {}) // loop through each mutation - .reduce((zdt, [unit, offset]) => { // apply each mutation to preceding one - if (++Tempo.#mutateDepth > 100) { // Safety-Valve: recursion guard - Tempo.#dbg.error(this.#local.config, `Infinite recursion detected in mutation engine for ${unit}`); - this.#errored = true; - return zdt; - } - try { - if (unit === 'timeZone' || unit === 'calendar') return zdt; - - const isTerm = unit.startsWith('#'); - const name = isTerm ? unit.slice(1) : unit; - const isTermPlugin = !isTerm && !!findTermPlugin(name as string); - - if (isTerm || isTermPlugin) { - const res = resolveTermMutation(Tempo, this, mutate, unit, offset, zdt); - if (res === null) this.#errored = true; - return res ?? zdt; - } - - const single = singular((enums.ELEMENT[unit as t.Element] ?? unit) as string); - const plural = single + 's'; - - switch (`${mutate}.${single}`) { - case 'add.year': - case 'add.month': - case 'add.week': - case 'add.day': - case 'add.hour': - case 'add.minute': - case 'add.second': - case 'add.millisecond': - case 'add.microsecond': - case 'add.nanosecond': - return zdt.add({ [plural]: offset }); - - default: - Tempo.#dbg.error(this.#local.config, `Unexpected method(${mutate}), unit(${unit}) and offset(${offset})`); - this.#errored = true; - return zdt; - } - } finally { - Tempo.#mutateDepth--; - } - }, zdt); - } - else { - return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, result: this.#matches, anchor: zdt, [sym.$errored]: this.#errored }); - } - } - - if (this.#errored) { - const res = new this.#Tempo(null, { ...this.#options, ...overrides, ...options, result: this.#matches, [sym.$errored]: true }); - return res; - } - - return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, result: this.#matches, anchor: zdt, [sym.$errored]: this.#errored } as any); - - } finally { - if (isRoot) this.#matches = undefined; - this.#parseDepth--; - } - } - - /** mutate the date-time by setting specific offsets */ - #set = (args?: any, options: t.Options = {}) => { - if (!isZonedDateTime(this.#zdt)) return this; - - const overrides = { - timeZone: options.timeZone ?? this.tz, - calendar: options.calendar ?? this.cal, - sphere: options.sphere ?? this.config.sphere - } as Required; - - if (isObject(args) && args.constructor === Object) { - const { timeZone, calendar } = args as Temporal.ZonedDateTimeLikeObject; - if (timeZone) overrides.timeZone = timeZone; - if (calendar) overrides.calendar = calendar; - } - - // Shift the current instance to the target timezone first to ensure - // that any relative keywords (like 'tomorrow') are resolved correctly. - let zdt = this.#zdt.withTimeZone(overrides.timeZone).withCalendar(overrides.calendar); - this.#parseDepth++; - const isRoot = this.#parseDepth === 1; - if (isRoot) this.#matches = [...this.parse.result]; - - try { - if (isDefined(args)) { - // 1. Intercept Shorthand String (e.g. .set('#morning') or .set('#zodiac.aries')) - if (isString(args) && args.startsWith('#')) { - zdt = resolveTermMutation(Tempo, this, 'start', args, args, zdt); - if (zdt === null) this.#errored = true; - } - // 2. Process Mutation Object - else if (isObject(args) && args.constructor === Object) { - - zdt = Object.entries(args ?? {}) // loop through each mutation - .reduce((zdt, [key, adjust]) => { // apply each mutation to preceding one - if (key === 'timeZone' || key === 'calendar') return zdt; - - const { mutate, offset, single, term } = ((key) => { - switch (key) { - case 'start': - case 'mid': - case 'end': - { - const val = adjust?.toString() ?? ''; - const isTerm = val.startsWith('#'); - const single = isTerm ? 'term' : singular(val); - return { mutate: key as Tempo.Mutate, offset: val, single, term: isTerm ? val : undefined } - } - default: - { - const isTerm = key.startsWith('#'); - const name = isTerm ? key.slice(1) : key; - const isTermPlugin = !isTerm && !!findTermPlugin(name as string); - const single = isTerm || isTermPlugin ? 'term' : singular(name as string); - return { mutate: 'set', offset: adjust, single, term: isTerm ? (key as string) : (isTermPlugin ? key : undefined) } - } - } - })(key); // IIFE to analyze arguments - - switch (`${mutate}.${single}`) { - case 'start.term': - case 'mid.term': - case 'end.term': - { - const res = resolveTermMutation(Tempo, this, mutate, term!, adjust, zdt); - if (res === null) this.#errored = true; - return res ?? zdt; - } - - case 'set.timeZone': - return zdt.withTimeZone(offset as Temporal.TimeZoneLike); - case 'set.calendar': - return zdt.withCalendar(offset as Temporal.CalendarLike); - - case 'set.term': - case 'set.period': - case 'set.time': - case 'set.date': - case 'set.event': - case 'set.dow': // set day-of-week by number - case 'set.wkd': // set day-of-week by name - { - const res2 = this.#parse(offset as any, zdt, term); - if (isUndefined(res2)) this.#errored = true; - return res2 ?? zdt; - } - - case 'set.year': - case 'set.month': - // case 'set.week': // not defined - case 'set.day': - case 'set.hour': - case 'set.minute': - case 'set.second': - case 'set.millisecond': - case 'set.microsecond': - case 'set.nanosecond': - return zdt - .with({ [single]: offset }); - - case 'set.yy': - case 'set.mm': - // case 'set.ww': // not defined - case 'set.dd': - case 'set.hh': - case 'set.mi': - case 'set.ss': - case 'set.ms': - case 'set.us': - case 'set.ns': - { - const value = Tempo.ELEMENT[single as t.Element]; - return zdt - .with({ [value]: offset }); - } - - case 'start.year': - return zdt - .with({ month: Tempo.MONTH.Jan, day: 1 }) - .startOfDay(); - - case 'start.month': - return zdt - .with({ day: 1 }) - .startOfDay(); - - case 'start.week': - return zdt - .add({ days: -(this.dow - Tempo.WEEKDAY.Mon) }) - .startOfDay(); - - case 'start.day': - return zdt - .startOfDay(); - - case 'start.hour': - case 'start.minute': - case 'start.second': - return zdt - .round({ smallestUnit: offset as 'hour' | 'minute' | 'second', roundingMode: 'trunc' }); - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - case 'mid.year': - return zdt - .with({ month: Tempo.MONTH.Jul, day: 1 }) - .startOfDay(); - - case 'mid.month': - return zdt - .with({ day: Math.trunc(zdt.daysInMonth / 2) }) - .startOfDay(); - - case 'mid.week': - return zdt - .add({ days: -(this.dow - Tempo.WEEKDAY.Thu) }) - .startOfDay(); - - case 'mid.day': - return zdt - .round({ smallestUnit: 'day', roundingMode: 'trunc' }) - .add({ hours: 12 }); - - case 'mid.hour': - return zdt - .round({ smallestUnit: 'hour', roundingMode: 'trunc' }) - .add({ minutes: 30 }); - - case 'mid.minute': - return zdt - .round({ smallestUnit: 'minute', roundingMode: 'trunc' }) - .add({ seconds: 30 }); - - case 'mid.second': - return zdt - .round({ smallestUnit: 'second', roundingMode: 'trunc' }) - .add({ milliseconds: 500 }); - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - case 'end.year': - return zdt - .add({ years: 1 }) - .with({ month: Tempo.MONTH.Jan, day: 1 }) - .startOfDay() - .subtract({ nanoseconds: 1 }); - - case 'end.month': - return zdt - .add({ months: 1 }) - .with({ day: 1 }) - .startOfDay() - .subtract({ nanoseconds: 1 }); - - case 'end.week': - return zdt - .add({ days: (Tempo.WEEKDAY.Sun - this.dow) + 1 }) - .startOfDay() - .subtract({ nanoseconds: 1 }); - - case 'end.day': - case 'end.hour': - case 'end.minute': - case 'end.second': - return zdt - .round({ smallestUnit: offset as 'day' | 'hour' | 'minute' | 'second', roundingMode: 'ceil' }) - .subtract({ nanoseconds: 1 }); - default: - Tempo.#dbg.error(this.#local.config, `Unexpected method(${mutate}), unit(${adjust}) and offset(${single})`); - return zdt; - } - }, zdt) // start reduce with the shifted zonedDateTime - if (zdt === null) this.#errored = true; - } - else { - return new this.#Tempo(args, { ...this.#options, ...overrides, ...options, result: this.#matches, anchor: zdt, [sym.$errored]: this.#errored }); - } - } - - if (this.#errored) { - const res = new this.#Tempo(null, { ...this.#options, ...overrides, ...options, result: this.#matches, [sym.$errored]: true }); - return res; - } - - return new this.#Tempo(zdt, { ...this.#options, ...overrides, ...options, result: this.#matches, anchor: zdt, [sym.$errored]: this.#errored } as any); - } finally { - if (isRoot) this.#matches = undefined; - this.#parseDepth--; - } - } - } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/packages/tempo/src/tempo.default.ts b/packages/tempo/src/tempo.default.ts index 6c10f212..0405995e 100644 --- a/packages/tempo/src/tempo.default.ts +++ b/packages/tempo/src/tempo.default.ts @@ -41,7 +41,7 @@ export const Match = proxify({ /** Tempo Symbol registry */ export const Token = looseIndex()({ - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Snippet Symbols + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Snippet Symbols /** year */ yy: Symbol('yy'), /** ISO yearOfWeek */ yw: Symbol('yw'), /** month */ mm: Symbol('mm'), @@ -62,7 +62,7 @@ export const Token = looseIndex()({ /** Tempo event */ evt: Symbol('evt'), /** Tempo period */ per: Symbol('per'), /** time zone offset */ tzd: Symbol('tzd'), - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Layout Symbols + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Layout Symbols /** date */ dt: Symbol('date'), /** time */ tm: Symbol('time'), /** date and time */ dtm: Symbol('dateTime'), @@ -144,11 +144,11 @@ export const Event = looseIndex()({ 'xmas': '25 Dec', 'now': function (this: Tempo) { return this.toNow() }, 'today': function (this: Tempo) { - const { year, month, day } = this.toNow(); - return this.toDateTime().with({ year, month, day }) + const { year, month, day } = this.toNow(); // create a 'today' Tempo + return this.toDateTime().with({ year, month, day }); // return just the date-components }, - 'tomorrow': function (this: Tempo) { return this.add({ days: 1 }) }, // tomorrow at current time - 'yesterday': function (this: Tempo) { return this.add({ days: -1 }) }, // yesterday at current time + 'tomorrow': function (this: Tempo) { return this.add({ days: 1 }) }, // tomorrow at current time + 'yesterday': function (this: Tempo) { return this.add({ days: -1 }) }, // yesterday at current time }); export type Event = typeof Event @@ -170,6 +170,14 @@ export const Period = looseIndex()({ export type Period = typeof Period +/** Reasonable default options for initial Tempo config */ +export const Guard = [ + 'am', 'pm', 'ago', 'hence', 'this', 'next', 'prev', 'last', 'from', 'now', 'today', 'yesterday', 'tomorrow', 'start', 'mid', 'end', + 'year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond', + 'years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds', 'milliseconds', 'microseconds', 'nanoseconds', + 'mondays', 'tuesdays', 'wednesdays', 'thursdays', 'fridays', 'saturdays', 'sundays' +] + /** Reasonable default options for initial Tempo config */ export const Default = secure({ /** log to console */ debug: false, diff --git a/packages/tempo/src/tempo.index.ts b/packages/tempo/src/tempo.index.ts index f965b487..9ad449eb 100644 --- a/packages/tempo/src/tempo.index.ts +++ b/packages/tempo/src/tempo.index.ts @@ -2,22 +2,13 @@ import { Tempo } from './tempo.class.js'; import { TermsModule } from '#tempo/term'; import { DurationModule } from '#tempo/duration'; import { FormatModule } from '#tempo/format'; -import { TickerModule } from '#tempo/ticker'; +import { MutateModule } from '#tempo/mutate'; // Batteries Included: Register standard modules -Tempo.extend(TermsModule); -Tempo.extend(DurationModule); -Tempo.extend(FormatModule); -Tempo.extend(TickerModule); +Tempo.extend([MutateModule, FormatModule, DurationModule, TermsModule]); export * from './tempo.class.js'; export { default as enums } from './tempo.enum.js'; // Tempo enumerators -// export items specifically from #library if they are required in the Tempo API -export { enumify } from '#library/enumerate.library.js'; -export { Pledge } from '#library/pledge.class.js'; -export { stringify, objectify, cloneify } from '#library/serialize.library.js'; -export { getType } from '#library/type.library.js'; - // export common patterns and symbols for custom Layouts -export { Token, Snippet, Match, Default } from './tempo.default.js'; +export { Token, Snippet, Match, Default, Guard } from './tempo.default.js'; diff --git a/packages/tempo/src/tempo.symbol.ts b/packages/tempo/src/tempo.symbol.ts index 19552dd4..307425fc 100644 --- a/packages/tempo/src/tempo.symbol.ts +++ b/packages/tempo/src/tempo.symbol.ts @@ -18,6 +18,8 @@ const $logDebug = Symbol.for('$TempoLogDebug'); const $termError = Symbol.for('$TempoTermError'); const $errored = Symbol.for('$TempoErrored'); +const $Internal = Symbol.for('$TempoInternal'); +const $mutateDepth = Symbol.for('$TempoMutateDepth'); /** * Define a reactive registration hook on a global symbol. @@ -48,7 +50,9 @@ const _sym = { /** key for contextual Error Logging */ $logError, /** key for contextual Debug Logging */ $logDebug, /** key for centralized Term Error dispatching */ $termError, - /** internal key for signaling pre-errored state in constructor */ $errored + /** internal key for signaling pre-errored state in constructor */ $errored, + /** internal key for accessing private instance state */ $Internal, + /** internal key for tracking mutation recursion depth */ $mutateDepth, } as const; export default _sym; diff --git a/packages/tempo/test/instance.set.test.ts b/packages/tempo/test/instance.set.test.ts index 30aeca5d..de35e1d8 100644 --- a/packages/tempo/test/instance.set.test.ts +++ b/packages/tempo/test/instance.set.test.ts @@ -14,7 +14,7 @@ describe(`${label} set method`, () => { test('sets via parsing string (e.g. period)', () => { const t = new Tempo('2024-05-20 08:00'); - const t2 = t.set({ event: 'afternoon' }); // afternoon -> 15:00 usually + const t2 = t.set({ event: 'afternoon' }); // afternoon -> 15:00 usually expect(t2.hh).toBe(15); }); @@ -45,4 +45,18 @@ describe(`${label} set method`, () => { expect(end.hh).toBe(23); }); + test('today/tomorrow/yesterday events via set', () => { + const t = new Tempo('2024-05-20 12:34:56'); + const todayObserved = t.set('today'); + const now = new Tempo(); + expect(todayObserved.yy).toBe(now.yy); + expect(todayObserved.mm).toBe(now.mm); + expect(todayObserved.dd).toBe(now.dd); + expect(todayObserved.hh).toBe(12); // preserved time + + const tomorrow = t.set('tomorrow'); + expect(tomorrow.dd).toBe(21); + expect(tomorrow.hh).toBe(12); // preserved time + }); + }); diff --git a/vitest.workspace.ts b/vitest.workspace.ts index 901ef834..d534a529 100644 --- a/vitest.workspace.ts +++ b/vitest.workspace.ts @@ -3,6 +3,8 @@ import { fileURLToPath } from 'node:url' import { dirname, resolve } from 'node:path' const __dirname = dirname(fileURLToPath(import.meta.url)); +const polyfill = resolve(__dirname, 'packages/tempo/scripts/setup.polyfill.ts'); + export default defineWorkspace([ { @@ -15,7 +17,7 @@ export default defineWorkspace([ '**/test/**/*.core.test.ts', '**/test/**/*.lazy.test.ts' ], - setupFiles: [resolve(__dirname, 'packages/tempo/scripts/setup.full.ts')], + setupFiles: [polyfill], } }, { @@ -24,7 +26,7 @@ export default defineWorkspace([ name: 'Tempo: Core', include: ['**/test/**/*.core.test.ts', '**/test/**/*.lazy.test.ts'], exclude: ['**/node_modules/**'], - setupFiles: [], + setupFiles: [polyfill], } } ]) From ec22174e7079959a73c8b0a3cf5e28be35efe81f Mon Sep 17 00:00:00 2001 From: Michael McRae Date: Thu, 16 Apr 2026 07:47:51 +1000 Subject: [PATCH 02/18] fix resetRegistry regression --- .../library/src/common/function.library.ts | 13 ++-- .../src/common/international.library.ts | 26 +++++-- packages/library/src/common/proxy.library.ts | 4 ++ .../library/src/common/reflection.library.ts | 13 +++- packages/tempo/doc/tempo.api.md | 11 ++- packages/tempo/doc/tempo.config.md | 4 +- packages/tempo/doc/tempo.shorthand.md | 12 ++-- packages/tempo/doc/tempo.types.md | 2 + .../src/plugin/module/module.duration.ts | 60 +++++++--------- .../tempo/src/plugin/module/module.mutate.ts | 3 - .../tempo/src/plugin/module/module.term.ts | 70 +++++++++++++++++++ packages/tempo/src/plugin/plugin.util.ts | 37 +++++++--- .../tempo/src/plugin/term/term.quarter.ts | 2 +- packages/tempo/src/tempo.class.ts | 24 +++++-- packages/tempo/src/tempo.default.ts | 8 ++- packages/tempo/src/tempo.enum.ts | 10 +++ packages/tempo/src/tempo.index.ts | 10 ++- packages/tempo/src/tempo.symbol.ts | 4 ++ packages/tempo/src/tempo.type.ts | 2 + packages/tempo/test-slick.test.ts | 14 ++++ packages/tempo/test-slick.ts | 9 +++ packages/tempo/test/dispose.core.test.ts | 3 +- packages/tempo/test/fiscal-cycle.core.test.ts | 28 ++++---- .../tempo/test/instance.since.rtf.test.ts | 44 ++++++++++++ packages/tempo/test/lazy.test.ts | 3 + packages/tempo/test/number-words.core.test.ts | 1 + packages/tempo/test/repro_crash.core.test.ts | 23 ------ .../tempo/test/term-dispatch.core.test.ts | 5 +- packages/tempo/test/term-shorthand.test.ts | 26 +++---- packages/tempo/test/ticker.term.core.test.ts | 9 ++- packages/tempo/test/timezone_offset.test.ts | 1 + 31 files changed, 345 insertions(+), 136 deletions(-) create mode 100644 packages/tempo/test-slick.test.ts create mode 100644 packages/tempo/test-slick.ts create mode 100644 packages/tempo/test/instance.since.rtf.test.ts delete mode 100644 packages/tempo/test/repro_crash.core.test.ts diff --git a/packages/library/src/common/function.library.ts b/packages/library/src/common/function.library.ts index 388311a0..95655346 100644 --- a/packages/library/src/common/function.library.ts +++ b/packages/library/src/common/function.library.ts @@ -40,19 +40,18 @@ export function curry(fn: (...args: Args) => Res): Curr } /** generic function to memoize repeated function calls */ -export function memoizeFunction any>(fn: F) { +export function memoizeFunction any>(fn: F): F { const cache = new Map>(); // using a Map for better key handling than plain objects - return function (...args: unknown[]) { - const key = JSON.stringify(args); // create a unique key from arguments + return function (this: any, ...args: Parameters): ReturnType { + const key = JSON.stringify(args, (_, v) => v === undefined ? '__und__' : v); if (!cache.has(key)) { - // @ts-ignore const result = fn.apply(this, args); // call the original function with the correct context cache.set(key, Object.freeze(result)); // stash the result for subsequent calls } - return cache.get(key); - } + return cache.get(key)!; + } as F; } const wm = new WeakMap>(); @@ -69,7 +68,7 @@ export function memoizeMethod, T = any>(name: PropertyKe configurable: false, writable: false, value: function (this: Context, ...args: any[]) { - const key = `${String(name)},${JSON.stringify(args)}`; + const key = `${String(name)},${JSON.stringify(args, (_, v) => v === undefined ? '__und__' : v)}`; let cache = wm.get(this as any); if (!cache) { // add a new Map into the WeakMap diff --git a/packages/library/src/common/international.library.ts b/packages/library/src/common/international.library.ts index 125c2209..97ecbbd0 100644 --- a/packages/library/src/common/international.library.ts +++ b/packages/library/src/common/international.library.ts @@ -1,4 +1,20 @@ import { getOffsets } from '#library/temporal.library.js'; +import { memoizeFunction } from '#library/function.library.js'; + +/** memoized helper for Intl.RelativeTimeFormat instances */ +const getRTF = memoizeFunction((locale?: string, style: Intl.RelativeTimeFormatStyle = 'narrow') => { + return new Intl.RelativeTimeFormat(locale, { style }); +}); + +/** memoized helper for Intl.ListFormat instances */ +const getLF = memoizeFunction((locale?: string, type: Intl.ListFormatType = 'conjunction', style: Intl.ListFormatStyle = 'long') => { + return new Intl.ListFormat(locale, { type, style }); +}); + +/** memoized helper for Intl.DateTimeFormat instances */ +const getDTF = memoizeFunction((locale?: string) => { + return new Intl.DateTimeFormat(locale); +}); /** * International Cookbook @@ -6,8 +22,8 @@ import { getOffsets } from '#library/temporal.library.js'; */ /** return the system's current TimeZone, Calendar, and Locale */ -export function getResolvedOptions() { - return Intl.DateTimeFormat().resolvedOptions(); +export function getDateTimeFormat() { + return getDTF().resolvedOptions(); } /** return the canonicalized locale string */ @@ -22,7 +38,7 @@ export function canonicalLocale(locale: string) { /** return a localized relative time string (e.g., 'in 2 days') */ export function getRelativeTime(value: number, unit: Intl.RelativeTimeFormatUnit, locale?: string, style: Intl.RelativeTimeFormatStyle = 'narrow') { try { - return new Intl.RelativeTimeFormat(locale, { style }).format(value, unit); + return getRTF(locale, style).format(value, unit); } catch (e) { return `${value} ${unit}`; } @@ -31,14 +47,14 @@ export function getRelativeTime(value: number, unit: Intl.RelativeTimeFormatUnit /** return a localized list string (e.g., 'A, B, and C') */ export function formatList(list: string[], locale?: string, type: Intl.ListFormatType = 'conjunction', style: Intl.ListFormatStyle = 'long') { try { - return new Intl.ListFormat(locale, { type, style }).format(list); + return getLF(locale, type, style).format(list); } catch (e) { return list.join(', '); } } /** try to infer hemisphere using the timezone's daylight-savings setting */ -export function getHemisphere(timeZone: string = getResolvedOptions().timeZone) { +export function getHemisphere(timeZone: string = getDateTimeFormat().timeZone) { try { const { jan, jul } = getOffsets(timeZone); // using default reference-year (2024) for stability diff --git a/packages/library/src/common/proxy.library.ts b/packages/library/src/common/proxy.library.ts index 51bad36e..5df1998d 100644 --- a/packages/library/src/common/proxy.library.ts +++ b/packages/library/src/common/proxy.library.ts @@ -130,6 +130,10 @@ const assertSafe = (t: any, k: PropertyKey, v: any) => { */ export function secureRef(target: T): T { return new Proxy(target, { + get(t, k) { + if (k === lib.$Target) return t; + return Reflect.get(t, k); + }, set(t, k, v) { assertSafe(t, k, v); return Reflect.set(t, k, v); diff --git a/packages/library/src/common/reflection.library.ts b/packages/library/src/common/reflection.library.ts index 2ad8e5fa..ce4de5e0 100644 --- a/packages/library/src/common/reflection.library.ts +++ b/packages/library/src/common/reflection.library.ts @@ -82,8 +82,17 @@ export function ownEntries(json: T, all = false) { if (!json || typeof json !== 'object') return [] as EntryOf[]; + /** recursively unwrap proxies to get to the base target */ + const unwrap = (obj: any): any => { + let curr = obj; + while (curr && curr[lib.$Target]) { + curr = curr[lib.$Target]; + } + return curr; + } + const getOwn = (obj: any): [PropertyKey, any][] => { // helper function to get own enumerable properties - const tgt = obj[lib.$Target] ?? obj; // unwrap if it's a proxy + const tgt = unwrap(obj); return Reflect.ownKeys(tgt) .filter(key => Object.getOwnPropertyDescriptor(tgt, key)?.enumerable) @@ -101,7 +110,7 @@ export function ownEntries(json: T, all = false) { let proto: any = json; do { - const t = proto[lib.$Target] ?? proto; // CRITICAL: unwrap before checking marker to avoid trap recursion + const t = unwrap(proto); const lvl = getOwn(proto); if (lvl.length) levels.push(lvl); diff --git a/packages/tempo/doc/tempo.api.md b/packages/tempo/doc/tempo.api.md index 142b5cc5..ed42e15b 100644 --- a/packages/tempo/doc/tempo.api.md +++ b/packages/tempo/doc/tempo.api.md @@ -110,8 +110,17 @@ Returns a formatted string or number based on the provided token or named format Calculates the duration until another date-time. - **Returns:** `number` (if a unit is provided) or a `Tempo.Duration` object. -### `tempo.since(since, opts?)` +### `tempo.since(since?: Tempo.DateTime | Tempo.Options, opts?: Tempo.Options)` Returns a human-readable relative time string (e.g., "3 days ago"). +- **Returns:** `string` +- **Options:** + - `rtfStyle`: `'long' | 'short' | 'narrow'` (default: `'narrow'`). See `Intl.RelativeTimeFormatStyle`. + - `rtfFormat`: A pre-configured `Intl.RelativeTimeFormat` instance. +- **Example:** + - `t.since('yesterday')` -> `"1d ago"` + - `t.since('yesterday', { rtfStyle: 'long' })` -> `"1 day ago"` + - `t.since(t2, { rtfFormat: new Intl.RelativeTimeFormat('fr') })` -> `"il y a 2 heures"` +- **Performance:** Tempo memoizes `Intl` object creation internally. For maximum performance in high-volume loops, you can pass a pre-allocated `rtfFormat` instance. ### `tempo.isValid` Returns `true` if the instance represents a valid date-time. diff --git a/packages/tempo/doc/tempo.config.md b/packages/tempo/doc/tempo.config.md index 02300340..cf20f692 100644 --- a/packages/tempo/doc/tempo.config.md +++ b/packages/tempo/doc/tempo.config.md @@ -96,7 +96,9 @@ Tempo.init({ | `calendar` | `string` | `'iso8601'` | Default calendar system. | | `pivot` | `number` | `75` | Cutoff for parsing two-digit years. | | `timeStamp`| `'ms' \| 'ns'` | `'ms'` | Precision for timestamps. | -| `sphere` | `'north' \| 'south'`| Auto-inferred (from time zones' daylight saving rules) Hemisphere for seasonal plugins. | +| `sphere` | `'north' \| 'south'`| Auto-inferred | Hemisphere for seasonal plugins. | +| `rtfFormat` | `Intl.RTF` | `undefined` | Pre-configured relative time formatter. | +| `rtfStyle` | `'long' \| 'short' \| 'narrow'` | `'narrow'` | Default style for relative time formatting. | | `debug` | `boolean` | `false` | Enables internal log tracking. | | `catch` | `boolean` | `false` | If true, invalid inputs return a Void instance. | | `mode` | `'auto' \| 'strict' \| 'defer'` | `'auto'` | Controls the hydration strategy and parsing strictness. | diff --git a/packages/tempo/doc/tempo.shorthand.md b/packages/tempo/doc/tempo.shorthand.md index 775ff99b..bf317f33 100644 --- a/packages/tempo/doc/tempo.shorthand.md +++ b/packages/tempo/doc/tempo.shorthand.md @@ -50,8 +50,8 @@ Aligns the instance forward or backward to the matched term boundary. ### `.add(shorthand)` - Targeted Momentum Advances the instance relative to its current position. -- **Cycle Shifting**: `t.add('#qtr')` moves to the start of the next quarter boundary. -- **Multi-Boundary**: `t.add('#qtr.>2')` moves forward exactly two quarter boundaries. +- **Cycle Shifting**: `t.add('#qtr')` shifts forward by one quarter cycle, preserving the relative duration from cycle start (e.g. 2 months in -> 2 months into next quarter). +- **Multi-Boundary**: `t.add('#qtr.>2')` moves forward exactly two quarter boundaries, preserving the relative cycle offset. - **Step Shifting**: Providing an object like `t.add({ '#qtr': 1 })` allows shifting by a specific number of "slots" or "steps" within the term's cycle while preserving your relative duration from the start of the term. ### `.until(shorthand)` - Duration Forward @@ -85,11 +85,11 @@ const t = new Tempo('2024-12-25', { sphere: 'north' }); // ABSOLUTE: Finds latest Q1 at or before Dec 25th (Jan 1st 2024) t.set('#qtr.q1'); // 2024-01-01 -// DIRECTED: Finds the next Q1 AFTER current (Jan 1st 2025) -t.add('#qtr.>q1'); // 2025-01-01 +// DIRECTED: Finds the next Q1 AFTER current and applies current Q-offset (~85 days) +t.add('#qtr.>q1'); // 2025-03-27 -// MULTI-SHIFT: Advances two boundary quarters forward (Q2 2025) -t.add('#qtr.>2'); // 2025-04-01 +// MULTI-SHIFT: Advances two boundary quarters forward and applies current Q-offset +t.add('#qtr.>2'); // 2025-06-25 ``` --- diff --git a/packages/tempo/doc/tempo.types.md b/packages/tempo/doc/tempo.types.md index 46bc6ea6..2011d199 100644 --- a/packages/tempo/doc/tempo.types.md +++ b/packages/tempo/doc/tempo.types.md @@ -34,6 +34,8 @@ interface Options { catch?: boolean; // If true, invalid inputs return a Void instance store?: string; // Key for persistent storage (e.g., localStorage) sphere?: 'north' | 'south'; // Hemisphere for seasonal plugins + rtfFormat?: Intl.RelativeTimeFormat; // Pre-configured formatter + rtfStyle?: 'long' | 'short' | 'narrow'; // Default style (default: 'narrow') timeStamp?: 'ms' | 'ns'; // Precision for numeric timestamps [key: string]: any; // Allows custom configurations shared with plugins } diff --git a/packages/tempo/src/plugin/module/module.duration.ts b/packages/tempo/src/plugin/module/module.duration.ts index 994a900d..3f1c3237 100644 --- a/packages/tempo/src/plugin/module/module.duration.ts +++ b/packages/tempo/src/plugin/module/module.duration.ts @@ -10,26 +10,15 @@ import type { Tempo } from '../../tempo.class.js'; declare module '../../tempo.class.js' { interface Tempo { - /** time duration until (returns Duration) */ - until(dateTimeOrOpts?: Tempo.DateTime | Tempo.Options, opts?: Tempo.Options): Tempo.Duration; - - /** time duration until (with unit, returns number) */ - until(unit: Tempo.Unit, opts?: Tempo.Options): number; - - /** time duration until another date-time (with unit as second param) */ - until(dateTimeOrOpts: Tempo.DateTime | Tempo.Options, unit: Tempo.Unit): number; - - /** fallback: union of possible returns */ - until(optsOrDate?: Tempo.DateTime | Tempo.Until | Tempo.Options, optsOrUntil?: Tempo.Options | Tempo.Until): number | Tempo.Duration; - - /** time elapsed since (with unit) */ - since(until: Tempo.Until, opts?: Tempo.Options): string; - /** time elapsed since another date-time (with unit) */ - since(dateTimeOrOpts: Tempo.DateTime | Tempo.Options, until: Tempo.Until): string; - /** time elapsed since another date-time (w'out unit) */ - since(dateTimeOrOpts?: Tempo.DateTime | Tempo.Options, opts?: Tempo.Options): string; - /** time elapsed since another date-time */ - since(optsOrDate?: any, optsOrUntil?: any): string; + /** time duration until (returns Duration) */ until(dateTimeOrOpts?: Tempo.DateTime | Tempo.Options, opts?: Tempo.Options): Tempo.Duration; + /** time duration until (with unit, returns number) */ until(unit: Tempo.Unit, opts?: Tempo.Options): number; + /** time duration until another date-time (with unit ) */until(dateTimeOrOpts: Tempo.DateTime | Tempo.Options, unit: Tempo.Unit): number; + /** fallback: union of possible returns */ until(optsOrDate?: Tempo.DateTime | Tempo.Until | Tempo.Options, optsOrUntil?: Tempo.Options | Tempo.Until): number | Tempo.Duration; + + /** time elapsed since (with unit) */ since(until: Tempo.Until, opts?: Tempo.Options): string; + /** time elapsed since another date-time (with unit) */ since(dateTimeOrOpts: Tempo.DateTime | Tempo.Options, until: Tempo.Until): string; + /** time elapsed since another date-time (w'out unit) */since(dateTimeOrOpts?: Tempo.DateTime | Tempo.Options, opts?: Tempo.Options): string; + /** time elapsed since another date-time */ since(optsOrDate?: any, optsOrUntil?: any): string; } } @@ -71,14 +60,14 @@ function duration(this: Tempo, type: 'until' | 'since', arg?: any, until?: any) ({ value, ...opts } = arg as any); break; case isObject(arg) && isObject(until): - ({ value, unit, ...opts } = Object.assign({}, arg, until) as any); + ({ value, unit, ...opts } = Object.assign({ value: arg }, until) as any); break; case isString(until): unit = until; value = arg; break; case isObject(until): - unit = (until as any).unit; + ({ unit, ...opts } = until as any); value = arg; break; case isObject(arg) && isDefined((arg as any).unit): @@ -92,11 +81,8 @@ function duration(this: Tempo, type: 'until' | 'since', arg?: any, until?: any) const offset = new (this.constructor as any)(value, { ...opts, anchor: this, mode: enums.MODE.Strict }); const offsetZdt = offset.toDateTime(); - const diffZone = selfZdt.timeZoneId !== offsetZdt.timeZoneId; - const dur = selfZdt.until(offsetZdt.withCalendar(selfZdt.calendarId), { - largestUnit: diffZone ? 'hours' : (unit ?? 'years') - }); + const dur = selfZdt.until(offsetZdt.withCalendar(selfZdt.calendarId), { largestUnit: diffZone ? 'hours' : (unit ?? 'years') }); if (isDefined(unit)) unit = `${singular(unit)}s`; @@ -116,16 +102,22 @@ function duration(this: Tempo, type: 'until' | 'since', arg?: any, until?: any) .join('') const locale = (this as any).config['locale']; - const style = 'narrow'; + const rtf = opts['rtfFormat'] || (this as any).config['rtfFormat']; + + const getFormatted = (val: number, u: any) => { + if (rtf instanceof Intl.RelativeTimeFormat) return rtf.format(val, u); + const style = opts['rtfStyle'] || (this as any).config['rtfStyle'] || 'narrow'; + return getRelativeTime(val, u, locale, style); + } switch (res.unit) { - case 'years': return getRelativeTime(date[0], res.unit, locale, style); - case 'months': return getRelativeTime(date[1], res.unit, locale, style); - case 'weeks': return getRelativeTime(res.weeks, res.unit, locale, style) - case 'days': return getRelativeTime(date[2], res.unit, locale, style); - case 'hours': return getRelativeTime(time[0], res.unit, locale, style); - case 'minutes': return getRelativeTime(time[1], res.unit, locale, style); - case 'seconds': return getRelativeTime(time[2], res.unit, locale, style); + case 'years': return getFormatted(date[0], res.unit); + case 'months': return getFormatted(date[1], res.unit); + case 'weeks': return getFormatted(res.weeks, res.unit); + case 'days': return getFormatted(date[2], res.unit); + case 'hours': return getFormatted(time[0], res.unit); + case 'minutes': return getFormatted(time[1], res.unit); + case 'seconds': return getFormatted(time[2], res.unit); case 'milliseconds': case 'microseconds': case 'nanoseconds': diff --git a/packages/tempo/src/plugin/module/module.mutate.ts b/packages/tempo/src/plugin/module/module.mutate.ts index 958a69ac..6924314f 100644 --- a/packages/tempo/src/plugin/module/module.mutate.ts +++ b/packages/tempo/src/plugin/module/module.mutate.ts @@ -164,9 +164,6 @@ function mutate(this: Tempo, type: 'add' | 'set', args?: any, options: t.Options } }, zdt); } - else if (type === 'add') { - // Handle legacy .add(Tempo) or other types if supported - } else { // @ts-ignore - access to private constructor fallback return new TempoClass(args, { ...state.options, ...overrides, ...options, result: state.matches, anchor: zdt, [sym.$errored]: state.errored, [sym.$mutateDepth]: state.mutateDepth }); diff --git a/packages/tempo/src/plugin/module/module.term.ts b/packages/tempo/src/plugin/module/module.term.ts index 1f3ebe1f..a8d190dc 100644 --- a/packages/tempo/src/plugin/module/module.term.ts +++ b/packages/tempo/src/plugin/module/module.term.ts @@ -56,6 +56,76 @@ export function resolveTermMutation(Tempo: any, instance: any, mutate: string, u } } + // 0. Handle relative .add() — preserving position within the target range + if (mutate === 'add') { + const slickParsed = !!slickStr; + const directional = mod && !['this', '>=', '<='].includes(mod); + const numeric = !slickParsed && isNumeric(offset); + + if (directional || numeric || (slickParsed && !mod)) { + const addDir = directional + ? ((mod!.includes('<') || mod!.includes('-') || mod === 'prev' || mod === 'last') ? -1 : 1) + : (numeric ? Math.sign(Number(offset) || 1) : 1); + const addCount = slickParsed + ? nbr + : Math.abs(Number(offset) || 1); + + // Find current containing range + const rawList = getRange(termObj, instance, zdt); + const currentRange = getTermRange(instance, rawList, false, zdt) as any; + if (!currentRange) { + Tempo[sym.$termError](instance.config, unit); + return null; + } + + // Calculate cursor's offset within current range (nanoseconds) + const startNs = currentRange.start.toDateTime().epochNanoseconds as bigint; + const cursorNs = zdt.epochNanoseconds as bigint; + const positionNs = cursorNs - startNs; + + // Step through adjacent ranges to reach the target + let jump = zdt; + let remaining = addCount; + let target: any = null; + let iters = 0; + + while (remaining > 0 && iters < 200) { + iters++; + const jumpList = getRange(termObj, instance, jump); + const range = getTermRange(instance, jumpList, false, jump) as any; + if (!range) break; + + jump = addDir > 0 + ? range.end.toDateTime() + : range.start.toDateTime().subtract({ nanoseconds: 1 }); + + const nextList = getRange(termObj, instance, jump); + const next = getTermRange(instance, nextList, false, jump) as any; + if (!next) break; + + // If a specific range-key was requested, skip non-matching ranges + if (rKey && next.key?.toLowerCase() !== rKey.toLowerCase()) continue; + + target = next; + remaining--; + } + + if (!target || remaining > 0) { + Tempo[sym.$termError](instance.config, unit); + return null; + } + + // Apply same position-offset, clamped to target range bounds + const tStartNs = target.start.toDateTime().epochNanoseconds as bigint; + const tEndNs = target.end.toDateTime().epochNanoseconds as bigint; + let tNs = tStartNs + positionNs; + if (tNs >= tEndNs) tNs = tEndNs - 1n; // clamp to range end + if (tNs < tStartNs) tNs = tStartNs; // clamp to range start + + return toInstant(tNs).toZonedDateTimeISO(tz).withCalendar(cal); + } + } + // 1. Handle Absolute Mutations (start | mid | end) OR Slick Mutations if (mutate === 'start' || mutate === 'mid' || mutate === 'end' || mod) { let jump = zdt; diff --git a/packages/tempo/src/plugin/plugin.util.ts b/packages/tempo/src/plugin/plugin.util.ts index 1131c4cd..d27bc185 100644 --- a/packages/tempo/src/plugin/plugin.util.ts +++ b/packages/tempo/src/plugin/plugin.util.ts @@ -1,5 +1,5 @@ import { toZonedDateTime, toPlainDate, toInstant } from '#library/temporal.library.js'; -import { isDefined, isFunction, isString } from '#library/type.library.js'; +import { isDefined, isFunction, isString, isUndefined } from '#library/type.library.js'; import { secure } from '#library/utility.library.js'; import { SCHEMA, getLargestUnit } from '../tempo.util.js'; import { sortKey, byKey } from '#library/array.library.js'; @@ -9,10 +9,14 @@ import { secureRef } from '#library/proxy.library.js'; import type { Tempo } from '../tempo.class.js'; import type { TermPlugin, Range, ResolvedRange, Plugin, Extension } from './plugin.type.js'; +const _terms = [] as TermPlugin[]; +const _extends = [] as Extension[]; + const _REGISTRY = { - terms: secureRef([] as TermPlugin[]), - extends: secureRef([] as Extension[]), - modules: secureRef({} as Record) + terms: secureRef(_terms), + extends: secureRef(_extends), + modules: secureRef({} as Record), + installed: new Set() } /** @@ -311,11 +315,13 @@ export function resolveTermShift(tempo: Tempo, source: any[], offset: string, sh const range = (getTermRange(tempo, list, false, anchor) as any); if (!range) return undefined; - // find index in list (matching key and all shared date/time units for accurate identity) - const idx = list.findIndex(r => - r.key === range.key && - SCHEMA.every(([u]) => (isDefined(r[u]) && isDefined(range[u])) ? r[u] === range[u] : true) - ); + // find index in list (matching key and major components for identity) + const idx = list.findIndex(r => { + return r.key === range.key && + (isUndefined(r.year) || isUndefined(range.year) || r.year === range.year) && + (isUndefined(r.month) || isUndefined(range.month) || r.month === range.month) && + (isUndefined(r.day) || isUndefined(range.day) || r.day === range.day); + }); if (idx === -1) return undefined; @@ -426,3 +432,16 @@ export function registerPlugin(plugin: any) { (globalThis as any)[sym.$Register]?.(plugin); } + +/** + * Internal hook used by the Tempo class to ensure + * the registry is fully purged during a #registryReset(). + */ +export function resetInternalRegistry() { + _terms.length = 0; + _extends.length = 0; + // @ts-ignore + const modules = _REGISTRY.modules[lib.$Target] ?? _REGISTRY.modules; + for (const key in modules) delete modules[key]; + _REGISTRY.installed.clear(); +} diff --git a/packages/tempo/src/plugin/term/term.quarter.ts b/packages/tempo/src/plugin/term/term.quarter.ts index 4a21dfbe..59135f66 100644 --- a/packages/tempo/src/plugin/term/term.quarter.ts +++ b/packages/tempo/src/plugin/term/term.quarter.ts @@ -30,7 +30,7 @@ function resolve(t: Tempo, anchor?: any): any[] { const template = (groups as any)[sphere] ?? []; if (template.length === 0) return []; - const list = resolveCycleWindow(t, template, anchor); + const list = resolveCycleWindow(t, template, anchor).map(itm => ({ ...itm })); list.forEach(itm => { if (isNumber(itm.fiscal)) itm.fiscal += itm.year; diff --git a/packages/tempo/src/tempo.class.ts b/packages/tempo/src/tempo.class.ts index 0d17425e..7243d9c2 100644 --- a/packages/tempo/src/tempo.class.ts +++ b/packages/tempo/src/tempo.class.ts @@ -12,18 +12,18 @@ import { enumify } from '#library/enumerate.library.js'; import { ownKeys, ownEntries, getAccessors, omit } from '#library/reflection.library.js'; import { pad, trimAll } from '#library/string.library.js'; import { getType, asType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isNumber, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction, isClass, isZonedDateTime, isPlainDate, isPlainTime } from '#library/type.library.js'; -import { getResolvedOptions, getHemisphere, canonicalLocale } from '#library/international.library.js'; +import { getDateTimeFormat, getHemisphere, canonicalLocale } from '#library/international.library.js'; import { instant } from '#library/temporal.library.js'; import type { Property, TypeValue, Secure } from '#library/type.library.js'; import { compose } from './plugin/module/module.composer.js'; import { resolveTermMutation, resolveTermValue } from './plugin/module/module.term.js'; import { prefix, parseWeekday, parseDate, parseTime, parseZone } from './plugin/module/module.lexer.js'; -import { REGISTRY, registerPlugin, registerTerm, getRange, getTermRange, interpret } from './plugin/plugin.util.js' +import { REGISTRY, registerPlugin, registerTerm, getRange, getTermRange, interpret, resetInternalRegistry } from './plugin/plugin.util.js' import sym, { isTempo, registerHook } from './tempo.symbol.js'; import { Match, Token, Snippet, Layout, Event, Period, Default, Guard } from './tempo.default.js'; -import enums, { STATE, DISCOVERY, registryUpdate, registryReset } from './tempo.enum.js'; +import enums, { STATE, DISCOVERY, registryUpdate, registryReset, onRegistryReset } from './tempo.enum.js'; import * as t from './tempo.type.js'; // namespaced types (Tempo.*) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const Context = getContext(); // current execution context @@ -111,6 +111,8 @@ export class Tempo { static [sym.$errored] = sym.$errored; /** guard against infinite mutation recursion */ static [sym.$mutateDepth] = 0; + /** hook to re-validate the Master Guard */ + static [sym.$rebuildGuard]() { Tempo.#buildGuard() } /** handle internal debug info using the global config */ static [sym.$logDebug](...msg: any[]): void { @@ -510,6 +512,7 @@ export class Tempo { let i = 0; const len = input.length; + // console.log(`Guard testing: "${input}"`); while (i < len) { const char = input[i]; @@ -536,7 +539,9 @@ export class Tempo { const slice = input.substring(i, i + searchLen).toLowerCase(); for (let l = searchLen; l > 0; l--) { - if (Tempo.#allowedTokens.has(slice.substring(0, l))) { + const candidate = slice.substring(0, l); + if (Tempo.#allowedTokens.has(candidate)) { + // console.log(` Matched token: "${candidate}" at ${i}`); i += l; matched = true; break; @@ -592,8 +597,8 @@ export class Tempo { items.forEach(item => { const arg = item as any; if (isFunction(arg)) { // Standard Plugin registration - if ((arg as any).installed) return; - (arg as any).installed = true; // mark as installed (BEFORE side-effects) + if (REGISTRY.installed.has(arg)) return; + REGISTRY.installed.add(arg); // mark as installed (BEFORE side-effects) registerPlugin(arg); try { @@ -680,7 +685,7 @@ export class Tempo { Tempo.#lifecycle.initialising = true; try { - const { timeZone, calendar } = getResolvedOptions(); + const { timeZone, calendar } = getDateTimeFormat(); // 1. Establish the base parsing state Tempo.#global.parse = markConfig({ @@ -1846,3 +1851,8 @@ export namespace Tempo { export interface Params extends t.Params { } } + +onRegistryReset(() => { + resetInternalRegistry(); + Tempo[sym.$rebuildGuard](); +}); diff --git a/packages/tempo/src/tempo.default.ts b/packages/tempo/src/tempo.default.ts index 0405995e..edbeeab5 100644 --- a/packages/tempo/src/tempo.default.ts +++ b/packages/tempo/src/tempo.default.ts @@ -3,7 +3,7 @@ import { secure } from '#library/utility.library.js'; import { proxify } from '#library/proxy.library.js'; import { NUMBER, MODE } from './tempo.enum.js'; import type { Options } from './tempo.type.js'; -import { getResolvedOptions } from '#library/international.library.js'; +import { getDateTimeFormat } from '#library/international.library.js'; import type { Tempo } from './tempo.class.js'; // BE VERY CAREFUL NOT TO BREAK THE REGEXP PATTERNS BELOW @@ -35,6 +35,7 @@ export const Match = proxify({ /** bracketed content (timezone/calendar) */ bracket: /\[[^\]]+\]/i, /** slick shorthand-shifter (e.g. #qtr.>2q2) */ shorthand: /(?:(?:#[\w]+|[\w]+)\.(?:[\+\-\<\>]=?|next|prev|this|last)?(?:[0-9]+)?(?:[\w]*))/, /** anchored version for shifter resolution */ slick: /^(?#[\w]+|[\w]+)\.(?[\+\-\<\>]=?|next|prev|this|last)?(?[0-9]+)?(?[\w]*)$/, + /** extracted value-only version of a slick shifter */ slickValue: /^(?[\+\-\<\>]=?|next|prev|this|last)?(?[0-9]+)?(?[\w]*)$/, /** escape special regex characters in a string */ escape: (str: string) => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), /** numeric-only string detection */ numeric: /^\s*[-+]?\d+(\.\d+)?\s*$/ }, true, false); @@ -175,6 +176,7 @@ export const Guard = [ 'am', 'pm', 'ago', 'hence', 'this', 'next', 'prev', 'last', 'from', 'now', 'today', 'yesterday', 'tomorrow', 'start', 'mid', 'end', 'year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond', 'years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds', 'milliseconds', 'microseconds', 'nanoseconds', + 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday', 'mondays', 'tuesdays', 'wednesdays', 'thursdays', 'fridays', 'saturdays', 'sundays' ] @@ -186,8 +188,8 @@ export const Default = secure({ /** used to parse two-digit years*/ pivot: 75, /** @link https: //en.wikipedia.org/wiki/Date_windowing */ /** precision to measure timestamps (ms | us) */ timeStamp: 'ms', /** calendaring system */ calendar: 'iso8601', - /** default timezone if not specified */ timeZone: getResolvedOptions().timeZone, - /** default locale if not specified */ locale: getResolvedOptions().locale, + /** default timezone if not specified */ timeZone: getDateTimeFormat().timeZone, + /** default locale if not specified */ locale: getDateTimeFormat().locale, /** locales that prefer month-day order */ mdyLocales: ['en-US', 'en-AS'], /** @link https: //en.wikipedia.org/wiki/Date_format_by_country */ /** layouts that need to swap parse-order */ mdyLayouts: [['dayMonthYear', 'monthDayYear']], /** hemisphere for term.qtr or term.szn */ sphere: undefined, diff --git a/packages/tempo/src/tempo.enum.ts b/packages/tempo/src/tempo.enum.ts index f1172d78..c6d946a9 100644 --- a/packages/tempo/src/tempo.enum.ts +++ b/packages/tempo/src/tempo.enum.ts @@ -254,6 +254,14 @@ export function registryUpdate(name: keyof typeof STATE, data: Record void)[] => (globalThis as any)[Symbol.for('$TempoReset')] ??= []; + +/** Register a hook to be called when the registry is reset */ +export function onRegistryReset(hook: () => void) { + resetHooks().push(hook); +} + /** Reset all extendable registries to their original built-in defaults */ export function registryReset() { ownKeys(STATE).forEach(name => { @@ -283,6 +291,8 @@ export function registryReset() { if (target) clearCache(target); clearCache(state); // clear cache for state object }); + + resetHooks().forEach(hook => hook()); } /** public-reachable enums */ diff --git a/packages/tempo/src/tempo.index.ts b/packages/tempo/src/tempo.index.ts index 9ad449eb..8cac962a 100644 --- a/packages/tempo/src/tempo.index.ts +++ b/packages/tempo/src/tempo.index.ts @@ -3,9 +3,17 @@ import { TermsModule } from '#tempo/term'; import { DurationModule } from '#tempo/duration'; import { FormatModule } from '#tempo/format'; import { MutateModule } from '#tempo/mutate'; +import { TickerModule } from '#tempo/ticker'; +import { onRegistryReset } from './tempo.enum.js'; // Batteries Included: Register standard modules -Tempo.extend([MutateModule, FormatModule, DurationModule, TermsModule]); +const core = [MutateModule, FormatModule, DurationModule, TermsModule, TickerModule]; + +onRegistryReset(() => { + Tempo.extend(core); +}); + +Tempo.extend(core); export * from './tempo.class.js'; export { default as enums } from './tempo.enum.js'; // Tempo enumerators diff --git a/packages/tempo/src/tempo.symbol.ts b/packages/tempo/src/tempo.symbol.ts index 307425fc..7ac78307 100644 --- a/packages/tempo/src/tempo.symbol.ts +++ b/packages/tempo/src/tempo.symbol.ts @@ -20,6 +20,8 @@ const $termError = Symbol.for('$TempoTermError'); const $errored = Symbol.for('$TempoErrored'); const $Internal = Symbol.for('$TempoInternal'); const $mutateDepth = Symbol.for('$TempoMutateDepth'); +const $rebuildGuard = Symbol.for('$TempoRebuildGuard'); +export const $reset = Symbol.for('$TempoReset'); /** * Define a reactive registration hook on a global symbol. @@ -53,6 +55,8 @@ const _sym = { /** internal key for signaling pre-errored state in constructor */ $errored, /** internal key for accessing private instance state */ $Internal, /** internal key for tracking mutation recursion depth */ $mutateDepth, + /** internal key for re-validating the Master Guard */ $rebuildGuard, + /** internal key for decentralized registry resets */ $reset, } as const; export default _sym; diff --git a/packages/tempo/src/tempo.type.ts b/packages/tempo/src/tempo.type.ts index b18bb0ef..73c00354 100644 --- a/packages/tempo/src/tempo.type.ts +++ b/packages/tempo/src/tempo.type.ts @@ -163,6 +163,8 @@ export namespace Internal { /** locale (e.g. en-AU) */ locale: string; /** pivot year for two-digit years */ pivot: number; /** hemisphere for term.qtr or term.szn */ sphere: enums.COMPASS | undefined; + /** Pre-configured relative time formatter */ rtfFormat?: Intl.RelativeTimeFormat; + /** Default style for relative time ('long' | 'short' | 'narrow') */ rtfStyle?: Intl.RelativeTimeFormatStyle; /** Precision to measure timestamps (ms | us) */ timeStamp?: TimeStamp; /** initialization strategy ('auto'|'strict'|'defer') */mode?: enums.MODE; /** locale-names that prefer 'mm-dd-yy' date order */ mdyLocales: string | string[]; diff --git a/packages/tempo/test-slick.test.ts b/packages/tempo/test-slick.test.ts new file mode 100644 index 00000000..d648513d --- /dev/null +++ b/packages/tempo/test-slick.test.ts @@ -0,0 +1,14 @@ +import { describe, it, expect } from 'vitest'; +import { Tempo } from './src/tempo.class.js'; + +describe('Slick shorthand behavior', () => { + it('should behave correctly with set and add', () => { + const t1 = new Tempo('2026-05-15', {sphere:'south'}); + const t2 = t1.set('#qtr.<'); + const t3 = t1.add('#qtr.<'); + + console.log('t1 (current):', t1.format('YYYY-MM-DD')); + console.log('t2 (set) :', t2.format('YYYY-MM-DD')); + console.log('t3 (add) :', t3.format('YYYY-MM-DD')); + }); +}); diff --git a/packages/tempo/test-slick.ts b/packages/tempo/test-slick.ts new file mode 100644 index 00000000..9a623418 --- /dev/null +++ b/packages/tempo/test-slick.ts @@ -0,0 +1,9 @@ +import { Tempo } from './src/tempo.class'; + +const t1 = new Tempo({sphere:'south'}); +const t2 = t1.set('#qtr.<'); +const t3 = t1.add('#qtr.<'); + +console.log('t1 (current):', t1.format('YYYY-MM-DD')); +console.log('t2 (set) :', t2.format('YYYY-MM-DD')); +console.log('t3 (add) :', t3.format('YYYY-MM-DD')); diff --git a/packages/tempo/test/dispose.core.test.ts b/packages/tempo/test/dispose.core.test.ts index e7128fd6..90ff2f5c 100644 --- a/packages/tempo/test/dispose.core.test.ts +++ b/packages/tempo/test/dispose.core.test.ts @@ -2,8 +2,9 @@ import { Tempo } from '#tempo/core'; import { Pledge } from '#library/pledge.class.js'; import { TickerModule } from '#tempo/ticker'; import { FormatModule } from '#tempo/format'; +import { MutateModule } from '#tempo/mutate'; -Tempo.extend(TickerModule, FormatModule); +Tempo.extend(TickerModule, FormatModule, MutateModule); describe('Static Symbol.dispose', () => { diff --git a/packages/tempo/test/fiscal-cycle.core.test.ts b/packages/tempo/test/fiscal-cycle.core.test.ts index 34cd17bf..bf3ecf47 100644 --- a/packages/tempo/test/fiscal-cycle.core.test.ts +++ b/packages/tempo/test/fiscal-cycle.core.test.ts @@ -1,4 +1,5 @@ import { Tempo } from '#tempo/core'; +import '#tempo/mutate'; import { FormatModule } from '#tempo/format'; import '#tempo/term/standard'; @@ -19,19 +20,18 @@ describe('Fiscal Cycle Wrap-around', () => { expect(t2.format('{yyyy}-{mm}-{dd}')).toBe('2025-10-01'); }); - // test-cases for next release, v2.1.0+ - // it('should advance to Q1 of the next fiscal cycle (+1 quarter)', () => { - // const t1 = new Tempo('2026-04-01', { sphere: 'south' }); - // const t2 = t1.set({ '+quarter': 1 }); - // // Next Q after Q4(FY26) is Q1(FY27) starting Jul 1st, 2026. - // expect(t2.format('{yyyy}-{mm}-{dd}')).toBe('2026-07-01'); - // }); + it('should advance to Q1 of the next fiscal cycle (+1 quarter)', () => { + const t1 = new Tempo('2026-04-01', { sphere: 'south' }); + const t2 = t1.set('#quarter.>'); + // Next Q after Q4(FY26) is Q1(FY27) starting Jul 1st, 2026. + expect(t2.format('{yyyy}-{mm}-{dd}')).toBe('2026-07-01'); + }); - // it('should handle large forward shifts (+5 quarters)', () => { - // const t1 = new Tempo('2026-04-01', { sphere: 'south' }); - // const t2 = t1.set({ '+quarter': 5 }); - // // Q4(FY26) + 5 = Q1(FY28) starting Jul 1st, 2027. - // // Q4(FY26) -> Q1(FY27) -> Q2(FY27) -> Q3(FY27) -> Q4(FY27) -> Q1(FY28) - // expect(t2.format('{yyyy}-{mm}-{dd}')).toBe('2027-07-01'); - // }); + it('should handle large forward shifts (+5 quarters)', () => { + const t1 = new Tempo('2026-04-01', { sphere: 'south' }); + const t2 = t1.set('#quarter.>5'); + // Q4(FY26) + 5 = Q1(FY28) starting Jul 1st, 2027. + // Q4(FY26) -> Q1(FY27) -> Q2(FY27) -> Q3(FY27) -> Q4(FY27) -> Q1(FY28) + expect(t2.format('{yyyy}-{mm}-{dd}')).toBe('2027-07-01'); + }); }); diff --git a/packages/tempo/test/instance.since.rtf.test.ts b/packages/tempo/test/instance.since.rtf.test.ts new file mode 100644 index 00000000..f1357ac4 --- /dev/null +++ b/packages/tempo/test/instance.since.rtf.test.ts @@ -0,0 +1,44 @@ +import { Tempo } from '#tempo'; + +describe('instance.since relative formatting', () => { + beforeAll(() => { + Tempo.init({ timeZone: 'UTC', locale: 'en-US' }); + }); + + test('supports relativeStyle: "long" via options', () => { + const t1 = new Tempo('2024-01-01T12:00:00'); + const t2 = new Tempo('2024-01-01T14:30:00'); + + // default is narrow: "2h ago" (or similar depending on environment) + // long should be: "2 hours ago" + const res = t2.since(t1, { unit: 'hours', rtfStyle: 'long' }); + expect(res).toMatch(/2 hours ago/i); + }); + + test('supports rtfStyle: "short" via options', () => { + const t1 = new Tempo('2024-01-01T12:00:00'); + const t2 = new Tempo('2024-01-01T14:30:00'); + + const res = t2.since(t1, { unit: 'hours', rtfStyle: 'short' }); + expect(res).toMatch(/2 hr. ago/i); + }); + + test('supports custom Intl.RelativeTimeFormat instance', () => { + const t1 = new Tempo('2024-01-01T12:00:00'); + const t2 = new Tempo('2024-01-01T14:30:00'); + + const rtf = new Intl.RelativeTimeFormat('fr', { style: 'long' }); + const res = t2.since(t1, { unit: 'hours', rtfFormat: rtf }); + + // French long for 2 hours ago: "il y a 2 heures" + expect(res).toMatch(/il y a 2 heures/i); + }); + + test('inherits rtfStyle from instance configuration', () => { + const t1 = new Tempo('2024-01-01T12:00:00'); + const t = new Tempo('2024-01-01T14:30:00', { rtfStyle: 'long' }); + + const res = t.since(t1, 'hours'); + expect(res).toMatch(/2 hours ago/i); + }); +}); diff --git a/packages/tempo/test/lazy.test.ts b/packages/tempo/test/lazy.test.ts index 61e04d05..c5bfaf26 100644 --- a/packages/tempo/test/lazy.test.ts +++ b/packages/tempo/test/lazy.test.ts @@ -1,4 +1,7 @@ import { Tempo } from '../src/tempo.class.js'; +import { FormatModule } from '../src/plugin/module/module.format.js'; + +Tempo.extend(FormatModule); describe('Tempo Lazy Evaluation (Shadowing)', () => { beforeEach(() => { diff --git a/packages/tempo/test/number-words.core.test.ts b/packages/tempo/test/number-words.core.test.ts index 541635f3..b9f59130 100644 --- a/packages/tempo/test/number-words.core.test.ts +++ b/packages/tempo/test/number-words.core.test.ts @@ -1,4 +1,5 @@ import { Tempo } from '#tempo/core'; +import '#tempo/mutate'; describe('Number-Word Pilot (0-10)', () => { it('should resolve word-based counts in weekday patterns', () => { diff --git a/packages/tempo/test/repro_crash.core.test.ts b/packages/tempo/test/repro_crash.core.test.ts deleted file mode 100644 index 7262dd64..00000000 --- a/packages/tempo/test/repro_crash.core.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Tempo } from '#tempo/core'; -import { FormatModule } from '#tempo/format'; -import { registryReset } from '#tempo/tempo.enum.js'; -import '#tempo/term/standard'; - -Tempo.extend(FormatModule); - -describe('Reproduction of Parsing Regressions', () => { - afterEach(() => registryReset()); - - it('should correctly parse "one Wednesday ago"', () => { - const anchor = new Tempo('2024-03-20'); // A Wednesday - const result = anchor.add('one Wednesday ago'); - expect(result.format('{yyyy}-{mm}-{dd}')).toBe('2024-03-13'); - }); - - it('should correctly parse "eleven days hence" after extension', () => { - Tempo.extend({ numbers: { eleven: 11 } }); - const anchor = new Tempo('2024-03-20'); - const result = anchor.add('eleven days hence'); - expect(result.format('{yyyy}-{mm}-{dd}')).toBe('2024-03-31'); - }); -}); diff --git a/packages/tempo/test/term-dispatch.core.test.ts b/packages/tempo/test/term-dispatch.core.test.ts index dbab867b..f495a1c8 100644 --- a/packages/tempo/test/term-dispatch.core.test.ts +++ b/packages/tempo/test/term-dispatch.core.test.ts @@ -1,9 +1,8 @@ import { Tempo } from '#tempo/core'; -import { FormatModule } from '#tempo/format'; +import '#tempo/mutate'; +import '#tempo/format'; import '#tempo/term/standard'; -Tempo.extend(FormatModule); - describe('Term Dispatch Refactor', () => { afterEach(() => vi.restoreAllMocks()) diff --git a/packages/tempo/test/term-shorthand.test.ts b/packages/tempo/test/term-shorthand.test.ts index d4b52870..e237fe22 100644 --- a/packages/tempo/test/term-shorthand.test.ts +++ b/packages/tempo/test/term-shorthand.test.ts @@ -39,29 +39,31 @@ describe('Tempo Term Literacy (Namespace Shorthand)', () => { describe('.add() shorthand', () => { test('add("#qtr.q1") moves to the next Q1', () => { - const t = new Tempo('2026-06-01', { sphere: 'north' }) // Midway through Q2 - const res = t.add('#qtr.q1') // Should find 2027-01-01 + const t = new Tempo('2026-06-01', { sphere: 'north' }) // 2 months into Q2 (starts Apr 1) + const res = t.add('#qtr.q1') // Should find 2027-01-01 and apply 2mo offset expect(res.yy).toBe(2027) - expect(res.mm).toBe(1) - expect(res.dd).toBe(1) + expect(res.mm).toBe(3) + expect(res.dd).toBe(3) }) test('add({ "#period.morning": 2 }) moves two mornings ahead', () => { - const t = new Tempo('2026-01-01T12:00:00', { sphere: 'north' }) // Current morning is Jan 1 08:00 + const t = new Tempo('2026-01-01T09:00:00', { sphere: 'north' }) // 1 hr into morning (starts 08:00) const res = t.add({ '#period.morning': 2 }) - // Morning 1: Jan 2 08:00 - // Morning 2: Jan 3 08:00 + // Jan 2 08:00 + 1hr = Jan 2 09:00 + // Jan 3 08:00 + 1hr = Jan 3 09:00 expect(res.dd).toBe(3) - expect(res.hh).toBe(8) + expect(res.hh).toBe(9) }) test('add({ "#zodiac.aries": -1 }) moves one cycle back from current Aries', () => { const t = new Tempo('2026-06-01', { sphere: 'north' }) - // Current Aries is 2026-03-21 + // 11 days into Gemini (starts May 21) + // Move -1 Aries from Gemini context hits Aries 2026 (Mar 21) + // Apply 11 days offset -> April 1st 2026 const res = t.add({ '#zodiac.aries': -1 }) - expect(res.yy).toBe(2025) - expect(res.mm).toBe(3) - expect(res.dd).toBe(21) + expect(res.yy).toBe(2026) + expect(res.mm).toBe(4) + expect(res.dd).toBe(1) }) }) diff --git a/packages/tempo/test/ticker.term.core.test.ts b/packages/tempo/test/ticker.term.core.test.ts index 9a932627..563b6a6e 100644 --- a/packages/tempo/test/ticker.term.core.test.ts +++ b/packages/tempo/test/ticker.term.core.test.ts @@ -1,6 +1,9 @@ -import { Tempo } from '#tempo/core' -import '#tempo/term/standard' -import '#tempo/ticker' +import { Tempo } from '#tempo/core'; +import { MutateModule } from '#tempo/mutate'; +import '#tempo/term/standard'; +import { TickerModule } from '#tempo/ticker'; + +Tempo.extend(MutateModule, TickerModule); describe('Ticker with Terms', () => { beforeEach(() => { diff --git a/packages/tempo/test/timezone_offset.test.ts b/packages/tempo/test/timezone_offset.test.ts index 636a40d3..b5ca9b96 100644 --- a/packages/tempo/test/timezone_offset.test.ts +++ b/packages/tempo/test/timezone_offset.test.ts @@ -1,4 +1,5 @@ import { Tempo } from '../src/tempo.class.js'; +import '../src/plugin/module/module.format.js'; describe('Tempo TimeZone Offset', () => { beforeEach(() => { From 599b79f48b02f135787ec9d1728d1e4da208b70a Mon Sep 17 00:00:00 2001 From: Michael McRae Date: Thu, 16 Apr 2026 11:06:04 +1000 Subject: [PATCH 03/18] tidier and tidier --- .../library/src/browser/webstore.class.ts | 3 +- packages/library/src/common/array.library.ts | 13 +-- packages/library/src/common/class.library.ts | 2 +- .../library/src/common/enumerate.library.ts | 6 +- packages/library/src/common/object.library.ts | 21 +--- .../library/src/common/primitive.library.ts | 80 ++++++++++++++ .../library/src/common/reflection.library.ts | 76 ++----------- .../library/src/common/serialize.library.ts | 2 +- .../library/src/common/utility.library.ts | 2 +- packages/tempo/{scripts => bin}/core.ts | 0 packages/tempo/{scripts => bin}/repl.ts | 5 +- .../tempo/{scripts => bin}/resolve-types.ts | 11 +- .../tempo/{scripts => bin}/setup.polyfill.ts | 0 packages/tempo/{scripts => bin}/tsconfig.json | 0 packages/tempo/doc/tempo.pledge.md | 28 +++-- packages/tempo/package.json | 8 +- packages/tempo/rollup.config.js | 65 +++++++----- packages/tempo/src/library.index.ts | 10 +- .../tempo/src/plugin/module/module.lexer.ts | 2 +- .../tempo/src/plugin/module/module.term.ts | 2 +- packages/tempo/src/plugin/plugin.util.ts | 100 ++++++++++++------ .../tempo/src/plugin/term/term.quarter.ts | 17 +-- packages/tempo/src/plugin/term/term.season.ts | 15 +-- .../tempo/src/plugin/term/term.timeline.ts | 5 +- packages/tempo/src/plugin/term/term.zodiac.ts | 32 +++--- packages/tempo/src/tempo.class.ts | 27 ++--- packages/tempo/src/tempo.default.ts | 20 ++-- packages/tempo/src/tempo.enum.ts | 10 +- packages/tempo/src/tempo.index.ts | 8 +- packages/tempo/src/tempo.symbol.ts | 2 +- packages/tempo/test-slick.test.ts | 14 --- packages/tempo/test-slick.ts | 9 -- packages/tempo/test/term.test.ts | 2 +- packages/tempo/test/timezone_offset.test.ts | 1 - packages/tempo/tsconfig.json | 2 +- 35 files changed, 313 insertions(+), 287 deletions(-) create mode 100644 packages/library/src/common/primitive.library.ts rename packages/tempo/{scripts => bin}/core.ts (100%) rename packages/tempo/{scripts => bin}/repl.ts (75%) rename packages/tempo/{scripts => bin}/resolve-types.ts (88%) rename packages/tempo/{scripts => bin}/setup.polyfill.ts (100%) rename packages/tempo/{scripts => bin}/tsconfig.json (100%) delete mode 100644 packages/tempo/test-slick.test.ts delete mode 100644 packages/tempo/test-slick.ts diff --git a/packages/library/src/browser/webstore.class.ts b/packages/library/src/browser/webstore.class.ts index 556bd817..9b10a6dc 100644 --- a/packages/library/src/browser/webstore.class.ts +++ b/packages/library/src/browser/webstore.class.ts @@ -1,5 +1,4 @@ -import { distinct } from '#library/array.library.js'; -import { ownEntries } from '#library/reflection.library.js'; +import { distinct, ownEntries } from '#library/primitive.library.js'; import { stringify, objectify } from '#library/serialize.library.js'; import { asType, isEmpty, isNullish, isString } from '#library/type.library.js'; import type { Property, ValueOf } from '#library/type.library.js'; diff --git a/packages/library/src/common/array.library.ts b/packages/library/src/common/array.library.ts index 0ba6d1dc..3b8baaf7 100644 --- a/packages/library/src/common/array.library.ts +++ b/packages/library/src/common/array.library.ts @@ -1,6 +1,5 @@ import { asString } from '#library/coercion.library.js'; -import { extract } from '#library/object.library.js'; -import { ownEntries } from '#library/reflection.library.js'; +import { extract, ownEntries } from '#library/primitive.library.js'; import { stringify } from '#library/serialize.library.js'; import { isNumber, isDate, isTempo, isObject, isDefined, isUndefined, isFunction, nullToValue } from '#library/type.library.js'; import type { Property } from '#library/type.library.js'; @@ -109,16 +108,6 @@ export function byLkp>(arr: T[], fnKey: GroupFn | key .reduce((acc, [key, grp]) => Object.assign(acc, { [key]: grp?.pop() }), {} as Record) } -/** return an array with no repeated elements */ -export function distinct(arr: T[]): T[]; -/** return a mapped array with no repeated elements */ -export function distinct(arr: T[], mapfn: (value: T, index: number, array: T[]) => S, thisArg?: any): S[]; -export function distinct(arr: T[], mapfn?: (value: any, index: number, array: any[]) => any) { - return mapfn - ? distinct(arr.map(mapfn)) - : Array.from(new Set(arr)); -} - /** clear down an Array */ export function clear(arr: T[]) { arr.fill(null as any).length = 0; diff --git a/packages/library/src/common/class.library.ts b/packages/library/src/common/class.library.ts index 4863c7f6..a2ad620d 100644 --- a/packages/library/src/common/class.library.ts +++ b/packages/library/src/common/class.library.ts @@ -1,4 +1,4 @@ -import { ownEntries } from '#library/reflection.library.js'; +import { ownEntries } from '#library/primitive.library.js'; import { registerSerializable } from '#library/serialize.library.js'; import { type Constructor, type Type, registerType } from '#library/type.library.js'; diff --git a/packages/library/src/common/enumerate.library.ts b/packages/library/src/common/enumerate.library.ts index c3cd41b2..aaca13ef 100644 --- a/packages/library/src/common/enumerate.library.ts +++ b/packages/library/src/common/enumerate.library.ts @@ -1,11 +1,11 @@ import { secure } from '#library/utility.library.js'; import { asType, isNumber } from '#library/type.library.js'; -import lib from '#library/symbol.library.js'; -import { ownEntries } from '#library/reflection.library.js'; +import { ownEntries } from '#library/primitive.library.js'; import { proxify } from '#library/proxy.library.js'; +import { Serializable } from '#library/class.library.js'; import { memoizeMethod } from '#library/function.library.js'; +import lib from '#library/symbol.library.js'; import type { Property, Index, KeyOf, ValueOf, EntryOf, Invert, LooseKey } from '#library/type.library.js'; -import { Serializable } from '#library/class.library.js'; declare module '#library/type.library.js' { interface TypeValueMap { diff --git a/packages/library/src/common/object.library.ts b/packages/library/src/common/object.library.ts index f9e7ef4c..0eb3728f 100644 --- a/packages/library/src/common/object.library.ts +++ b/packages/library/src/common/object.library.ts @@ -1,22 +1,7 @@ -import { ownKeys, ownEntries } from '#library/reflection.library.js'; -import { isObject, isArray, isReference, isFunction, isDefined, isEmpty, isNullish } from '#library/type.library.js'; +import { ownKeys, ownEntries } from '#library/primitive.library.js'; +import { isObject, isArray, isReference, isFunction, isDefined, isNullish } from '#library/type.library.js'; import type { Extend, Property } from '#library/type.library.js'; -/** Get nested value */ -export function extract(obj: any, path: string | number, dflt?: T): T { - if (isEmpty(path)) - return obj as T; // finished searching - if (!isObject(obj) && !isArray(obj)) - return obj as T; - - return path - .toString() - .replace(/\[([^\[\]]*)\]/g, '.$1.') // convert [indexes] to properties - .split('.') - .filter(field => !isEmpty(field)) // remove empty fields - .reduce((acc, field) => acc?.[field] ?? null, obj) ?? dflt -} - /** remove quotes around property names */ export const unQuoteObj = (obj: any) => { return JSON.stringify(obj) @@ -52,7 +37,7 @@ export const isEqual = (obj1: any = {}, obj2: any = {}): boolean => { const val2 = obj2[key]; return isReference(val1) && isReference(val2) - ? isEqual(val1, val2) // recurse into object + ? isEqual(val1, val2) // recurse into object : val1 === val2 }) } diff --git a/packages/library/src/common/primitive.library.ts b/packages/library/src/common/primitive.library.ts new file mode 100644 index 00000000..20c2057a --- /dev/null +++ b/packages/library/src/common/primitive.library.ts @@ -0,0 +1,80 @@ +import sym from '#library/symbol.library.js'; +import { isEmpty } from '#library/type.library.js'; +import type { Obj, KeyOf, ValueOf, EntryOf } from '#library/type.library.js'; + +/** + * primitive.library.ts + * + * Deep-core utilities used to break circular dependencies in the library. + * These functions have NO dependencies on array, object, or reflection libraries. + */ + +/** Tuple of enumerable entries with string | symbol keys */ +export function ownEntries(json: T, all = false): EntryOf[] { + if (!json || typeof json !== 'object') + return [] as EntryOf[]; + + const unwrap = (obj: any): any => { + let curr = obj; + while (curr && curr[sym.$Target]) { + curr = curr[sym.$Target]; + } + return curr; + } + + const getOwn = (obj: any): [PropertyKey, any][] => { + const tgt = unwrap(obj); + return Reflect.ownKeys(tgt) + .filter(key => Object.getOwnPropertyDescriptor(tgt, key)?.enumerable) + .map(key => [key, tgt[key]]); + } + + if (!all) return getOwn(json) as EntryOf[]; + + const levels: [PropertyKey, any][][] = []; + const limit = 50; + let depth = 0; + let proto: any = json; + + do { + const t = unwrap(proto); + const lvl = getOwn(proto); + if (lvl.length) levels.push(lvl); + proto = Object.getPrototypeOf(t); + } while (proto && proto !== Object.prototype && ++depth < limit); + + return [...new Map(levels.reverse().flat()).entries()] as EntryOf[]; +} + +/** Array of all enumerable PropertyKeys */ +export function ownKeys(json: T, all = false): KeyOf[] { + return ownEntries(json, all).map(([key]) => key as KeyOf); +} + +/** Array of all enumerable object values */ +export function ownValues(json: T, all = false): ValueOf[] { + return ownEntries(json, all).map(([_, value]) => value as ValueOf); +} + +/** Get nested value using dot or bracket notation */ +export function extract(obj: any, path: string | number, dflt?: T): T { + if (isEmpty(path)) return obj as T; + if (obj === null || typeof obj !== 'object') return dflt as T; + + return path + .toString() + .replace(/\[([^\[\]]*)\]/g, '.$1.') + .split('.') + .filter(field => field.length > 0) + .reduce((acc, field) => acc?.[field] ?? null, obj) ?? dflt; +} + +/** Return an array with no repeated elements */ +export function distinct(arr: T[]): T[]; +/** return a mapped array with no repeated elements */ +export function distinct(arr: T[], mapfn: (value: T, index: number, array: T[]) => S, thisArg?: any): S[]; +export function distinct(arr: T[], mapfn?: (value: any, index: number, array: any[]) => any) { + return mapfn + ? distinct(arr.map(mapfn)) + : Array.from(new Set(arr)); +} diff --git a/packages/library/src/common/reflection.library.ts b/packages/library/src/common/reflection.library.ts index ce4de5e0..a37e9cf6 100644 --- a/packages/library/src/common/reflection.library.ts +++ b/packages/library/src/common/reflection.library.ts @@ -1,31 +1,30 @@ -import lib from '#library/symbol.library.js'; -import { distinct } from '#library/array.library.js'; +import { distinct, ownKeys, ownEntries } from '#library/primitive.library.js'; import { asType, getType, isEmpty, isFunction, isPrimitive } from '#library/type.library.js'; -import type { Obj, KeyOf, ValueOf, EntryOf, Primitives } from '#library/type.library.js'; +import type { Obj, KeyOf, Primitives } from '#library/type.library.js'; /** mutate Object | Array by excluding values with specified primitive 'types' */ export function exclude(obj: T, ...types: (Primitives | Lowercase)[]) { const exclusions = distinct(types.map(item => item.toLowerCase())) as typeof types; - if (obj && typeof obj === 'object') { // only works on Objects and Arrays + if (obj && typeof obj === 'object') { // only works on Objects and Arrays const keys = [] as KeyOf[]; (ownEntries(obj) as [KeyOf, Obj][]) .forEach(([key, value]) => { const type = getType(value); - if (['Object', 'Array'].includes(type)) // recurse into object + if (['Object', 'Array'].includes(type)) // recurse into object exclude(value, ...exclusions); if (isPrimitive(value) && exclusions.includes(type.toLowerCase() as Primitives)) keys.push(key) }) - if (!isEmpty(keys)) // if any values to be excluded + if (!isEmpty(keys)) // if any values to be excluded omit(obj, ...keys); } - return obj; // return Object reference, even though Object has been mutated + return obj; // return Object reference, even though Object has been mutated } /** mutate Object | Array reference with properties removed */ @@ -37,7 +36,7 @@ export function omit(obj: T, ...keys: PropertyKey[]) { switch (type) { case 'Array': if (isEmpty(keys)) { - value.length = 0; // clear Array + value.length = 0; // clear Array break; } keys @@ -47,11 +46,11 @@ export function omit(obj: T, ...keys: PropertyKey[]) { break; case 'Object': - (isEmpty(keys) ? ownKeys(value) : keys) // if no {keys}, assume all ownKeys + (isEmpty(keys) ? ownKeys(value) : keys) // if no {keys}, assume all ownKeys .forEach(key => Reflect.deleteProperty(value, key)); } - return value; // return Object reference, even though Object has been mutated + return value; // return Object reference, even though Object has been mutated } /** remove all ownKeys from an Object | Array */ @@ -64,63 +63,6 @@ export function reset(orig: T, obj?: T) { return Object.assign(purge(orig), { ...obj }); } -// These functions are to preserve the typescript 'type' of an object's keys & values -// and will include both string and symbol keys - -/** array of all enumerable PropertyKeys */ -export function ownKeys(json: T, all = false) { - return ownEntries(json, all).map(([key]) => key as KeyOf); -} - -/** array of all enumerable object values */ -export function ownValues(json: T, all = false) { - return ownEntries(json, all).map(([_, value]) => value as ValueOf); -} - -/** tuple of enumerable entries with string | symbol keys */ -export function ownEntries(json: T, all = false) { - if (!json || typeof json !== 'object') - return [] as EntryOf[]; - - /** recursively unwrap proxies to get to the base target */ - const unwrap = (obj: any): any => { - let curr = obj; - while (curr && curr[lib.$Target]) { - curr = curr[lib.$Target]; - } - return curr; - } - - const getOwn = (obj: any): [PropertyKey, any][] => { // helper function to get own enumerable properties - const tgt = unwrap(obj); - - return Reflect.ownKeys(tgt) - .filter(key => Object.getOwnPropertyDescriptor(tgt, key)?.enumerable) - .map(key => [key, tgt[key]]); - } - - if (!all) - return getOwn(json) as EntryOf[]; - - // all=true: collect per-level bottom-up, reverse to top-down, dedup via Map - // Map preserves first-insertion position but allows value update (own key shadows ancestor) - const levels: [PropertyKey, any][][] = []; - const limit = 50; // prevent infinite loops (increased from 10) - let depth = 0; - let proto: any = json; - - do { - const t = unwrap(proto); - - const lvl = getOwn(proto); - if (lvl.length) levels.push(lvl); - - proto = Object.getPrototypeOf(t); - } while (proto && proto !== Object.prototype && ++depth < limit); - - return [...new Map(levels.reverse().flat()).entries()] as EntryOf[]; -} - /** return an Object containing all 'own' and 'inherited' enumerable properties */ export function allObject(json: T) { return Object.fromEntries(ownEntries(json, true)); diff --git a/packages/library/src/common/serialize.library.ts b/packages/library/src/common/serialize.library.ts index 7ed1abe6..35fa71a8 100644 --- a/packages/library/src/common/serialize.library.ts +++ b/packages/library/src/common/serialize.library.ts @@ -1,5 +1,5 @@ import { curry } from '#library/function.library.js'; -import { ownKeys, ownValues, ownEntries } from '#library/reflection.library.js'; +import { ownKeys, ownValues, ownEntries } from '#library/primitive.library.js'; import { isType, asType, isEmpty, isDefined, isUndefined, isNullish, isString, isObject, isArray, isFunction, isSymbolFor, isSymbol } from '#library/type.library.js'; import type { Obj, Type } from '#library/type.library.js'; diff --git a/packages/library/src/common/utility.library.ts b/packages/library/src/common/utility.library.ts index a471a96c..2c13e6a0 100644 --- a/packages/library/src/common/utility.library.ts +++ b/packages/library/src/common/utility.library.ts @@ -1,4 +1,4 @@ -import { ownValues } from '#library/reflection.library.js'; +import { ownValues } from '#library/primitive.library.js'; import { isDefined, isPrimitive } from '#library/type.library.js'; import type { Secure, ValueOf } from '#library/type.library.js'; diff --git a/packages/tempo/scripts/core.ts b/packages/tempo/bin/core.ts similarity index 100% rename from packages/tempo/scripts/core.ts rename to packages/tempo/bin/core.ts diff --git a/packages/tempo/scripts/repl.ts b/packages/tempo/bin/repl.ts similarity index 75% rename from packages/tempo/scripts/repl.ts rename to packages/tempo/bin/repl.ts index 3584f43d..a2aebcc2 100644 --- a/packages/tempo/scripts/repl.ts +++ b/packages/tempo/bin/repl.ts @@ -1,10 +1,9 @@ import { Tempo, enums } from '#tempo'; -import { stringify, objectify, enumify, getType } from '#library'; -import { Token, Snippet } from '#tempo/tempo.default.js'; +import { stringify, objectify, enumify, getType, Pledge } from '#library'; import '#tempo/ticker'; // pre-load Tempo and Token to the global scope for ease of use in the REPL -Object.assign(globalThis, { Tempo, Token, Snippet, getType, stringify, objectify, enumify, enums }); +Object.assign(globalThis, { Tempo, getType, stringify, objectify, enumify, enums, Pledge }); console.log(`\n\x1b[38;2;252;194;1m\x1b[1m ⏳ Tempo \x1b[0m\x1b[38;2;45;212;191mREPL initialized.\x1b[0m\n`); diff --git a/packages/tempo/scripts/resolve-types.ts b/packages/tempo/bin/resolve-types.ts similarity index 88% rename from packages/tempo/scripts/resolve-types.ts rename to packages/tempo/bin/resolve-types.ts index a29a77a8..1e135c7b 100644 --- a/packages/tempo/scripts/resolve-types.ts +++ b/packages/tempo/bin/resolve-types.ts @@ -59,13 +59,16 @@ function rewrite(filePath: string) { replacement = './'; } else { // If at root (or elsewhere), #library/ becomes ./lib/ (with relative prefix) - let prefix = './'; - for (let i = 0; i < depth; i++) prefix = '../' + prefix; - replacement = `${prefix}lib/`; + let prefix = ''; + for (let i = 0; i < depth; i++) prefix += '../'; + replacement = `${prefix || './'}lib/`; } const updatedContent = content - .replace(/#library\//g, replacement) + .replace(/#library\/([^"')]+\.js)/g, (match, libPath) => { + const fileName = path.basename(libPath); + return `${replacement}${fileName}`; + }) .replace(/#library(['"])/g, (match, quote) => `${replacement}index.js${quote}`); if (content !== updatedContent) { diff --git a/packages/tempo/scripts/setup.polyfill.ts b/packages/tempo/bin/setup.polyfill.ts similarity index 100% rename from packages/tempo/scripts/setup.polyfill.ts rename to packages/tempo/bin/setup.polyfill.ts diff --git a/packages/tempo/scripts/tsconfig.json b/packages/tempo/bin/tsconfig.json similarity index 100% rename from packages/tempo/scripts/tsconfig.json rename to packages/tempo/bin/tsconfig.json diff --git a/packages/tempo/doc/tempo.pledge.md b/packages/tempo/doc/tempo.pledge.md index 4616ccee..6b9627e8 100644 --- a/packages/tempo/doc/tempo.pledge.md +++ b/packages/tempo/doc/tempo.pledge.md @@ -18,9 +18,25 @@ p.resolve('Success!'); // 3. Await the promise anywhere const result = await p.promise; + +// Note: resolve/reject are idempotent. Calling them on an already-settled +// pledge is safe; it will log a warning but won't change the state. +``` + +## 2. Then-ability + +A `Pledge` is a first-class "Then-able". You don't need to access `.promise` to chain your logic; you can call `.then()` and `.catch()` directly on the `Pledge` instance. + +```typescript +const p = new Pledge('NaturalAction'); + +p.then(val => console.log(val)) + .catch(err => console.error(err)); + +p.resolve('Victory!'); ``` -## 2. Advanced Callbacks +## 3. Advanced Callbacks You can register lifecycle hooks during instantiation. These are useful for cross-cutting concerns like logging or resource cleanup. @@ -37,7 +53,7 @@ const p = new Pledge({ * **`onReject`**: Triggered when `p.reject()` is called. * **`onSettle`**: Triggered regardless of outcome (analogous to `finally`). -## 3. Debugging with Tags +## 4. Debugging with Tags Each `Pledge` can be assigned a `tag` string. This tag is included in logs and error messages if the `debug` or `catch` flags are set. @@ -49,7 +65,7 @@ const p = new Pledge({ tag: 'DatabaseQuery', debug: true }); p.reject('Timeout'); ``` -## 4. Global Configuration +## 5. Global Configuration You can set global defaults for all future `Pledge` instances using `Pledge.init()`. @@ -62,10 +78,10 @@ Pledge.init({ To reset to library defaults: ```typescript -Pledge.init({}); +Pledge.init(); ``` -## 5. Automatic Cleanup (Symbol.dispose) +## 6. Automatic Cleanup (Symbol.dispose) `Pledge` implements the `Disposable` interface. If a `Pledge` goes out of scope while still pending, it will automatically reject to prevent "hanging" async operations. @@ -77,7 +93,7 @@ Pledge.init({}); } ``` -## 6. State Accessors +## 7. State Accessors * **`p.state`**: Returns `'pending'`, `'resolved'`, or `'rejected'`. * **`p.isPending`**: `boolean` diff --git a/packages/tempo/package.json b/packages/tempo/package.json index a63d3aed..15451cb4 100644 --- a/packages/tempo/package.json +++ b/packages/tempo/package.json @@ -148,11 +148,11 @@ }, "scripts": { "test": "vitest run --workspace ../../vitest.workspace.ts", - "repl": "tsx --conditions=development -i --import ./scripts/setup.polyfill.ts --import ./scripts/repl.ts", - "core": "tsx --conditions=development -i --import ./scripts/setup.polyfill.ts --import ./scripts/core.ts", + "repl": "tsx --conditions=development -i --import ./bin/setup.polyfill.ts --import ./bin/repl.ts", + "core": "tsx --conditions=development -i --import ./bin/setup.polyfill.ts --import ./bin/core.ts", "build": "tsc -b && npm run build:bundle && npm run build:resolve", "build:bundle": "rollup -c", - "build:resolve": "tsx scripts/resolve-types.ts", + "build:resolve": "tsx bin/resolve-types.ts", "clean": "tsc -b --clean && rm -rf dist", "publish": "npm publish --access public", "prepublishOnly": "npm run build" @@ -174,4 +174,4 @@ "doc": "doc", "test": "test" } -} \ No newline at end of file +} diff --git a/packages/tempo/rollup.config.js b/packages/tempo/rollup.config.js index f7ff27e2..ea22bffc 100644 --- a/packages/tempo/rollup.config.js +++ b/packages/tempo/rollup.config.js @@ -17,10 +17,10 @@ const getOutputFileName = (moduleId, name) => { : (name || '[name]') + '.js'; } -export default { - input: 'dist/tempo.index.js', - output: [ - { // The UMD bundle (standard single file for browser/legacy) +export default [ + { + input: 'dist/tempo.index.js', + output: { // The UMD bundle (standard single file for browser/legacy) file: 'dist/tempo.bundle.js', format: 'umd', name: 'Tempo', @@ -30,7 +30,18 @@ export default { '@js-temporal/polyfill': 'TemporalLibrary' } }, - { // The Granular Tree-Shaken ESM distribution + plugins: [ + resolve({ extensions: ['.js'] }), + indentFix() + ], + external: ['@js-temporal/polyfill'] + }, + { + input: { + 'tempo.index': 'dist/tempo.index.js', + 'library.index': 'dist/library.index.js' + }, + output: { // The Granular Tree-Shaken ESM distribution dir: 'dist', format: 'es', preserveModules: true, @@ -38,29 +49,31 @@ export default { sourcemap: false, indent: '\t', entryFileNames: (chunkInfo) => getOutputFileName(chunkInfo.facadeModuleId, chunkInfo.name) - } - ], - plugins: [ - resolve({ - extensions: ['.js'] - }), - { - name: 'indentation-fix', - renderChunk(code) { - const ms = new MagicString(code); - const regex = /^( {4})+/gm; - let match; + }, + plugins: [ + resolve({ extensions: ['.js'] }), + indentFix() + ], + external: ['@js-temporal/polyfill'] + } +]; - while ((match = regex.exec(code)) !== null) { - ms.overwrite(match.index, match.index + match[0].length, '\t'.repeat(match[0].length / 4)); - } +function indentFix() { + return { + name: 'indentation-fix', + renderChunk(code) { + const ms = new MagicString(code); + const regex = /^( {4})+/gm; + let match; - return { - code: ms.toString(), - map: ms.generateMap({ hires: true }) - }; + while ((match = regex.exec(code)) !== null) { + ms.overwrite(match.index, match.index + match[0].length, '\t'.repeat(match[0].length / 4)); } + + return { + code: ms.toString(), + map: ms.generateMap({ hires: true }) + }; } - ], - external: ['@js-temporal/polyfill'] + }; } diff --git a/packages/tempo/src/library.index.ts b/packages/tempo/src/library.index.ts index 8b00e162..41414897 100644 --- a/packages/tempo/src/library.index.ts +++ b/packages/tempo/src/library.index.ts @@ -1 +1,9 @@ -export * from '#library'; +/** + * # Tempo Library + * This is a secondary entry point for the "Tempo Utility Stack". + * It provides curated access to the specific utilities Tempo uses under the hood. + */ + +export { Pledge } from '#library/pledge.class.js'; +export { enumify, type Enum } from '#library/enumerate.library.js'; +export { proxify } from '#library/proxy.library.js'; diff --git a/packages/tempo/src/plugin/module/module.lexer.ts b/packages/tempo/src/plugin/module/module.lexer.ts index 5b968e5f..f49f8ab3 100644 --- a/packages/tempo/src/plugin/module/module.lexer.ts +++ b/packages/tempo/src/plugin/module/module.lexer.ts @@ -1,6 +1,6 @@ import '#library/temporal.polyfill.js'; import { isString, isEmpty, isUndefined, isDefined, isTemporal } from '#library/type.library.js'; -import { ownKeys, ownEntries } from '#library/reflection.library.js'; +import { ownKeys, ownEntries } from '#library/primitive.library.js'; import { pad, singular } from '#library/string.library.js'; import { Match } from '../../tempo.default.js'; import enums from '../../tempo.enum.js'; diff --git a/packages/tempo/src/plugin/module/module.term.ts b/packages/tempo/src/plugin/module/module.term.ts index a8d190dc..1c083d6d 100644 --- a/packages/tempo/src/plugin/module/module.term.ts +++ b/packages/tempo/src/plugin/module/module.term.ts @@ -81,7 +81,7 @@ export function resolveTermMutation(Tempo: any, instance: any, mutate: string, u // Calculate cursor's offset within current range (nanoseconds) const startNs = currentRange.start.toDateTime().epochNanoseconds as bigint; const cursorNs = zdt.epochNanoseconds as bigint; - const positionNs = cursorNs - startNs; + const positionNs = (directional || slickParsed) ? 0n : cursorNs - startNs; // Step through adjacent ranges to reach the target let jump = zdt; diff --git a/packages/tempo/src/plugin/plugin.util.ts b/packages/tempo/src/plugin/plugin.util.ts index d27bc185..a668ddb6 100644 --- a/packages/tempo/src/plugin/plugin.util.ts +++ b/packages/tempo/src/plugin/plugin.util.ts @@ -1,5 +1,5 @@ import { toZonedDateTime, toPlainDate, toInstant } from '#library/temporal.library.js'; -import { isDefined, isFunction, isString, isUndefined } from '#library/type.library.js'; +import { isDefined, isFunction, isString, isUndefined, isNumber } from '#library/type.library.js'; import { secure } from '#library/utility.library.js'; import { SCHEMA, getLargestUnit } from '../tempo.util.js'; import { sortKey, byKey } from '#library/array.library.js'; @@ -205,12 +205,14 @@ export function getTermRange(tempo: Tempo, list: Range[], keyOnly = true, anchor const obj: any = {}; for (let i = 0; i < SCHEMA.length; i++) { const [u] = SCHEMA[i]; - if (isDefined(range[u])) { - obj[u] = range[u]; + const val = range[u]; + if (isNumber(val)) { + obj[u] = val; } else if (i > rolloverIndex) { - obj[u] = (i <= 2) ? 1 : 0; // year, month, day reset to 1; time units reset to 0 + obj[u] = (i <= 2) ? 1 : 0; } else { - obj[u] = (anchor as any)[u]; + const fallback = (anchor as any)[u]; + obj[u] = isNumber(fallback) ? fallback : (i <= 2 ? 1 : 0); } } // @ts-ignore @@ -335,58 +337,88 @@ export function resolveTermShift(tempo: Tempo, source: any[], offset: string, sh return res.start; } +type resolveOptions = { + anchor?: any; + groupBy?: string[]; + [key: string]: any; +} /** - * ## resolveCycleWindow - * Helper to generate a 3-cycle candidate window around an anchor. - * Defaults to yearly cycles, but supports daily cycles if the template suggests it. + * # resolveCycleWindow + * Resolves a window of ranges (prev, current, next) around a source date, + * ensuring all returned ranges are detached clones and validated against the context. */ -export function resolveCycleWindow(t: Tempo, template: Range[], anchor?: any) { - const source = anchor ?? (t as any).toDateTime(); - const largest = getLargestUnit(template); +export function resolveCycleWindow(source: Tempo | any, template: Range[] | Record, { anchor, groupBy = [], ...options }: resolveOptions = {}): Range[] { + // ensure we have a valid Tempo instance to work with + const t = isTempo(source) ? source : (isDefined(source) ? new (getHost(source))(source) : source); + if (!isTempo(t)) return []; + + // 1. Resolve Template (supporting optional dynamic grouping) + let list: Range[] = []; + if (!isDefined(template)) { + (t.constructor as any)[sym.$termError](t.config, 'template'); + return []; + } - // Handle Daily Cycles (e.g. TimelineTerm) - if (largest === 'hour' || largest === 'minute') { - const list: Range[] = []; - const base = toPlainDate(source); + if (!Array.isArray(template) && groupBy.length > 0) { + const groupKey = groupBy + .map(key => options[key] ?? anchor?.[key] ?? t.config[key] ?? (t as any)[key] ?? '') + .join('.'); + list = (template as any)[groupKey] ?? []; + + if (list.length === 0) { + const missing = groupBy.filter(k => isUndefined(options[k]) && isUndefined(anchor?.[k]) && isUndefined(t.config[k])); + const msg = missing.length > 0 ? `Missing grouping criteria: ${missing.join(', ')}` : `No ranges found for group: ${groupKey}`; + (t.constructor as any)[sym.$termError](t.config, msg); + return []; + } + } else { + list = Array.isArray(template) ? template : Object.values(template).flat() as Range[]; + } + + if (list.length === 0) return []; + + // 2. Resolve Window (Sub-Yearly vs Yearly) + const unit = getLargestUnit(list); + if (!['year', 'month', 'day'].includes(unit as any)) { + const results: Range[] = []; for (const offset of [-1, 0, 1]) { - const date = base.add({ days: offset }); - template.forEach(itm => { - list.push({ + const date = t.add({ days: offset }); + list.forEach(itm => { + results.push({ ...itm, - year: date.year, - month: date.month, - day: date.day + year: date.yy, + month: date.mm, + day: date.dd }); }); } - return list; + return results; } // Handle Yearly Cycles (Default) - const yy = isTempo(source) ? source.yy : (source.year ?? source.yy); - const mm = isTempo(source) ? source.mm : (source.month ?? source.mm); - const dd = isTempo(source) ? source.dd : (source.day ?? source.dd); + const yy = t.yy; + const mm = t.mm; + const dd = t.dd; - const startItem = template[0]; + const startItem = list[0]; const startMm = startItem.month ?? 1; const startDd = startItem.day ?? 1; let baseYear = yy; if (mm < startMm || (mm === startMm && dd < startDd)) baseYear--; - const list: Range[] = []; + const window: Range[] = []; for (const offset of [-1, 0, 1]) { - const yy = baseYear + offset; - template.forEach(itm => { + const targetYY = baseYear + offset; + list.forEach(itm => { const clone = { ...itm }; - if (isDefined(itm.year)) clone.year = itm.year + yy; - else clone.year = yy; - list.push(clone); + if (isDefined(itm.year)) clone.year = itm.year + targetYY; + else clone.year = targetYY; + window.push(clone); }); } - - return list; + return window; } /** diff --git a/packages/tempo/src/plugin/term/term.quarter.ts b/packages/tempo/src/plugin/term/term.quarter.ts index 59135f66..6f8f068f 100644 --- a/packages/tempo/src/plugin/term/term.quarter.ts +++ b/packages/tempo/src/plugin/term/term.quarter.ts @@ -1,5 +1,4 @@ import { defineTerm, getTermRange, defineRange, resolveCycleWindow } from '../plugin.util.js'; -import sym from '../../tempo.symbol.js'; import { COMPASS } from '../../tempo.enum.js'; import { type Tempo } from '../../tempo.class.js'; import { isNumber } from '#library/type.library.js'; @@ -20,17 +19,7 @@ const groups = defineRange([ /** resolve the full candidate list for the current context */ function resolve(t: Tempo, anchor?: any): any[] { - const sphere = (anchor as any)?.sphere ?? t.config.sphere; - - if (sphere === undefined) { - (t.constructor as any)[sym.$termError](t.config, 'sphere'); - return []; - } - - const template = (groups as any)[sphere] ?? []; - if (template.length === 0) return []; - - const list = resolveCycleWindow(t, template, anchor).map(itm => ({ ...itm })); + const list = resolveCycleWindow(t, groups, { anchor, groupBy: ['sphere'] }); list.forEach(itm => { if (isNumber(itm.fiscal)) itm.fiscal += itm.year; @@ -55,8 +44,6 @@ export const QuarterTerm = defineTerm({ /** determine where the current Tempo instance fits within the above range */ define(this: Tempo, keyOnly?: boolean, anchor?: any) { const res = resolve(this, anchor); - const result = getTermRange(this, asArray(res), keyOnly, anchor) as any; - - return result; + return getTermRange(this, asArray(res), keyOnly, anchor) as any; } }); diff --git a/packages/tempo/src/plugin/term/term.season.ts b/packages/tempo/src/plugin/term/term.season.ts index 40037f7d..7b72e93a 100644 --- a/packages/tempo/src/plugin/term/term.season.ts +++ b/packages/tempo/src/plugin/term/term.season.ts @@ -1,7 +1,6 @@ import { getTermRange, defineTerm, defineRange, resolveCycleWindow } from '../plugin.util.js'; import { COMPASS } from '../../tempo.enum.js'; -import { type Tempo } from '../../tempo.class.js'; -import sym from '../../tempo.symbol.js'; +import type { Tempo } from '../../tempo.class.js'; /** definition of meteorological season ranges */ const groups = defineRange([ @@ -26,17 +25,7 @@ const groups = defineRange([ /** resolve the full candidate list for the current context */ function resolve(t: Tempo, anchor?: any) { - const sphere = (anchor as any)?.sphere ?? t.config.sphere; - - if (sphere === undefined) { - (t.constructor as any)[sym.$termError](t.config, 'sphere'); - return []; - } - - const template = (groups as any)[`meteorological.${sphere}`] ?? []; - if (template.length === 0) return []; - - const list = resolveCycleWindow(t, template, anchor); + const list = resolveCycleWindow(t, groups, { anchor, groupBy: ['group', 'sphere'], group: 'meteorological' }); // append Chinese trait information as an additional metadata field (CN) const chinese = (groups as any)['chinese.'] ?? []; diff --git a/packages/tempo/src/plugin/term/term.timeline.ts b/packages/tempo/src/plugin/term/term.timeline.ts index f622b8fd..97383bc8 100644 --- a/packages/tempo/src/plugin/term/term.timeline.ts +++ b/packages/tempo/src/plugin/term/term.timeline.ts @@ -14,8 +14,7 @@ const groups = defineRange([ ], 'group'); function resolve(t: Tempo, anchor?: any) { - const template = groups["standard"] ?? []; - return resolveCycleWindow(t, template, anchor); + return resolveCycleWindow(t, groups, { ...anchor, sphere: 'standard' }); } export const TimelineTerm = defineTerm({ @@ -30,6 +29,6 @@ export const TimelineTerm = defineTerm({ /** determine where the current Tempo instance fits within the above range */ define(this: Tempo, keyOnly?: boolean, anchor?: any) { - return getTermRange(this, groups['standard'], keyOnly, anchor); + return getTermRange(this, resolve(this, anchor), keyOnly, anchor); } }); diff --git a/packages/tempo/src/plugin/term/term.zodiac.ts b/packages/tempo/src/plugin/term/term.zodiac.ts index 69d40d7b..208f6da1 100644 --- a/packages/tempo/src/plugin/term/term.zodiac.ts +++ b/packages/tempo/src/plugin/term/term.zodiac.ts @@ -1,5 +1,6 @@ import { defineTerm, getTermRange, defineRange, resolveCycleWindow } from '../plugin.util.js'; import { type Tempo } from '../../tempo.class.js'; +import { isNumber } from '#library/type.library.js'; /** definition of astrological zodiac ranges */ const groups = defineRange([ @@ -41,14 +42,12 @@ const groups = defineRange([ /** resolve the full candidate list for the current context */ function resolve(t: Tempo, anchor?: any) { - const western = (groups as any)['western'] ?? []; - if (western.length === 0) return []; - - const list = resolveCycleWindow(t, western, anchor); + const list = resolveCycleWindow(t, groups, { anchor, groupBy: ['group'], group: 'western' }); // calculate the Chinese Zodiac based on the year of the candidate sign - list.forEach((itm: any) => { - itm['CN'] = getChineseZodiac(itm.year); + list.forEach(itm => { + const year = itm.year ?? (anchor?.year); + if (isNumber(year)) itm['CN'] = getChineseZodiac(year); }); return list; @@ -79,18 +78,21 @@ function getChineseZodiac(year: number) { const animals = (groups as any)['animal'] ?? []; const elements = (groups as any)['element'] ?? []; - if (animals.length === 0 || elements.length === 0) { - throw new Error(`[getChineseZodiac] Missing registration: animal (${animals.length}) or element (${elements.length})`); - } + if (animals.length === 0 || elements.length === 0) return undefined; + + const animalIndex = ((year - 4) % 12 + 12) % 12; + const elementIndex = Math.floor((((year - 4) % 10) + 10) % 10 / 2); + const yinYang = year % 2 === 0 ? 'Yang' : 'Yin'; + + const animal = animals[animalIndex]; + const element = elements[elementIndex]; - const animalIndex = ((year - 4) % 12 + 12) % 12; // calculate the animal index - const elementIndex = Math.floor((((year - 4) % 10) + 10) % 10 / 2); // calculate the element index based on the last digit of the year - const yinYang = year % 2 === 0 ? 'Yang' : 'Yin'; // determine Yin or Yang + if (!animal || !element) return undefined; return { - animal: animals[animalIndex].key, - traits: (animals[animalIndex] as any).traits, - element: elements[elementIndex].key, + animal: animal.key, + traits: (animal as any).traits, + element: element.key, yinYang: yinYang } } diff --git a/packages/tempo/src/tempo.class.ts b/packages/tempo/src/tempo.class.ts index 7243d9c2..3e16a386 100644 --- a/packages/tempo/src/tempo.class.ts +++ b/packages/tempo/src/tempo.class.ts @@ -9,7 +9,8 @@ import { proxify, delegate } from '#library/proxy.library.js'; import lib, { markConfig } from '#library/symbol.library.js'; import { getContext, CONTEXT } from '#library/utility.library.js'; import { enumify } from '#library/enumerate.library.js'; -import { ownKeys, ownEntries, getAccessors, omit } from '#library/reflection.library.js'; +import { ownKeys, ownEntries } from '#library/primitive.library.js'; +import { getAccessors, omit } from '#library/reflection.library.js'; import { pad, trimAll } from '#library/string.library.js'; import { getType, asType, isEmpty, isNull, isNullish, isDefined, isUndefined, isString, isObject, isNumber, isRegExp, isRegExpLike, isIntegerLike, isSymbol, isFunction, isClass, isZonedDateTime, isPlainDate, isPlainTime } from '#library/type.library.js'; import { getDateTimeFormat, getHemisphere, canonicalLocale } from '#library/international.library.js'; @@ -84,8 +85,8 @@ export class Tempo { /** initialization strategies */ static get MODE() { return enums.MODE } /** some useful Dates */ static get LIMIT() { return enums.LIMIT } - /** check if Tempo is currently initializing */ static get isInitializing() { return Tempo.#lifecycle.extendDepth > 0 || !Tempo.#lifecycle.ready } - /** check if Tempo is currently extending */ static get isExtending() { return Tempo.#lifecycle.extendDepth > 0 } + /** @internal check if Tempo is currently initializing */ static get isInitializing() { return Tempo.#lifecycle.extendDepth > 0 || !Tempo.#lifecycle.ready } + /** @internal check if Tempo is currently extending */ static get isExtending() { return Tempo.#lifecycle.extendDepth > 0 } static #dbg = new Logify('Tempo', { debug: Default?.debug ?? false, @@ -100,26 +101,26 @@ export class Tempo { /** Master Guard predicate (implements RegExp-like interface) */static #guard: { test(str: string): boolean } = { test: () => true }; /** Set of allowed lowercased tokens for the Master Guard */ static #allowedTokens: Set = new Set(); - /** handle internal errors using the global config */ + /** @internal handle internal errors using the global config */ static [sym.$logError](...msg: any[]): void { const config = (isObject(msg[0]) && (msg[0] as any)[lib.$Logify] === true) ? msg.shift() : Tempo.#global.config; markConfig(config); // ensure config is marked for Logify Tempo.#dbg.error(config, ...msg); } - /** internal key for signaling pre-errored state in constructor */ + /** @internal internal key for signaling pre-errored state in constructor */ static [sym.$errored] = sym.$errored; - /** guard against infinite mutation recursion */ + /** @internal guard against infinite mutation recursion */ static [sym.$mutateDepth] = 0; - /** hook to re-validate the Master Guard */ + /** @internal hook to re-validate the Master Guard */ static [sym.$rebuildGuard]() { Tempo.#buildGuard() } - /** handle internal debug info using the global config */ + /** @internal handle internal debug info using the global config */ static [sym.$logDebug](...msg: any[]): void { Tempo.#dbg.debug(...msg); } - /** Centralized error dispatcher for Term resolution failures */ + /** @internal Centralized error dispatcher for Term resolution failures */ static [sym.$termError](config: t.Options, term: string): void { const hint = Tempo.#terms.length === 0 ? ". (No term plugins are registered—did you forget to call Tempo.extend(TermsModule)?)" : ""; const msg = `Unknown Term identifier: ${term}${hint}`; @@ -755,17 +756,17 @@ export class Tempo { return interpret(Tempo, 'duration', 'toDuration', input); } - /** Reads options from persistent storage (e.g., localStorage). */ + /** @internal Reads options from persistent storage (e.g., localStorage). */ static readStore(key = Tempo.#global.config.store) { return getStorage(key, {}); } - /** Writes configuration into persistent storage. */ + /** @internal Writes configuration into persistent storage. */ static writeStore(config?: t.Options, key = Tempo.#global.config.store) { return setStorage(key, config); } - /** lookup or registers a new `Symbol` for a given key. */ + /** @internal lookup or registers a new `Symbol` for a given key. */ static getSymbol(key?: string | symbol) { if (isUndefined(key)) { const usr = `usr.${++Tempo.#usrCount}`; // allocate a prefixed 'user' key @@ -782,7 +783,7 @@ export class Tempo { return Token[key as keyof typeof Token] ?? Symbol.for(`$Tempo.${key}`); } - /** translates {layout} into an anchored, case-insensitive RegExp. */ + /** @internal translates {layout} into an anchored, case-insensitive RegExp. */ static regexp(layout: string | RegExp, snippet?: Snippet) { // helper function to replace {name} placeholders with their corresponding snippets function matcher(str: string | RegExp, depth = 0): string { diff --git a/packages/tempo/src/tempo.default.ts b/packages/tempo/src/tempo.default.ts index edbeeab5..15f2cfcd 100644 --- a/packages/tempo/src/tempo.default.ts +++ b/packages/tempo/src/tempo.default.ts @@ -12,10 +12,7 @@ import type { Tempo } from './tempo.class.js'; /** characters allowed inside timezone/calendar brackets */ const bracket_content = /[^\]]+/; -/** - * Tempo Match patterns — Soft-Frozen to allow for dynamic event/period resolution - * common RegExp patterns - */ +/** @internal Tempo Match patterns */ export const Match = proxify({ /** match all {} pairs, if they start with a word char */ braces: /{([#]?[\w]+(?:\.[\w]+)*)}/g, /** named capture-group, if it starts with a letter */ captures: /\(\?<([a-zA-Z][\w]*)>(.*?)(?()({ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Snippet Symbols /** year */ yy: Symbol('yy'), @@ -75,6 +72,7 @@ export const Token = looseIndex()({ /** relative offset (years, days, hours, etc) */ rel: Symbol('relativeOffset'), /** timezone/calendar brackets */ brk: Symbol('brackets'), }) +/** @internal Tempo Symbol registry type */ export type Token = typeof Token /** @@ -89,6 +87,7 @@ export type Token = typeof Token * a {snippet} is a simple, reusable regex pattern for a component of a date-time string (e.g. 'hh' or 'yy') */ // Note: computed Components ('evt', 'per') are added during 'Tempo.init()' (for static) and/or 'new Tempo()' (per instance) +/** @internal Tempo Snippet registry */ export const Snippet = looseIndex()({ [Token.yy]: /(?([0-9]{2})?[0-9]{2})/, // arbitrary upper-limit of yy=9999 [Token.mm]: /(?[0\s]?[1-9]|1[0-2]|Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)/, // month-name (abbrev or full) or month-number 01-12 @@ -109,12 +108,14 @@ export const Snippet = looseIndex()({ [Token.brk]: new RegExp(`(\\[(?${bracket_content.source})\\](?:\\[(?${bracket_content.source})\\])?)?`), // timezone/calendar brackets [...] [Token.slk]: new RegExp(`${Match.shorthand.source}`), // shorthand shifter }) +/** @internal Tempo Snippet type */ export type Snippet = typeof Snippet /** * a {layout} is a Record of snippet-combinations describing an input DateTime argument * the Layout's keys are in the order that they will be checked against an input value */ +/** @internal Tempo Layout registry */ export const Layout = looseIndex()({ [Token.dt]: '({dd}{sep}?{mm}({sep}?{yy})?|{mod}?({evt})|(?{slk}))',// calendar, event or slick [Token.tm]: '({hh}{mi}?{ss}?{ff}?{mer}?|{per})', // clock or period @@ -126,6 +127,7 @@ export const Layout = looseIndex()({ [Token.off]: '{mod}?{dd}{afx}?', // day of month, with optional offset [Token.rel]: '{nbr}{sep}?{unt}{sep}?{afx}', // relative duration (e.g. 2 days ago) }) +/** @internal Tempo Layout type */ export type Layout = typeof Layout /** @@ -134,6 +136,7 @@ export type Layout = typeof Layout * if assigning a function, use standard 'function()' syntax to allow for 'this' binding. * also, a function should always have a .toString() method which returns a parse-able Date string */ +/** @internal Tempo Event registry */ export const Event = looseIndex()({ 'new.?years? ?eve': '31 Dec', 'nye': '31 Dec', @@ -151,6 +154,7 @@ export const Event = looseIndex()({ 'tomorrow': function (this: Tempo) { return this.add({ days: 1 }) }, // tomorrow at current time 'yesterday': function (this: Tempo) { return this.add({ days: -1 }) }, // yesterday at current time }); +/** @internal Tempo Event type */ export type Event = typeof Event /** @@ -158,6 +162,7 @@ export type Event = typeof Event * values can be a string or a function that returns a string. * if using a function, use regular 'function()' syntax to allow for 'this' binding. */ +/** @internal Tempo Period registry */ export const Period = looseIndex()({ 'mid[ -]?night': '24:00', 'morning': '8:00', @@ -168,10 +173,11 @@ export const Period = looseIndex()({ 'evening': '18:00', 'night': '20:00', }) +/** @internal Tempo Period type */ export type Period = typeof Period -/** Reasonable default options for initial Tempo config */ +/** @internal Tempo Master Guard list */ export const Guard = [ 'am', 'pm', 'ago', 'hence', 'this', 'next', 'prev', 'last', 'from', 'now', 'today', 'yesterday', 'tomorrow', 'start', 'mid', 'end', 'year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond', @@ -180,7 +186,7 @@ export const Guard = [ 'mondays', 'tuesdays', 'wednesdays', 'thursdays', 'fridays', 'saturdays', 'sundays' ] -/** Reasonable default options for initial Tempo config */ +/** @internal Tempo Default options */ export const Default = secure({ /** log to console */ debug: false, /** catch or throw Errors */ catch: false, diff --git a/packages/tempo/src/tempo.enum.ts b/packages/tempo/src/tempo.enum.ts index c6d946a9..a170848e 100644 --- a/packages/tempo/src/tempo.enum.ts +++ b/packages/tempo/src/tempo.enum.ts @@ -1,10 +1,12 @@ import lib from '#library/symbol.library.js'; import { enumify, Enum } from '#library/enumerate.library.js'; import { proxify } from '#library/proxy.library.js'; -import { allDescriptors, ownKeys } from '#library/reflection.library.js'; +import { ownKeys } from '#library/primitive.library.js'; +import { allDescriptors } from '#library/reflection.library.js'; import { clearCache } from '#library/function.library.js'; import { isUndefined, isDefined } from '#library/type.library.js'; import type { OwnOf, KeyOf, ValueOf, LooseUnion, Mutable, Property } from '#library/type.library.js'; +import sym from './tempo.symbol.js'; /** calendar seasons */ export const SEASON = enumify({ @@ -240,7 +242,7 @@ export function registryUpdate(name: keyof typeof STATE, data: Record; Object.entries(data).forEach(([key, val]) => { - if (isUndefined(target[key])) { // only add if key does not exist + if (isUndefined(target[key])) { // only add if key does not exist Object.defineProperty(target, key, { value: val, enumerable: true, @@ -255,9 +257,9 @@ export function registryUpdate(name: keyof typeof STATE, data: Record void)[] => (globalThis as any)[Symbol.for('$TempoReset')] ??= []; +const resetHooks = (): (() => void)[] => (globalThis as any)[sym.$reset] ??= []; -/** Register a hook to be called when the registry is reset */ +/** @internal Register a hook to be called when the registry is reset */ export function onRegistryReset(hook: () => void) { resetHooks().push(hook); } diff --git a/packages/tempo/src/tempo.index.ts b/packages/tempo/src/tempo.index.ts index 8cac962a..8674b8bc 100644 --- a/packages/tempo/src/tempo.index.ts +++ b/packages/tempo/src/tempo.index.ts @@ -9,14 +9,12 @@ import { onRegistryReset } from './tempo.enum.js'; // Batteries Included: Register standard modules const core = [MutateModule, FormatModule, DurationModule, TermsModule, TickerModule]; -onRegistryReset(() => { - Tempo.extend(core); -}); +onRegistryReset(() => { Tempo.extend(core); }); Tempo.extend(core); export * from './tempo.class.js'; export { default as enums } from './tempo.enum.js'; // Tempo enumerators -// export common patterns and symbols for custom Layouts -export { Token, Snippet, Match, Default, Guard } from './tempo.default.js'; +// /** @internal export common patterns and symbols for custom Layouts */ +// export { Token, Snippet, Match, Default, Guard } from './tempo.default.js'; diff --git a/packages/tempo/src/tempo.symbol.ts b/packages/tempo/src/tempo.symbol.ts index 7ac78307..6509bcb4 100644 --- a/packages/tempo/src/tempo.symbol.ts +++ b/packages/tempo/src/tempo.symbol.ts @@ -21,7 +21,7 @@ const $errored = Symbol.for('$TempoErrored'); const $Internal = Symbol.for('$TempoInternal'); const $mutateDepth = Symbol.for('$TempoMutateDepth'); const $rebuildGuard = Symbol.for('$TempoRebuildGuard'); -export const $reset = Symbol.for('$TempoReset'); +const $reset = Symbol.for('$TempoReset'); /** * Define a reactive registration hook on a global symbol. diff --git a/packages/tempo/test-slick.test.ts b/packages/tempo/test-slick.test.ts deleted file mode 100644 index d648513d..00000000 --- a/packages/tempo/test-slick.test.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { Tempo } from './src/tempo.class.js'; - -describe('Slick shorthand behavior', () => { - it('should behave correctly with set and add', () => { - const t1 = new Tempo('2026-05-15', {sphere:'south'}); - const t2 = t1.set('#qtr.<'); - const t3 = t1.add('#qtr.<'); - - console.log('t1 (current):', t1.format('YYYY-MM-DD')); - console.log('t2 (set) :', t2.format('YYYY-MM-DD')); - console.log('t3 (add) :', t3.format('YYYY-MM-DD')); - }); -}); diff --git a/packages/tempo/test-slick.ts b/packages/tempo/test-slick.ts deleted file mode 100644 index 9a623418..00000000 --- a/packages/tempo/test-slick.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Tempo } from './src/tempo.class'; - -const t1 = new Tempo({sphere:'south'}); -const t2 = t1.set('#qtr.<'); -const t3 = t1.add('#qtr.<'); - -console.log('t1 (current):', t1.format('YYYY-MM-DD')); -console.log('t2 (set) :', t2.format('YYYY-MM-DD')); -console.log('t3 (add) :', t3.format('YYYY-MM-DD')); diff --git a/packages/tempo/test/term.test.ts b/packages/tempo/test/term.test.ts index 9ed9026f..9c13b7be 100644 --- a/packages/tempo/test/term.test.ts +++ b/packages/tempo/test/term.test.ts @@ -8,7 +8,7 @@ const label = 'term:'; describe(`${label}`, () => { test(`${label} check for the {quarter} plugin`, () => { - const qtr = Tempo.terms.find(({ key }) => key === 'qtr'); + const qtr = Tempo.terms.find(({ key }: any) => key === 'qtr'); expect(qtr) .toBeDefined() diff --git a/packages/tempo/test/timezone_offset.test.ts b/packages/tempo/test/timezone_offset.test.ts index b5ca9b96..636a40d3 100644 --- a/packages/tempo/test/timezone_offset.test.ts +++ b/packages/tempo/test/timezone_offset.test.ts @@ -1,5 +1,4 @@ import { Tempo } from '../src/tempo.class.js'; -import '../src/plugin/module/module.format.js'; describe('Tempo TimeZone Offset', () => { beforeEach(() => { diff --git a/packages/tempo/tsconfig.json b/packages/tempo/tsconfig.json index 046c6fc0..9ab5d262 100644 --- a/packages/tempo/tsconfig.json +++ b/packages/tempo/tsconfig.json @@ -3,6 +3,6 @@ "references": [ { "path": "./src" }, { "path": "./test" }, - { "path": "./scripts" } + { "path": "./bin" } ] } From 87bdf1ea8730d4969d1aea650f361b4796974a34 Mon Sep 17 00:00:00 2001 From: Michael McRae Date: Thu, 16 Apr 2026 14:16:49 +1000 Subject: [PATCH 04/18] recovery OOM --- .../tempo/src/plugin/module/module.term.ts | 42 ++++--- packages/tempo/src/plugin/plugin.util.ts | 110 +++++++++++------- packages/tempo/src/tempo.enum.ts | 4 +- packages/tempo/test/duration.core.test.ts | 4 + packages/tempo/test/timezone_offset.test.ts | 2 +- vitest.workspace.ts | 2 +- 6 files changed, 99 insertions(+), 65 deletions(-) diff --git a/packages/tempo/src/plugin/module/module.term.ts b/packages/tempo/src/plugin/module/module.term.ts index 1c083d6d..d7d7b6ab 100644 --- a/packages/tempo/src/plugin/module/module.term.ts +++ b/packages/tempo/src/plugin/module/module.term.ts @@ -63,7 +63,7 @@ export function resolveTermMutation(Tempo: any, instance: any, mutate: string, u const numeric = !slickParsed && isNumeric(offset); if (directional || numeric || (slickParsed && !mod)) { - const addDir = directional + const shiftDir = directional ? ((mod!.includes('<') || mod!.includes('-') || mod === 'prev' || mod === 'last') ? -1 : 1) : (numeric ? Math.sign(Number(offset) || 1) : 1); const addCount = slickParsed @@ -81,7 +81,7 @@ export function resolveTermMutation(Tempo: any, instance: any, mutate: string, u // Calculate cursor's offset within current range (nanoseconds) const startNs = currentRange.start.toDateTime().epochNanoseconds as bigint; const cursorNs = zdt.epochNanoseconds as bigint; - const positionNs = (directional || slickParsed) ? 0n : cursorNs - startNs; + const positionNs = cursorNs - startNs; // Step through adjacent ranges to reach the target let jump = zdt; @@ -95,19 +95,19 @@ export function resolveTermMutation(Tempo: any, instance: any, mutate: string, u const range = getTermRange(instance, jumpList, false, jump) as any; if (!range) break; - jump = addDir > 0 - ? range.end.toDateTime() - : range.start.toDateTime().subtract({ nanoseconds: 1 }); - - const nextList = getRange(termObj, instance, jump); - const next = getTermRange(instance, nextList, false, jump) as any; - if (!next) break; + const matchKey = !rKey || range.key?.toLowerCase() === rKey.toLowerCase(); + const hasMoved = (shiftDir > 0) + ? (range.start.toDateTime().epochNanoseconds as bigint) > (zdt.epochNanoseconds as bigint) + : (range.end.toDateTime().epochNanoseconds as bigint) < (zdt.epochNanoseconds as bigint); - // If a specific range-key was requested, skip non-matching ranges - if (rKey && next.key?.toLowerCase() !== rKey.toLowerCase()) continue; + if (matchKey && (iters > 1 || hasMoved)) { + target = range; + remaining--; + } - target = next; - remaining--; + jump = (shiftDir > 0) + ? range.end.toDateTime() + : range.start.toDateTime().subtract({ nanoseconds: 1 }); } if (!target || remaining > 0) { @@ -313,8 +313,8 @@ export function resolveTermMutation(Tempo: any, instance: any, mutate: string, u let match = false; if (mod === '>' || mod === 'next') match = (iterations > 1) ? (start >= cursor) : (start > cursor); else if (mod === '<' || mod === 'prev' || mod === 'last') match = (iterations > 1) ? (end <= cursor) : (end < cursor); - else if (mod === '>=') match = iterations > 1 ? start >= cursor : end > cursor; - else if (mod === '<=') match = iterations > 1 ? end <= cursor : start <= cursor; + else if (mod === '>=') match = (iterations > 1) ? (start >= cursor) : (end > cursor); + else if (mod === '<=') match = (iterations > 1) ? (end <= cursor) : (start <= cursor); else if (mod === '+' || mod === '-') { const res = parseModifier({ mod: mod as any, adjust: 1, offset: Number(cursor / 1000000n), @@ -426,7 +426,17 @@ export function resolveTermMutation(Tempo: any, instance: any, mutate: string, u return isZonedDateTime(res) ? res : next; } - // 3. Handle Numeric Shifts or Term Shifting + // 3. Handle Absolute Numeric Set (e.g. .set({ '#quarter': 2 })) + if (mutate === 'set' && !mod && isNumeric(offset)) { + const rawList = getRange(termObj, instance, zdt); + const target = getTermRange(instance, rawList, Number(offset), zdt) as any; + if (target) return target.start.toDateTime().withTimeZone(tz).withCalendar(cal); + + Tempo[sym.$termError](instance.config, unit); + return null; + } + + // 4. Handle Numeric Shifts or Term Shifting if (isNumeric(offset) || (isString(offset) && offset.startsWith('#'))) { const shiftValue = isNumeric(offset) ? Number(offset) : 1; let jump = zdt; diff --git a/packages/tempo/src/plugin/plugin.util.ts b/packages/tempo/src/plugin/plugin.util.ts index a668ddb6..e661d4b7 100644 --- a/packages/tempo/src/plugin/plugin.util.ts +++ b/packages/tempo/src/plugin/plugin.util.ts @@ -51,13 +51,8 @@ export const REGISTRY = new Proxy(_REGISTRY, { } }); -/** internal helper to resolve the class-host from either an instance or the class itself */ export function getHost(t: any): any { - const isFn = typeof t === 'function'; - if (isFn) return t?.[lib.$Target] ?? t; - const host = (t as any)?.constructor ?? (isDefined(t) ? Reflect.get(Object(t), 'constructor') : Object); - const target = host?.[lib.$Target] ?? host; - return typeof target === 'function' ? target : Object; + return (t as any).constructor; } /** @@ -170,29 +165,6 @@ export function getTermRange(tempo: Tempo, list: Range[], keyOnly = true, anchor const chronological = sortKey([...list], 'year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond'); if (chronological.length === 0) return undefined; - const match = chronological - .toReversed() - .find((range: any) => { - for (const [rKey, sKey] of SCHEMA) { - const val = range[rKey]; - - if (isDefined(val)) { - const source: any = anchor ?? tempo; - const sVal = isTempo(source) ? source[sKey] : source[sKey] ?? source[rKey]; - - if (sVal === undefined) continue; - if (sVal > val) return true; - if (sVal < val) return false; - } - } - - return true; // fallback if DateTime exactly matches a range criteria - }) - ?? chronological.at(-1)! - - const i = chronological.indexOf(match); - const next = chronological[i + 1]; - const zdt = anchor ?? (tempo as any).toDateTime(); // determine the largest unit defined in the range list, and use the unit above it as rollover @@ -216,39 +188,81 @@ export function getTermRange(tempo: Tempo, list: Range[], keyOnly = true, anchor } } // @ts-ignore - const zdt = toZonedDateTime({ ...obj, timeZone: anchor.timeZoneId, calendar: anchor.calendarId }); + const resZdt = toZonedDateTime({ ...obj, timeZone: anchor.timeZoneId, calendar: anchor.calendarId }); // @ts-ignore - return new tempo.constructor(zdt, (tempo as any).config); + return new tempo.constructor(resZdt, (tempo as any).config); } + const matchIndex = chronological.findLastIndex(range => { + const date = resolve(range, zdt); + return (date.toDateTime().epochNanoseconds as bigint) <= (zdt.epochNanoseconds as bigint); + }); + + if (isNumber(keyOnly)) { + const cycle = chronological.length / 3; + const offset = matchIndex === -1 ? cycle : Math.floor(matchIndex / cycle) * cycle; + const match = chronological[offset + (keyOnly - 1)]; + const start = resolve(match, zdt); + let end: Tempo; + const i = offset + (keyOnly - 1); + const next = chronological[i + 1]; + + if (next) { + end = resolve(next, zdt); + } else { + const roll = { ...match }; + if (isNumber(roll.year)) roll.year++; + end = resolve(roll, zdt.add({ [`${rolloverUnit}s`]: 1 } as any)); + } + + return { + range: match, + start, + end, + ...match + }; + } + + const match = chronological[matchIndex === -1 ? 0 : matchIndex]; + if (keyOnly === true) return match.key; + + const i = chronological.indexOf(match); + const next = chronological[i + 1]; + const start = resolve(match, zdt); let end: Tempo; if (next) { end = resolve(next, zdt); } else { - end = resolve(match, zdt.add({ [`${rolloverUnit}s`]: 1 } as any)); + const roll = { ...match }; + if (isNumber(roll.year)) roll.year++; + end = resolve(roll, zdt.add({ [`${rolloverUnit}s`]: 1 } as any)); } - if (keyOnly) return match.key; - - const result = { - ...match, + return { + range: match, start, - end - } as ResolvedRange; - return result; + end, + ...match + }; } /** * # getRange * Resolve the full list of candidates for a term, passing an anchor to prevent recursion. */ -export function getRange(term: TermPlugin, t: Tempo, anchor?: any, group?: string): Range[] { +export function getRange(entry: any, t: Tempo, anchor?: any, group?: string): Range[] { + const term = (entry.plugin ?? entry) as TermPlugin; let res: any; try { - res = term.resolve ? term.resolve.call(t, anchor) : term.define.call(t, false, anchor); + if (isDefined(anchor)) { + const host = new (getHost(t))(anchor, (t as any).config); + res = isFunction(term.resolve) ? term.resolve.call(host, anchor) : term.define.call(host, false, anchor); + } else { + res = isFunction(term.resolve) ? term.resolve.call(t) : term.define.call(t, group); + } } catch (err: any) { if (err.message.includes('Class constructor')) { return []; @@ -258,12 +272,18 @@ export function getRange(term: TermPlugin, t: Tempo, anchor?: any, group?: strin let list = (res == null) ? [] : (Array.isArray(res) ? res : [res]); + const keys = (term as any).groupBy ?? []; + if (keys.length > 0) { + list = list.filter(r => keys.every((key: string) => r[key] === (t.config as any)[key])); + } + if (group) { - // find the registered ranges for this term and filter by group - const meta: any = (term as any).groups ?? (term as any).ranges; - if (meta) { - const source = Array.isArray(meta) ? meta : Object.values(meta).flat(Infinity); + const meta: any = (term as any).define ?? (term as any).groups ?? (term as any).ranges; + if (meta && !Array.isArray(meta)) { + const source = Object.values(meta).flat(Infinity); list = (source as any[]).filter(r => r.group === group); + } else { + list = list.filter(r => r.group === group); } } diff --git a/packages/tempo/src/tempo.enum.ts b/packages/tempo/src/tempo.enum.ts index a170848e..2bb569c3 100644 --- a/packages/tempo/src/tempo.enum.ts +++ b/packages/tempo/src/tempo.enum.ts @@ -257,11 +257,11 @@ export function registryUpdate(name: keyof typeof STATE, data: Record void)[] => (globalThis as any)[sym.$reset] ??= []; +const resetHooks = (): Set<() => void> => (globalThis as any)[sym.$reset] ??= new Set(); /** @internal Register a hook to be called when the registry is reset */ export function onRegistryReset(hook: () => void) { - resetHooks().push(hook); + resetHooks().add(hook); } /** Reset all extendable registries to their original built-in defaults */ diff --git a/packages/tempo/test/duration.core.test.ts b/packages/tempo/test/duration.core.test.ts index 73819a2e..c1aa4286 100644 --- a/packages/tempo/test/duration.core.test.ts +++ b/packages/tempo/test/duration.core.test.ts @@ -1,4 +1,8 @@ import { Tempo } from '#tempo/core'; +import sym from '#tempo/tempo.symbol.js'; + +// Clear persistent reset hooks to ensure a truly fresh state for this core test +(globalThis as any)[sym.$reset] = new Set(); describe('Tempo.duration() (Core)', () => { afterEach(() => vi.restoreAllMocks()) diff --git a/packages/tempo/test/timezone_offset.test.ts b/packages/tempo/test/timezone_offset.test.ts index 636a40d3..f7b68715 100644 --- a/packages/tempo/test/timezone_offset.test.ts +++ b/packages/tempo/test/timezone_offset.test.ts @@ -1,4 +1,4 @@ -import { Tempo } from '../src/tempo.class.js'; +import { Tempo } from '#tempo'; describe('Tempo TimeZone Offset', () => { beforeEach(() => { diff --git a/vitest.workspace.ts b/vitest.workspace.ts index d534a529..b94a4105 100644 --- a/vitest.workspace.ts +++ b/vitest.workspace.ts @@ -3,7 +3,7 @@ import { fileURLToPath } from 'node:url' import { dirname, resolve } from 'node:path' const __dirname = dirname(fileURLToPath(import.meta.url)); -const polyfill = resolve(__dirname, 'packages/tempo/scripts/setup.polyfill.ts'); +const polyfill = resolve(__dirname, 'packages/tempo/bin/setup.polyfill.ts'); export default defineWorkspace([ From c36ec464962a4c71fdf5ff55656be79781ea08f1 Mon Sep 17 00:00:00 2001 From: Michael McRae Date: Thu, 16 Apr 2026 16:25:23 +1000 Subject: [PATCH 05/18] more and more --- packages/library/src/common/symbol.library.ts | 43 +++---- .../tempo/src/plugin/module/module.mutate.ts | 4 +- .../tempo/src/plugin/module/module.term.ts | 2 +- packages/tempo/src/plugin/plugin.util.ts | 67 ++--------- packages/tempo/src/tempo.class.ts | 16 +-- packages/tempo/src/tempo.enum.ts | 80 ++----------- packages/tempo/src/tempo.index.ts | 3 +- packages/tempo/src/tempo.register.ts | 111 ++++++++++++++++++ packages/tempo/src/tempo.symbol.ts | 62 ++++------ vitest.workspace.ts | 1 - 10 files changed, 189 insertions(+), 200 deletions(-) create mode 100644 packages/tempo/src/tempo.register.ts diff --git a/packages/library/src/common/symbol.library.ts b/packages/library/src/common/symbol.library.ts index 728d3932..f855cd58 100644 --- a/packages/library/src/common/symbol.library.ts +++ b/packages/library/src/common/symbol.library.ts @@ -3,28 +3,29 @@ * These symbols utilize Symbol.for() to ensure consistency across module boundaries. */ -const $Target = Symbol.for('$LibraryTarget'); -const $Discover = Symbol.for('$LibraryDiscover'); -const $Extensible = Symbol.for('$LibraryExtensible'); -const $Inspect = Symbol.for('nodejs.util.inspect.custom'); -const $Logify = Symbol.for('$LibraryLogify'); -const $Registry = Symbol.for('$LibraryRegistry'); -const $Register = Symbol.for('$LibraryRegister'); +const sym = { + /** key to use for identifying the raw target of a Proxy */ + $Target: Symbol.for('$LibraryTarget'), + /** key to trigger full discovery of all lazy properties */ + $Discover: Symbol.for('$LibraryDiscover'), + /** key to identify objects that should remain extensible */ + $Extensible: Symbol.for('$LibraryExtensible'), + /** NodeJS custom inspection symbol for the Proxy pattern */ + $Inspect: Symbol.for('nodejs.util.inspect.custom'), + /** unique marker to identify a Logify configuration object */ + $Logify: Symbol.for('$LibraryLogify'), + /** key to identify the global type registry */ + $Registry: Symbol.for('$LibraryRegistry'), + /** key to identify the global registration hook */ + $Register: Symbol.for('$LibraryRegister'), +} as const; -/** identify and mark a Logify configuration object */ export function markConfig(obj: T): T { - if (!(obj as any)[$Logify] && Object.isExtensible(obj)) { - Object.defineProperty(obj, $Logify, { value: true, enumerable: false, writable: true, configurable: true }); - } - return obj; -} +/** identify and mark a Logify configuration object */ +export function markConfig(obj: T): T { + if (!(obj as any)[sym.$Logify] && Object.isExtensible(obj)) + Object.defineProperty(obj, sym.$Logify, { value: true, enumerable: false, writable: true, configurable: true }); -export default { -/** key to use for identifying the raw target of a Proxy */ $Target, -/** key to trigger full discovery of all lazy properties */ $Discover, -/** key to identify objects that should remain extensible */$Extensible, -/** NodeJS custom inspection symbol for the Proxy pattern */$Inspect, -/** unique marker to identify a Logify configuration object */$Logify, -/** key to identify the global type registry */ $Registry, -/** key to identify the global registration hook */ $Register, + return obj; } +export default sym; diff --git a/packages/tempo/src/plugin/module/module.mutate.ts b/packages/tempo/src/plugin/module/module.mutate.ts index 6924314f..2a310104 100644 --- a/packages/tempo/src/plugin/module/module.mutate.ts +++ b/packages/tempo/src/plugin/module/module.mutate.ts @@ -2,7 +2,8 @@ import { isDefined, isObject, isString, isUndefined, isZonedDateTime } from '#li import { singular } from '#library/string.library.js'; import sym from '../../tempo.symbol.js'; import enums from '../../tempo.enum.js'; -import { defineInterpreterModule, findTermPlugin, getHost, REGISTRY } from '../plugin.util.js'; +import { REGISTRY } from '../../tempo.register.js'; +import { defineInterpreterModule, findTermPlugin, getHost } from '../plugin.util.js'; import { resolveTermMutation } from './module.term.js'; import type { Tempo } from '../../tempo.class.js'; import type * as t from '../../tempo.type.js'; @@ -187,7 +188,6 @@ function mutate(this: Tempo, type: 'add' | 'set', args?: any, options: t.Options /** * MutateModule registration */ -// @ts-ignore // Eagerly register with the global registry to ensure availability even if .extend() is delayed REGISTRY.modules['MutateModule'] = mutate; diff --git a/packages/tempo/src/plugin/module/module.term.ts b/packages/tempo/src/plugin/module/module.term.ts index d7d7b6ab..c903f02a 100644 --- a/packages/tempo/src/plugin/module/module.term.ts +++ b/packages/tempo/src/plugin/module/module.term.ts @@ -44,7 +44,7 @@ export function resolveTermMutation(Tempo: any, instance: any, mutate: string, u const slickStr = (rangePart ? unit : (isString(offset) ? offset : undefined)); if (slickStr) { - const slick = slickStr.match(Match.slick) || (isString(offset) ? offset.match(/^(?[\+\-\<\>]=?|next|prev|this|last)?(?[0-9]+)?(?[\w]*)$/) : null); + const slick = slickStr.match(Match.slick) || (isString(offset) ? offset.match(Match.slickValue) : null); const { groups } = (slick || {}) as any; if (groups) { const hasMod = !!groups.sh_mod; diff --git a/packages/tempo/src/plugin/plugin.util.ts b/packages/tempo/src/plugin/plugin.util.ts index e661d4b7..d26d96a7 100644 --- a/packages/tempo/src/plugin/plugin.util.ts +++ b/packages/tempo/src/plugin/plugin.util.ts @@ -1,23 +1,15 @@ -import { toZonedDateTime, toPlainDate, toInstant } from '#library/temporal.library.js'; +import { toZonedDateTime, toInstant } from '#library/temporal.library.js'; import { isDefined, isFunction, isString, isUndefined, isNumber } from '#library/type.library.js'; import { secure } from '#library/utility.library.js'; -import { SCHEMA, getLargestUnit } from '../tempo.util.js'; import { sortKey, byKey } from '#library/array.library.js'; -import lib from '#library/symbol.library.js'; -import sym, { isTempo } from '../tempo.symbol.js'; import { secureRef } from '#library/proxy.library.js'; -import type { Tempo } from '../tempo.class.js'; -import type { TermPlugin, Range, ResolvedRange, Plugin, Extension } from './plugin.type.js'; -const _terms = [] as TermPlugin[]; -const _extends = [] as Extension[]; +import { SCHEMA, getLargestUnit } from '../tempo.util.js'; +import sym, { isTempo } from '../tempo.symbol.js'; +import type { Tempo } from '../tempo.class.js'; +import type { TermPlugin, Range, ResolvedRange, Plugin } from './plugin.type.js'; -const _REGISTRY = { - terms: secureRef(_terms), - extends: secureRef(_extends), - modules: secureRef({} as Record), - installed: new Set() -} +import { REGISTRY } from '../tempo.register.js'; /** * # STATE @@ -27,30 +19,6 @@ export const STATE = { mutateDepth: 0 } -/** - * # REGISTRY - * Internal registry for registered components. - * Closed for modification, Open for extension. - */ -export const REGISTRY = new Proxy(_REGISTRY, { - get: (t, k) => Reflect.get(t, k), - set: (t, k, v) => { - if (Object.hasOwn(t, k)) { - throw new Error(`Tempo Security: Mutation attempt on protected registry key '${String(k)}'`); - } - return Reflect.set(t, k, v); - }, - defineProperty: (t, k, d) => { - if (Object.hasOwn(t, k)) { - throw new Error(`Tempo Security: Mutation attempt on protected registry key '${String(k)}'`); - } - return Reflect.defineProperty(t, k, d); - }, - deleteProperty: () => { - throw new Error(`Tempo Security: Deletion attempt on protected registry.`); - } -}); - export function getHost(t: any): any { return (t as any).constructor; } @@ -75,7 +43,7 @@ export function interpret(t: any, module: string, methodOrFallback?: any, ...arg if (isFunction(host?.[sym.$logError])) { host[sym.$logError](t?.config, err); } else { - console.error(`Tempo [${module}]:`, err); + console.error(`Tempo [${module}]: structural error - no logger available on host.`, err); } } @@ -161,7 +129,7 @@ export function defineRange(ranges: T[], ...keys: (keyof T)[]) /** * find where a Tempo fits within a range of DateTime */ -export function getTermRange(tempo: Tempo, list: Range[], keyOnly = true, anchor?: any): string | ResolvedRange | undefined { +export function getTermRange(tempo: Tempo, list: Range[], keyOnly: boolean | number = true, anchor?: any): string | ResolvedRange | undefined { const chronological = sortKey([...list], 'year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond'); if (chronological.length === 0) return undefined; @@ -220,7 +188,7 @@ export function getTermRange(tempo: Tempo, list: Range[], keyOnly = true, anchor start, end, ...match - }; + } } const match = chronological[matchIndex === -1 ? 0 : matchIndex]; @@ -245,7 +213,7 @@ export function getTermRange(tempo: Tempo, list: Range[], keyOnly = true, anchor start, end, ...match - }; + } } /** @@ -261,7 +229,7 @@ export function getRange(entry: any, t: Tempo, anchor?: any, group?: string): Ra const host = new (getHost(t))(anchor, (t as any).config); res = isFunction(term.resolve) ? term.resolve.call(host, anchor) : term.define.call(host, false, anchor); } else { - res = isFunction(term.resolve) ? term.resolve.call(t) : term.define.call(t, group); + res = isFunction(term.resolve) ? term.resolve.call(t) : term.define.call(t, false); } } catch (err: any) { if (err.message.includes('Class constructor')) { @@ -484,16 +452,3 @@ export function registerPlugin(plugin: any) { (globalThis as any)[sym.$Register]?.(plugin); } - -/** - * Internal hook used by the Tempo class to ensure - * the registry is fully purged during a #registryReset(). - */ -export function resetInternalRegistry() { - _terms.length = 0; - _extends.length = 0; - // @ts-ignore - const modules = _REGISTRY.modules[lib.$Target] ?? _REGISTRY.modules; - for (const key in modules) delete modules[key]; - _REGISTRY.installed.clear(); -} diff --git a/packages/tempo/src/tempo.class.ts b/packages/tempo/src/tempo.class.ts index 3e16a386..459cab43 100644 --- a/packages/tempo/src/tempo.class.ts +++ b/packages/tempo/src/tempo.class.ts @@ -20,11 +20,12 @@ import type { Property, TypeValue, Secure } from '#library/type.library.js'; import { compose } from './plugin/module/module.composer.js'; import { resolveTermMutation, resolveTermValue } from './plugin/module/module.term.js'; import { prefix, parseWeekday, parseDate, parseTime, parseZone } from './plugin/module/module.lexer.js'; -import { REGISTRY, registerPlugin, registerTerm, getRange, getTermRange, interpret, resetInternalRegistry } from './plugin/plugin.util.js' +import { REGISTRY, registryUpdate, registryReset, onRegistryReset } from './tempo.register.js'; +import { registerPlugin, registerTerm, getRange, getTermRange, interpret } from './plugin/plugin.util.js' import sym, { isTempo, registerHook } from './tempo.symbol.js'; import { Match, Token, Snippet, Layout, Event, Period, Default, Guard } from './tempo.default.js'; -import enums, { STATE, DISCOVERY, registryUpdate, registryReset, onRegistryReset } from './tempo.enum.js'; +import enums, { STATE, DISCOVERY } from './tempo.enum.js'; import * as t from './tempo.type.js'; // namespaced types (Tempo.*) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const Context = getContext(); // current execution context @@ -101,6 +102,12 @@ export class Tempo { /** Master Guard predicate (implements RegExp-like interface) */static #guard: { test(str: string): boolean } = { test: () => true }; /** Set of allowed lowercased tokens for the Master Guard */ static #allowedTokens: Set = new Set(); + static { + onRegistryReset(() => { + Tempo[sym.$rebuildGuard](); + }); + } + /** @internal handle internal errors using the global config */ static [sym.$logError](...msg: any[]): void { const config = (isObject(msg[0]) && (msg[0] as any)[lib.$Logify] === true) ? msg.shift() : Tempo.#global.config; @@ -1852,8 +1859,3 @@ export namespace Tempo { export interface Params extends t.Params { } } - -onRegistryReset(() => { - resetInternalRegistry(); - Tempo[sym.$rebuildGuard](); -}); diff --git a/packages/tempo/src/tempo.enum.ts b/packages/tempo/src/tempo.enum.ts index 2bb569c3..2c50e6c8 100644 --- a/packages/tempo/src/tempo.enum.ts +++ b/packages/tempo/src/tempo.enum.ts @@ -32,7 +32,7 @@ export type COMPASS = ValueOf */ /** @internal LIVE state for all registries */ -const Defaults = { +export const DEFAULTS = { NUMBER: { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9, ten: 10 }, @@ -101,12 +101,12 @@ const Defaults = { /** @internal Centralized mutable state for all extendable registries */ export const STATE = { - NUMBER: allDescriptors(Defaults.NUMBER), - DURATION: allDescriptors(Defaults.DURATION), - TIMEZONE: allDescriptors(Defaults.TIMEZONE), - DURATIONS: allDescriptors(Defaults.DURATIONS), - FORMAT: allDescriptors(Defaults.FORMAT), - LIMIT: allDescriptors(Defaults.LIMIT), + NUMBER: allDescriptors(DEFAULTS.NUMBER), + DURATION: allDescriptors(DEFAULTS.DURATION), + TIMEZONE: allDescriptors(DEFAULTS.TIMEZONE), + DURATIONS: allDescriptors(DEFAULTS.DURATIONS), + FORMAT: allDescriptors(DEFAULTS.FORMAT), + LIMIT: allDescriptors(DEFAULTS.LIMIT), } as const; (STATE.NUMBER as any)[lib.$Extensible] = true; @@ -229,74 +229,10 @@ export type Discovery = KeyOf /** @internal LIVE Registries mapping (STATE key -> Enum/Proxy) */ -const REGISTRIES: Record = { +export const REGISTRIES: Record = { NUMBER, DURATION, TIMEZONE, DURATIONS, FORMAT, LIMIT, }; -/** update a global registry with new discoverable data */ -export function registryUpdate(name: keyof typeof STATE, data: Record) { - const registry = REGISTRIES[name]; - if (!isDefined(registry) || !isDefined(registry[lib.$Target])) return; // early-return if no valid target to mutate - - const target = registry[lib.$Target] as Property; - const state = STATE[name] as Property; - - Object.entries(data).forEach(([key, val]) => { - if (isUndefined(target[key])) { // only add if key does not exist - Object.defineProperty(target, key, { - value: val, - enumerable: true, - writable: true, - configurable: true - }); - if (isDefined(state)) state[key] = val; - } - }); - - clearCache(target); -} - -/** @internal storage for reset hooks */ -const resetHooks = (): Set<() => void> => (globalThis as any)[sym.$reset] ??= new Set(); - -/** @internal Register a hook to be called when the registry is reset */ -export function onRegistryReset(hook: () => void) { - resetHooks().add(hook); -} - -/** Reset all extendable registries to their original built-in defaults */ -export function registryReset() { - ownKeys(STATE).forEach(name => { - const state = STATE[name as keyof typeof STATE] as Property; - const target = REGISTRIES[name]?.[lib.$Target] as Property; - const defaults = Defaults[name as keyof typeof Defaults] as Property; - - // 1. Purge all own-properties from state and target (if configurable) - [state, target].filter(isDefined).forEach(obj => { - Reflect.ownKeys(obj).forEach(key => { - const desc = Object.getOwnPropertyDescriptor(obj, key); - if (desc?.configurable) delete obj[key]; - }); - }); - - // 2. Restore defaults using property descriptors to preserve accessors/configurability - Reflect.ownKeys(defaults).forEach(key => { - const desc = Object.getOwnPropertyDescriptor(defaults, key); - - if (desc) { - [state, target].filter(isDefined).forEach(obj => { - Object.defineProperty(obj, key, desc); - }); - } - }); - - if (target) clearCache(target); - clearCache(state); // clear cache for state object - }); - - resetHooks().forEach(hook => hook()); -} - /** public-reachable enums */ export default { SEASON, diff --git a/packages/tempo/src/tempo.index.ts b/packages/tempo/src/tempo.index.ts index 8674b8bc..f6c3b7c5 100644 --- a/packages/tempo/src/tempo.index.ts +++ b/packages/tempo/src/tempo.index.ts @@ -1,10 +1,11 @@ import { Tempo } from './tempo.class.js'; +import { onRegistryReset } from './tempo.register.js'; + import { TermsModule } from '#tempo/term'; import { DurationModule } from '#tempo/duration'; import { FormatModule } from '#tempo/format'; import { MutateModule } from '#tempo/mutate'; import { TickerModule } from '#tempo/ticker'; -import { onRegistryReset } from './tempo.enum.js'; // Batteries Included: Register standard modules const core = [MutateModule, FormatModule, DurationModule, TermsModule, TickerModule]; diff --git a/packages/tempo/src/tempo.register.ts b/packages/tempo/src/tempo.register.ts new file mode 100644 index 00000000..19bea4c6 --- /dev/null +++ b/packages/tempo/src/tempo.register.ts @@ -0,0 +1,111 @@ +import lib from '#library/symbol.library.js'; +import { clearCache } from '#library/function.library.js'; +import { isDefined, isUndefined } from '#library/type.library.js'; +import { ownKeys } from '#library/primitive.library.js'; +import { secureRef } from '#library/proxy.library.js'; +import type { Property } from '#library/type.library.js'; + +import sym from './tempo.symbol.js'; +import type { TermPlugin, Extension } from './plugin/plugin.type.js'; + +// Import the live enums and their mutable state from the enum module +import { STATE, REGISTRIES, DEFAULTS } from './tempo.enum.js'; + +/** @internal storage for plugin/module registry */ +const _terms = [] as TermPlugin[]; +const _extends = [] as Extension[]; + +const _REGISTRY = { + terms: secureRef(_terms), + extends: secureRef(_extends), + modules: secureRef({} as Record), + installed: new Set() +} + +/** + * # REGISTRY + * Internal registry for registered components. + * Closed for modification, Open for extension. + */ +export const REGISTRY = secureRef(_REGISTRY); + +/** @internal storage for reset hooks */ +const resetHooks = (): Set<() => void> => (globalThis as any)[sym.$reset] ??= new Set(); + +/** @internal Register a hook to be called when the registry is reset */ +export function onRegistryReset(hook: () => void) { + resetHooks().add(hook); +} + +/** Reset all extendable registries to their original built-in defaults */ +export function registryReset() { + ownKeys(STATE).forEach(name => { + const state = STATE[name as keyof typeof STATE] as Property; + const target = REGISTRIES[name]?.[lib.$Target] as Property; + const defaults = DEFAULTS[name as keyof typeof DEFAULTS] as Property; + + // 1. Purge all own-properties from state and target (if configurable) + [state, target].filter(isDefined).forEach(obj => { + Reflect.ownKeys(obj).forEach(key => { + const desc = Object.getOwnPropertyDescriptor(obj, key); + if (desc?.configurable) delete obj[key]; + }); + }); + + // 2. Restore defaults using property descriptors to preserve accessors/configurability + Reflect.ownKeys(defaults).forEach(key => { + const desc = Object.getOwnPropertyDescriptor(defaults, key); + + if (desc) { + [state, target].filter(isDefined).forEach(obj => { + Object.defineProperty(obj, key, desc); + }); + } + }); + + if (target) clearCache(target); + clearCache(state); + }); + + // 3. Clear Term and Extension arrays (managed via secureRef) + const internal = (_REGISTRY as any); + if (internal.terms[lib.$Target]) internal.terms[lib.$Target].length = 0; + if (internal.extends[lib.$Target]) internal.extends[lib.$Target].length = 0; + + // 4. Clear Modules and Installed Set + const modules = internal.modules[lib.$Target] ?? internal.modules; + for (const key in modules) delete modules[key]; + internal.installed.clear(); + + // Trigger all registered reset hooks + resetHooks().forEach(hook => hook()); +} + +/** update a global registry with new discoverable data */ +export function registryUpdate(name: keyof typeof STATE, data: Record) { + const registry = REGISTRIES[name]; + if (!isDefined(registry) || !isDefined(registry[lib.$Target])) return; + + const target = registry[lib.$Target] as Property; + const state = STATE[name] as Property; + + Object.entries(data).forEach(([key, val]) => { + if (isUndefined(target[key])) { // only add if key does not exist + Object.defineProperty(target, key, { + value: val, + enumerable: true, + writable: true, + configurable: true + }); + if (isDefined(state)) state[key] = val; + } + }); + + clearCache(target); +} + +/** + * @internal raw access to registry for core operations + * Only use this within the core library. + */ +export const _INTERNAL_REGISTRY = _REGISTRY; diff --git a/packages/tempo/src/tempo.symbol.ts b/packages/tempo/src/tempo.symbol.ts index 6509bcb4..f3f6e844 100644 --- a/packages/tempo/src/tempo.symbol.ts +++ b/packages/tempo/src/tempo.symbol.ts @@ -7,21 +7,22 @@ import type { Tempo } from '#tempo/tempo.class.js'; -const $Tempo = Symbol.for('$Tempo'); -const $Plugins = Symbol.for('$TempoPlugin'); -const $Register = Symbol.for('$TempoRegister'); -const $isTempo = Symbol.for('$isTempo'); - -const $Interpreter = Symbol.for('$TempoInterpreter'); -const $logError = Symbol.for('$TempoLogError'); -const $logDebug = Symbol.for('$TempoLogDebug'); - -const $termError = Symbol.for('$TempoTermError'); -const $errored = Symbol.for('$TempoErrored'); -const $Internal = Symbol.for('$TempoInternal'); -const $mutateDepth = Symbol.for('$TempoMutateDepth'); -const $rebuildGuard = Symbol.for('$TempoRebuildGuard'); -const $reset = Symbol.for('$TempoReset'); +/** global symbols */ +const sym = { + /** key for Global Discovery of Tempo configuration */ $Tempo: Symbol.for('$Tempo'), + /** key for Global Discovery of Tempo Plugins */ $Plugins: Symbol.for('$TempoPlugin'), + /** key for Reactive Plugin Registration */ $Register: Symbol.for('$TempoRegister'), + /** key for Global Identity Brand for Tempo */ $isTempo: Symbol.for('$isTempo'), + /** key for Internal Interpreter Service */ $Interpreter: Symbol.for('$TempoInterpreter'), + /** key for contextual Error Logging */ $logError: Symbol.for('$TempoLogError'), + /** key for contextual Debug Logging */ $logDebug: Symbol.for('$TempoLogDebug'), + /** key for centralized Term Error dispatching */ $termError: Symbol.for('$TempoTermError'), + /** internal key for signaling pre-errored state in constructor */ $errored: Symbol.for('$TempoErrored'), + /** internal key for accessing private instance state */ $Internal: Symbol.for('$TempoInternal'), + /** internal key for tracking mutation recursion depth */ $mutateDepth: Symbol.for('$TempoMutateDepth'), + /** internal key for re-validating the Master Guard */ $rebuildGuard: Symbol.for('$TempoRebuildGuard'), + /** internal key for decentralized registry resets */ $reset: Symbol.for('$TempoReset'), +} as const; /** * Define a reactive registration hook on a global symbol. @@ -29,34 +30,17 @@ const $reset = Symbol.for('$TempoReset'); * from plugins loaded later in the lifecycle. * @returns any previous callback already registered for this symbol */ -export function registerHook(sym: symbol, cb: (val: any) => void) { - const existing = (globalThis as any)[sym]; +export function registerHook(symbol: symbol, cb: (val: any) => void) { + const existing = (globalThis as any)[symbol]; if (existing !== undefined && typeof existing === 'function') - console.warn(`Overwriting existing hook for symbol: ${sym.description}`); + console.warn(`Overwriting existing hook for symbol: ${symbol.description}`); - (globalThis as any)[sym] = cb; + (globalThis as any)[symbol] = cb; return existing; // allow chaining or cleanup } -/** check valid Tempo */ -export const isTempo = (tempo?: any): tempo is Tempo => tempo?.[$isTempo] === true; - -/** global symbols */ -const _sym = { - /** key for Global Discovery of Tempo configuration */ $Tempo, - /** key for Global Discovery of Tempo Plugins */ $Plugins, - /** key for Reactive Plugin Registration */ $Register, - /** key for Global Identity Brand for Tempo */ $isTempo, - /** key for Internal Interpreter Service */ $Interpreter, - /** key for contextual Error Logging */ $logError, - /** key for contextual Debug Logging */ $logDebug, - /** key for centralized Term Error dispatching */ $termError, - /** internal key for signaling pre-errored state in constructor */ $errored, - /** internal key for accessing private instance state */ $Internal, - /** internal key for tracking mutation recursion depth */ $mutateDepth, - /** internal key for re-validating the Master Guard */ $rebuildGuard, - /** internal key for decentralized registry resets */ $reset, -} as const; +/** check valid Tempo instance */ +export const isTempo = (tempo?: any): tempo is Tempo => tempo?.[sym.$isTempo] === true; -export default _sym; +export default sym; diff --git a/vitest.workspace.ts b/vitest.workspace.ts index b94a4105..8dbbbef1 100644 --- a/vitest.workspace.ts +++ b/vitest.workspace.ts @@ -5,7 +5,6 @@ import { dirname, resolve } from 'node:path' const __dirname = dirname(fileURLToPath(import.meta.url)); const polyfill = resolve(__dirname, 'packages/tempo/bin/setup.polyfill.ts'); - export default defineWorkspace([ { extends: 'packages/tempo/vitest.config.ts', From a9feb6adb10fcedf4414aa34f08e0ccb0d995898 Mon Sep 17 00:00:00 2001 From: Michael McRae Date: Thu, 16 Apr 2026 17:16:31 +1000 Subject: [PATCH 06/18] tidy wip --- packages/tempo/src/plugin/plugin.type.ts | 72 ++++++++++-------------- packages/tempo/src/tempo.class.ts | 37 ++++++------ packages/tempo/src/tempo.register.ts | 4 +- packages/tempo/src/tempo.symbol.ts | 12 ++-- 4 files changed, 58 insertions(+), 67 deletions(-) diff --git a/packages/tempo/src/plugin/plugin.type.ts b/packages/tempo/src/plugin/plugin.type.ts index 9d7e2313..c3852ad0 100644 --- a/packages/tempo/src/plugin/plugin.type.ts +++ b/packages/tempo/src/plugin/plugin.type.ts @@ -19,58 +19,48 @@ export interface TermPlugin { export type Terms = Property; /** - * ## Range - * term definition range — must have at least one duration component. + * ## Plugin + * Interface for general Tempo plugins (Modules/Extensions). */ -export type Range = Prettify<{ - key: string; - group?: string; // categorization marker (e.g. 'western', 'chinese', 'fiscal') - [meta: string]: any; -} & ( - { year: number } | { month: number } | { week: number } | { day: number } | - { hour: number } | { minute: number } | { second: number } | - { millisecond: number } | { microsecond: number } | { nanosecond: number } - ) & { - year?: number; - month?: number; - week?: number; - day?: number; - hour?: number; - minute?: number; - second?: number; - millisecond?: number; - microsecond?: number; - nanosecond?: number; - }>; +export interface Plugin { + name: string; + install: (this: Tempo, t: typeof Tempo) => void; +} /** - * ## ResolvedRange - * A range that has been resolved to full start/end boundaries. + * ## Module + * Type for Module plugins. */ -export type ResolvedRange = Range & { - start: Tempo; - end: Tempo; - scope?: string; - label?: string; - unit?: string; - rollover?: string; - [str: string]: any; +export interface Module extends Plugin { + [key: string]: any; } /** - * ## Plugin - * extend the functionality of the Tempo class. + * ## Extension + * Type for Extension plugins. */ -export type Plugin = (options: any, TempoClass: typeof Tempo, factory: (val: any) => Tempo) => void; +export interface Extension extends Plugin { + [key: string]: any; +} + /** - * ## Module - * Internal extensions to the Tempo class (same signature as Plugin). + * ## Range + * Discrete time interval within a specific term. */ -export type Module = Plugin; +export interface Range { + key: string; + start: bigint; + end: bigint; + cycle?: number; +} /** - * ## Extension - * Class-augmenting extensions to the Tempo class (same signature as Plugin). + * ## ResolvedRange + * Range with additional metadata. */ -export type Extension = Plugin; +export interface ResolvedRange extends Range { + label: string; + active: boolean; + index: number; +} diff --git a/packages/tempo/src/tempo.class.ts b/packages/tempo/src/tempo.class.ts index 459cab43..6163ef3f 100644 --- a/packages/tempo/src/tempo.class.ts +++ b/packages/tempo/src/tempo.class.ts @@ -23,7 +23,7 @@ import { prefix, parseWeekday, parseDate, parseTime, parseZone } from './plugin/ import { REGISTRY, registryUpdate, registryReset, onRegistryReset } from './tempo.register.js'; import { registerPlugin, registerTerm, getRange, getTermRange, interpret } from './plugin/plugin.util.js' -import sym, { isTempo, registerHook } from './tempo.symbol.js'; +import { sym, $isTempo, $Register, $rebuildGuard, $logError, $logDebug, $termError, $errored, $mutateDepth, registerHook, isTempo } from './tempo.symbol.js'; import { Match, Token, Snippet, Layout, Event, Period, Default, Guard } from './tempo.default.js'; import enums, { STATE, DISCOVERY } from './tempo.enum.js'; import * as t from './tempo.type.js'; // namespaced types (Tempo.*) @@ -102,33 +102,28 @@ export class Tempo { /** Master Guard predicate (implements RegExp-like interface) */static #guard: { test(str: string): boolean } = { test: () => true }; /** Set of allowed lowercased tokens for the Master Guard */ static #allowedTokens: Set = new Set(); - static { - onRegistryReset(() => { - Tempo[sym.$rebuildGuard](); - }); - } /** @internal handle internal errors using the global config */ - static [sym.$logError](...msg: any[]): void { + static [$logError](...msg: any[]): void { const config = (isObject(msg[0]) && (msg[0] as any)[lib.$Logify] === true) ? msg.shift() : Tempo.#global.config; markConfig(config); // ensure config is marked for Logify Tempo.#dbg.error(config, ...msg); } /** @internal internal key for signaling pre-errored state in constructor */ - static [sym.$errored] = sym.$errored; + static [$errored] = $errored; /** @internal guard against infinite mutation recursion */ - static [sym.$mutateDepth] = 0; + static [$mutateDepth] = 0; /** @internal hook to re-validate the Master Guard */ - static [sym.$rebuildGuard]() { Tempo.#buildGuard() } + static [$rebuildGuard]() { Tempo.#buildGuard() } /** @internal handle internal debug info using the global config */ - static [sym.$logDebug](...msg: any[]): void { + static [$logDebug](...msg: any[]): void { Tempo.#dbg.debug(...msg); } /** @internal Centralized error dispatcher for Term resolution failures */ - static [sym.$termError](config: t.Options, term: string): void { + static [$termError](config: t.Options, term: string): void { const hint = Tempo.#terms.length === 0 ? ". (No term plugins are registered—did you forget to call Tempo.extend(TermsModule)?)" : ""; const msg = `Unknown Term identifier: ${term}${hint}`; Tempo.#dbg.error(config, msg); @@ -936,14 +931,25 @@ export class Tempo { static [Symbol.dispose]() { Tempo.init() } /** allow instanceof to work across module boundaries via the local brand symbol */ - static [sym.$isTempo] = true; + static [$isTempo] = true; static [Symbol.hasInstance](instance: any) { - return !!(instance?.[sym.$isTempo]) + return !!(instance?.[$isTempo]) + } + + /** check if a supplied variable is a valid Tempo instance */ + static isTempo(instance?: any): instance is Tempo { + return !!(instance?.[$isTempo]) } static { // Static initialization block to sequence the bootstrap phase // Define the reactive register hook - registerHook(sym.$Register, (plugin: t.Plugin | t.Plugin[]) => { if (!Tempo.isExtending) Tempo.extend(plugin) }); + registerHook($Register, (plugin: t.Plugin | t.Plugin[]) => { + if (!Tempo.isExtending) Tempo.extend(plugin) + }); + + onRegistryReset(() => { + Tempo[$rebuildGuard](); + }); Tempo.init(); // synchronously initialize the library } @@ -1362,7 +1368,6 @@ export class Tempo { return undefined as any; } - // 1. if input is numeric, resolve by index if (isNumeric(tempo as any)) { const list = getRange(termObj, this, today); diff --git a/packages/tempo/src/tempo.register.ts b/packages/tempo/src/tempo.register.ts index 19bea4c6..a0496bc0 100644 --- a/packages/tempo/src/tempo.register.ts +++ b/packages/tempo/src/tempo.register.ts @@ -1,11 +1,11 @@ -import lib from '#library/symbol.library.js'; import { clearCache } from '#library/function.library.js'; import { isDefined, isUndefined } from '#library/type.library.js'; import { ownKeys } from '#library/primitive.library.js'; import { secureRef } from '#library/proxy.library.js'; +import lib from '#library/symbol.library.js'; import type { Property } from '#library/type.library.js'; -import sym from './tempo.symbol.js'; +import { sym } from './tempo.symbol.js'; import type { TermPlugin, Extension } from './plugin/plugin.type.js'; // Import the live enums and their mutable state from the enum module diff --git a/packages/tempo/src/tempo.symbol.ts b/packages/tempo/src/tempo.symbol.ts index f3f6e844..ed17ba01 100644 --- a/packages/tempo/src/tempo.symbol.ts +++ b/packages/tempo/src/tempo.symbol.ts @@ -1,3 +1,5 @@ +import type { Tempo } from './tempo.class.js'; + /** * Centralized registry for all Tempo-specific Global Symbols. * These symbols utilize Symbol.for() to ensure consistency across module boundaries. @@ -5,10 +7,8 @@ * clean separation of concerns. */ -import type { Tempo } from '#tempo/tempo.class.js'; - -/** global symbols */ -const sym = { +/** @internal Tempo Symbol Registry */ +export const sym = { /** key for Global Discovery of Tempo configuration */ $Tempo: Symbol.for('$Tempo'), /** key for Global Discovery of Tempo Plugins */ $Plugins: Symbol.for('$TempoPlugin'), /** key for Reactive Plugin Registration */ $Register: Symbol.for('$TempoRegister'), @@ -26,16 +26,12 @@ const sym = { /** * Define a reactive registration hook on a global symbol. - * Allows Tempo to listen for side-effect plugin registrations - * from plugins loaded later in the lifecycle. - * @returns any previous callback already registered for this symbol */ export function registerHook(symbol: symbol, cb: (val: any) => void) { const existing = (globalThis as any)[symbol]; if (existing !== undefined && typeof existing === 'function') console.warn(`Overwriting existing hook for symbol: ${symbol.description}`); - (globalThis as any)[symbol] = cb; return existing; // allow chaining or cleanup } From 695ced61d51d8a7a7756cf54b91a915a95462c6f Mon Sep 17 00:00:00 2001 From: Michael McRae Date: Thu, 16 Apr 2026 18:44:15 +1000 Subject: [PATCH 07/18] clean symbol.registry typing --- .../tempo/src/plugin/extend/extend.ticker.ts | 73 ++++++++++--------- packages/tempo/src/plugin/plugin.type.ts | 54 +++++++++++--- packages/tempo/src/plugin/plugin.util.ts | 33 +++++---- packages/tempo/src/plugin/term/term.index.ts | 9 ++- packages/tempo/src/tempo.class.ts | 40 +++++----- 5 files changed, 128 insertions(+), 81 deletions(-) diff --git a/packages/tempo/src/plugin/extend/extend.ticker.ts b/packages/tempo/src/plugin/extend/extend.ticker.ts index 81635808..e5a74de7 100644 --- a/packages/tempo/src/plugin/extend/extend.ticker.ts +++ b/packages/tempo/src/plugin/extend/extend.ticker.ts @@ -8,6 +8,7 @@ import { DURATIONS } from '../../tempo.enum.js' import sym from '../../tempo.symbol.js'; import { defineExtension } from '../plugin.util.js' import type { Tempo } from '../../tempo.class.js' +import type { TempoType } from '../plugin.type.js' declare module '../../tempo.class.js' { namespace Tempo { @@ -92,7 +93,7 @@ const ACTIVE_TICKERS = new Set(); * Stateful class for Tempo.Ticker instances. */ class TickerInstance implements Ticker.Descriptor { - #TempoClass: typeof Tempo; + #TempoClass: TempoType; #payload: Record = {}; #current: Tempo; #until: Tempo | undefined; @@ -108,7 +109,7 @@ class TickerInstance implements Ticker.Descriptor { #catchListeners = new Set(); #self!: Ticker.Instance; - constructor(TempoClass: typeof Tempo, arg1: any, arg2?: any) { + constructor(TempoClass: TempoType, arg1: any, arg2?: any) { this.#TempoClass = TempoClass; // ── Overload Parsing ───────────────────────────────────────────────── @@ -141,7 +142,7 @@ class TickerInstance implements Ticker.Descriptor { const isInterval = isDefined(rawOptions.seconds) && Number.isFinite(rawOptions.seconds) && !Number.isNaN(rawOptions.seconds); if (isDefined(arg1) && !isInterval && !isSeed && !cb) { - this.#TempoClass[sym.$logError](markConfig(rawOptions), `Invalid Ticker interval or seed: ${String(arg1)}`); + (this.#TempoClass as any)[sym.$logError](markConfig(rawOptions), `Invalid Ticker interval or seed: ${String(arg1)}`); } const { limit: lmt, until: stopAt, seed: startAt, ...rest } = rawOptions; @@ -170,10 +171,10 @@ class TickerInstance implements Ticker.Descriptor { // ── Validation ─────────────────────────────────────────────── if (!this.#current.isValid) { this.stop(); - this.#TempoClass[sym.$logError](this.#current.config, `Invalid Ticker seed: ${String(this.#current)}`); + (this.#TempoClass as any)[sym.$logError](this.#current.config, `Invalid Ticker seed: ${String(this.#current)}`); } else if (this.#until && !this.#until.isValid) { this.stop(); - this.#TempoClass[sym.$logError](this.#current.config, `Invalid Ticker boundary: ${String(this.#until)}`); + (this.#TempoClass as any)[sym.$logError](this.#current.config, `Invalid Ticker boundary: ${String(this.#until)}`); } else { try { const firstStep = this.#current.add(this.#payload); @@ -186,7 +187,7 @@ class TickerInstance implements Ticker.Descriptor { this.#runBootstrap(); } catch (e: any) { this.stop(); - this.#TempoClass[sym.$logError](this.#current.config, `Invalid Ticker payload resolution for ${JSON.stringify(this.#payload)}`, e); + (this.#TempoClass as any)[sym.$logError](this.#current.config, `Invalid Ticker payload resolution for ${JSON.stringify(this.#payload)}`, e); queueMicrotask(() => this.#catchListeners.forEach(l => l(this.#current, () => this.stop()))); this.#isForward = true; this.#isInstant = false; @@ -330,35 +331,39 @@ class TickerInstance implements Ticker.Descriptor { [Symbol.dispose]() { this.stop(); } } +/** /** * # TickerModule */ -export const TickerModule: Tempo.Extension = defineExtension((_options, TempoClass, _factory) => { - (TempoClass as any).ticker = function (this: typeof Tempo, arg1: any, arg2?: any): Ticker.Instance { - const instance = new TickerInstance(this, arg1, arg2); - const proxy = new Proxy((() => instance.stop()) as any, { - get: (_, prop) => { - if (prop === 'pulse') return instance.pulse.bind(instance); - if (prop === 'on') return instance.on.bind(instance); - if (prop === 'stop') return instance.stop.bind(instance); - if (prop === 'info') return instance.info; - if (prop === 'next') return instance.next.bind(instance); - if (prop === 'return') return instance.return.bind(instance); - if (prop === 'throw') return instance.throw.bind(instance); - if (prop === Symbol.asyncIterator) return () => proxy; - if (prop === Symbol.asyncDispose) return instance[Symbol.asyncDispose].bind(instance); - if (prop === Symbol.dispose) return instance[Symbol.dispose].bind(instance); - return (instance as any)[prop]; - }, - apply: (target) => target() - }) as unknown as Ticker.Instance; - - return instance.bootstrap(proxy); - }; - - Object.defineProperty(TempoClass, 'tickers', { - get: () => Ticker.active, - enumerable: true, - configurable: true - }); +export const TickerModule: Tempo.Extension = defineExtension({ + name: 'TickerModule', + install(this: Tempo, TempoClass: TempoType) { + (TempoClass as any).ticker = function (this: TempoType, arg1: any, arg2?: any): Ticker.Instance { + const instance = new TickerInstance(this as unknown as TempoType, arg1, arg2); + const proxy = new Proxy((() => instance.stop()) as any, { + get: (_, prop) => { + if (prop === 'pulse') return instance.pulse.bind(instance); + if (prop === 'on') return instance.on.bind(instance); + if (prop === 'stop') return instance.stop.bind(instance); + if (prop === 'info') return instance.info; + if (prop === 'next') return instance.next.bind(instance); + if (prop === 'return') return instance.return.bind(instance); + if (prop === 'throw') return instance.throw.bind(instance); + if (prop === Symbol.asyncIterator) return () => proxy; + if (prop === Symbol.asyncDispose) return instance[Symbol.asyncDispose].bind(instance); + if (prop === Symbol.dispose) return instance[Symbol.dispose].bind(instance); + return (instance as any)[prop]; + }, + apply: (target) => target() + }) as unknown as Ticker.Instance; + + return instance.bootstrap(proxy); + }; + + Object.defineProperty(TempoClass, 'tickers', { + get: () => Ticker.active, + enumerable: true, + configurable: true + }); + }, }); diff --git a/packages/tempo/src/plugin/plugin.type.ts b/packages/tempo/src/plugin/plugin.type.ts index c3852ad0..a618b648 100644 --- a/packages/tempo/src/plugin/plugin.type.ts +++ b/packages/tempo/src/plugin/plugin.type.ts @@ -1,6 +1,8 @@ import type { Prettify, Property } from '#library/type.library.js'; import type { Tempo } from '../tempo.class.js'; +export type TempoType = typeof Tempo; + /** * ## TermPlugin * Interface for term-driven parsing and resolution. @@ -24,7 +26,7 @@ export type Terms = Property; */ export interface Plugin { name: string; - install: (this: Tempo, t: typeof Tempo) => void; + install: (this: Tempo, t: TempoType) => void; } /** @@ -48,19 +50,49 @@ export interface Extension extends Plugin { * ## Range * Discrete time interval within a specific term. */ -export interface Range { +// export interface Range { +// key: string; +// start: bigint; +// end: bigint; +// cycle?: number; +// } +export type Range = Prettify<{ key: string; - start: bigint; - end: bigint; - cycle?: number; -} + group?: string; // categorization marker (e.g. 'western', 'chinese', 'fiscal') + [meta: string]: any; +} & ( + { year: number } | { month: number } | { week: number } | { day: number } | + { hour: number } | { minute: number } | { second: number } | + { millisecond: number } | { microsecond: number } | { nanosecond: number } + ) & { + year?: number; + month?: number; + week?: number; + day?: number; + hour?: number; + minute?: number; + second?: number; + millisecond?: number; + microsecond?: number; + nanosecond?: number; + }>; + /** * ## ResolvedRange * Range with additional metadata. */ -export interface ResolvedRange extends Range { - label: string; - active: boolean; - index: number; -} +// export interface ResolvedRange extends Range { +// label: string; +// active: boolean; +// index: number; +// } +export type ResolvedRange = Range & { + start: Tempo; + end: Tempo; + scope?: string; + label?: string; + unit?: string; + rollover?: string; + [str: string]: any; +} \ No newline at end of file diff --git a/packages/tempo/src/plugin/plugin.util.ts b/packages/tempo/src/plugin/plugin.util.ts index d26d96a7..3f2ac3ba 100644 --- a/packages/tempo/src/plugin/plugin.util.ts +++ b/packages/tempo/src/plugin/plugin.util.ts @@ -73,21 +73,24 @@ export const defineModule = (module: T): T => { * Used to register a module that attaches methods to the Tempo sym.$Interpreter registry. */ export const defineInterpreterModule = (name: string, logic: any) => - defineModule((options: any, TempoClass: any) => { - // 1. Secure the Global Registry - if (isDefined(REGISTRY.modules[name])) { - if (REGISTRY.modules[name] !== logic) throw new Error(`Tempo Security: Core Module clash for '${name}'. Logic is already defined.`); - } else { - REGISTRY.modules[name] = logic; - } + defineModule({ + name, + install(this: Tempo, TempoClass: typeof Tempo) { + // 1. Secure the Global Registry + if (isDefined(REGISTRY.modules[name])) { + if (REGISTRY.modules[name] !== logic) throw new Error(`Tempo Security: Core Module clash for '${name}'. Logic is already defined.`); + } else { + REGISTRY.modules[name] = logic; + } - // 2. Fallback for legacy class-local access - TempoClass[sym.$Interpreter] ??= secureRef({}); - if (isDefined(TempoClass[sym.$Interpreter][name])) { - if (TempoClass[sym.$Interpreter][name] !== logic) throw new Error(`Tempo Interpreter Module clash: '${name}' logic is already defined.`); - } else { - TempoClass[sym.$Interpreter][name] = logic; - } + // 2. Fallback for legacy class-local access + (TempoClass as any)[sym.$Interpreter] ??= secureRef({}); + if (isDefined((TempoClass as any)[sym.$Interpreter][name])) { + if ((TempoClass as any)[sym.$Interpreter][name] !== logic) throw new Error(`Tempo Interpreter Module clash: '${name}' logic is already defined.`); + } else { + (TempoClass as any)[sym.$Interpreter][name] = logic; + } + }, }); /** @@ -451,4 +454,6 @@ export function registerPlugin(plugin: any) { } (globalThis as any)[sym.$Register]?.(plugin); + + return plugin; } diff --git a/packages/tempo/src/plugin/term/term.index.ts b/packages/tempo/src/plugin/term/term.index.ts index 61ab074b..24276713 100644 --- a/packages/tempo/src/plugin/term/term.index.ts +++ b/packages/tempo/src/plugin/term/term.index.ts @@ -4,10 +4,15 @@ import { SeasonTerm } from './term.season.js' import { ZodiacTerm } from './term.zodiac.js' import { TimelineTerm } from './term.timeline.js' +import type {Tempo} from '../../tempo.class.js'; + /** collection of built-in terms for initial registration */ export const StandardTerms = [QuarterTerm, SeasonTerm, ZodiacTerm, TimelineTerm]; /** Aggregator module for all standard Terms */ -export const TermsModule = defineModule((options, TempoClass) => { - TempoClass.extend(StandardTerms); +export const TermsModule = defineModule({ + name: 'TermsModule', + install(this: Tempo, TempoClass: typeof Tempo) { + TempoClass.extend(StandardTerms); + }, }); diff --git a/packages/tempo/src/tempo.class.ts b/packages/tempo/src/tempo.class.ts index 6163ef3f..2c348be5 100644 --- a/packages/tempo/src/tempo.class.ts +++ b/packages/tempo/src/tempo.class.ts @@ -23,7 +23,7 @@ import { prefix, parseWeekday, parseDate, parseTime, parseZone } from './plugin/ import { REGISTRY, registryUpdate, registryReset, onRegistryReset } from './tempo.register.js'; import { registerPlugin, registerTerm, getRange, getTermRange, interpret } from './plugin/plugin.util.js' -import { sym, $isTempo, $Register, $rebuildGuard, $logError, $logDebug, $termError, $errored, $mutateDepth, registerHook, isTempo } from './tempo.symbol.js'; +import sym, { isTempo, registerHook } from './tempo.symbol.js'; import { Match, Token, Snippet, Layout, Event, Period, Default, Guard } from './tempo.default.js'; import enums, { STATE, DISCOVERY } from './tempo.enum.js'; import * as t from './tempo.type.js'; // namespaced types (Tempo.*) @@ -54,12 +54,12 @@ namespace Internal { export type Registry = t.Internal.Registry; export type PluginContainer = t.Internal.PluginContainer; - export type Fmt = { // used for the fmtTempo() shortcut (fmt: F, tempo?: t.DateTime, options?: t.Options): t.FormatType; (fmt: F, options: t.Options): t.FormatType; } } + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * # Tempo @@ -86,8 +86,8 @@ export class Tempo { /** initialization strategies */ static get MODE() { return enums.MODE } /** some useful Dates */ static get LIMIT() { return enums.LIMIT } - /** @internal check if Tempo is currently initializing */ static get isInitializing() { return Tempo.#lifecycle.extendDepth > 0 || !Tempo.#lifecycle.ready } - /** @internal check if Tempo is currently extending */ static get isExtending() { return Tempo.#lifecycle.extendDepth > 0 } + /** @internal check if Tempo is currently initializing */ static get isInitializing() { return Tempo.#lifecycle.extendDepth > 0 || !Tempo.#lifecycle.ready } + /** @internal check if Tempo is currently extending */ static get isExtending() { return Tempo.#lifecycle.extendDepth > 0 } static #dbg = new Logify('Tempo', { debug: Default?.debug ?? false, @@ -104,26 +104,26 @@ export class Tempo { /** @internal handle internal errors using the global config */ - static [$logError](...msg: any[]): void { + static [sym.$logError](...msg: any[]): void { const config = (isObject(msg[0]) && (msg[0] as any)[lib.$Logify] === true) ? msg.shift() : Tempo.#global.config; - markConfig(config); // ensure config is marked for Logify + markConfig(config); // ensure config is marked for Logify Tempo.#dbg.error(config, ...msg); } /** @internal internal key for signaling pre-errored state in constructor */ - static [$errored] = $errored; + static [sym.$errored] = sym.$errored; /** @internal guard against infinite mutation recursion */ - static [$mutateDepth] = 0; + static [sym.$mutateDepth] = 0; /** @internal hook to re-validate the Master Guard */ - static [$rebuildGuard]() { Tempo.#buildGuard() } + static [sym.$rebuildGuard]() { Tempo.#buildGuard() } /** @internal handle internal debug info using the global config */ - static [$logDebug](...msg: any[]): void { + static [sym.$logDebug](...msg: any[]): void { Tempo.#dbg.debug(...msg); } /** @internal Centralized error dispatcher for Term resolution failures */ - static [$termError](config: t.Options, term: string): void { + static [sym.$termError](config: t.Options, term: string): void { const hint = Tempo.#terms.length === 0 ? ". (No term plugins are registered—did you forget to call Tempo.extend(TermsModule)?)" : ""; const msg = `Unknown Term identifier: ${term}${hint}`; Tempo.#dbg.error(config, msg); @@ -931,24 +931,24 @@ export class Tempo { static [Symbol.dispose]() { Tempo.init() } /** allow instanceof to work across module boundaries via the local brand symbol */ - static [$isTempo] = true; + static [sym.$isTempo] = true; static [Symbol.hasInstance](instance: any) { - return !!(instance?.[$isTempo]) + return !!(instance?.[sym.$isTempo]) } /** check if a supplied variable is a valid Tempo instance */ static isTempo(instance?: any): instance is Tempo { - return !!(instance?.[$isTempo]) + return !!(instance?.[sym.$isTempo]) } static { // Static initialization block to sequence the bootstrap phase // Define the reactive register hook - registerHook($Register, (plugin: t.Plugin | t.Plugin[]) => { + registerHook(sym.$Register, (plugin: t.Plugin | t.Plugin[]) => { if (!Tempo.isExtending) Tempo.extend(plugin) }); onRegistryReset(() => { - Tempo[$rebuildGuard](); + (Tempo as any)[sym.$rebuildGuard](); }); Tempo.init(); // synchronously initialize the library @@ -1364,7 +1364,7 @@ export class Tempo { const ident = term.startsWith('#') ? term.slice(1) : term; const termObj = Tempo.#terms.find(t => t.key === ident || t.scope === ident); if (!termObj) { - Tempo[sym.$termError](this.#local.config, term); + (Tempo as any)[sym.$termError](this.#local.config, term); return undefined as any; } @@ -1423,7 +1423,7 @@ export class Tempo { // security check: if it contains term-keys (#) while no plugins are loaded if (isObject(tempo) && Object.keys(tempo).some(k => k.startsWith('#')) && Tempo.#terms.length === 0) { - Tempo[sym.$termError](this.#local.config, Object.keys(tempo).find(k => k.startsWith('#'))!); + (Tempo as any)[sym.$termError](this.#local.config, Object.keys(tempo).find(k => k.startsWith('#'))!); return undefined as any; } @@ -1531,11 +1531,10 @@ export class Tempo { // security check: if it contains term-keys (#) in core mode, we should throw a hint const keys = Object.keys(options); if (keys.some(k => k.startsWith('#')) && Tempo.#terms.length === 0) { - Tempo[sym.$termError](this.#local.config, keys.find(k => k.startsWith('#'))!); + (Tempo as any)[sym.$termError](this.#local.config, keys.find(k => k.startsWith('#'))!); return undefined as any; } - if (!isEmpty(options)) zdt = zdt.with(options as Temporal.ZonedDateTimeLikeObject); if (timeZone) @@ -1864,3 +1863,4 @@ export namespace Tempo { export interface Params extends t.Params { } } + From f52333a48a738b41d1263ef3c2cad7ef8894caf6 Mon Sep 17 00:00:00 2001 From: Michael McRae Date: Thu, 16 Apr 2026 18:55:56 +1000 Subject: [PATCH 08/18] new Plugin syntax --- packages/tempo/src/tempo.class.ts | 8 +++ .../tempo/test/discovery_security.test.ts | 2 +- packages/tempo/test/plugin.test.ts | 61 +++++++++---------- .../tempo/test/reactive_registration.test.ts | 8 ++- 4 files changed, 42 insertions(+), 37 deletions(-) diff --git a/packages/tempo/src/tempo.class.ts b/packages/tempo/src/tempo.class.ts index 2c348be5..52ac9273 100644 --- a/packages/tempo/src/tempo.class.ts +++ b/packages/tempo/src/tempo.class.ts @@ -615,6 +615,14 @@ export class Tempo { } } } + else if (isObject(item) && isString((item as any).name) && isFunction((item as any).install)) { + // Plugin object form { name, install } + if (REGISTRY.installed.has(arg)) return; + REGISTRY.installed.add(arg); // mark as installed (BEFORE side-effects) + + registerPlugin(arg); + (arg as t.Plugin).install.call(this as any, this); + } else if (isObject(item)) { // 1. handle TermPlugin if (isString((item as any).key) && isFunction((item as any).define)) { diff --git a/packages/tempo/test/discovery_security.test.ts b/packages/tempo/test/discovery_security.test.ts index 028f021c..9ed2aff3 100644 --- a/packages/tempo/test/discovery_security.test.ts +++ b/packages/tempo/test/discovery_security.test.ts @@ -1,6 +1,6 @@ import lib from '#library/symbol.library.js'; import { Tempo } from '#tempo'; -import { registryUpdate } from '#tempo/tempo.enum.js'; +import { registryUpdate } from '#tempo/tempo.register.js'; describe('Discovery Security (Direct Registry Check)', () => { diff --git a/packages/tempo/test/plugin.test.ts b/packages/tempo/test/plugin.test.ts index 05d4fd6b..527d381b 100644 --- a/packages/tempo/test/plugin.test.ts +++ b/packages/tempo/test/plugin.test.ts @@ -4,8 +4,11 @@ import type { Plugin } from '#tempo/tempo.type.js'; describe('Tempo Plugin System', () => { test('should extend Tempo with a static method', () => { - const staticPlugin: Plugin = (_options, TempoClass) => { - (TempoClass as any).staticMethod = () => 'static'; + const staticPlugin: Plugin = { + name: 'StaticPlugin', + install(this: Tempo, TempoClass) { + (TempoClass as any).staticMethod = () => 'static'; + }, }; Tempo.extend(staticPlugin); @@ -13,10 +16,13 @@ describe('Tempo Plugin System', () => { }); test('should extend Tempo with an instance method', () => { - const instancePlugin: Plugin = (_options, TempoClass) => { - (TempoClass.prototype as any).instanceMethod = function() { - return 'instance'; - }; + const instancePlugin: Plugin = { + name: 'InstancePlugin', + install(this: Tempo, TempoClass) { + (TempoClass.prototype as any).instanceMethod = function() { + return 'instance'; + }; + }, }; Tempo.extend(instancePlugin); @@ -24,20 +30,11 @@ describe('Tempo Plugin System', () => { expect((t as any).instanceMethod()).toBe('instance'); }); - test('should pass options to the plugin', () => { - let receivedOptions: any; - const optionsPlugin: Plugin = (options) => { - receivedOptions = options; - }; - - Tempo.extend(optionsPlugin, { foo: 'bar' }); - expect(receivedOptions).toEqual({ foo: 'bar' }); - }); - test('should not install the same plugin twice', () => { let installCount = 0; - const singlePlugin: Plugin = () => { - installCount++; + const singlePlugin: Plugin = { + name: 'SinglePlugin', + install() { installCount++; }, }; Tempo.extend(singlePlugin); @@ -45,20 +42,12 @@ describe('Tempo Plugin System', () => { expect(installCount).toBe(1); }); - test('should provide a factory function to the plugin', () => { - let factoryResult: any; - const factoryPlugin: Plugin = (_opts, _Class, factory) => { - factoryResult = factory('2024-01-01'); - }; - - Tempo.extend(factoryPlugin); - expect(factoryResult).toBeInstanceOf(Tempo); - expect(factoryResult.toString()).toContain('2024-01-01'); - }); - test('should auto-load plugins from init options', () => { let loaded = false; - const initPlugin: Plugin = () => { loaded = true; }; + const initPlugin: Plugin = { + name: 'InitPlugin', + install() { loaded = true; }, + }; Tempo.init({ plugins: [initPlugin] }); expect(loaded).toBe(true); @@ -67,7 +56,10 @@ describe('Tempo Plugin System', () => { test('should auto-load plugins from global discovery', () => { const testDiscovery = '$TempoTestDiscovery'; let loaded = false; - const discoveryPlugin: Plugin = () => { loaded = true; }; + const discoveryPlugin: Plugin = { + name: 'DiscoveryPlugin', + install() { loaded = true; }, + }; (globalThis as any)[Symbol.for(testDiscovery)] = { plugins: [discoveryPlugin] @@ -85,8 +77,11 @@ describe('Tempo Plugin System', () => { }).toThrow(); // 2. Try to add new (should succeed) - const newPlugin: Plugin = (_opts, _Class) => { - (_Class as any).freshMethod = () => 'fresh'; + const newPlugin: Plugin = { + name: 'NewPlugin', + install(this: Tempo, TempoClass) { + (TempoClass as any).freshMethod = () => 'fresh'; + }, }; Tempo.extend(newPlugin); expect((Tempo as any).freshMethod()).toBe('fresh'); diff --git a/packages/tempo/test/reactive_registration.test.ts b/packages/tempo/test/reactive_registration.test.ts index edbbc8f9..ece70182 100644 --- a/packages/tempo/test/reactive_registration.test.ts +++ b/packages/tempo/test/reactive_registration.test.ts @@ -10,9 +10,11 @@ describe('Tempo Reactive Registration', () => { expect(Tempo.config.scope).toBe('global') // Mock a late-registering plugin - const $LateDiscovery = Symbol('LateDiscovery') - const myLatePlugin: Plugin = (options, TempoClass) => { - (TempoClass as any).lateMethod = () => 'it works!' + const myLatePlugin: Plugin = { + name: 'LateDiscovery', + install(this: Tempo, TempoClass) { + (TempoClass as any).lateMethod = () => 'it works!' + }, } // Register it (simulating side-effect import) From 9658b1f19925c15f0b3fad1a1c2aea2c1f20796a Mon Sep 17 00:00:00 2001 From: Michael McRae Date: Thu, 16 Apr 2026 19:39:02 +1000 Subject: [PATCH 09/18] all tests passing --- packages/tempo/src/plugin/extend/extend.ticker.ts | 13 ++++++++++--- packages/tempo/src/plugin/module/module.term.ts | 10 +++++----- packages/tempo/src/plugin/plugin.util.ts | 4 ++-- packages/tempo/test/ticker.term.core.test.ts | 2 +- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/packages/tempo/src/plugin/extend/extend.ticker.ts b/packages/tempo/src/plugin/extend/extend.ticker.ts index e5a74de7..c2f8af26 100644 --- a/packages/tempo/src/plugin/extend/extend.ticker.ts +++ b/packages/tempo/src/plugin/extend/extend.ticker.ts @@ -103,6 +103,7 @@ class TickerInstance implements Ticker.Descriptor { #genFirstYielded = false; #isForward = true; #isInstant = false; + #isShorthand = false; #schedId: any; #waiter: Pledge | undefined; #listeners = new Set(); @@ -177,11 +178,17 @@ class TickerInstance implements Ticker.Descriptor { (this.#TempoClass as any)[sym.$logError](this.#current.config, `Invalid Ticker boundary: ${String(this.#until)}`); } else { try { - const firstStep = this.#current.add(this.#payload); + // Use .set() only for directional shorthand values (e.g. '>', '<', '>2') + // Use .add() for numeric counts and named ranges (e.g. 1, 'morning') + this.#isShorthand = Object.entries(this.#payload).some(([k, v]) => + k.startsWith('#') && typeof v === 'string' && /^[<>]/.test(v.trim()) + ); + const hasTermKey = Object.keys(this.#payload).some(k => k.startsWith('#')); + const firstStep = this.#isShorthand ? this.#current.set(this.#payload) : this.#current.add(this.#payload); if (!firstStep.isValid) throw new Error(`Invalid Ticker payload resolution for ${JSON.stringify(this.#payload)}`); this.#isForward = this.#TempoClass.compare(firstStep, this.#current) >= 0; this.#isInstant = firstStep.epoch.ns === this.#current.epoch.ns; - if (Object.keys(this.#payload).some(k => k.startsWith('#'))) this.#current = firstStep; + if (hasTermKey) this.#current = firstStep; ACTIVE_TICKERS.add(this.#self); this.#runBootstrap(); @@ -237,7 +244,7 @@ class TickerInstance implements Ticker.Descriptor { return t; } - this.#current = this.#isInstant ? t : t.add(this.#payload); + this.#current = this.#isInstant ? t : (this.#isShorthand ? t.set(this.#payload) : t.add(this.#payload)); this.#ticks++; if (isDefined(this.#limit) && this.#ticks >= this.#limit) this.stop(); diff --git a/packages/tempo/src/plugin/module/module.term.ts b/packages/tempo/src/plugin/module/module.term.ts index c903f02a..4e022a88 100644 --- a/packages/tempo/src/plugin/module/module.term.ts +++ b/packages/tempo/src/plugin/module/module.term.ts @@ -60,15 +60,15 @@ export function resolveTermMutation(Tempo: any, instance: any, mutate: string, u if (mutate === 'add') { const slickParsed = !!slickStr; const directional = mod && !['this', '>=', '<='].includes(mod); - const numeric = !slickParsed && isNumeric(offset); + const numericOffset = !directional && isNumeric(offset); - if (directional || numeric || (slickParsed && !mod)) { + if (directional || numericOffset || (slickParsed && !mod)) { const shiftDir = directional ? ((mod!.includes('<') || mod!.includes('-') || mod === 'prev' || mod === 'last') ? -1 : 1) - : (numeric ? Math.sign(Number(offset) || 1) : 1); - const addCount = slickParsed + : (numericOffset ? Math.sign(Number(offset) || 1) : 1); + const addCount = directional ? nbr - : Math.abs(Number(offset) || 1); + : (numericOffset ? Math.abs(Number(offset) || 1) : nbr); // Find current containing range const rawList = getRange(termObj, instance, zdt); diff --git a/packages/tempo/src/plugin/plugin.util.ts b/packages/tempo/src/plugin/plugin.util.ts index 3f2ac3ba..e032c759 100644 --- a/packages/tempo/src/plugin/plugin.util.ts +++ b/packages/tempo/src/plugin/plugin.util.ts @@ -1,5 +1,5 @@ import { toZonedDateTime, toInstant } from '#library/temporal.library.js'; -import { isDefined, isFunction, isString, isUndefined, isNumber } from '#library/type.library.js'; +import { isDefined, isFunction, isString, isUndefined, isNumber, isClass } from '#library/type.library.js'; import { secure } from '#library/utility.library.js'; import { sortKey, byKey } from '#library/array.library.js'; import { secureRef } from '#library/proxy.library.js'; @@ -20,7 +20,7 @@ export const STATE = { } export function getHost(t: any): any { - return (t as any).constructor; + return isFunction(t) || isClass(t) ? t : (t as any).constructor; } /** diff --git a/packages/tempo/test/ticker.term.core.test.ts b/packages/tempo/test/ticker.term.core.test.ts index 563b6a6e..4d8098b2 100644 --- a/packages/tempo/test/ticker.term.core.test.ts +++ b/packages/tempo/test/ticker.term.core.test.ts @@ -1,6 +1,6 @@ import { Tempo } from '#tempo/core'; -import { MutateModule } from '#tempo/mutate'; import '#tempo/term/standard'; +import { MutateModule } from '#tempo/mutate'; import { TickerModule } from '#tempo/ticker'; Tempo.extend(MutateModule, TickerModule); From 5faff5120d794572ccb66101602099151541b1b6 Mon Sep 17 00:00:00 2001 From: Michael McRae Date: Thu, 16 Apr 2026 19:44:13 +1000 Subject: [PATCH 10/18] remove redundant range sub-object on Terms --- packages/tempo/src/plugin/plugin.util.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/tempo/src/plugin/plugin.util.ts b/packages/tempo/src/plugin/plugin.util.ts index e032c759..3050253c 100644 --- a/packages/tempo/src/plugin/plugin.util.ts +++ b/packages/tempo/src/plugin/plugin.util.ts @@ -187,7 +187,6 @@ export function getTermRange(tempo: Tempo, list: Range[], keyOnly: boolean | num } return { - range: match, start, end, ...match @@ -212,7 +211,6 @@ export function getTermRange(tempo: Tempo, list: Range[], keyOnly: boolean | num } return { - range: match, start, end, ...match From c91f6e0248633170e23192c1ee4eb1f4d889e5f5 Mon Sep 17 00:00:00 2001 From: Michael McRae Date: Fri, 17 Apr 2026 15:03:28 +1000 Subject: [PATCH 11/18] documentation re-work --- .release-it.json | 12 +- CHANGELOG.md | 9 +- package-lock.json | 1853 ++- package.json | 10 +- .../.vitepress/cache/deps/@theme_index.js | 275 + .../.vitepress/cache/deps/@theme_index.js.map | 7 + .../.vitepress/cache/deps/_metadata.json | 58 + .../.vitepress/cache/deps/chunk-RBPEH57I.js | 9719 ++++++++++++ .../cache/deps/chunk-RBPEH57I.js.map | 7 + .../.vitepress/cache/deps/chunk-XNJYLMDR.js | 12987 ++++++++++++++++ .../cache/deps/chunk-XNJYLMDR.js.map | 7 + .../tempo/.vitepress/cache/deps/package.json | 3 + .../deps/vitepress___@vue_devtools-api.js | 4505 ++++++ .../deps/vitepress___@vue_devtools-api.js.map | 7 + .../cache/deps/vitepress___@vueuse_core.js | 583 + .../deps/vitepress___@vueuse_core.js.map | 7 + ...ess___@vueuse_integrations_useFocusTrap.js | 1352 ++ ...__@vueuse_integrations_useFocusTrap.js.map | 7 + .../vitepress___mark__js_src_vanilla__js.js | 1665 ++ ...itepress___mark__js_src_vanilla__js.js.map | 7 + .../cache/deps/vitepress___minisearch.js | 1813 +++ .../cache/deps/vitepress___minisearch.js.map | 7 + packages/tempo/.vitepress/cache/deps/vue.js | 347 + .../tempo/.vitepress/cache/deps/vue.js.map | 7 + packages/tempo/.vitepress/config.ts | 61 + packages/tempo/CONTRIBUTING.md | 57 + packages/tempo/README.md | 142 +- packages/tempo/demo/1-esm-importmap.html | 67 + packages/tempo/demo/2-global-bundle.html | 61 + packages/tempo/demo/3-modular-granular.html | 49 + packages/tempo/demo/4-error-no-plugin.html | 48 + packages/tempo/demo/index.html | 131 + packages/tempo/doc/Tempo.md | 12 +- .../namespaces/Internal/README.md | 22 + .../Internal/interfaces/BaseOptions.md | 241 + .../namespaces/Internal/interfaces/Config.md | 233 + .../Internal/interfaces/Discovery.md | 233 + .../namespaces/Internal/interfaces/Parse.md | 145 + .../Internal/interfaces/PluginContainer.md | 57 + .../namespaces/Internal/interfaces/State.md | 27 + .../namespaces/Internal/type-aliases/Match.md | 27 + .../Internal/type-aliases/MatchExtend.md | 25 + .../Internal/type-aliases/OptionsKeep.md | 9 + .../Internal/type-aliases/PatternOption.md | 13 + .../type-aliases/PatternOptionArray.md | 13 + .../Internal/type-aliases/Registry.md | 7 + .../Internal/type-aliases/TimeStamp.md | 9 + .../namespaces/Tempo/README.md | 209 + .../namespaces/Tempo/functions/ticker.md | 111 + .../Tempo/interfaces/BaseOptions.md | 333 + .../namespaces/Tempo/interfaces/Params.md | 329 + .../namespaces/Tempo/type-aliases/Add.md | 7 + .../namespaces/Tempo/type-aliases/COMPASS.md | 7 + .../Tempo/type-aliases/DURATION-1.md | 7 + .../Tempo/type-aliases/DURATIONS.md | 7 + .../namespaces/Tempo/type-aliases/DateTime.md | 7 + .../namespaces/Tempo/type-aliases/Duration.md | 7 + .../Tempo/type-aliases/ELEMENT-1.md | 7 + .../namespaces/Tempo/type-aliases/Element.md | 7 + .../Tempo/type-aliases/Extension.md | 7 + .../namespaces/Tempo/type-aliases/Format.md | 7 + .../Tempo/type-aliases/FormatRegistry.md | 7 + .../Tempo/type-aliases/FormatType.md | 13 + .../namespaces/Tempo/type-aliases/Formats.md | 7 + .../namespaces/Tempo/type-aliases/Groups.md | 7 + .../namespaces/Tempo/type-aliases/Logic.md | 7 + .../namespaces/Tempo/type-aliases/MONTH-1.md | 7 + .../namespaces/Tempo/type-aliases/MONTHS.md | 7 + .../namespaces/Tempo/type-aliases/Modifier.md | 7 + .../namespaces/Tempo/type-aliases/Module.md | 7 + .../namespaces/Tempo/type-aliases/Month.md | 7 + .../namespaces/Tempo/type-aliases/Mutate.md | 7 + .../namespaces/Tempo/type-aliases/Options.md | 7 + .../Tempo/type-aliases/OwnFormat.md | 7 + .../namespaces/Tempo/type-aliases/Pair.md | 7 + .../namespaces/Tempo/type-aliases/Pattern.md | 7 + .../Tempo/type-aliases/PatternOption.md | 13 + .../Tempo/type-aliases/PatternOptionArray.md | 13 + .../namespaces/Tempo/type-aliases/Plugin.md | 7 + .../namespaces/Tempo/type-aliases/Relative.md | 7 + .../namespaces/Tempo/type-aliases/SEASON.md | 7 + .../namespaces/Tempo/type-aliases/Set.md | 7 + .../Tempo/type-aliases/TermPlugin.md | 7 + .../namespaces/Tempo/type-aliases/Terms.md | 7 + .../namespaces/Tempo/type-aliases/Unit.md | 9 + .../namespaces/Tempo/type-aliases/Until.md | 7 + .../Tempo/type-aliases/WEEKDAY-1.md | 7 + .../namespaces/Tempo/type-aliases/WEEKDAYS.md | 7 + .../namespaces/Tempo/type-aliases/Weekday.md | 7 + .../namespaces/Tempo/type-aliases/hh.md | 7 + .../namespaces/Tempo/type-aliases/mi.md | 7 + .../namespaces/Tempo/type-aliases/mm.md | 7 + .../namespaces/Tempo/type-aliases/ms.md | 7 + .../namespaces/Tempo/type-aliases/ns.md | 7 + .../namespaces/Tempo/type-aliases/ss.md | 7 + .../namespaces/Tempo/type-aliases/us.md | 7 + .../namespaces/Tempo/type-aliases/ww.md | 7 + .../namespaces/Tempo/variables/tickers.md | 7 + packages/tempo/doc/api/README.md | 106 + packages/tempo/doc/api/classes/Tempo.md | 4693 ++++++ .../tempo/doc/api/interfaces/Extension.md | 54 + packages/tempo/doc/api/interfaces/Module.md | 54 + packages/tempo/doc/api/interfaces/Params.md | 329 + packages/tempo/doc/api/interfaces/Plugin.md | 44 + .../tempo/doc/api/interfaces/TermPlugin.md | 96 + packages/tempo/doc/api/type-aliases/Add.md | 7 + .../tempo/doc/api/type-aliases/AddUnits.md | 7 + .../doc/api/type-aliases/BaseDuration.md | 7 + .../tempo/doc/api/type-aliases/COMPASS.md | 9 + .../tempo/doc/api/type-aliases/DURATION-1.md | 9 + .../tempo/doc/api/type-aliases/DURATIONS.md | 9 + .../tempo/doc/api/type-aliases/DateTime.md | 9 + .../doc/api/type-aliases/DateTimeUnit.md | 9 + .../tempo/doc/api/type-aliases/Duration.md | 7 + .../tempo/doc/api/type-aliases/ELEMENT-1.md | 7 + .../tempo/doc/api/type-aliases/Element.md | 7 + .../tempo/doc/api/type-aliases/FORMAT-1.md | 9 + .../doc/api/type-aliases/FlexibleDuration.md | 23 + packages/tempo/doc/api/type-aliases/Format.md | 9 + .../doc/api/type-aliases/FormatRegistry.md | 9 + .../tempo/doc/api/type-aliases/FormatType.md | 13 + .../tempo/doc/api/type-aliases/Formats.md | 9 + packages/tempo/doc/api/type-aliases/Groups.md | 7 + packages/tempo/doc/api/type-aliases/Logic.md | 7 + packages/tempo/doc/api/type-aliases/MODE-1.md | 9 + .../tempo/doc/api/type-aliases/MONTH-1.md | 9 + packages/tempo/doc/api/type-aliases/MONTHS.md | 9 + .../tempo/doc/api/type-aliases/MUTATION.md | 7 + packages/tempo/doc/api/type-aliases/Mode.md | 7 + .../tempo/doc/api/type-aliases/Modifier.md | 7 + packages/tempo/doc/api/type-aliases/Month.md | 7 + packages/tempo/doc/api/type-aliases/Mutate.md | 7 + packages/tempo/doc/api/type-aliases/Number.md | 7 + .../doc/api/type-aliases/NumericPattern.md | 7 + .../tempo/doc/api/type-aliases/Options.md | 7 + .../tempo/doc/api/type-aliases/OwnFormat.md | 9 + packages/tempo/doc/api/type-aliases/Pair.md | 7 + .../tempo/doc/api/type-aliases/Pattern.md | 7 + packages/tempo/doc/api/type-aliases/Range.md | 10 + .../tempo/doc/api/type-aliases/Relative.md | 7 + .../doc/api/type-aliases/ResolvedRange.md | 36 + packages/tempo/doc/api/type-aliases/SEASON.md | 9 + packages/tempo/doc/api/type-aliases/Set.md | 7 + .../tempo/doc/api/type-aliases/SetFields.md | 7 + .../tempo/doc/api/type-aliases/TIMEZONE.md | 9 + .../tempo/doc/api/type-aliases/TermOffset.md | 11 + packages/tempo/doc/api/type-aliases/Terms.md | 9 + packages/tempo/doc/api/type-aliases/Unit.md | 7 + packages/tempo/doc/api/type-aliases/Units.md | 7 + packages/tempo/doc/api/type-aliases/Until.md | 7 + .../tempo/doc/api/type-aliases/WEEKDAY-1.md | 9 + .../tempo/doc/api/type-aliases/WEEKDAYS.md | 9 + .../tempo/doc/api/type-aliases/Weekday.md | 7 + .../doc/api/type-aliases/ZONED_DATE_TIME.md | 7 + packages/tempo/doc/api/type-aliases/hh.md | 7 + packages/tempo/doc/api/type-aliases/mi.md | 7 + packages/tempo/doc/api/type-aliases/mm.md | 7 + packages/tempo/doc/api/type-aliases/ms.md | 7 + packages/tempo/doc/api/type-aliases/ns.md | 7 + packages/tempo/doc/api/type-aliases/ss.md | 7 + packages/tempo/doc/api/type-aliases/us.md | 7 + packages/tempo/doc/api/type-aliases/ww.md | 7 + packages/tempo/doc/api/variables/COMPASS.md | 9 + packages/tempo/doc/api/variables/DISCOVERY.md | 7 + packages/tempo/doc/api/variables/DURATION.md | 9 + packages/tempo/doc/api/variables/DURATIONS.md | 9 + packages/tempo/doc/api/variables/ELEMENT.md | 7 + packages/tempo/doc/api/variables/FORMAT.md | 9 + packages/tempo/doc/api/variables/LIMIT.md | 33 + packages/tempo/doc/api/variables/MODE.md | 9 + packages/tempo/doc/api/variables/MONTH.md | 9 + packages/tempo/doc/api/variables/MONTHS.md | 9 + packages/tempo/doc/api/variables/MUTATION.md | 7 + packages/tempo/doc/api/variables/NUMBER.md | 9 + packages/tempo/doc/api/variables/OPTION.md | 7 + packages/tempo/doc/api/variables/PARSE.md | 7 + packages/tempo/doc/api/variables/SEASON.md | 9 + packages/tempo/doc/api/variables/TIMEZONE.md | 71 + packages/tempo/doc/api/variables/WEEKDAY.md | 9 + packages/tempo/doc/api/variables/WEEKDAYS.md | 9 + .../doc/api/variables/ZONED_DATE_TIME.md | 7 + packages/tempo/doc/api/variables/enums.md | 195 + packages/tempo/doc/api/variables/fmtTempo.md | 9 + packages/tempo/doc/api/variables/getStamp.md | 9 + packages/tempo/doc/api/variables/getTempo.md | 9 + packages/tempo/doc/architecture.md | 36 +- packages/tempo/doc/lazy-evaluation-pattern.md | 92 +- packages/tempo/doc/migration-guide.md | 47 + packages/tempo/doc/releases/versions.md | 49 + packages/tempo/doc/soft_freeze_strategy.md | 11 +- packages/tempo/doc/tempo.benchmarks.md | 5 +- packages/tempo/doc/tempo.config.md | 22 +- packages/tempo/doc/tempo.modularity.md | 8 +- packages/tempo/doc/tempo.shorthand.md | 155 +- .../{hourglass-svgrepo-com.svg => logo.svg} | 0 packages/tempo/index.md | 26 + packages/tempo/package.json | 13 +- packages/tempo/plan/release-process.md | 60 + packages/tempo/public/bundle-demo.html | 75 + packages/tempo/public/logo.svg | 10 + packages/tempo/rollup.config.js | 49 +- .../tempo/src/plugin/term/term.quarter.ts | 18 +- packages/tempo/src/tempo.class.ts | 25 +- packages/tempo/src/tempo.entry.ts | 11 + packages/tempo/src/tempo.index.ts | 8 +- packages/tempo/src/tempo.type.ts | 12 +- packages/tempo/typedoc.json | 10 + 207 files changed, 44980 insertions(+), 372 deletions(-) create mode 100644 packages/tempo/.vitepress/cache/deps/@theme_index.js create mode 100644 packages/tempo/.vitepress/cache/deps/@theme_index.js.map create mode 100644 packages/tempo/.vitepress/cache/deps/_metadata.json create mode 100644 packages/tempo/.vitepress/cache/deps/chunk-RBPEH57I.js create mode 100644 packages/tempo/.vitepress/cache/deps/chunk-RBPEH57I.js.map create mode 100644 packages/tempo/.vitepress/cache/deps/chunk-XNJYLMDR.js create mode 100644 packages/tempo/.vitepress/cache/deps/chunk-XNJYLMDR.js.map create mode 100644 packages/tempo/.vitepress/cache/deps/package.json create mode 100644 packages/tempo/.vitepress/cache/deps/vitepress___@vue_devtools-api.js create mode 100644 packages/tempo/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map create mode 100644 packages/tempo/.vitepress/cache/deps/vitepress___@vueuse_core.js create mode 100644 packages/tempo/.vitepress/cache/deps/vitepress___@vueuse_core.js.map create mode 100644 packages/tempo/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js create mode 100644 packages/tempo/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js.map create mode 100644 packages/tempo/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js create mode 100644 packages/tempo/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js.map create mode 100644 packages/tempo/.vitepress/cache/deps/vitepress___minisearch.js create mode 100644 packages/tempo/.vitepress/cache/deps/vitepress___minisearch.js.map create mode 100644 packages/tempo/.vitepress/cache/deps/vue.js create mode 100644 packages/tempo/.vitepress/cache/deps/vue.js.map create mode 100644 packages/tempo/.vitepress/config.ts create mode 100644 packages/tempo/CONTRIBUTING.md create mode 100644 packages/tempo/demo/1-esm-importmap.html create mode 100644 packages/tempo/demo/2-global-bundle.html create mode 100644 packages/tempo/demo/3-modular-granular.html create mode 100644 packages/tempo/demo/4-error-no-plugin.html create mode 100644 packages/tempo/demo/index.html create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Internal/README.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/BaseOptions.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Config.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Discovery.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Parse.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/PluginContainer.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/State.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Match.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/MatchExtend.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/OptionsKeep.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOptionArray.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Registry.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/README.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/functions/ticker.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/BaseOptions.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/Params.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Add.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/COMPASS.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATION-1.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATIONS.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DateTime.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Duration.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ELEMENT-1.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Element.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Extension.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Format.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatRegistry.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatType.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Formats.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Groups.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Logic.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTH-1.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTHS.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Modifier.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Module.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Month.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Mutate.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Options.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/OwnFormat.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pair.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pattern.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOption.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOptionArray.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Plugin.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Relative.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/SEASON.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Set.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/TermPlugin.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Terms.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Unit.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Until.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAY-1.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAYS.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Weekday.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/hh.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mi.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mm.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ms.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ns.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ss.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/us.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ww.md create mode 100644 packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/variables/tickers.md create mode 100644 packages/tempo/doc/api/README.md create mode 100644 packages/tempo/doc/api/classes/Tempo.md create mode 100644 packages/tempo/doc/api/interfaces/Extension.md create mode 100644 packages/tempo/doc/api/interfaces/Module.md create mode 100644 packages/tempo/doc/api/interfaces/Params.md create mode 100644 packages/tempo/doc/api/interfaces/Plugin.md create mode 100644 packages/tempo/doc/api/interfaces/TermPlugin.md create mode 100644 packages/tempo/doc/api/type-aliases/Add.md create mode 100644 packages/tempo/doc/api/type-aliases/AddUnits.md create mode 100644 packages/tempo/doc/api/type-aliases/BaseDuration.md create mode 100644 packages/tempo/doc/api/type-aliases/COMPASS.md create mode 100644 packages/tempo/doc/api/type-aliases/DURATION-1.md create mode 100644 packages/tempo/doc/api/type-aliases/DURATIONS.md create mode 100644 packages/tempo/doc/api/type-aliases/DateTime.md create mode 100644 packages/tempo/doc/api/type-aliases/DateTimeUnit.md create mode 100644 packages/tempo/doc/api/type-aliases/Duration.md create mode 100644 packages/tempo/doc/api/type-aliases/ELEMENT-1.md create mode 100644 packages/tempo/doc/api/type-aliases/Element.md create mode 100644 packages/tempo/doc/api/type-aliases/FORMAT-1.md create mode 100644 packages/tempo/doc/api/type-aliases/FlexibleDuration.md create mode 100644 packages/tempo/doc/api/type-aliases/Format.md create mode 100644 packages/tempo/doc/api/type-aliases/FormatRegistry.md create mode 100644 packages/tempo/doc/api/type-aliases/FormatType.md create mode 100644 packages/tempo/doc/api/type-aliases/Formats.md create mode 100644 packages/tempo/doc/api/type-aliases/Groups.md create mode 100644 packages/tempo/doc/api/type-aliases/Logic.md create mode 100644 packages/tempo/doc/api/type-aliases/MODE-1.md create mode 100644 packages/tempo/doc/api/type-aliases/MONTH-1.md create mode 100644 packages/tempo/doc/api/type-aliases/MONTHS.md create mode 100644 packages/tempo/doc/api/type-aliases/MUTATION.md create mode 100644 packages/tempo/doc/api/type-aliases/Mode.md create mode 100644 packages/tempo/doc/api/type-aliases/Modifier.md create mode 100644 packages/tempo/doc/api/type-aliases/Month.md create mode 100644 packages/tempo/doc/api/type-aliases/Mutate.md create mode 100644 packages/tempo/doc/api/type-aliases/Number.md create mode 100644 packages/tempo/doc/api/type-aliases/NumericPattern.md create mode 100644 packages/tempo/doc/api/type-aliases/Options.md create mode 100644 packages/tempo/doc/api/type-aliases/OwnFormat.md create mode 100644 packages/tempo/doc/api/type-aliases/Pair.md create mode 100644 packages/tempo/doc/api/type-aliases/Pattern.md create mode 100644 packages/tempo/doc/api/type-aliases/Range.md create mode 100644 packages/tempo/doc/api/type-aliases/Relative.md create mode 100644 packages/tempo/doc/api/type-aliases/ResolvedRange.md create mode 100644 packages/tempo/doc/api/type-aliases/SEASON.md create mode 100644 packages/tempo/doc/api/type-aliases/Set.md create mode 100644 packages/tempo/doc/api/type-aliases/SetFields.md create mode 100644 packages/tempo/doc/api/type-aliases/TIMEZONE.md create mode 100644 packages/tempo/doc/api/type-aliases/TermOffset.md create mode 100644 packages/tempo/doc/api/type-aliases/Terms.md create mode 100644 packages/tempo/doc/api/type-aliases/Unit.md create mode 100644 packages/tempo/doc/api/type-aliases/Units.md create mode 100644 packages/tempo/doc/api/type-aliases/Until.md create mode 100644 packages/tempo/doc/api/type-aliases/WEEKDAY-1.md create mode 100644 packages/tempo/doc/api/type-aliases/WEEKDAYS.md create mode 100644 packages/tempo/doc/api/type-aliases/Weekday.md create mode 100644 packages/tempo/doc/api/type-aliases/ZONED_DATE_TIME.md create mode 100644 packages/tempo/doc/api/type-aliases/hh.md create mode 100644 packages/tempo/doc/api/type-aliases/mi.md create mode 100644 packages/tempo/doc/api/type-aliases/mm.md create mode 100644 packages/tempo/doc/api/type-aliases/ms.md create mode 100644 packages/tempo/doc/api/type-aliases/ns.md create mode 100644 packages/tempo/doc/api/type-aliases/ss.md create mode 100644 packages/tempo/doc/api/type-aliases/us.md create mode 100644 packages/tempo/doc/api/type-aliases/ww.md create mode 100644 packages/tempo/doc/api/variables/COMPASS.md create mode 100644 packages/tempo/doc/api/variables/DISCOVERY.md create mode 100644 packages/tempo/doc/api/variables/DURATION.md create mode 100644 packages/tempo/doc/api/variables/DURATIONS.md create mode 100644 packages/tempo/doc/api/variables/ELEMENT.md create mode 100644 packages/tempo/doc/api/variables/FORMAT.md create mode 100644 packages/tempo/doc/api/variables/LIMIT.md create mode 100644 packages/tempo/doc/api/variables/MODE.md create mode 100644 packages/tempo/doc/api/variables/MONTH.md create mode 100644 packages/tempo/doc/api/variables/MONTHS.md create mode 100644 packages/tempo/doc/api/variables/MUTATION.md create mode 100644 packages/tempo/doc/api/variables/NUMBER.md create mode 100644 packages/tempo/doc/api/variables/OPTION.md create mode 100644 packages/tempo/doc/api/variables/PARSE.md create mode 100644 packages/tempo/doc/api/variables/SEASON.md create mode 100644 packages/tempo/doc/api/variables/TIMEZONE.md create mode 100644 packages/tempo/doc/api/variables/WEEKDAY.md create mode 100644 packages/tempo/doc/api/variables/WEEKDAYS.md create mode 100644 packages/tempo/doc/api/variables/ZONED_DATE_TIME.md create mode 100644 packages/tempo/doc/api/variables/enums.md create mode 100644 packages/tempo/doc/api/variables/fmtTempo.md create mode 100644 packages/tempo/doc/api/variables/getStamp.md create mode 100644 packages/tempo/doc/api/variables/getTempo.md create mode 100644 packages/tempo/doc/migration-guide.md create mode 100644 packages/tempo/doc/releases/versions.md rename packages/tempo/img/{hourglass-svgrepo-com.svg => logo.svg} (100%) create mode 100644 packages/tempo/index.md create mode 100644 packages/tempo/plan/release-process.md create mode 100644 packages/tempo/public/bundle-demo.html create mode 100644 packages/tempo/public/logo.svg create mode 100644 packages/tempo/src/tempo.entry.ts create mode 100644 packages/tempo/typedoc.json diff --git a/.release-it.json b/.release-it.json index b62df6be..8d62775c 100644 --- a/.release-it.json +++ b/.release-it.json @@ -13,8 +13,14 @@ "access": "public" }, "hooks": { - "before:init": ["npm test"], - "after:bump": ["npm run build"] + "before:init": [ + "npm test" + ], + "after:bump": [ + "npm version ${version} -w @magmacomputing/tempo -w @magmacomputing/library --no-git-tag-version", + "npm run build:library", + "npm run build:tempo" + ] }, "plugins": { "@release-it/keep-a-changelog": { @@ -22,4 +28,4 @@ "filename": "CHANGELOG.md" } } -} +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f276f33..48718525 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [2.0.1] - 2026-04-03 +## [Unreleased] + +### Added +- **VitePress Documentation**: Launched a modern, searchable documentation site powered by VitePress and TypeDoc. +- **Proxy-Delegator Pattern**: Refined the lazy-evaluation engine for $O(1)$ property access. +- **Scan-and-Consume Guard**: Implemented high-performance token matching for v2.1.2 stabilization. + +## [2.1.2] - 2026-04-16 ### Added - **Ticker Stability Guard**: Implemented a 10,000-iteration safety break in `resolveTermShift` to prevent infinite loops when resolving malformed or non-advancing custom terms. diff --git a/package-lock.json b/package-lock.json index ad4f151f..001e07c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,264 @@ "vitest": "^2.1.8" } }, + "node_modules/@algolia/abtesting": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.16.2.tgz", + "integrity": "sha512-n9s6bEV6imdtIEd+BGP7WkA4pEZ5YTdgQ05JQhHwWawHg3hyjpNwC0TShGz6zWhv+jfLDGA/6FFNbySFS0P9cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.2", + "@algolia/requester-browser-xhr": "5.50.2", + "@algolia/requester-fetch": "5.50.2", + "@algolia/requester-node-http": "5.50.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", + "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", + "@algolia/autocomplete-shared": "1.17.7" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", + "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", + "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", + "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.50.2", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.50.2.tgz", + "integrity": "sha512-52iq0vHy1sphgnwoZyx5PmbEt8hsh+m7jD123LmBs6qy4GK7LbYZIeKd+nSnSipN2zvKRZ2zScS6h9PW3J7SXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.2", + "@algolia/requester-browser-xhr": "5.50.2", + "@algolia/requester-fetch": "5.50.2", + "@algolia/requester-node-http": "5.50.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.50.2", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.50.2.tgz", + "integrity": "sha512-WpPIUg+cSG2aPUG0gS8Ko9DwRgbRPUZxJkolhL2aCsmSlcEEZT65dILrfg5ovcxtx0Kvr+xtBVsTMtsQWRtPDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.2", + "@algolia/requester-browser-xhr": "5.50.2", + "@algolia/requester-fetch": "5.50.2", + "@algolia/requester-node-http": "5.50.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.50.2", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.50.2.tgz", + "integrity": "sha512-Gj2MgtArGcsr82kIqRlo6/dCAFjrs2gLByEqyRENuT7ugrSMFuqg1vDzeBjRL1t3EJEJCFtT0PLX3gB8A6Hq4Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.50.2", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.50.2.tgz", + "integrity": "sha512-CUqoid5jDpmrc0oK3/xuZXFt6kwT0P9Lw7/nsM14YTr6puvmi+OUKmURpmebQF22S2vCG8L1DAoXXujxQUi/ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.2", + "@algolia/requester-browser-xhr": "5.50.2", + "@algolia/requester-fetch": "5.50.2", + "@algolia/requester-node-http": "5.50.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.50.2", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.50.2.tgz", + "integrity": "sha512-AndZWFoc0gbP5901OeQJ73BazgGgSGiBEba4ohdoJuZwHTO2Gio8Q4L1VLmytMBYcviVigB0iICToMvEJxI4ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.2", + "@algolia/requester-browser-xhr": "5.50.2", + "@algolia/requester-fetch": "5.50.2", + "@algolia/requester-node-http": "5.50.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.50.2", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.50.2.tgz", + "integrity": "sha512-NWoL+psEkz5dIzweaByVXuEB45wS8/rk0E0AhMMnaVJdVs7TcACPH2/OURm+N0xRDITkTHqCna823rd6Uqntdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.2", + "@algolia/requester-browser-xhr": "5.50.2", + "@algolia/requester-fetch": "5.50.2", + "@algolia/requester-node-http": "5.50.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.50.2", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.50.2.tgz", + "integrity": "sha512-ypSboUJ3XJoQz5DeDo82hCnrRuwq3q9ZdFhVKAik9TnZh1DvLqoQsrbBjXg7C7zQOtV/Qbge/HmyoV6V5L7MhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.2", + "@algolia/requester-browser-xhr": "5.50.2", + "@algolia/requester-fetch": "5.50.2", + "@algolia/requester-node-http": "5.50.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.50.2", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.50.2.tgz", + "integrity": "sha512-VlR2FRXLw2bCB94SQo6zxg/Qi+547aOji6Pb+dKE7h1DMCCY317St+OpjpmgzE+bT2O9ALIc0V4nVIBOd7Gy+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.2", + "@algolia/requester-browser-xhr": "5.50.2", + "@algolia/requester-fetch": "5.50.2", + "@algolia/requester-node-http": "5.50.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.50.2", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.50.2.tgz", + "integrity": "sha512-Cmvfp2+qopzQt8OilU97rhLhosq7ZrB6uieok3EwFUqG/aalPg6DgfCmu0yJMrYe+KMC1qRVt1MTRAUwLknUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.2", + "@algolia/requester-browser-xhr": "5.50.2", + "@algolia/requester-fetch": "5.50.2", + "@algolia/requester-node-http": "5.50.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.50.2", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.50.2.tgz", + "integrity": "sha512-jrkuyKoOM7dFWQ/6Y4hQAse2SC3L/RldG6GnPjMvAj65h+7Ubb51S0pKk4ofSStF0xm4LCNe0C4T6XX4nOFDiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.2", + "@algolia/requester-browser-xhr": "5.50.2", + "@algolia/requester-fetch": "5.50.2", + "@algolia/requester-node-http": "5.50.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.50.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.50.2.tgz", + "integrity": "sha512-4107YLJqCudPiBUlwnk6oTSUVwU7ab+qL1SfQGEDYI8DZH5gsf1ekPt9JykXRKYXf2IfouFL5GiCY/PHTFIjYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.50.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.50.2.tgz", + "integrity": "sha512-vOrd3MQpLgmf6wXAueTuZ/cA0W4uRwIHHaxNy3h+a6YcNn6bCV/gFdZuv3F13v593zRU2k5R75NmvRWLenvMrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.50.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.50.2.tgz", + "integrity": "sha512-Mu9BFtgzGqDUy5Bcs2nMyoILIFSN13GKQaklKAFIsd0K3/9CpNyfeBc+/+Qs6mFZLlxG9qzullO7h+bjcTBuGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", @@ -41,6 +299,16 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", @@ -51,6 +319,87 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@docsearch/css": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", + "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@docsearch/js": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz", + "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/react": "3.8.2", + "preact": "^10.0.0" + } + }, + "node_modules/@docsearch/react": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", + "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "1.17.7", + "@algolia/autocomplete-preset-algolia": "1.17.7", + "@docsearch/css": "3.8.2", + "algoliasearch": "^5.14.2" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -459,6 +808,20 @@ "node": ">=12" } }, + "node_modules/@gerrit0/mini-shiki": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.23.0.tgz", + "integrity": "sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-oniguruma": "^3.23.0", + "@shikijs/langs": "^3.23.0", + "@shikijs/themes": "^3.23.0", + "@shikijs/types": "^3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, "node_modules/@iarna/toml": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", @@ -466,6 +829,23 @@ "dev": true, "license": "ISC" }, + "node_modules/@iconify-json/simple-icons": { + "version": "1.2.78", + "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.78.tgz", + "integrity": "sha512-I3lkNp0Qu7q2iZWkdcf/I2hqGhzK6qxdILh9T7XqowQrnpmG/BayDsiCf6PktDoWlW0U971xA5g+panm+NFrfQ==", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "dev": true, + "license": "MIT" + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", @@ -1277,6 +1657,137 @@ "win32" ] }, + "node_modules/@shikijs/core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz", + "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.4" + } + }, + "node_modules/@shikijs/core/node_modules/@shikijs/engine-oniguruma": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", + "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/core/node_modules/@shikijs/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", + "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", + "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^3.1.0" + } + }, + "node_modules/@shikijs/engine-javascript/node_modules/@shikijs/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", + "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", + "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", + "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", + "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/transformers": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz", + "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/transformers/node_modules/@shikijs/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", + "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/types": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true, + "license": "MIT" + }, "node_modules/@sindresorhus/is": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", @@ -1344,6 +1855,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/http-cache-semantics": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", @@ -1358,6 +1879,41 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "25.5.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", @@ -1375,6 +1931,41 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, "node_modules/@vitest/expect": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.8.tgz", @@ -1473,41 +2064,319 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/ui": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-2.1.8.tgz", - "integrity": "sha512-5zPJ1fs0ixSVSs5+5V2XJjXLmNzjugHRyV11RqxYVR+oMcogZ9qTuSfKW+OcTV0JeFNznI83BNylzH6SSNJ1+w==", + "node_modules/@vitest/ui": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-2.1.8.tgz", + "integrity": "sha512-5zPJ1fs0ixSVSs5+5V2XJjXLmNzjugHRyV11RqxYVR+oMcogZ9qTuSfKW+OcTV0JeFNznI83BNylzH6SSNJ1+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "2.1.8", + "fflate": "^0.8.2", + "flatted": "^3.3.1", + "pathe": "^1.1.2", + "sirv": "^3.0.0", + "tinyglobby": "^0.2.10", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "2.1.8" + } + }, + "node_modules/@vitest/utils": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz", + "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.8", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.32.tgz", + "integrity": "sha512-4x74Tbtqnda8s/NSD6e1Dr5p1c8HdMU5RWSjMSUzb8RTcUQqevDCxVAitcLBKT+ie3o0Dl9crc/S/opJM7qBGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/shared": "3.5.32", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-core/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@vue/compiler-core/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.32.tgz", + "integrity": "sha512-ybHAu70NtiEI1fvAUz3oXZqkUYEe5J98GjMDpTGl5iHb0T15wQYLR4wE3h9xfuTNA+Cm2f4czfe8B4s+CCH57Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.32.tgz", + "integrity": "sha512-8UYUYo71cP/0YHMO814TRZlPuUUw3oifHuMR7Wp9SNoRSrxRQnhMLNlCeaODNn6kNTJsjFoQ/kqIj4qGvya4Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/compiler-core": "3.5.32", + "@vue/compiler-dom": "3.5.32", + "@vue/compiler-ssr": "3.5.32", + "@vue/shared": "3.5.32", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.8", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.32.tgz", + "integrity": "sha512-Gp4gTs22T3DgRotZ8aA/6m2jMR+GMztvBXUBEUOYOcST+giyGWJ4WvFd7QLHBkzTxkfOt8IELKNdpzITLbA2rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.9.tgz", + "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.9" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz", + "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.9", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz", + "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.32.tgz", + "integrity": "sha512-/ORasxSGvZ6MN5gc+uE364SxFdJ0+WqVG0CENXaGW58TOCdrAW76WWaplDtECeS1qphvtBZtR+3/o1g1zL4xPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.32.tgz", + "integrity": "sha512-pDrXCejn4UpFDFmMd27AcJEbHaLemaE5o4pbb7sLk79SRIhc6/t34BQA7SGNgYtbMnvbF/HHOftYBgFJtUoJUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.32.tgz", + "integrity": "sha512-1CDVv7tv/IV13V8Nip1k/aaObVbWqRlVCVezTwx3K07p7Vxossp5JU1dcPNhJk3w347gonIUT9jQOGutyJrSVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.32", + "@vue/runtime-core": "3.5.32", + "@vue/shared": "3.5.32", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.32.tgz", + "integrity": "sha512-IOjm2+JQwRFS7W28HNuJeXQle9KdZbODFY7hFGVtnnghF51ta20EWAZJHX+zLGtsHhaU6uC9BGPV52KVpYryMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.32", + "@vue/shared": "3.5.32" + }, + "peerDependencies": { + "vue": "3.5.32" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.32.tgz", + "integrity": "sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", + "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/integrations": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz", + "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vueuse/core": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "^4", + "axios": "^1", + "change-case": "^5", + "drauu": "^0.4", + "focus-trap": "^7", + "fuse.js": "^7", + "idb-keyval": "^6", + "jwt-decode": "^4", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^7" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", + "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", "dev": true, "license": "MIT", - "dependencies": { - "@vitest/utils": "2.1.8", - "fflate": "^0.8.2", - "flatted": "^3.3.1", - "pathe": "^1.1.2", - "sirv": "^3.0.0", - "tinyglobby": "^0.2.10", - "tinyrainbow": "^1.2.0" - }, "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "vitest": "2.1.8" + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@vitest/utils": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz", - "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==", + "node_modules/@vueuse/shared": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", + "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.8", - "loupe": "^3.1.2", - "tinyrainbow": "^1.2.0" + "vue": "^3.5.13" }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/sponsors/antfu" } }, "node_modules/agent-base": { @@ -1520,6 +2389,32 @@ "node": ">= 14" } }, + "node_modules/algoliasearch": { + "version": "5.50.2", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.50.2.tgz", + "integrity": "sha512-Tfp26yoNWurUjfgK4GOrVJQhSNXu9tJtHfFFNosgT2YClG+vPyUjX/gbC8rG39qLncnZg8Fj34iarQWpMkqefw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.16.2", + "@algolia/client-abtesting": "5.50.2", + "@algolia/client-analytics": "5.50.2", + "@algolia/client-common": "5.50.2", + "@algolia/client-insights": "5.50.2", + "@algolia/client-personalization": "5.50.2", + "@algolia/client-query-suggestions": "5.50.2", + "@algolia/client-search": "5.50.2", + "@algolia/ingestion": "1.50.2", + "@algolia/monitoring": "1.50.2", + "@algolia/recommend": "5.50.2", + "@algolia/requester-browser-xhr": "5.50.2", + "@algolia/requester-fetch": "5.50.2", + "@algolia/requester-node-http": "5.50.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -1744,6 +2639,16 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -2067,6 +2972,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chai": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", @@ -2097,6 +3013,28 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -2209,6 +3147,17 @@ "dev": true, "license": "MIT" }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2254,6 +3203,22 @@ "url": "https://github.com/yeoman/configstore?sponsor=1" } }, + "node_modules/copy-anything": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz", + "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^5.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/cosmiconfig": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", @@ -2325,6 +3290,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", @@ -2590,6 +3562,16 @@ "dev": true, "license": "ISC" }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/detect-newline": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", @@ -2603,6 +3585,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/dot-prop": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", @@ -2648,6 +3644,26 @@ "dev": true, "license": "MIT" }, + "node_modules/emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -3127,6 +4143,16 @@ "dev": true, "license": "ISC" }, + "node_modules/focus-trap": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.8.0.tgz", + "integrity": "sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tabbable": "^6.4.0" + } + }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", @@ -3623,6 +4649,62 @@ "node": ">= 0.4" } }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/http-cache-semantics": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", @@ -4555,6 +5637,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-what": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz", + "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/is-wsl": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", @@ -4700,6 +5795,16 @@ "dev": true, "license": "MIT" }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -4802,6 +5907,13 @@ "node": ">=12" } }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true, + "license": "MIT" + }, "node_modules/macos-release": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-3.4.0.tgz", @@ -4825,6 +5937,31 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/markdown-it": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -4835,6 +5972,35 @@ "node": ">= 0.4" } }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -4852,6 +6018,100 @@ "node": ">= 8" } }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -4951,6 +6211,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minisearch": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz", + "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==", + "dev": true, + "license": "MIT" + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true, + "license": "MIT" + }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -5188,6 +6462,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/oniguruma-to-es": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", + "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex-xs": "^1.0.0", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, "node_modules/open": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/open/-/open-10.0.3.tgz", @@ -5607,6 +6893,13 @@ "node": ">= 14.16" } }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5666,6 +6959,17 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/preact": { + "version": "10.29.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.1.tgz", + "integrity": "sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, "node_modules/promise.allsettled": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.7.tgz", @@ -5684,7 +6988,18 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/proto-list": { @@ -5728,6 +7043,16 @@ "dev": true, "license": "MIT" }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/pupa": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.3.0.tgz", @@ -5851,6 +7176,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "dev": true, + "license": "MIT" + }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", @@ -6085,6 +7437,13 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, "node_modules/rollup": { "version": "4.60.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", @@ -6270,6 +7629,14 @@ "dev": true, "license": "MIT" }, + "node_modules/search-insights": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -6405,6 +7772,65 @@ "node": ">=4" } }, + "node_modules/shiki": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", + "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/langs": "2.5.0", + "@shikijs/themes": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/shiki/node_modules/@shikijs/engine-oniguruma": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", + "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/shiki/node_modules/@shikijs/langs": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz", + "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/shiki/node_modules/@shikijs/themes": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz", + "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/shiki/node_modules/@shikijs/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", + "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -6591,6 +8017,27 @@ "node": ">=0.10.0" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", @@ -6723,6 +8170,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -6759,6 +8221,19 @@ "node": ">=0.10.0" } }, + "node_modules/superjson": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz", + "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-anything": "^4" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -6785,6 +8260,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tabbable": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", + "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", + "dev": true, + "license": "MIT" + }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -6882,6 +8364,17 @@ "node": ">=6" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -7476,6 +8969,104 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/typedoc": { + "version": "0.28.19", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.19.tgz", + "integrity": "sha512-wKh+lhdmMFivMlc6vRRcMGXeGEHGU2g8a2CkPTJjJlwRf1iXbimWIPcFolCqe4E0d/FRtGszpIrsp3WLpDB8Pw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@gerrit0/mini-shiki": "^3.23.0", + "lunr": "^2.3.9", + "markdown-it": "^14.1.1", + "minimatch": "^10.2.5", + "yaml": "^2.8.3" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 18", + "pnpm": ">= 10" + }, + "peerDependencies": { + "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.11.0.tgz", + "integrity": "sha512-2iunh2ALyfyh204OF7h2u0kuQ84xB3jFZtFyUr01nThJkLvR8oGGSSDlyt2gyO4kXhvUxDcVbO0y43+qX+wFbw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "typedoc": "0.28.x" + } + }, + "node_modules/typedoc/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typescript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", @@ -7531,6 +9122,79 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/universal-user-agent": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", @@ -7582,6 +9246,36 @@ "dev": true, "license": "MIT" }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/vite": { "version": "5.4.21", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", @@ -7665,6 +9359,59 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/vitepress": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.4.tgz", + "integrity": "sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/css": "3.8.2", + "@docsearch/js": "3.8.2", + "@iconify-json/simple-icons": "^1.2.21", + "@shikijs/core": "^2.1.0", + "@shikijs/transformers": "^2.1.0", + "@shikijs/types": "^2.1.0", + "@types/markdown-it": "^14.1.2", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/devtools-api": "^7.7.0", + "@vue/shared": "^3.5.13", + "@vueuse/core": "^12.4.0", + "@vueuse/integrations": "^12.4.0", + "focus-trap": "^7.6.4", + "mark.js": "8.11.1", + "minisearch": "^7.1.1", + "shiki": "^2.1.0", + "vite": "^5.4.14", + "vue": "^3.5.13" + }, + "bin": { + "vitepress": "bin/vitepress.js" + }, + "peerDependencies": { + "markdown-it-mathjax3": "^4", + "postcss": "^8" + }, + "peerDependenciesMeta": { + "markdown-it-mathjax3": { + "optional": true + }, + "postcss": { + "optional": true + } + } + }, + "node_modules/vitepress/node_modules/@shikijs/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", + "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, "node_modules/vitest": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.8.tgz", @@ -7731,6 +9478,28 @@ } } }, + "node_modules/vue": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.32.tgz", + "integrity": "sha512-vM4z4Q9tTafVfMAK7IVzmxg34rSzTFMyIe0UUEijUCkn9+23lj0WRfA83dg7eQZIUlgOSGrkViIaCfqSAUXsMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.32", + "@vue/compiler-sfc": "3.5.32", + "@vue/runtime-dom": "3.5.32", + "@vue/server-renderer": "3.5.32", + "@vue/shared": "3.5.32" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -8144,6 +9913,22 @@ "dev": true, "license": "ISC" }, + "node_modules/yaml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", @@ -8154,6 +9939,17 @@ "node": ">=12" } }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "packages/library": { "name": "@magmacomputing/library", "version": "2.1.2", @@ -8184,7 +9980,10 @@ "@js-temporal/polyfill": "^0.5.1", "@magmacomputing/library": "^2.1.2", "@rollup/plugin-alias": "^6.0.0", - "magic-string": "^0.30.21" + "magic-string": "^0.30.21", + "typedoc": "^0.28.19", + "typedoc-plugin-markdown": "^4.11.0", + "vitepress": "^1.6.4" } } } diff --git a/package.json b/package.json index 8bb99ef4..536a7a44 100644 --- a/package.json +++ b/package.json @@ -16,12 +16,12 @@ "build:library": "npm run build --workspace=@magmacomputing/library", "clean": "tsc -b --clean", "release": "release-it", - "release:tempo": "npm run build --workspace=@magmacomputing/tempo && npm run publish --workspace=@magmacomputing/tempo", - "version:patch": "npm version patch -w @magmacomputing/tempo -w @magmacomputing/library --no-git-tag-version", - "version:minor": "npm version minor -w @magmacomputing/tempo -w @magmacomputing/library --no-git-tag-version", - "version:major": "npm version major -w @magmacomputing/tempo -w @magmacomputing/library --no-git-tag-version", + "version:sync": "npm version ${npm_package_version} -w @magmacomputing/tempo -w @magmacomputing/library --no-git-tag-version", "repl": "npm run repl --workspace=@magmacomputing/tempo", - "core": "npm run core --workspace=@magmacomputing/tempo" + "core": "npm run core --workspace=@magmacomputing/tempo", + "docs:dev": "npm run docs:dev --workspace=@magmacomputing/tempo", + "docs:build": "npm run docs:build --workspace=@magmacomputing/tempo", + "docs:preview": "npm run docs:preview --workspace=@magmacomputing/tempo" }, "devDependencies": { "@js-temporal/polyfill": "^0.5.1", diff --git a/packages/tempo/.vitepress/cache/deps/@theme_index.js b/packages/tempo/.vitepress/cache/deps/@theme_index.js new file mode 100644 index 00000000..b79801e0 --- /dev/null +++ b/packages/tempo/.vitepress/cache/deps/@theme_index.js @@ -0,0 +1,275 @@ +import { + useMediaQuery +} from "./chunk-RBPEH57I.js"; +import { + computed, + ref, + shallowRef, + watch +} from "./chunk-XNJYLMDR.js"; + +// ../../node_modules/vitepress/dist/client/theme-default/index.js +import "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/styles/fonts.css"; + +// ../../node_modules/vitepress/dist/client/theme-default/without-fonts.js +import "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/styles/vars.css"; +import "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/styles/base.css"; +import "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/styles/icons.css"; +import "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/styles/utils.css"; +import "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/styles/components/custom-block.css"; +import "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code.css"; +import "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code-group.css"; +import "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css"; +import "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/styles/components/vp-sponsor.css"; +import VPBadge from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue"; +import Layout from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/Layout.vue"; +import { default as default2 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue"; +import { default as default3 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPButton.vue"; +import { default as default4 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPDocAsideSponsors.vue"; +import { default as default5 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPFeatures.vue"; +import { default as default6 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPHomeContent.vue"; +import { default as default7 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPHomeFeatures.vue"; +import { default as default8 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPHomeHero.vue"; +import { default as default9 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPHomeSponsors.vue"; +import { default as default10 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPImage.vue"; +import { default as default11 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPLink.vue"; +import { default as default12 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPNavBarSearch.vue"; +import { default as default13 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPSocialLink.vue"; +import { default as default14 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPSocialLinks.vue"; +import { default as default15 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPSponsors.vue"; +import { default as default16 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPTeamMembers.vue"; +import { default as default17 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPTeamPage.vue"; +import { default as default18 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageSection.vue"; +import { default as default19 } from "/home/michael/Project/magma/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageTitle.vue"; + +// ../../node_modules/vitepress/dist/client/theme-default/composables/local-nav.js +import { onContentUpdated } from "vitepress"; + +// ../../node_modules/vitepress/dist/client/theme-default/composables/outline.js +import { getScrollOffset } from "vitepress"; + +// ../../node_modules/vitepress/dist/client/theme-default/support/utils.js +import { withBase } from "vitepress"; + +// ../../node_modules/vitepress/dist/client/theme-default/composables/data.js +import { useData as useData$ } from "vitepress"; +var useData = useData$; + +// ../../node_modules/vitepress/dist/client/theme-default/support/utils.js +function ensureStartingSlash(path) { + return path.startsWith("/") ? path : `/${path}`; +} + +// ../../node_modules/vitepress/dist/client/theme-default/support/sidebar.js +function getSidebar(_sidebar, path) { + if (Array.isArray(_sidebar)) + return addBase(_sidebar); + if (_sidebar == null) + return []; + path = ensureStartingSlash(path); + const dir = Object.keys(_sidebar).sort((a, b) => { + return b.split("/").length - a.split("/").length; + }).find((dir2) => { + return path.startsWith(ensureStartingSlash(dir2)); + }); + const sidebar = dir ? _sidebar[dir] : []; + return Array.isArray(sidebar) ? addBase(sidebar) : addBase(sidebar.items, sidebar.base); +} +function getSidebarGroups(sidebar) { + const groups = []; + let lastGroupIndex = 0; + for (const index in sidebar) { + const item = sidebar[index]; + if (item.items) { + lastGroupIndex = groups.push(item); + continue; + } + if (!groups[lastGroupIndex]) { + groups.push({ items: [] }); + } + groups[lastGroupIndex].items.push(item); + } + return groups; +} +function addBase(items, _base) { + return [...items].map((_item) => { + const item = { ..._item }; + const base = item.base || _base; + if (base && item.link) + item.link = base + item.link; + if (item.items) + item.items = addBase(item.items, base); + return item; + }); +} + +// ../../node_modules/vitepress/dist/client/theme-default/composables/sidebar.js +function useSidebar() { + const { frontmatter, page, theme: theme2 } = useData(); + const is960 = useMediaQuery("(min-width: 960px)"); + const isOpen = ref(false); + const _sidebar = computed(() => { + const sidebarConfig = theme2.value.sidebar; + const relativePath = page.value.relativePath; + return sidebarConfig ? getSidebar(sidebarConfig, relativePath) : []; + }); + const sidebar = ref(_sidebar.value); + watch(_sidebar, (next, prev) => { + if (JSON.stringify(next) !== JSON.stringify(prev)) + sidebar.value = _sidebar.value; + }); + const hasSidebar = computed(() => { + return frontmatter.value.sidebar !== false && sidebar.value.length > 0 && frontmatter.value.layout !== "home"; + }); + const leftAside = computed(() => { + if (hasAside) + return frontmatter.value.aside == null ? theme2.value.aside === "left" : frontmatter.value.aside === "left"; + return false; + }); + const hasAside = computed(() => { + if (frontmatter.value.layout === "home") + return false; + if (frontmatter.value.aside != null) + return !!frontmatter.value.aside; + return theme2.value.aside !== false; + }); + const isSidebarEnabled = computed(() => hasSidebar.value && is960.value); + const sidebarGroups = computed(() => { + return hasSidebar.value ? getSidebarGroups(sidebar.value) : []; + }); + function open() { + isOpen.value = true; + } + function close() { + isOpen.value = false; + } + function toggle() { + isOpen.value ? close() : open(); + } + return { + isOpen, + sidebar, + sidebarGroups, + hasSidebar, + hasAside, + leftAside, + isSidebarEnabled, + open, + close, + toggle + }; +} + +// ../../node_modules/vitepress/dist/client/theme-default/composables/outline.js +var ignoreRE = /\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/; +var resolvedHeaders = []; +function getHeaders(range) { + const headers = [ + ...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)") + ].filter((el) => el.id && el.hasChildNodes()).map((el) => { + const level = Number(el.tagName[1]); + return { + element: el, + title: serializeHeader(el), + link: "#" + el.id, + level + }; + }); + return resolveHeaders(headers, range); +} +function serializeHeader(h) { + let ret = ""; + for (const node of h.childNodes) { + if (node.nodeType === 1) { + if (ignoreRE.test(node.className)) + continue; + ret += node.textContent; + } else if (node.nodeType === 3) { + ret += node.textContent; + } + } + return ret.trim(); +} +function resolveHeaders(headers, range) { + if (range === false) { + return []; + } + const levelsRange = (typeof range === "object" && !Array.isArray(range) ? range.level : range) || 2; + const [high, low] = typeof levelsRange === "number" ? [levelsRange, levelsRange] : levelsRange === "deep" ? [2, 6] : levelsRange; + return buildTree(headers, high, low); +} +function buildTree(data, min, max) { + resolvedHeaders.length = 0; + const result = []; + const stack = []; + data.forEach((item) => { + const node = { ...item, children: [] }; + let parent = stack[stack.length - 1]; + while (parent && parent.level >= node.level) { + stack.pop(); + parent = stack[stack.length - 1]; + } + if (node.element.classList.contains("ignore-header") || parent && "shouldIgnore" in parent) { + stack.push({ level: node.level, shouldIgnore: true }); + return; + } + if (node.level > max || node.level < min) + return; + resolvedHeaders.push({ element: node.element, link: node.link }); + if (parent) + parent.children.push(node); + else + result.push(node); + stack.push(node); + }); + return result; +} + +// ../../node_modules/vitepress/dist/client/theme-default/composables/local-nav.js +function useLocalNav() { + const { theme: theme2, frontmatter } = useData(); + const headers = shallowRef([]); + const hasLocalNav = computed(() => { + return headers.value.length > 0; + }); + onContentUpdated(() => { + headers.value = getHeaders(frontmatter.value.outline ?? theme2.value.outline); + }); + return { + headers, + hasLocalNav + }; +} + +// ../../node_modules/vitepress/dist/client/theme-default/without-fonts.js +var theme = { + Layout, + enhanceApp: ({ app }) => { + app.component("Badge", VPBadge); + } +}; +var without_fonts_default = theme; +export { + default2 as VPBadge, + default3 as VPButton, + default4 as VPDocAsideSponsors, + default5 as VPFeatures, + default6 as VPHomeContent, + default7 as VPHomeFeatures, + default8 as VPHomeHero, + default9 as VPHomeSponsors, + default10 as VPImage, + default11 as VPLink, + default12 as VPNavBarSearch, + default13 as VPSocialLink, + default14 as VPSocialLinks, + default15 as VPSponsors, + default16 as VPTeamMembers, + default17 as VPTeamPage, + default18 as VPTeamPageSection, + default19 as VPTeamPageTitle, + without_fonts_default as default, + useLocalNav, + useSidebar +}; +//# sourceMappingURL=@theme_index.js.map diff --git a/packages/tempo/.vitepress/cache/deps/@theme_index.js.map b/packages/tempo/.vitepress/cache/deps/@theme_index.js.map new file mode 100644 index 00000000..5ea58dc4 --- /dev/null +++ b/packages/tempo/.vitepress/cache/deps/@theme_index.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../../../../node_modules/vitepress/dist/client/theme-default/index.js", "../../../../../node_modules/vitepress/dist/client/theme-default/without-fonts.js", "../../../../../node_modules/vitepress/dist/client/theme-default/composables/local-nav.js", "../../../../../node_modules/vitepress/dist/client/theme-default/composables/outline.js", "../../../../../node_modules/vitepress/dist/client/theme-default/support/utils.js", "../../../../../node_modules/vitepress/dist/client/theme-default/composables/data.js", "../../../../../node_modules/vitepress/dist/client/theme-default/support/sidebar.js", "../../../../../node_modules/vitepress/dist/client/theme-default/composables/sidebar.js"], + "sourcesContent": ["import './styles/fonts.css';\nexport * from './without-fonts';\nexport { default as default } from './without-fonts';\n", "import './styles/vars.css';\nimport './styles/base.css';\nimport './styles/icons.css';\nimport './styles/utils.css';\nimport './styles/components/custom-block.css';\nimport './styles/components/vp-code.css';\nimport './styles/components/vp-code-group.css';\nimport './styles/components/vp-doc.css';\nimport './styles/components/vp-sponsor.css';\nimport VPBadge from './components/VPBadge.vue';\nimport Layout from './Layout.vue';\nexport { default as VPBadge } from './components/VPBadge.vue';\nexport { default as VPButton } from './components/VPButton.vue';\nexport { default as VPDocAsideSponsors } from './components/VPDocAsideSponsors.vue';\nexport { default as VPFeatures } from './components/VPFeatures.vue';\nexport { default as VPHomeContent } from './components/VPHomeContent.vue';\nexport { default as VPHomeFeatures } from './components/VPHomeFeatures.vue';\nexport { default as VPHomeHero } from './components/VPHomeHero.vue';\nexport { default as VPHomeSponsors } from './components/VPHomeSponsors.vue';\nexport { default as VPImage } from './components/VPImage.vue';\nexport { default as VPLink } from './components/VPLink.vue';\nexport { default as VPNavBarSearch } from './components/VPNavBarSearch.vue';\nexport { default as VPSocialLink } from './components/VPSocialLink.vue';\nexport { default as VPSocialLinks } from './components/VPSocialLinks.vue';\nexport { default as VPSponsors } from './components/VPSponsors.vue';\nexport { default as VPTeamMembers } from './components/VPTeamMembers.vue';\nexport { default as VPTeamPage } from './components/VPTeamPage.vue';\nexport { default as VPTeamPageSection } from './components/VPTeamPageSection.vue';\nexport { default as VPTeamPageTitle } from './components/VPTeamPageTitle.vue';\nexport { useLocalNav } from './composables/local-nav';\nexport { useSidebar } from './composables/sidebar';\nconst theme = {\n Layout,\n enhanceApp: ({ app }) => {\n app.component('Badge', VPBadge);\n }\n};\nexport default theme;\n", "import { onContentUpdated } from 'vitepress';\nimport { computed, shallowRef } from 'vue';\nimport { getHeaders } from '../composables/outline';\nimport { useData } from './data';\nexport function useLocalNav() {\n const { theme, frontmatter } = useData();\n const headers = shallowRef([]);\n const hasLocalNav = computed(() => {\n return headers.value.length > 0;\n });\n onContentUpdated(() => {\n headers.value = getHeaders(frontmatter.value.outline ?? theme.value.outline);\n });\n return {\n headers,\n hasLocalNav\n };\n}\n", "import { getScrollOffset } from 'vitepress';\nimport { onMounted, onUnmounted, onUpdated } from 'vue';\nimport { throttleAndDebounce } from '../support/utils';\nimport { useAside } from './aside';\nconst ignoreRE = /\\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\\b/;\n// cached list of anchor elements from resolveHeaders\nconst resolvedHeaders = [];\nexport function resolveTitle(theme) {\n return ((typeof theme.outline === 'object' &&\n !Array.isArray(theme.outline) &&\n theme.outline.label) ||\n theme.outlineTitle ||\n 'On this page');\n}\nexport function getHeaders(range) {\n const headers = [\n ...document.querySelectorAll('.VPDoc :where(h1,h2,h3,h4,h5,h6)')\n ]\n .filter((el) => el.id && el.hasChildNodes())\n .map((el) => {\n const level = Number(el.tagName[1]);\n return {\n element: el,\n title: serializeHeader(el),\n link: '#' + el.id,\n level\n };\n });\n return resolveHeaders(headers, range);\n}\nfunction serializeHeader(h) {\n let ret = '';\n for (const node of h.childNodes) {\n if (node.nodeType === 1) {\n if (ignoreRE.test(node.className))\n continue;\n ret += node.textContent;\n }\n else if (node.nodeType === 3) {\n ret += node.textContent;\n }\n }\n return ret.trim();\n}\nexport function resolveHeaders(headers, range) {\n if (range === false) {\n return [];\n }\n const levelsRange = (typeof range === 'object' && !Array.isArray(range)\n ? range.level\n : range) || 2;\n const [high, low] = typeof levelsRange === 'number'\n ? [levelsRange, levelsRange]\n : levelsRange === 'deep'\n ? [2, 6]\n : levelsRange;\n return buildTree(headers, high, low);\n}\nexport function useActiveAnchor(container, marker) {\n const { isAsideEnabled } = useAside();\n const onScroll = throttleAndDebounce(setActiveLink, 100);\n let prevActiveLink = null;\n onMounted(() => {\n requestAnimationFrame(setActiveLink);\n window.addEventListener('scroll', onScroll);\n });\n onUpdated(() => {\n // sidebar update means a route change\n activateLink(location.hash);\n });\n onUnmounted(() => {\n window.removeEventListener('scroll', onScroll);\n });\n function setActiveLink() {\n if (!isAsideEnabled.value) {\n return;\n }\n const scrollY = window.scrollY;\n const innerHeight = window.innerHeight;\n const offsetHeight = document.body.offsetHeight;\n const isBottom = Math.abs(scrollY + innerHeight - offsetHeight) < 1;\n // resolvedHeaders may be repositioned, hidden or fix positioned\n const headers = resolvedHeaders\n .map(({ element, link }) => ({\n link,\n top: getAbsoluteTop(element)\n }))\n .filter(({ top }) => !Number.isNaN(top))\n .sort((a, b) => a.top - b.top);\n // no headers available for active link\n if (!headers.length) {\n activateLink(null);\n return;\n }\n // page top\n if (scrollY < 1) {\n activateLink(null);\n return;\n }\n // page bottom - highlight last link\n if (isBottom) {\n activateLink(headers[headers.length - 1].link);\n return;\n }\n // find the last header above the top of viewport\n let activeLink = null;\n for (const { link, top } of headers) {\n if (top > scrollY + getScrollOffset() + 4) {\n break;\n }\n activeLink = link;\n }\n activateLink(activeLink);\n }\n function activateLink(hash) {\n if (prevActiveLink) {\n prevActiveLink.classList.remove('active');\n }\n if (hash == null) {\n prevActiveLink = null;\n }\n else {\n prevActiveLink = container.value.querySelector(`a[href=\"${decodeURIComponent(hash)}\"]`);\n }\n const activeLink = prevActiveLink;\n if (activeLink) {\n activeLink.classList.add('active');\n marker.value.style.top = activeLink.offsetTop + 39 + 'px';\n marker.value.style.opacity = '1';\n }\n else {\n marker.value.style.top = '33px';\n marker.value.style.opacity = '0';\n }\n }\n}\nfunction getAbsoluteTop(element) {\n let offsetTop = 0;\n while (element !== document.body) {\n if (element === null) {\n // child element is:\n // - not attached to the DOM (display: none)\n // - set to fixed position (not scrollable)\n // - body or html element (null offsetParent)\n return NaN;\n }\n offsetTop += element.offsetTop;\n element = element.offsetParent;\n }\n return offsetTop;\n}\nfunction buildTree(data, min, max) {\n resolvedHeaders.length = 0;\n const result = [];\n const stack = [];\n data.forEach((item) => {\n const node = { ...item, children: [] };\n let parent = stack[stack.length - 1];\n while (parent && parent.level >= node.level) {\n stack.pop();\n parent = stack[stack.length - 1];\n }\n if (node.element.classList.contains('ignore-header') ||\n (parent && 'shouldIgnore' in parent)) {\n stack.push({ level: node.level, shouldIgnore: true });\n return;\n }\n if (node.level > max || node.level < min)\n return;\n resolvedHeaders.push({ element: node.element, link: node.link });\n if (parent)\n parent.children.push(node);\n else\n result.push(node);\n stack.push(node);\n });\n return result;\n}\n", "import { withBase } from 'vitepress';\nimport { isExternal, treatAsHtml } from '../../shared';\nimport { useData } from '../composables/data';\nexport function throttleAndDebounce(fn, delay) {\n let timeoutId;\n let called = false;\n return () => {\n if (timeoutId)\n clearTimeout(timeoutId);\n if (!called) {\n fn();\n (called = true) && setTimeout(() => (called = false), delay);\n }\n else\n timeoutId = setTimeout(fn, delay);\n };\n}\nexport function ensureStartingSlash(path) {\n return path.startsWith('/') ? path : `/${path}`;\n}\nexport function normalizeLink(url) {\n const { pathname, search, hash, protocol } = new URL(url, 'http://a.com');\n if (isExternal(url) ||\n url.startsWith('#') ||\n !protocol.startsWith('http') ||\n !treatAsHtml(pathname))\n return url;\n const { site } = useData();\n const normalizedPath = pathname.endsWith('/') || pathname.endsWith('.html')\n ? url\n : url.replace(/(?:(^\\.+)\\/)?.*$/, `$1${pathname.replace(/(\\.md)?$/, site.value.cleanUrls ? '' : '.html')}${search}${hash}`);\n return withBase(normalizedPath);\n}\n", "import { useData as useData$ } from 'vitepress';\nexport const useData = useData$;\n", "import { isActive } from '../../shared';\nimport { ensureStartingSlash } from './utils';\n/**\n * Get the `Sidebar` from sidebar option. This method will ensure to get correct\n * sidebar config from `MultiSideBarConfig` with various path combinations such\n * as matching `guide/` and `/guide/`. If no matching config was found, it will\n * return empty array.\n */\nexport function getSidebar(_sidebar, path) {\n if (Array.isArray(_sidebar))\n return addBase(_sidebar);\n if (_sidebar == null)\n return [];\n path = ensureStartingSlash(path);\n const dir = Object.keys(_sidebar)\n .sort((a, b) => {\n return b.split('/').length - a.split('/').length;\n })\n .find((dir) => {\n // make sure the multi sidebar key starts with slash too\n return path.startsWith(ensureStartingSlash(dir));\n });\n const sidebar = dir ? _sidebar[dir] : [];\n return Array.isArray(sidebar)\n ? addBase(sidebar)\n : addBase(sidebar.items, sidebar.base);\n}\n/**\n * Get or generate sidebar group from the given sidebar items.\n */\nexport function getSidebarGroups(sidebar) {\n const groups = [];\n let lastGroupIndex = 0;\n for (const index in sidebar) {\n const item = sidebar[index];\n if (item.items) {\n lastGroupIndex = groups.push(item);\n continue;\n }\n if (!groups[lastGroupIndex]) {\n groups.push({ items: [] });\n }\n groups[lastGroupIndex].items.push(item);\n }\n return groups;\n}\nexport function getFlatSideBarLinks(sidebar) {\n const links = [];\n function recursivelyExtractLinks(items) {\n for (const item of items) {\n if (item.text && item.link) {\n links.push({\n text: item.text,\n link: item.link,\n docFooterText: item.docFooterText\n });\n }\n if (item.items) {\n recursivelyExtractLinks(item.items);\n }\n }\n }\n recursivelyExtractLinks(sidebar);\n return links;\n}\n/**\n * Check if the given sidebar item contains any active link.\n */\nexport function hasActiveLink(path, items) {\n if (Array.isArray(items)) {\n return items.some((item) => hasActiveLink(path, item));\n }\n return isActive(path, items.link)\n ? true\n : items.items\n ? hasActiveLink(path, items.items)\n : false;\n}\nfunction addBase(items, _base) {\n return [...items].map((_item) => {\n const item = { ..._item };\n const base = item.base || _base;\n if (base && item.link)\n item.link = base + item.link;\n if (item.items)\n item.items = addBase(item.items, base);\n return item;\n });\n}\n", "import { useMediaQuery } from '@vueuse/core';\nimport { computed, onMounted, onUnmounted, ref, watch, watchEffect, watchPostEffect } from 'vue';\nimport { isActive } from '../../shared';\nimport { hasActiveLink as containsActiveLink, getSidebar, getSidebarGroups } from '../support/sidebar';\nimport { useData } from './data';\nexport function useSidebar() {\n const { frontmatter, page, theme } = useData();\n const is960 = useMediaQuery('(min-width: 960px)');\n const isOpen = ref(false);\n const _sidebar = computed(() => {\n const sidebarConfig = theme.value.sidebar;\n const relativePath = page.value.relativePath;\n return sidebarConfig ? getSidebar(sidebarConfig, relativePath) : [];\n });\n const sidebar = ref(_sidebar.value);\n watch(_sidebar, (next, prev) => {\n if (JSON.stringify(next) !== JSON.stringify(prev))\n sidebar.value = _sidebar.value;\n });\n const hasSidebar = computed(() => {\n return (frontmatter.value.sidebar !== false &&\n sidebar.value.length > 0 &&\n frontmatter.value.layout !== 'home');\n });\n const leftAside = computed(() => {\n if (hasAside)\n return frontmatter.value.aside == null\n ? theme.value.aside === 'left'\n : frontmatter.value.aside === 'left';\n return false;\n });\n const hasAside = computed(() => {\n if (frontmatter.value.layout === 'home')\n return false;\n if (frontmatter.value.aside != null)\n return !!frontmatter.value.aside;\n return theme.value.aside !== false;\n });\n const isSidebarEnabled = computed(() => hasSidebar.value && is960.value);\n const sidebarGroups = computed(() => {\n return hasSidebar.value ? getSidebarGroups(sidebar.value) : [];\n });\n function open() {\n isOpen.value = true;\n }\n function close() {\n isOpen.value = false;\n }\n function toggle() {\n isOpen.value ? close() : open();\n }\n return {\n isOpen,\n sidebar,\n sidebarGroups,\n hasSidebar,\n hasAside,\n leftAside,\n isSidebarEnabled,\n open,\n close,\n toggle\n };\n}\n/**\n * a11y: cache the element that opened the Sidebar (the menu button) then\n * focus that button again when Menu is closed with Escape key.\n */\nexport function useCloseSidebarOnEscape(isOpen, close) {\n let triggerElement;\n watchEffect(() => {\n triggerElement = isOpen.value\n ? document.activeElement\n : undefined;\n });\n onMounted(() => {\n window.addEventListener('keyup', onEscape);\n });\n onUnmounted(() => {\n window.removeEventListener('keyup', onEscape);\n });\n function onEscape(e) {\n if (e.key === 'Escape' && isOpen.value) {\n close();\n triggerElement?.focus();\n }\n }\n}\nexport function useSidebarControl(item) {\n const { page, hash } = useData();\n const collapsed = ref(false);\n const collapsible = computed(() => {\n return item.value.collapsed != null;\n });\n const isLink = computed(() => {\n return !!item.value.link;\n });\n const isActiveLink = ref(false);\n const updateIsActiveLink = () => {\n isActiveLink.value = isActive(page.value.relativePath, item.value.link);\n };\n watch([page, item, hash], updateIsActiveLink);\n onMounted(updateIsActiveLink);\n const hasActiveLink = computed(() => {\n if (isActiveLink.value) {\n return true;\n }\n return item.value.items\n ? containsActiveLink(page.value.relativePath, item.value.items)\n : false;\n });\n const hasChildren = computed(() => {\n return !!(item.value.items && item.value.items.length);\n });\n watchEffect(() => {\n collapsed.value = !!(collapsible.value && item.value.collapsed);\n });\n watchPostEffect(() => {\n ;\n (isActiveLink.value || hasActiveLink.value) && (collapsed.value = false);\n });\n function toggle() {\n if (collapsible.value) {\n collapsed.value = !collapsed.value;\n }\n }\n return {\n collapsed,\n collapsible,\n isLink,\n isActiveLink,\n hasActiveLink,\n hasChildren,\n toggle\n };\n}\n"], + "mappings": "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", + "names": ["default", "dir", "theme", "theme"] +} diff --git a/packages/tempo/.vitepress/cache/deps/_metadata.json b/packages/tempo/.vitepress/cache/deps/_metadata.json new file mode 100644 index 00000000..98e9f5ee --- /dev/null +++ b/packages/tempo/.vitepress/cache/deps/_metadata.json @@ -0,0 +1,58 @@ +{ + "hash": "fcc6c13f", + "configHash": "261ada3f", + "lockfileHash": "610dbc15", + "browserHash": "a427373f", + "optimized": { + "vue": { + "src": "../../../../../node_modules/vue/dist/vue.runtime.esm-bundler.js", + "file": "vue.js", + "fileHash": "c6ab7543", + "needsInterop": false + }, + "vitepress > @vue/devtools-api": { + "src": "../../../../../node_modules/@vue/devtools-api/dist/index.js", + "file": "vitepress___@vue_devtools-api.js", + "fileHash": "016b5d04", + "needsInterop": false + }, + "vitepress > @vueuse/core": { + "src": "../../../../../node_modules/@vueuse/core/index.mjs", + "file": "vitepress___@vueuse_core.js", + "fileHash": "7247ad23", + "needsInterop": false + }, + "vitepress > @vueuse/integrations/useFocusTrap": { + "src": "../../../../../node_modules/@vueuse/integrations/useFocusTrap.mjs", + "file": "vitepress___@vueuse_integrations_useFocusTrap.js", + "fileHash": "e43b0eef", + "needsInterop": false + }, + "vitepress > mark.js/src/vanilla.js": { + "src": "../../../../../node_modules/mark.js/src/vanilla.js", + "file": "vitepress___mark__js_src_vanilla__js.js", + "fileHash": "5094080d", + "needsInterop": false + }, + "vitepress > minisearch": { + "src": "../../../../../node_modules/minisearch/dist/es/index.js", + "file": "vitepress___minisearch.js", + "fileHash": "1d0a7012", + "needsInterop": false + }, + "@theme/index": { + "src": "../../../../../node_modules/vitepress/dist/client/theme-default/index.js", + "file": "@theme_index.js", + "fileHash": "e800e1cc", + "needsInterop": false + } + }, + "chunks": { + "chunk-RBPEH57I": { + "file": "chunk-RBPEH57I.js" + }, + "chunk-XNJYLMDR": { + "file": "chunk-XNJYLMDR.js" + } + } +} \ No newline at end of file diff --git a/packages/tempo/.vitepress/cache/deps/chunk-RBPEH57I.js b/packages/tempo/.vitepress/cache/deps/chunk-RBPEH57I.js new file mode 100644 index 00000000..6f7f15c6 --- /dev/null +++ b/packages/tempo/.vitepress/cache/deps/chunk-RBPEH57I.js @@ -0,0 +1,9719 @@ +import { + Fragment, + TransitionGroup, + computed, + customRef, + defineComponent, + effectScope, + getCurrentInstance, + getCurrentScope, + h, + hasInjectionContext, + inject, + isReactive, + isReadonly, + isRef, + markRaw, + nextTick, + onBeforeMount, + onBeforeUnmount, + onBeforeUpdate, + onMounted, + onScopeDispose, + onUnmounted, + onUpdated, + provide, + reactive, + readonly, + ref, + shallowReactive, + shallowRef, + toRaw, + toRef, + toRefs, + toValue, + unref, + watch, + watchEffect +} from "./chunk-XNJYLMDR.js"; + +// ../../node_modules/@vueuse/shared/index.mjs +function computedEager(fn, options) { + var _a; + const result = shallowRef(); + watchEffect(() => { + result.value = fn(); + }, { + ...options, + flush: (_a = options == null ? void 0 : options.flush) != null ? _a : "sync" + }); + return readonly(result); +} +function computedWithControl(source, fn) { + let v = void 0; + let track; + let trigger; + const dirty = shallowRef(true); + const update = () => { + dirty.value = true; + trigger(); + }; + watch(source, update, { flush: "sync" }); + const get2 = typeof fn === "function" ? fn : fn.get; + const set2 = typeof fn === "function" ? void 0 : fn.set; + const result = customRef((_track, _trigger) => { + track = _track; + trigger = _trigger; + return { + get() { + if (dirty.value) { + v = get2(v); + dirty.value = false; + } + track(); + return v; + }, + set(v2) { + set2 == null ? void 0 : set2(v2); + } + }; + }); + if (Object.isExtensible(result)) + result.trigger = update; + return result; +} +function tryOnScopeDispose(fn) { + if (getCurrentScope()) { + onScopeDispose(fn); + return true; + } + return false; +} +function createEventHook() { + const fns = /* @__PURE__ */ new Set(); + const off = (fn) => { + fns.delete(fn); + }; + const clear = () => { + fns.clear(); + }; + const on = (fn) => { + fns.add(fn); + const offFn = () => off(fn); + tryOnScopeDispose(offFn); + return { + off: offFn + }; + }; + const trigger = (...args) => { + return Promise.all(Array.from(fns).map((fn) => fn(...args))); + }; + return { + on, + off, + trigger, + clear + }; +} +function createGlobalState(stateFactory) { + let initialized = false; + let state; + const scope = effectScope(true); + return (...args) => { + if (!initialized) { + state = scope.run(() => stateFactory(...args)); + initialized = true; + } + return state; + }; +} +var localProvidedStateMap = /* @__PURE__ */ new WeakMap(); +var injectLocal = (...args) => { + var _a; + const key = args[0]; + const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy; + if (instance == null && !hasInjectionContext()) + throw new Error("injectLocal must be called in setup"); + if (instance && localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance)) + return localProvidedStateMap.get(instance)[key]; + return inject(...args); +}; +var provideLocal = (key, value) => { + var _a; + const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy; + if (instance == null) + throw new Error("provideLocal must be called in setup"); + if (!localProvidedStateMap.has(instance)) + localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null)); + const localProvidedState = localProvidedStateMap.get(instance); + localProvidedState[key] = value; + provide(key, value); +}; +function createInjectionState(composable, options) { + const key = (options == null ? void 0 : options.injectionKey) || Symbol(composable.name || "InjectionState"); + const defaultValue = options == null ? void 0 : options.defaultValue; + const useProvidingState = (...args) => { + const state = composable(...args); + provideLocal(key, state); + return state; + }; + const useInjectedState = () => injectLocal(key, defaultValue); + return [useProvidingState, useInjectedState]; +} +function createRef(value, deep) { + if (deep === true) { + return ref(value); + } else { + return shallowRef(value); + } +} +function createSharedComposable(composable) { + let subscribers = 0; + let state; + let scope; + const dispose = () => { + subscribers -= 1; + if (scope && subscribers <= 0) { + scope.stop(); + state = void 0; + scope = void 0; + } + }; + return (...args) => { + subscribers += 1; + if (!scope) { + scope = effectScope(true); + state = scope.run(() => composable(...args)); + } + tryOnScopeDispose(dispose); + return state; + }; +} +function extendRef(ref2, extend, { enumerable = false, unwrap = true } = {}) { + for (const [key, value] of Object.entries(extend)) { + if (key === "value") + continue; + if (isRef(value) && unwrap) { + Object.defineProperty(ref2, key, { + get() { + return value.value; + }, + set(v) { + value.value = v; + }, + enumerable + }); + } else { + Object.defineProperty(ref2, key, { value, enumerable }); + } + } + return ref2; +} +function get(obj, key) { + if (key == null) + return unref(obj); + return unref(obj)[key]; +} +function isDefined(v) { + return unref(v) != null; +} +function makeDestructurable(obj, arr) { + if (typeof Symbol !== "undefined") { + const clone = { ...obj }; + Object.defineProperty(clone, Symbol.iterator, { + enumerable: false, + value() { + let index = 0; + return { + next: () => ({ + value: arr[index++], + done: index > arr.length + }) + }; + } + }); + return clone; + } else { + return Object.assign([...arr], obj); + } +} +function reactify(fn, options) { + const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue; + return function(...args) { + return computed(() => fn.apply(this, args.map((i) => unrefFn(i)))); + }; +} +function reactifyObject(obj, optionsOrKeys = {}) { + let keys2 = []; + let options; + if (Array.isArray(optionsOrKeys)) { + keys2 = optionsOrKeys; + } else { + options = optionsOrKeys; + const { includeOwnProperties = true } = optionsOrKeys; + keys2.push(...Object.keys(obj)); + if (includeOwnProperties) + keys2.push(...Object.getOwnPropertyNames(obj)); + } + return Object.fromEntries( + keys2.map((key) => { + const value = obj[key]; + return [ + key, + typeof value === "function" ? reactify(value.bind(obj), options) : value + ]; + }) + ); +} +function toReactive(objectRef) { + if (!isRef(objectRef)) + return reactive(objectRef); + const proxy = new Proxy({}, { + get(_, p, receiver) { + return unref(Reflect.get(objectRef.value, p, receiver)); + }, + set(_, p, value) { + if (isRef(objectRef.value[p]) && !isRef(value)) + objectRef.value[p].value = value; + else + objectRef.value[p] = value; + return true; + }, + deleteProperty(_, p) { + return Reflect.deleteProperty(objectRef.value, p); + }, + has(_, p) { + return Reflect.has(objectRef.value, p); + }, + ownKeys() { + return Object.keys(objectRef.value); + }, + getOwnPropertyDescriptor() { + return { + enumerable: true, + configurable: true + }; + } + }); + return reactive(proxy); +} +function reactiveComputed(fn) { + return toReactive(computed(fn)); +} +function reactiveOmit(obj, ...keys2) { + const flatKeys = keys2.flat(); + const predicate = flatKeys[0]; + return reactiveComputed(() => typeof predicate === "function" ? Object.fromEntries(Object.entries(toRefs(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs(obj)).filter((e) => !flatKeys.includes(e[0])))); +} +var isClient = typeof window !== "undefined" && typeof document !== "undefined"; +var isWorker = typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope; +var isDef = (val) => typeof val !== "undefined"; +var notNullish = (val) => val != null; +var assert = (condition, ...infos) => { + if (!condition) + console.warn(...infos); +}; +var toString = Object.prototype.toString; +var isObject = (val) => toString.call(val) === "[object Object]"; +var now = () => Date.now(); +var timestamp = () => +Date.now(); +var clamp = (n, min, max) => Math.min(max, Math.max(min, n)); +var noop = () => { +}; +var rand = (min, max) => { + min = Math.ceil(min); + max = Math.floor(max); + return Math.floor(Math.random() * (max - min + 1)) + min; +}; +var hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key); +var isIOS = getIsIOS(); +function getIsIOS() { + var _a, _b; + return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent)); +} +function createFilterWrapper(filter, fn) { + function wrapper(...args) { + return new Promise((resolve, reject) => { + Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject); + }); + } + return wrapper; +} +var bypassFilter = (invoke2) => { + return invoke2(); +}; +function debounceFilter(ms, options = {}) { + let timer; + let maxTimer; + let lastRejector = noop; + const _clearTimeout = (timer2) => { + clearTimeout(timer2); + lastRejector(); + lastRejector = noop; + }; + let lastInvoker; + const filter = (invoke2) => { + const duration = toValue(ms); + const maxDuration = toValue(options.maxWait); + if (timer) + _clearTimeout(timer); + if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) { + if (maxTimer) { + _clearTimeout(maxTimer); + maxTimer = null; + } + return Promise.resolve(invoke2()); + } + return new Promise((resolve, reject) => { + lastRejector = options.rejectOnCancel ? reject : resolve; + lastInvoker = invoke2; + if (maxDuration && !maxTimer) { + maxTimer = setTimeout(() => { + if (timer) + _clearTimeout(timer); + maxTimer = null; + resolve(lastInvoker()); + }, maxDuration); + } + timer = setTimeout(() => { + if (maxTimer) + _clearTimeout(maxTimer); + maxTimer = null; + resolve(invoke2()); + }, duration); + }); + }; + return filter; +} +function throttleFilter(...args) { + let lastExec = 0; + let timer; + let isLeading = true; + let lastRejector = noop; + let lastValue; + let ms; + let trailing; + let leading; + let rejectOnCancel; + if (!isRef(args[0]) && typeof args[0] === "object") + ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]); + else + [ms, trailing = true, leading = true, rejectOnCancel = false] = args; + const clear = () => { + if (timer) { + clearTimeout(timer); + timer = void 0; + lastRejector(); + lastRejector = noop; + } + }; + const filter = (_invoke) => { + const duration = toValue(ms); + const elapsed = Date.now() - lastExec; + const invoke2 = () => { + return lastValue = _invoke(); + }; + clear(); + if (duration <= 0) { + lastExec = Date.now(); + return invoke2(); + } + if (elapsed > duration && (leading || !isLeading)) { + lastExec = Date.now(); + invoke2(); + } else if (trailing) { + lastValue = new Promise((resolve, reject) => { + lastRejector = rejectOnCancel ? reject : resolve; + timer = setTimeout(() => { + lastExec = Date.now(); + isLeading = true; + resolve(invoke2()); + clear(); + }, Math.max(0, duration - elapsed)); + }); + } + if (!leading && !timer) + timer = setTimeout(() => isLeading = true, duration); + isLeading = false; + return lastValue; + }; + return filter; +} +function pausableFilter(extendFilter = bypassFilter, options = {}) { + const { + initialState = "active" + } = options; + const isActive = toRef2(initialState === "active"); + function pause() { + isActive.value = false; + } + function resume() { + isActive.value = true; + } + const eventFilter = (...args) => { + if (isActive.value) + extendFilter(...args); + }; + return { isActive: readonly(isActive), pause, resume, eventFilter }; +} +function cacheStringFunction(fn) { + const cache = /* @__PURE__ */ Object.create(null); + return (str) => { + const hit = cache[str]; + return hit || (cache[str] = fn(str)); + }; +} +var hyphenateRE = /\B([A-Z])/g; +var hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, "-$1").toLowerCase()); +var camelizeRE = /-(\w)/g; +var camelize = cacheStringFunction((str) => { + return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ""); +}); +function promiseTimeout(ms, throwOnTimeout = false, reason = "Timeout") { + return new Promise((resolve, reject) => { + if (throwOnTimeout) + setTimeout(() => reject(reason), ms); + else + setTimeout(resolve, ms); + }); +} +function identity(arg) { + return arg; +} +function createSingletonPromise(fn) { + let _promise; + function wrapper() { + if (!_promise) + _promise = fn(); + return _promise; + } + wrapper.reset = async () => { + const _prev = _promise; + _promise = void 0; + if (_prev) + await _prev; + }; + return wrapper; +} +function invoke(fn) { + return fn(); +} +function containsProp(obj, ...props) { + return props.some((k) => k in obj); +} +function increaseWithUnit(target, delta) { + var _a; + if (typeof target === "number") + return target + delta; + const value = ((_a = target.match(/^-?\d+\.?\d*/)) == null ? void 0 : _a[0]) || ""; + const unit = target.slice(value.length); + const result = Number.parseFloat(value) + delta; + if (Number.isNaN(result)) + return target; + return result + unit; +} +function pxValue(px) { + return px.endsWith("rem") ? Number.parseFloat(px) * 16 : Number.parseFloat(px); +} +function objectPick(obj, keys2, omitUndefined = false) { + return keys2.reduce((n, k) => { + if (k in obj) { + if (!omitUndefined || obj[k] !== void 0) + n[k] = obj[k]; + } + return n; + }, {}); +} +function objectOmit(obj, keys2, omitUndefined = false) { + return Object.fromEntries(Object.entries(obj).filter(([key, value]) => { + return (!omitUndefined || value !== void 0) && !keys2.includes(key); + })); +} +function objectEntries(obj) { + return Object.entries(obj); +} +function getLifeCycleTarget(target) { + return target || getCurrentInstance(); +} +function toArray(value) { + return Array.isArray(value) ? value : [value]; +} +function toRef2(...args) { + if (args.length !== 1) + return toRef(...args); + const r = args[0]; + return typeof r === "function" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r); +} +var resolveRef = toRef2; +function reactivePick(obj, ...keys2) { + const flatKeys = keys2.flat(); + const predicate = flatKeys[0]; + return reactiveComputed(() => typeof predicate === "function" ? Object.fromEntries(Object.entries(toRefs(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef2(obj, k)]))); +} +function refAutoReset(defaultValue, afterMs = 1e4) { + return customRef((track, trigger) => { + let value = toValue(defaultValue); + let timer; + const resetAfter = () => setTimeout(() => { + value = toValue(defaultValue); + trigger(); + }, toValue(afterMs)); + tryOnScopeDispose(() => { + clearTimeout(timer); + }); + return { + get() { + track(); + return value; + }, + set(newValue) { + value = newValue; + trigger(); + clearTimeout(timer); + timer = resetAfter(); + } + }; + }); +} +function useDebounceFn(fn, ms = 200, options = {}) { + return createFilterWrapper( + debounceFilter(ms, options), + fn + ); +} +function refDebounced(value, ms = 200, options = {}) { + const debounced = ref(value.value); + const updater = useDebounceFn(() => { + debounced.value = value.value; + }, ms, options); + watch(value, () => updater()); + return debounced; +} +function refDefault(source, defaultValue) { + return computed({ + get() { + var _a; + return (_a = source.value) != null ? _a : defaultValue; + }, + set(value) { + source.value = value; + } + }); +} +function useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) { + return createFilterWrapper( + throttleFilter(ms, trailing, leading, rejectOnCancel), + fn + ); +} +function refThrottled(value, delay = 200, trailing = true, leading = true) { + if (delay <= 0) + return value; + const throttled = ref(value.value); + const updater = useThrottleFn(() => { + throttled.value = value.value; + }, delay, trailing, leading); + watch(value, () => updater()); + return throttled; +} +function refWithControl(initial, options = {}) { + let source = initial; + let track; + let trigger; + const ref2 = customRef((_track, _trigger) => { + track = _track; + trigger = _trigger; + return { + get() { + return get2(); + }, + set(v) { + set2(v); + } + }; + }); + function get2(tracking = true) { + if (tracking) + track(); + return source; + } + function set2(value, triggering = true) { + var _a, _b; + if (value === source) + return; + const old = source; + if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false) + return; + source = value; + (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old); + if (triggering) + trigger(); + } + const untrackedGet = () => get2(false); + const silentSet = (v) => set2(v, false); + const peek = () => get2(false); + const lay = (v) => set2(v, false); + return extendRef( + ref2, + { + get: get2, + set: set2, + untrackedGet, + silentSet, + peek, + lay + }, + { enumerable: true } + ); +} +var controlledRef = refWithControl; +function set(...args) { + if (args.length === 2) { + const [ref2, value] = args; + ref2.value = value; + } + if (args.length === 3) { + const [target, key, value] = args; + target[key] = value; + } +} +function watchWithFilter(source, cb, options = {}) { + const { + eventFilter = bypassFilter, + ...watchOptions + } = options; + return watch( + source, + createFilterWrapper( + eventFilter, + cb + ), + watchOptions + ); +} +function watchPausable(source, cb, options = {}) { + const { + eventFilter: filter, + initialState = "active", + ...watchOptions + } = options; + const { eventFilter, pause, resume, isActive } = pausableFilter(filter, { initialState }); + const stop = watchWithFilter( + source, + cb, + { + ...watchOptions, + eventFilter + } + ); + return { stop, pause, resume, isActive }; +} +function syncRef(left, right, ...[options]) { + const { + flush = "sync", + deep = false, + immediate = true, + direction = "both", + transform = {} + } = options || {}; + const watchers = []; + const transformLTR = "ltr" in transform && transform.ltr || ((v) => v); + const transformRTL = "rtl" in transform && transform.rtl || ((v) => v); + if (direction === "both" || direction === "ltr") { + watchers.push(watchPausable( + left, + (newValue) => { + watchers.forEach((w) => w.pause()); + right.value = transformLTR(newValue); + watchers.forEach((w) => w.resume()); + }, + { flush, deep, immediate } + )); + } + if (direction === "both" || direction === "rtl") { + watchers.push(watchPausable( + right, + (newValue) => { + watchers.forEach((w) => w.pause()); + left.value = transformRTL(newValue); + watchers.forEach((w) => w.resume()); + }, + { flush, deep, immediate } + )); + } + const stop = () => { + watchers.forEach((w) => w.stop()); + }; + return stop; +} +function syncRefs(source, targets, options = {}) { + const { + flush = "sync", + deep = false, + immediate = true + } = options; + const targetsArray = toArray(targets); + return watch( + source, + (newValue) => targetsArray.forEach((target) => target.value = newValue), + { flush, deep, immediate } + ); +} +function toRefs2(objectRef, options = {}) { + if (!isRef(objectRef)) + return toRefs(objectRef); + const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {}; + for (const key in objectRef.value) { + result[key] = customRef(() => ({ + get() { + return objectRef.value[key]; + }, + set(v) { + var _a; + const replaceRef = (_a = toValue(options.replaceRef)) != null ? _a : true; + if (replaceRef) { + if (Array.isArray(objectRef.value)) { + const copy = [...objectRef.value]; + copy[key] = v; + objectRef.value = copy; + } else { + const newObject = { ...objectRef.value, [key]: v }; + Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value)); + objectRef.value = newObject; + } + } else { + objectRef.value[key] = v; + } + } + })); + } + return result; +} +var toValue2 = toValue; +var resolveUnref = toValue; +function tryOnBeforeMount(fn, sync = true, target) { + const instance = getLifeCycleTarget(target); + if (instance) + onBeforeMount(fn, target); + else if (sync) + fn(); + else + nextTick(fn); +} +function tryOnBeforeUnmount(fn, target) { + const instance = getLifeCycleTarget(target); + if (instance) + onBeforeUnmount(fn, target); +} +function tryOnMounted(fn, sync = true, target) { + const instance = getLifeCycleTarget(); + if (instance) + onMounted(fn, target); + else if (sync) + fn(); + else + nextTick(fn); +} +function tryOnUnmounted(fn, target) { + const instance = getLifeCycleTarget(target); + if (instance) + onUnmounted(fn, target); +} +function createUntil(r, isNot = false) { + function toMatch(condition, { flush = "sync", deep = false, timeout, throwOnTimeout } = {}) { + let stop = null; + const watcher = new Promise((resolve) => { + stop = watch( + r, + (v) => { + if (condition(v) !== isNot) { + if (stop) + stop(); + else + nextTick(() => stop == null ? void 0 : stop()); + resolve(v); + } + }, + { + flush, + deep, + immediate: true + } + ); + }); + const promises = [watcher]; + if (timeout != null) { + promises.push( + promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop == null ? void 0 : stop()) + ); + } + return Promise.race(promises); + } + function toBe(value, options) { + if (!isRef(value)) + return toMatch((v) => v === value, options); + const { flush = "sync", deep = false, timeout, throwOnTimeout } = options != null ? options : {}; + let stop = null; + const watcher = new Promise((resolve) => { + stop = watch( + [r, value], + ([v1, v2]) => { + if (isNot !== (v1 === v2)) { + if (stop) + stop(); + else + nextTick(() => stop == null ? void 0 : stop()); + resolve(v1); + } + }, + { + flush, + deep, + immediate: true + } + ); + }); + const promises = [watcher]; + if (timeout != null) { + promises.push( + promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => { + stop == null ? void 0 : stop(); + return toValue(r); + }) + ); + } + return Promise.race(promises); + } + function toBeTruthy(options) { + return toMatch((v) => Boolean(v), options); + } + function toBeNull(options) { + return toBe(null, options); + } + function toBeUndefined(options) { + return toBe(void 0, options); + } + function toBeNaN(options) { + return toMatch(Number.isNaN, options); + } + function toContains(value, options) { + return toMatch((v) => { + const array = Array.from(v); + return array.includes(value) || array.includes(toValue(value)); + }, options); + } + function changed(options) { + return changedTimes(1, options); + } + function changedTimes(n = 1, options) { + let count = -1; + return toMatch(() => { + count += 1; + return count >= n; + }, options); + } + if (Array.isArray(toValue(r))) { + const instance = { + toMatch, + toContains, + changed, + changedTimes, + get not() { + return createUntil(r, !isNot); + } + }; + return instance; + } else { + const instance = { + toMatch, + toBe, + toBeTruthy, + toBeNull, + toBeNaN, + toBeUndefined, + changed, + changedTimes, + get not() { + return createUntil(r, !isNot); + } + }; + return instance; + } +} +function until(r) { + return createUntil(r); +} +function defaultComparator(value, othVal) { + return value === othVal; +} +function useArrayDifference(...args) { + var _a, _b; + const list = args[0]; + const values = args[1]; + let compareFn = (_a = args[2]) != null ? _a : defaultComparator; + const { + symmetric = false + } = (_b = args[3]) != null ? _b : {}; + if (typeof compareFn === "string") { + const key = compareFn; + compareFn = (value, othVal) => value[key] === othVal[key]; + } + const diff1 = computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1)); + if (symmetric) { + const diff2 = computed(() => toValue(values).filter((x) => toValue(list).findIndex((y) => compareFn(x, y)) === -1)); + return computed(() => symmetric ? [...toValue(diff1), ...toValue(diff2)] : toValue(diff1)); + } else { + return diff1; + } +} +function useArrayEvery(list, fn) { + return computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array))); +} +function useArrayFilter(list, fn) { + return computed(() => toValue(list).map((i) => toValue(i)).filter(fn)); +} +function useArrayFind(list, fn) { + return computed(() => toValue( + toValue(list).find((element, index, array) => fn(toValue(element), index, array)) + )); +} +function useArrayFindIndex(list, fn) { + return computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array))); +} +function findLast(arr, cb) { + let index = arr.length; + while (index-- > 0) { + if (cb(arr[index], index, arr)) + return arr[index]; + } + return void 0; +} +function useArrayFindLast(list, fn) { + return computed(() => toValue( + !Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array)) + )); +} +function isArrayIncludesOptions(obj) { + return isObject(obj) && containsProp(obj, "formIndex", "comparator"); +} +function useArrayIncludes(...args) { + var _a; + const list = args[0]; + const value = args[1]; + let comparator = args[2]; + let formIndex = 0; + if (isArrayIncludesOptions(comparator)) { + formIndex = (_a = comparator.fromIndex) != null ? _a : 0; + comparator = comparator.comparator; + } + if (typeof comparator === "string") { + const key = comparator; + comparator = (element, value2) => element[key] === toValue(value2); + } + comparator = comparator != null ? comparator : (element, value2) => element === toValue(value2); + return computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator( + toValue(element), + toValue(value), + index, + toValue(array) + ))); +} +function useArrayJoin(list, separator) { + return computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator))); +} +function useArrayMap(list, fn) { + return computed(() => toValue(list).map((i) => toValue(i)).map(fn)); +} +function useArrayReduce(list, reducer, ...args) { + const reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index); + return computed(() => { + const resolved = toValue(list); + return args.length ? resolved.reduce(reduceCallback, typeof args[0] === "function" ? toValue(args[0]()) : toValue(args[0])) : resolved.reduce(reduceCallback); + }); +} +function useArraySome(list, fn) { + return computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array))); +} +function uniq(array) { + return Array.from(new Set(array)); +} +function uniqueElementsBy(array, fn) { + return array.reduce((acc, v) => { + if (!acc.some((x) => fn(v, x, array))) + acc.push(v); + return acc; + }, []); +} +function useArrayUnique(list, compareFn) { + return computed(() => { + const resolvedList = toValue(list).map((element) => toValue(element)); + return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList); + }); +} +function useCounter(initialValue = 0, options = {}) { + let _initialValue = unref(initialValue); + const count = shallowRef(initialValue); + const { + max = Number.POSITIVE_INFINITY, + min = Number.NEGATIVE_INFINITY + } = options; + const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min); + const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max); + const get2 = () => count.value; + const set2 = (val) => count.value = Math.max(min, Math.min(max, val)); + const reset = (val = _initialValue) => { + _initialValue = val; + return set2(val); + }; + return { count, inc, dec, get: get2, set: set2, reset }; +} +var REGEX_PARSE = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[T\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/i; +var REGEX_FORMAT = /[YMDHhms]o|\[([^\]]+)\]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|z{1,4}|SSS/g; +function defaultMeridiem(hours, minutes, isLowercase, hasPeriod) { + let m = hours < 12 ? "AM" : "PM"; + if (hasPeriod) + m = m.split("").reduce((acc, curr) => acc += `${curr}.`, ""); + return isLowercase ? m.toLowerCase() : m; +} +function formatOrdinal(num) { + const suffixes = ["th", "st", "nd", "rd"]; + const v = num % 100; + return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]); +} +function formatDate(date, formatStr, options = {}) { + var _a; + const years = date.getFullYear(); + const month = date.getMonth(); + const days = date.getDate(); + const hours = date.getHours(); + const minutes = date.getMinutes(); + const seconds = date.getSeconds(); + const milliseconds = date.getMilliseconds(); + const day = date.getDay(); + const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem; + const stripTimeZone = (dateString) => { + var _a2; + return (_a2 = dateString.split(" ")[1]) != null ? _a2 : ""; + }; + const matches = { + Yo: () => formatOrdinal(years), + YY: () => String(years).slice(-2), + YYYY: () => years, + M: () => month + 1, + Mo: () => formatOrdinal(month + 1), + MM: () => `${month + 1}`.padStart(2, "0"), + MMM: () => date.toLocaleDateString(toValue(options.locales), { month: "short" }), + MMMM: () => date.toLocaleDateString(toValue(options.locales), { month: "long" }), + D: () => String(days), + Do: () => formatOrdinal(days), + DD: () => `${days}`.padStart(2, "0"), + H: () => String(hours), + Ho: () => formatOrdinal(hours), + HH: () => `${hours}`.padStart(2, "0"), + h: () => `${hours % 12 || 12}`.padStart(1, "0"), + ho: () => formatOrdinal(hours % 12 || 12), + hh: () => `${hours % 12 || 12}`.padStart(2, "0"), + m: () => String(minutes), + mo: () => formatOrdinal(minutes), + mm: () => `${minutes}`.padStart(2, "0"), + s: () => String(seconds), + so: () => formatOrdinal(seconds), + ss: () => `${seconds}`.padStart(2, "0"), + SSS: () => `${milliseconds}`.padStart(3, "0"), + d: () => day, + dd: () => date.toLocaleDateString(toValue(options.locales), { weekday: "narrow" }), + ddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: "short" }), + dddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: "long" }), + A: () => meridiem(hours, minutes), + AA: () => meridiem(hours, minutes, false, true), + a: () => meridiem(hours, minutes, true), + aa: () => meridiem(hours, minutes, true, true), + z: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: "shortOffset" })), + zz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: "shortOffset" })), + zzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: "shortOffset" })), + zzzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: "longOffset" })) + }; + return formatStr.replace(REGEX_FORMAT, (match, $1) => { + var _a2, _b; + return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match; + }); +} +function normalizeDate(date) { + if (date === null) + return new Date(Number.NaN); + if (date === void 0) + return /* @__PURE__ */ new Date(); + if (date instanceof Date) + return new Date(date); + if (typeof date === "string" && !/Z$/i.test(date)) { + const d = date.match(REGEX_PARSE); + if (d) { + const m = d[2] - 1 || 0; + const ms = (d[7] || "0").substring(0, 3); + return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms); + } + } + return new Date(date); +} +function useDateFormat(date, formatStr = "HH:mm:ss", options = {}) { + return computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options)); +} +function useIntervalFn(cb, interval = 1e3, options = {}) { + const { + immediate = true, + immediateCallback = false + } = options; + let timer = null; + const isActive = shallowRef(false); + function clean() { + if (timer) { + clearInterval(timer); + timer = null; + } + } + function pause() { + isActive.value = false; + clean(); + } + function resume() { + const intervalValue = toValue(interval); + if (intervalValue <= 0) + return; + isActive.value = true; + if (immediateCallback) + cb(); + clean(); + if (isActive.value) + timer = setInterval(cb, intervalValue); + } + if (immediate && isClient) + resume(); + if (isRef(interval) || typeof interval === "function") { + const stopWatch = watch(interval, () => { + if (isActive.value && isClient) + resume(); + }); + tryOnScopeDispose(stopWatch); + } + tryOnScopeDispose(pause); + return { + isActive, + pause, + resume + }; +} +function useInterval(interval = 1e3, options = {}) { + const { + controls: exposeControls = false, + immediate = true, + callback + } = options; + const counter = shallowRef(0); + const update = () => counter.value += 1; + const reset = () => { + counter.value = 0; + }; + const controls = useIntervalFn( + callback ? () => { + update(); + callback(counter.value); + } : update, + interval, + { immediate } + ); + if (exposeControls) { + return { + counter, + reset, + ...controls + }; + } else { + return counter; + } +} +function useLastChanged(source, options = {}) { + var _a; + const ms = shallowRef((_a = options.initialValue) != null ? _a : null); + watch( + source, + () => ms.value = timestamp(), + options + ); + return ms; +} +function useTimeoutFn(cb, interval, options = {}) { + const { + immediate = true, + immediateCallback = false + } = options; + const isPending = shallowRef(false); + let timer = null; + function clear() { + if (timer) { + clearTimeout(timer); + timer = null; + } + } + function stop() { + isPending.value = false; + clear(); + } + function start(...args) { + if (immediateCallback) + cb(); + clear(); + isPending.value = true; + timer = setTimeout(() => { + isPending.value = false; + timer = null; + cb(...args); + }, toValue(interval)); + } + if (immediate) { + isPending.value = true; + if (isClient) + start(); + } + tryOnScopeDispose(stop); + return { + isPending: readonly(isPending), + start, + stop + }; +} +function useTimeout(interval = 1e3, options = {}) { + const { + controls: exposeControls = false, + callback + } = options; + const controls = useTimeoutFn( + callback != null ? callback : noop, + interval, + options + ); + const ready = computed(() => !controls.isPending.value); + if (exposeControls) { + return { + ready, + ...controls + }; + } else { + return ready; + } +} +function useToNumber(value, options = {}) { + const { + method = "parseFloat", + radix, + nanToZero + } = options; + return computed(() => { + let resolved = toValue(value); + if (typeof method === "function") + resolved = method(resolved); + else if (typeof resolved === "string") + resolved = Number[method](resolved, radix); + if (nanToZero && Number.isNaN(resolved)) + resolved = 0; + return resolved; + }); +} +function useToString(value) { + return computed(() => `${toValue(value)}`); +} +function useToggle(initialValue = false, options = {}) { + const { + truthyValue = true, + falsyValue = false + } = options; + const valueIsRef = isRef(initialValue); + const _value = shallowRef(initialValue); + function toggle(value) { + if (arguments.length) { + _value.value = value; + return _value.value; + } else { + const truthy = toValue(truthyValue); + _value.value = _value.value === truthy ? toValue(falsyValue) : truthy; + return _value.value; + } + } + if (valueIsRef) + return toggle; + else + return [_value, toggle]; +} +function watchArray(source, cb, options) { + let oldList = (options == null ? void 0 : options.immediate) ? [] : [...typeof source === "function" ? source() : Array.isArray(source) ? source : toValue(source)]; + return watch(source, (newList, _, onCleanup) => { + const oldListRemains = Array.from({ length: oldList.length }); + const added = []; + for (const obj of newList) { + let found = false; + for (let i = 0; i < oldList.length; i++) { + if (!oldListRemains[i] && obj === oldList[i]) { + oldListRemains[i] = true; + found = true; + break; + } + } + if (!found) + added.push(obj); + } + const removed = oldList.filter((_2, i) => !oldListRemains[i]); + cb(newList, oldList, added, removed, onCleanup); + oldList = [...newList]; + }, options); +} +function watchAtMost(source, cb, options) { + const { + count, + ...watchOptions + } = options; + const current = shallowRef(0); + const stop = watchWithFilter( + source, + (...args) => { + current.value += 1; + if (current.value >= toValue(count)) + nextTick(() => stop()); + cb(...args); + }, + watchOptions + ); + return { count: current, stop }; +} +function watchDebounced(source, cb, options = {}) { + const { + debounce = 0, + maxWait = void 0, + ...watchOptions + } = options; + return watchWithFilter( + source, + cb, + { + ...watchOptions, + eventFilter: debounceFilter(debounce, { maxWait }) + } + ); +} +function watchDeep(source, cb, options) { + return watch( + source, + cb, + { + ...options, + deep: true + } + ); +} +function watchIgnorable(source, cb, options = {}) { + const { + eventFilter = bypassFilter, + ...watchOptions + } = options; + const filteredCb = createFilterWrapper( + eventFilter, + cb + ); + let ignoreUpdates; + let ignorePrevAsyncUpdates; + let stop; + if (watchOptions.flush === "sync") { + const ignore = shallowRef(false); + ignorePrevAsyncUpdates = () => { + }; + ignoreUpdates = (updater) => { + ignore.value = true; + updater(); + ignore.value = false; + }; + stop = watch( + source, + (...args) => { + if (!ignore.value) + filteredCb(...args); + }, + watchOptions + ); + } else { + const disposables = []; + const ignoreCounter = shallowRef(0); + const syncCounter = shallowRef(0); + ignorePrevAsyncUpdates = () => { + ignoreCounter.value = syncCounter.value; + }; + disposables.push( + watch( + source, + () => { + syncCounter.value++; + }, + { ...watchOptions, flush: "sync" } + ) + ); + ignoreUpdates = (updater) => { + const syncCounterPrev = syncCounter.value; + updater(); + ignoreCounter.value += syncCounter.value - syncCounterPrev; + }; + disposables.push( + watch( + source, + (...args) => { + const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value; + ignoreCounter.value = 0; + syncCounter.value = 0; + if (ignore) + return; + filteredCb(...args); + }, + watchOptions + ) + ); + stop = () => { + disposables.forEach((fn) => fn()); + }; + } + return { stop, ignoreUpdates, ignorePrevAsyncUpdates }; +} +function watchImmediate(source, cb, options) { + return watch( + source, + cb, + { + ...options, + immediate: true + } + ); +} +function watchOnce(source, cb, options) { + const stop = watch(source, (...args) => { + nextTick(() => stop()); + return cb(...args); + }, options); + return stop; +} +function watchThrottled(source, cb, options = {}) { + const { + throttle = 0, + trailing = true, + leading = true, + ...watchOptions + } = options; + return watchWithFilter( + source, + cb, + { + ...watchOptions, + eventFilter: throttleFilter(throttle, trailing, leading) + } + ); +} +function watchTriggerable(source, cb, options = {}) { + let cleanupFn; + function onEffect() { + if (!cleanupFn) + return; + const fn = cleanupFn; + cleanupFn = void 0; + fn(); + } + function onCleanup(callback) { + cleanupFn = callback; + } + const _cb = (value, oldValue) => { + onEffect(); + return cb(value, oldValue, onCleanup); + }; + const res = watchIgnorable(source, _cb, options); + const { ignoreUpdates } = res; + const trigger = () => { + let res2; + ignoreUpdates(() => { + res2 = _cb(getWatchSources(source), getOldValue(source)); + }); + return res2; + }; + return { + ...res, + trigger + }; +} +function getWatchSources(sources) { + if (isReactive(sources)) + return sources; + if (Array.isArray(sources)) + return sources.map((item) => toValue(item)); + return toValue(sources); +} +function getOldValue(source) { + return Array.isArray(source) ? source.map(() => void 0) : void 0; +} +function whenever(source, cb, options) { + const stop = watch( + source, + (v, ov, onInvalidate) => { + if (v) { + if (options == null ? void 0 : options.once) + nextTick(() => stop()); + cb(v, ov, onInvalidate); + } + }, + { + ...options, + once: false + } + ); + return stop; +} + +// ../../node_modules/@vueuse/core/index.mjs +function computedAsync(evaluationCallback, initialState, optionsOrRef) { + let options; + if (isRef(optionsOrRef)) { + options = { + evaluating: optionsOrRef + }; + } else { + options = optionsOrRef || {}; + } + const { + lazy = false, + evaluating = void 0, + shallow = true, + onError = noop + } = options; + const started = shallowRef(!lazy); + const current = shallow ? shallowRef(initialState) : ref(initialState); + let counter = 0; + watchEffect(async (onInvalidate) => { + if (!started.value) + return; + counter++; + const counterAtBeginning = counter; + let hasFinished = false; + if (evaluating) { + Promise.resolve().then(() => { + evaluating.value = true; + }); + } + try { + const result = await evaluationCallback((cancelCallback) => { + onInvalidate(() => { + if (evaluating) + evaluating.value = false; + if (!hasFinished) + cancelCallback(); + }); + }); + if (counterAtBeginning === counter) + current.value = result; + } catch (e) { + onError(e); + } finally { + if (evaluating && counterAtBeginning === counter) + evaluating.value = false; + hasFinished = true; + } + }); + if (lazy) { + return computed(() => { + started.value = true; + return current.value; + }); + } else { + return current; + } +} +function computedInject(key, options, defaultSource, treatDefaultAsFactory) { + let source = inject(key); + if (defaultSource) + source = inject(key, defaultSource); + if (treatDefaultAsFactory) + source = inject(key, defaultSource, treatDefaultAsFactory); + if (typeof options === "function") { + return computed((ctx) => options(source, ctx)); + } else { + return computed({ + get: (ctx) => options.get(source, ctx), + set: options.set + }); + } +} +function createReusableTemplate(options = {}) { + const { + inheritAttrs = true + } = options; + const render = shallowRef(); + const define = defineComponent({ + setup(_, { slots }) { + return () => { + render.value = slots.default; + }; + } + }); + const reuse = defineComponent({ + inheritAttrs, + props: options.props, + setup(props, { attrs, slots }) { + return () => { + var _a; + if (!render.value && true) + throw new Error("[VueUse] Failed to find the definition of reusable template"); + const vnode = (_a = render.value) == null ? void 0 : _a.call(render, { + ...options.props == null ? keysToCamelKebabCase(attrs) : props, + $slots: slots + }); + return inheritAttrs && (vnode == null ? void 0 : vnode.length) === 1 ? vnode[0] : vnode; + }; + } + }); + return makeDestructurable( + { define, reuse }, + [define, reuse] + ); +} +function keysToCamelKebabCase(obj) { + const newObj = {}; + for (const key in obj) + newObj[camelize(key)] = obj[key]; + return newObj; +} +function createTemplatePromise(options = {}) { + let index = 0; + const instances = ref([]); + function create(...args) { + const props = shallowReactive({ + key: index++, + args, + promise: void 0, + resolve: () => { + }, + reject: () => { + }, + isResolving: false, + options + }); + instances.value.push(props); + props.promise = new Promise((_resolve, _reject) => { + props.resolve = (v) => { + props.isResolving = true; + return _resolve(v); + }; + props.reject = _reject; + }).finally(() => { + props.promise = void 0; + const index2 = instances.value.indexOf(props); + if (index2 !== -1) + instances.value.splice(index2, 1); + }); + return props.promise; + } + function start(...args) { + if (options.singleton && instances.value.length > 0) + return instances.value[0].promise; + return create(...args); + } + const component = defineComponent((_, { slots }) => { + const renderList = () => instances.value.map((props) => { + var _a; + return h(Fragment, { key: props.key }, (_a = slots.default) == null ? void 0 : _a.call(slots, props)); + }); + if (options.transition) + return () => h(TransitionGroup, options.transition, renderList); + return renderList; + }); + component.start = start; + return component; +} +function createUnrefFn(fn) { + return function(...args) { + return fn.apply(this, args.map((i) => toValue(i))); + }; +} +var defaultWindow = isClient ? window : void 0; +var defaultDocument = isClient ? window.document : void 0; +var defaultNavigator = isClient ? window.navigator : void 0; +var defaultLocation = isClient ? window.location : void 0; +function unrefElement(elRef) { + var _a; + const plain = toValue(elRef); + return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain; +} +function useEventListener(...args) { + const cleanups = []; + const cleanup = () => { + cleanups.forEach((fn) => fn()); + cleanups.length = 0; + }; + const register = (el, event, listener, options) => { + el.addEventListener(event, listener, options); + return () => el.removeEventListener(event, listener, options); + }; + const firstParamTargets = computed(() => { + const test = toArray(toValue(args[0])).filter((e) => e != null); + return test.every((e) => typeof e !== "string") ? test : void 0; + }); + const stopWatch = watchImmediate( + () => { + var _a, _b; + return [ + (_b = (_a = firstParamTargets.value) == null ? void 0 : _a.map((e) => unrefElement(e))) != null ? _b : [defaultWindow].filter((e) => e != null), + toArray(toValue(firstParamTargets.value ? args[1] : args[0])), + toArray(unref(firstParamTargets.value ? args[2] : args[1])), + // @ts-expect-error - TypeScript gets the correct types, but somehow still complains + toValue(firstParamTargets.value ? args[3] : args[2]) + ]; + }, + ([raw_targets, raw_events, raw_listeners, raw_options]) => { + cleanup(); + if (!(raw_targets == null ? void 0 : raw_targets.length) || !(raw_events == null ? void 0 : raw_events.length) || !(raw_listeners == null ? void 0 : raw_listeners.length)) + return; + const optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options; + cleanups.push( + ...raw_targets.flatMap( + (el) => raw_events.flatMap( + (event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone)) + ) + ) + ); + }, + { flush: "post" } + ); + const stop = () => { + stopWatch(); + cleanup(); + }; + tryOnScopeDispose(cleanup); + return stop; +} +var _iOSWorkaround = false; +function onClickOutside(target, handler, options = {}) { + const { window: window2 = defaultWindow, ignore = [], capture = true, detectIframe = false, controls = false } = options; + if (!window2) { + return controls ? { stop: noop, cancel: noop, trigger: noop } : noop; + } + if (isIOS && !_iOSWorkaround) { + _iOSWorkaround = true; + const listenerOptions = { passive: true }; + Array.from(window2.document.body.children).forEach((el) => useEventListener(el, "click", noop, listenerOptions)); + useEventListener(window2.document.documentElement, "click", noop, listenerOptions); + } + let shouldListen = true; + const shouldIgnore = (event) => { + return toValue(ignore).some((target2) => { + if (typeof target2 === "string") { + return Array.from(window2.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el)); + } else { + const el = unrefElement(target2); + return el && (event.target === el || event.composedPath().includes(el)); + } + }); + }; + function hasMultipleRoots(target2) { + const vm = toValue(target2); + return vm && vm.$.subTree.shapeFlag === 16; + } + function checkMultipleRoots(target2, event) { + const vm = toValue(target2); + const children = vm.$.subTree && vm.$.subTree.children; + if (children == null || !Array.isArray(children)) + return false; + return children.some((child) => child.el === event.target || event.composedPath().includes(child.el)); + } + const listener = (event) => { + const el = unrefElement(target); + if (event.target == null) + return; + if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event)) + return; + if (!el || el === event.target || event.composedPath().includes(el)) + return; + if ("detail" in event && event.detail === 0) + shouldListen = !shouldIgnore(event); + if (!shouldListen) { + shouldListen = true; + return; + } + handler(event); + }; + let isProcessingClick = false; + const cleanup = [ + useEventListener(window2, "click", (event) => { + if (!isProcessingClick) { + isProcessingClick = true; + setTimeout(() => { + isProcessingClick = false; + }, 0); + listener(event); + } + }, { passive: true, capture }), + useEventListener(window2, "pointerdown", (e) => { + const el = unrefElement(target); + shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el)); + }, { passive: true }), + detectIframe && useEventListener(window2, "blur", (event) => { + setTimeout(() => { + var _a; + const el = unrefElement(target); + if (((_a = window2.document.activeElement) == null ? void 0 : _a.tagName) === "IFRAME" && !(el == null ? void 0 : el.contains(window2.document.activeElement))) { + handler(event); + } + }, 0); + }, { passive: true }) + ].filter(Boolean); + const stop = () => cleanup.forEach((fn) => fn()); + if (controls) { + return { + stop, + cancel: () => { + shouldListen = false; + }, + trigger: (event) => { + shouldListen = true; + listener(event); + shouldListen = false; + } + }; + } + return stop; +} +function useMounted() { + const isMounted = shallowRef(false); + const instance = getCurrentInstance(); + if (instance) { + onMounted(() => { + isMounted.value = true; + }, instance); + } + return isMounted; +} +function useSupported(callback) { + const isMounted = useMounted(); + return computed(() => { + isMounted.value; + return Boolean(callback()); + }); +} +function useMutationObserver(target, callback, options = {}) { + const { window: window2 = defaultWindow, ...mutationOptions } = options; + let observer; + const isSupported = useSupported(() => window2 && "MutationObserver" in window2); + const cleanup = () => { + if (observer) { + observer.disconnect(); + observer = void 0; + } + }; + const targets = computed(() => { + const value = toValue(target); + const items = toArray(value).map(unrefElement).filter(notNullish); + return new Set(items); + }); + const stopWatch = watch( + () => targets.value, + (targets2) => { + cleanup(); + if (isSupported.value && targets2.size) { + observer = new MutationObserver(callback); + targets2.forEach((el) => observer.observe(el, mutationOptions)); + } + }, + { immediate: true, flush: "post" } + ); + const takeRecords = () => { + return observer == null ? void 0 : observer.takeRecords(); + }; + const stop = () => { + stopWatch(); + cleanup(); + }; + tryOnScopeDispose(stop); + return { + isSupported, + stop, + takeRecords + }; +} +function onElementRemoval(target, callback, options = {}) { + const { + window: window2 = defaultWindow, + document: document2 = window2 == null ? void 0 : window2.document, + flush = "sync" + } = options; + if (!window2 || !document2) + return noop; + let stopFn; + const cleanupAndUpdate = (fn) => { + stopFn == null ? void 0 : stopFn(); + stopFn = fn; + }; + const stopWatch = watchEffect(() => { + const el = unrefElement(target); + if (el) { + const { stop } = useMutationObserver( + document2, + (mutationsList) => { + const targetRemoved = mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el)); + if (targetRemoved) { + callback(mutationsList); + } + }, + { + window: window2, + childList: true, + subtree: true + } + ); + cleanupAndUpdate(stop); + } + }, { flush }); + const stopHandle = () => { + stopWatch(); + cleanupAndUpdate(); + }; + tryOnScopeDispose(stopHandle); + return stopHandle; +} +function createKeyPredicate(keyFilter) { + if (typeof keyFilter === "function") + return keyFilter; + else if (typeof keyFilter === "string") + return (event) => event.key === keyFilter; + else if (Array.isArray(keyFilter)) + return (event) => keyFilter.includes(event.key); + return () => true; +} +function onKeyStroke(...args) { + let key; + let handler; + let options = {}; + if (args.length === 3) { + key = args[0]; + handler = args[1]; + options = args[2]; + } else if (args.length === 2) { + if (typeof args[1] === "object") { + key = true; + handler = args[0]; + options = args[1]; + } else { + key = args[0]; + handler = args[1]; + } + } else { + key = true; + handler = args[0]; + } + const { + target = defaultWindow, + eventName = "keydown", + passive = false, + dedupe = false + } = options; + const predicate = createKeyPredicate(key); + const listener = (e) => { + if (e.repeat && toValue(dedupe)) + return; + if (predicate(e)) + handler(e); + }; + return useEventListener(target, eventName, listener, passive); +} +function onKeyDown(key, handler, options = {}) { + return onKeyStroke(key, handler, { ...options, eventName: "keydown" }); +} +function onKeyPressed(key, handler, options = {}) { + return onKeyStroke(key, handler, { ...options, eventName: "keypress" }); +} +function onKeyUp(key, handler, options = {}) { + return onKeyStroke(key, handler, { ...options, eventName: "keyup" }); +} +var DEFAULT_DELAY = 500; +var DEFAULT_THRESHOLD = 10; +function onLongPress(target, handler, options) { + var _a, _b; + const elementRef = computed(() => unrefElement(target)); + let timeout; + let posStart; + let startTimestamp; + let hasLongPressed = false; + function clear() { + if (timeout) { + clearTimeout(timeout); + timeout = void 0; + } + posStart = void 0; + startTimestamp = void 0; + hasLongPressed = false; + } + function onRelease(ev) { + var _a2, _b2, _c; + const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed]; + clear(); + if (!(options == null ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp) + return; + if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value) + return; + if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent) + ev.preventDefault(); + if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop) + ev.stopPropagation(); + const dx = ev.x - _posStart.x; + const dy = ev.y - _posStart.y; + const distance = Math.sqrt(dx * dx + dy * dy); + options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed); + } + function onDown(ev) { + var _a2, _b2, _c, _d; + if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value) + return; + clear(); + if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent) + ev.preventDefault(); + if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop) + ev.stopPropagation(); + posStart = { + x: ev.x, + y: ev.y + }; + startTimestamp = ev.timeStamp; + timeout = setTimeout( + () => { + hasLongPressed = true; + handler(ev); + }, + (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY + ); + } + function onMove(ev) { + var _a2, _b2, _c, _d; + if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value) + return; + if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false) + return; + if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent) + ev.preventDefault(); + if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop) + ev.stopPropagation(); + const dx = ev.x - posStart.x; + const dy = ev.y - posStart.y; + const distance = Math.sqrt(dx * dx + dy * dy); + if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD)) + clear(); + } + const listenerOptions = { + capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture, + once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once + }; + const cleanup = [ + useEventListener(elementRef, "pointerdown", onDown, listenerOptions), + useEventListener(elementRef, "pointermove", onMove, listenerOptions), + useEventListener(elementRef, ["pointerup", "pointerleave"], onRelease, listenerOptions) + ]; + const stop = () => cleanup.forEach((fn) => fn()); + return stop; +} +function isFocusedElementEditable() { + const { activeElement, body } = document; + if (!activeElement) + return false; + if (activeElement === body) + return false; + switch (activeElement.tagName) { + case "INPUT": + case "TEXTAREA": + return true; + } + return activeElement.hasAttribute("contenteditable"); +} +function isTypedCharValid({ + keyCode, + metaKey, + ctrlKey, + altKey +}) { + if (metaKey || ctrlKey || altKey) + return false; + if (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105) + return true; + if (keyCode >= 65 && keyCode <= 90) + return true; + return false; +} +function onStartTyping(callback, options = {}) { + const { document: document2 = defaultDocument } = options; + const keydown = (event) => { + if (!isFocusedElementEditable() && isTypedCharValid(event)) { + callback(event); + } + }; + if (document2) + useEventListener(document2, "keydown", keydown, { passive: true }); +} +function templateRef(key, initialValue = null) { + const instance = getCurrentInstance(); + let _trigger = () => { + }; + const element = customRef((track, trigger) => { + _trigger = trigger; + return { + get() { + var _a, _b; + track(); + return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue; + }, + set() { + } + }; + }); + tryOnMounted(_trigger); + onUpdated(_trigger); + return element; +} +function useActiveElement(options = {}) { + var _a; + const { + window: window2 = defaultWindow, + deep = true, + triggerOnRemoval = false + } = options; + const document2 = (_a = options.document) != null ? _a : window2 == null ? void 0 : window2.document; + const getDeepActiveElement = () => { + var _a2; + let element = document2 == null ? void 0 : document2.activeElement; + if (deep) { + while (element == null ? void 0 : element.shadowRoot) + element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement; + } + return element; + }; + const activeElement = shallowRef(); + const trigger = () => { + activeElement.value = getDeepActiveElement(); + }; + if (window2) { + const listenerOptions = { + capture: true, + passive: true + }; + useEventListener( + window2, + "blur", + (event) => { + if (event.relatedTarget !== null) + return; + trigger(); + }, + listenerOptions + ); + useEventListener( + window2, + "focus", + trigger, + listenerOptions + ); + } + if (triggerOnRemoval) { + onElementRemoval(activeElement, trigger, { document: document2 }); + } + trigger(); + return activeElement; +} +function useRafFn(fn, options = {}) { + const { + immediate = true, + fpsLimit = void 0, + window: window2 = defaultWindow, + once = false + } = options; + const isActive = shallowRef(false); + const intervalLimit = computed(() => { + return fpsLimit ? 1e3 / toValue(fpsLimit) : null; + }); + let previousFrameTimestamp = 0; + let rafId = null; + function loop(timestamp2) { + if (!isActive.value || !window2) + return; + if (!previousFrameTimestamp) + previousFrameTimestamp = timestamp2; + const delta = timestamp2 - previousFrameTimestamp; + if (intervalLimit.value && delta < intervalLimit.value) { + rafId = window2.requestAnimationFrame(loop); + return; + } + previousFrameTimestamp = timestamp2; + fn({ delta, timestamp: timestamp2 }); + if (once) { + isActive.value = false; + rafId = null; + return; + } + rafId = window2.requestAnimationFrame(loop); + } + function resume() { + if (!isActive.value && window2) { + isActive.value = true; + previousFrameTimestamp = 0; + rafId = window2.requestAnimationFrame(loop); + } + } + function pause() { + isActive.value = false; + if (rafId != null && window2) { + window2.cancelAnimationFrame(rafId); + rafId = null; + } + } + if (immediate) + resume(); + tryOnScopeDispose(pause); + return { + isActive: readonly(isActive), + pause, + resume + }; +} +function useAnimate(target, keyframes, options) { + let config; + let animateOptions; + if (isObject(options)) { + config = options; + animateOptions = objectOmit(options, ["window", "immediate", "commitStyles", "persist", "onReady", "onError"]); + } else { + config = { duration: options }; + animateOptions = options; + } + const { + window: window2 = defaultWindow, + immediate = true, + commitStyles, + persist, + playbackRate: _playbackRate = 1, + onReady, + onError = (e) => { + console.error(e); + } + } = config; + const isSupported = useSupported(() => window2 && HTMLElement && "animate" in HTMLElement.prototype); + const animate = shallowRef(void 0); + const store = shallowReactive({ + startTime: null, + currentTime: null, + timeline: null, + playbackRate: _playbackRate, + pending: false, + playState: immediate ? "idle" : "paused", + replaceState: "active" + }); + const pending = computed(() => store.pending); + const playState = computed(() => store.playState); + const replaceState = computed(() => store.replaceState); + const startTime = computed({ + get() { + return store.startTime; + }, + set(value) { + store.startTime = value; + if (animate.value) + animate.value.startTime = value; + } + }); + const currentTime = computed({ + get() { + return store.currentTime; + }, + set(value) { + store.currentTime = value; + if (animate.value) { + animate.value.currentTime = value; + syncResume(); + } + } + }); + const timeline = computed({ + get() { + return store.timeline; + }, + set(value) { + store.timeline = value; + if (animate.value) + animate.value.timeline = value; + } + }); + const playbackRate = computed({ + get() { + return store.playbackRate; + }, + set(value) { + store.playbackRate = value; + if (animate.value) + animate.value.playbackRate = value; + } + }); + const play = () => { + if (animate.value) { + try { + animate.value.play(); + syncResume(); + } catch (e) { + syncPause(); + onError(e); + } + } else { + update(); + } + }; + const pause = () => { + var _a; + try { + (_a = animate.value) == null ? void 0 : _a.pause(); + syncPause(); + } catch (e) { + onError(e); + } + }; + const reverse = () => { + var _a; + if (!animate.value) + update(); + try { + (_a = animate.value) == null ? void 0 : _a.reverse(); + syncResume(); + } catch (e) { + syncPause(); + onError(e); + } + }; + const finish = () => { + var _a; + try { + (_a = animate.value) == null ? void 0 : _a.finish(); + syncPause(); + } catch (e) { + onError(e); + } + }; + const cancel = () => { + var _a; + try { + (_a = animate.value) == null ? void 0 : _a.cancel(); + syncPause(); + } catch (e) { + onError(e); + } + }; + watch(() => unrefElement(target), (el) => { + if (el) { + update(); + } else { + animate.value = void 0; + } + }); + watch(() => keyframes, (value) => { + if (animate.value) { + update(); + const targetEl = unrefElement(target); + if (targetEl) { + animate.value.effect = new KeyframeEffect( + targetEl, + toValue(value), + animateOptions + ); + } + } + }, { deep: true }); + tryOnMounted(() => update(true), false); + tryOnScopeDispose(cancel); + function update(init) { + const el = unrefElement(target); + if (!isSupported.value || !el) + return; + if (!animate.value) + animate.value = el.animate(toValue(keyframes), animateOptions); + if (persist) + animate.value.persist(); + if (_playbackRate !== 1) + animate.value.playbackRate = _playbackRate; + if (init && !immediate) + animate.value.pause(); + else + syncResume(); + onReady == null ? void 0 : onReady(animate.value); + } + const listenerOptions = { passive: true }; + useEventListener(animate, ["cancel", "finish", "remove"], syncPause, listenerOptions); + useEventListener(animate, "finish", () => { + var _a; + if (commitStyles) + (_a = animate.value) == null ? void 0 : _a.commitStyles(); + }, listenerOptions); + const { resume: resumeRef, pause: pauseRef } = useRafFn(() => { + if (!animate.value) + return; + store.pending = animate.value.pending; + store.playState = animate.value.playState; + store.replaceState = animate.value.replaceState; + store.startTime = animate.value.startTime; + store.currentTime = animate.value.currentTime; + store.timeline = animate.value.timeline; + store.playbackRate = animate.value.playbackRate; + }, { immediate: false }); + function syncResume() { + if (isSupported.value) + resumeRef(); + } + function syncPause() { + if (isSupported.value && window2) + window2.requestAnimationFrame(pauseRef); + } + return { + isSupported, + animate, + // actions + play, + pause, + reverse, + finish, + cancel, + // state + pending, + playState, + replaceState, + startTime, + currentTime, + timeline, + playbackRate + }; +} +function useAsyncQueue(tasks, options) { + const { + interrupt = true, + onError = noop, + onFinished = noop, + signal + } = options || {}; + const promiseState = { + aborted: "aborted", + fulfilled: "fulfilled", + pending: "pending", + rejected: "rejected" + }; + const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null })); + const result = reactive(initialResult); + const activeIndex = shallowRef(-1); + if (!tasks || tasks.length === 0) { + onFinished(); + return { + activeIndex, + result + }; + } + function updateResult(state, res) { + activeIndex.value++; + result[activeIndex.value].data = res; + result[activeIndex.value].state = state; + } + tasks.reduce((prev, curr) => { + return prev.then((prevRes) => { + var _a; + if (signal == null ? void 0 : signal.aborted) { + updateResult(promiseState.aborted, new Error("aborted")); + return; + } + if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) { + onFinished(); + return; + } + const done = curr(prevRes).then((currentRes) => { + updateResult(promiseState.fulfilled, currentRes); + if (activeIndex.value === tasks.length - 1) + onFinished(); + return currentRes; + }); + if (!signal) + return done; + return Promise.race([done, whenAborted(signal)]); + }).catch((e) => { + if (signal == null ? void 0 : signal.aborted) { + updateResult(promiseState.aborted, e); + return e; + } + updateResult(promiseState.rejected, e); + onError(); + return e; + }); + }, Promise.resolve()); + return { + activeIndex, + result + }; +} +function whenAborted(signal) { + return new Promise((resolve, reject) => { + const error = new Error("aborted"); + if (signal.aborted) + reject(error); + else + signal.addEventListener("abort", () => reject(error), { once: true }); + }); +} +function useAsyncState(promise, initialState, options) { + const { + immediate = true, + delay = 0, + onError = noop, + onSuccess = noop, + resetOnExecute = true, + shallow = true, + throwError + } = options != null ? options : {}; + const state = shallow ? shallowRef(initialState) : ref(initialState); + const isReady = shallowRef(false); + const isLoading = shallowRef(false); + const error = shallowRef(void 0); + async function execute(delay2 = 0, ...args) { + if (resetOnExecute) + state.value = initialState; + error.value = void 0; + isReady.value = false; + isLoading.value = true; + if (delay2 > 0) + await promiseTimeout(delay2); + const _promise = typeof promise === "function" ? promise(...args) : promise; + try { + const data = await _promise; + state.value = data; + isReady.value = true; + onSuccess(data); + } catch (e) { + error.value = e; + onError(e); + if (throwError) + throw e; + } finally { + isLoading.value = false; + } + return state.value; + } + if (immediate) { + execute(delay); + } + const shell = { + state, + isReady, + isLoading, + error, + execute + }; + function waitUntilIsLoaded() { + return new Promise((resolve, reject) => { + until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject); + }); + } + return { + ...shell, + then(onFulfilled, onRejected) { + return waitUntilIsLoaded().then(onFulfilled, onRejected); + } + }; +} +var defaults = { + array: (v) => JSON.stringify(v), + object: (v) => JSON.stringify(v), + set: (v) => JSON.stringify(Array.from(v)), + map: (v) => JSON.stringify(Object.fromEntries(v)), + null: () => "" +}; +function getDefaultSerialization(target) { + if (!target) + return defaults.null; + if (target instanceof Map) + return defaults.map; + else if (target instanceof Set) + return defaults.set; + else if (Array.isArray(target)) + return defaults.array; + else + return defaults.object; +} +function useBase64(target, options) { + const base64 = shallowRef(""); + const promise = shallowRef(); + function execute() { + if (!isClient) + return; + promise.value = new Promise((resolve, reject) => { + try { + const _target = toValue(target); + if (_target == null) { + resolve(""); + } else if (typeof _target === "string") { + resolve(blobToBase64(new Blob([_target], { type: "text/plain" }))); + } else if (_target instanceof Blob) { + resolve(blobToBase64(_target)); + } else if (_target instanceof ArrayBuffer) { + resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target)))); + } else if (_target instanceof HTMLCanvasElement) { + resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality)); + } else if (_target instanceof HTMLImageElement) { + const img = _target.cloneNode(false); + img.crossOrigin = "Anonymous"; + imgLoaded(img).then(() => { + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d"); + canvas.width = img.width; + canvas.height = img.height; + ctx.drawImage(img, 0, 0, canvas.width, canvas.height); + resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality)); + }).catch(reject); + } else if (typeof _target === "object") { + const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target); + const serialized = _serializeFn(_target); + return resolve(blobToBase64(new Blob([serialized], { type: "application/json" }))); + } else { + reject(new Error("target is unsupported types")); + } + } catch (error) { + reject(error); + } + }); + promise.value.then((res) => { + base64.value = (options == null ? void 0 : options.dataUrl) === false ? res.replace(/^data:.*?;base64,/, "") : res; + }); + return promise.value; + } + if (isRef(target) || typeof target === "function") + watch(target, execute, { immediate: true }); + else + execute(); + return { + base64, + promise, + execute + }; +} +function imgLoaded(img) { + return new Promise((resolve, reject) => { + if (!img.complete) { + img.onload = () => { + resolve(); + }; + img.onerror = reject; + } else { + resolve(); + } + }); +} +function blobToBase64(blob) { + return new Promise((resolve, reject) => { + const fr = new FileReader(); + fr.onload = (e) => { + resolve(e.target.result); + }; + fr.onerror = reject; + fr.readAsDataURL(blob); + }); +} +function useBattery(options = {}) { + const { navigator: navigator2 = defaultNavigator } = options; + const events2 = ["chargingchange", "chargingtimechange", "dischargingtimechange", "levelchange"]; + const isSupported = useSupported(() => navigator2 && "getBattery" in navigator2 && typeof navigator2.getBattery === "function"); + const charging = shallowRef(false); + const chargingTime = shallowRef(0); + const dischargingTime = shallowRef(0); + const level = shallowRef(1); + let battery; + function updateBatteryInfo() { + charging.value = this.charging; + chargingTime.value = this.chargingTime || 0; + dischargingTime.value = this.dischargingTime || 0; + level.value = this.level; + } + if (isSupported.value) { + navigator2.getBattery().then((_battery) => { + battery = _battery; + updateBatteryInfo.call(battery); + useEventListener(battery, events2, updateBatteryInfo, { passive: true }); + }); + } + return { + isSupported, + charging, + chargingTime, + dischargingTime, + level + }; +} +function useBluetooth(options) { + let { + acceptAllDevices = false + } = options || {}; + const { + filters = void 0, + optionalServices = void 0, + navigator: navigator2 = defaultNavigator + } = options || {}; + const isSupported = useSupported(() => navigator2 && "bluetooth" in navigator2); + const device = shallowRef(); + const error = shallowRef(null); + watch(device, () => { + connectToBluetoothGATTServer(); + }); + async function requestDevice() { + if (!isSupported.value) + return; + error.value = null; + if (filters && filters.length > 0) + acceptAllDevices = false; + try { + device.value = await (navigator2 == null ? void 0 : navigator2.bluetooth.requestDevice({ + acceptAllDevices, + filters, + optionalServices + })); + } catch (err) { + error.value = err; + } + } + const server = shallowRef(); + const isConnected = shallowRef(false); + function reset() { + isConnected.value = false; + device.value = void 0; + server.value = void 0; + } + async function connectToBluetoothGATTServer() { + error.value = null; + if (device.value && device.value.gatt) { + useEventListener(device, "gattserverdisconnected", reset, { passive: true }); + try { + server.value = await device.value.gatt.connect(); + isConnected.value = server.value.connected; + } catch (err) { + error.value = err; + } + } + } + tryOnMounted(() => { + var _a; + if (device.value) + (_a = device.value.gatt) == null ? void 0 : _a.connect(); + }); + tryOnScopeDispose(() => { + var _a; + if (device.value) + (_a = device.value.gatt) == null ? void 0 : _a.disconnect(); + }); + return { + isSupported, + isConnected: readonly(isConnected), + // Device: + device, + requestDevice, + // Server: + server, + // Errors: + error + }; +} +var ssrWidthSymbol = Symbol("vueuse-ssr-width"); +function useSSRWidth() { + const ssrWidth = hasInjectionContext() ? injectLocal(ssrWidthSymbol, null) : null; + return typeof ssrWidth === "number" ? ssrWidth : void 0; +} +function provideSSRWidth(width, app) { + if (app !== void 0) { + app.provide(ssrWidthSymbol, width); + } else { + provideLocal(ssrWidthSymbol, width); + } +} +function useMediaQuery(query, options = {}) { + const { window: window2 = defaultWindow, ssrWidth = useSSRWidth() } = options; + const isSupported = useSupported(() => window2 && "matchMedia" in window2 && typeof window2.matchMedia === "function"); + const ssrSupport = shallowRef(typeof ssrWidth === "number"); + const mediaQuery = shallowRef(); + const matches = shallowRef(false); + const handler = (event) => { + matches.value = event.matches; + }; + watchEffect(() => { + if (ssrSupport.value) { + ssrSupport.value = !isSupported.value; + const queryStrings = toValue(query).split(","); + matches.value = queryStrings.some((queryString) => { + const not = queryString.includes("not all"); + const minWidth = queryString.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/); + const maxWidth = queryString.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/); + let res = Boolean(minWidth || maxWidth); + if (minWidth && res) { + res = ssrWidth >= pxValue(minWidth[1]); + } + if (maxWidth && res) { + res = ssrWidth <= pxValue(maxWidth[1]); + } + return not ? !res : res; + }); + return; + } + if (!isSupported.value) + return; + mediaQuery.value = window2.matchMedia(toValue(query)); + matches.value = mediaQuery.value.matches; + }); + useEventListener(mediaQuery, "change", handler, { passive: true }); + return computed(() => matches.value); +} +var breakpointsTailwind = { + "sm": 640, + "md": 768, + "lg": 1024, + "xl": 1280, + "2xl": 1536 +}; +var breakpointsBootstrapV5 = { + xs: 0, + sm: 576, + md: 768, + lg: 992, + xl: 1200, + xxl: 1400 +}; +var breakpointsVuetifyV2 = { + xs: 0, + sm: 600, + md: 960, + lg: 1264, + xl: 1904 +}; +var breakpointsVuetifyV3 = { + xs: 0, + sm: 600, + md: 960, + lg: 1280, + xl: 1920, + xxl: 2560 +}; +var breakpointsVuetify = breakpointsVuetifyV2; +var breakpointsAntDesign = { + xs: 480, + sm: 576, + md: 768, + lg: 992, + xl: 1200, + xxl: 1600 +}; +var breakpointsQuasar = { + xs: 0, + sm: 600, + md: 1024, + lg: 1440, + xl: 1920 +}; +var breakpointsSematic = { + mobileS: 320, + mobileM: 375, + mobileL: 425, + tablet: 768, + laptop: 1024, + laptopL: 1440, + desktop4K: 2560 +}; +var breakpointsMasterCss = { + "3xs": 360, + "2xs": 480, + "xs": 600, + "sm": 768, + "md": 1024, + "lg": 1280, + "xl": 1440, + "2xl": 1600, + "3xl": 1920, + "4xl": 2560 +}; +var breakpointsPrimeFlex = { + sm: 576, + md: 768, + lg: 992, + xl: 1200 +}; +var breakpointsElement = { + xs: 0, + sm: 768, + md: 992, + lg: 1200, + xl: 1920 +}; +function useBreakpoints(breakpoints, options = {}) { + function getValue2(k, delta) { + let v = toValue(breakpoints[toValue(k)]); + if (delta != null) + v = increaseWithUnit(v, delta); + if (typeof v === "number") + v = `${v}px`; + return v; + } + const { window: window2 = defaultWindow, strategy = "min-width", ssrWidth = useSSRWidth() } = options; + const ssrSupport = typeof ssrWidth === "number"; + const mounted = ssrSupport ? shallowRef(false) : { value: true }; + if (ssrSupport) { + tryOnMounted(() => mounted.value = !!window2); + } + function match(query, size) { + if (!mounted.value && ssrSupport) { + return query === "min" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size); + } + if (!window2) + return false; + return window2.matchMedia(`(${query}-width: ${size})`).matches; + } + const greaterOrEqual = (k) => { + return useMediaQuery(() => `(min-width: ${getValue2(k)})`, options); + }; + const smallerOrEqual = (k) => { + return useMediaQuery(() => `(max-width: ${getValue2(k)})`, options); + }; + const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => { + Object.defineProperty(shortcuts, k, { + get: () => strategy === "min-width" ? greaterOrEqual(k) : smallerOrEqual(k), + enumerable: true, + configurable: true + }); + return shortcuts; + }, {}); + function current() { + const points = Object.keys(breakpoints).map((k) => [k, shortcutMethods[k], pxValue(getValue2(k))]).sort((a, b) => a[2] - b[2]); + return computed(() => points.filter(([, v]) => v.value).map(([k]) => k)); + } + return Object.assign(shortcutMethods, { + greaterOrEqual, + smallerOrEqual, + greater(k) { + return useMediaQuery(() => `(min-width: ${getValue2(k, 0.1)})`, options); + }, + smaller(k) { + return useMediaQuery(() => `(max-width: ${getValue2(k, -0.1)})`, options); + }, + between(a, b) { + return useMediaQuery(() => `(min-width: ${getValue2(a)}) and (max-width: ${getValue2(b, -0.1)})`, options); + }, + isGreater(k) { + return match("min", getValue2(k, 0.1)); + }, + isGreaterOrEqual(k) { + return match("min", getValue2(k)); + }, + isSmaller(k) { + return match("max", getValue2(k, -0.1)); + }, + isSmallerOrEqual(k) { + return match("max", getValue2(k)); + }, + isInBetween(a, b) { + return match("min", getValue2(a)) && match("max", getValue2(b, -0.1)); + }, + current, + active() { + const bps = current(); + return computed(() => bps.value.length === 0 ? "" : bps.value.at(strategy === "min-width" ? -1 : 0)); + } + }); +} +function useBroadcastChannel(options) { + const { + name, + window: window2 = defaultWindow + } = options; + const isSupported = useSupported(() => window2 && "BroadcastChannel" in window2); + const isClosed = shallowRef(false); + const channel = ref(); + const data = ref(); + const error = shallowRef(null); + const post = (data2) => { + if (channel.value) + channel.value.postMessage(data2); + }; + const close = () => { + if (channel.value) + channel.value.close(); + isClosed.value = true; + }; + if (isSupported.value) { + tryOnMounted(() => { + error.value = null; + channel.value = new BroadcastChannel(name); + const listenerOptions = { + passive: true + }; + useEventListener(channel, "message", (e) => { + data.value = e.data; + }, listenerOptions); + useEventListener(channel, "messageerror", (e) => { + error.value = e; + }, listenerOptions); + useEventListener(channel, "close", () => { + isClosed.value = true; + }, listenerOptions); + }); + } + tryOnScopeDispose(() => { + close(); + }); + return { + isSupported, + channel, + data, + post, + close, + error, + isClosed + }; +} +var WRITABLE_PROPERTIES = [ + "hash", + "host", + "hostname", + "href", + "pathname", + "port", + "protocol", + "search" +]; +function useBrowserLocation(options = {}) { + const { window: window2 = defaultWindow } = options; + const refs = Object.fromEntries( + WRITABLE_PROPERTIES.map((key) => [key, ref()]) + ); + for (const [key, ref2] of objectEntries(refs)) { + watch(ref2, (value) => { + if (!(window2 == null ? void 0 : window2.location) || window2.location[key] === value) + return; + window2.location[key] = value; + }); + } + const buildState = (trigger) => { + var _a; + const { state: state2, length } = (window2 == null ? void 0 : window2.history) || {}; + const { origin } = (window2 == null ? void 0 : window2.location) || {}; + for (const key of WRITABLE_PROPERTIES) + refs[key].value = (_a = window2 == null ? void 0 : window2.location) == null ? void 0 : _a[key]; + return reactive({ + trigger, + state: state2, + length, + origin, + ...refs + }); + }; + const state = ref(buildState("load")); + if (window2) { + const listenerOptions = { passive: true }; + useEventListener(window2, "popstate", () => state.value = buildState("popstate"), listenerOptions); + useEventListener(window2, "hashchange", () => state.value = buildState("hashchange"), listenerOptions); + } + return state; +} +function useCached(refValue, comparator = (a, b) => a === b, options) { + const { deepRefs = true, ...watchOptions } = options || {}; + const cachedValue = createRef(refValue.value, deepRefs); + watch(() => refValue.value, (value) => { + if (!comparator(value, cachedValue.value)) + cachedValue.value = value; + }, watchOptions); + return cachedValue; +} +function usePermission(permissionDesc, options = {}) { + const { + controls = false, + navigator: navigator2 = defaultNavigator + } = options; + const isSupported = useSupported(() => navigator2 && "permissions" in navigator2); + const permissionStatus = shallowRef(); + const desc = typeof permissionDesc === "string" ? { name: permissionDesc } : permissionDesc; + const state = shallowRef(); + const update = () => { + var _a, _b; + state.value = (_b = (_a = permissionStatus.value) == null ? void 0 : _a.state) != null ? _b : "prompt"; + }; + useEventListener(permissionStatus, "change", update, { passive: true }); + const query = createSingletonPromise(async () => { + if (!isSupported.value) + return; + if (!permissionStatus.value) { + try { + permissionStatus.value = await navigator2.permissions.query(desc); + } catch (e) { + permissionStatus.value = void 0; + } finally { + update(); + } + } + if (controls) + return toRaw(permissionStatus.value); + }); + query(); + if (controls) { + return { + state, + isSupported, + query + }; + } else { + return state; + } +} +function useClipboard(options = {}) { + const { + navigator: navigator2 = defaultNavigator, + read = false, + source, + copiedDuring = 1500, + legacy = false + } = options; + const isClipboardApiSupported = useSupported(() => navigator2 && "clipboard" in navigator2); + const permissionRead = usePermission("clipboard-read"); + const permissionWrite = usePermission("clipboard-write"); + const isSupported = computed(() => isClipboardApiSupported.value || legacy); + const text = shallowRef(""); + const copied = shallowRef(false); + const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false }); + async function updateText() { + let useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionRead.value)); + if (!useLegacy) { + try { + text.value = await navigator2.clipboard.readText(); + } catch (e) { + useLegacy = true; + } + } + if (useLegacy) { + text.value = legacyRead(); + } + } + if (isSupported.value && read) + useEventListener(["copy", "cut"], updateText, { passive: true }); + async function copy(value = toValue(source)) { + if (isSupported.value && value != null) { + let useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionWrite.value)); + if (!useLegacy) { + try { + await navigator2.clipboard.writeText(value); + } catch (e) { + useLegacy = true; + } + } + if (useLegacy) + legacyCopy(value); + text.value = value; + copied.value = true; + timeout.start(); + } + } + function legacyCopy(value) { + const ta = document.createElement("textarea"); + ta.value = value != null ? value : ""; + ta.style.position = "absolute"; + ta.style.opacity = "0"; + document.body.appendChild(ta); + ta.select(); + document.execCommand("copy"); + ta.remove(); + } + function legacyRead() { + var _a, _b, _c; + return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : ""; + } + function isAllowed(status) { + return status === "granted" || status === "prompt"; + } + return { + isSupported, + text, + copied, + copy + }; +} +function useClipboardItems(options = {}) { + const { + navigator: navigator2 = defaultNavigator, + read = false, + source, + copiedDuring = 1500 + } = options; + const isSupported = useSupported(() => navigator2 && "clipboard" in navigator2); + const content = ref([]); + const copied = shallowRef(false); + const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false }); + function updateContent() { + if (isSupported.value) { + navigator2.clipboard.read().then((items) => { + content.value = items; + }); + } + } + if (isSupported.value && read) + useEventListener(["copy", "cut"], updateContent, { passive: true }); + async function copy(value = toValue(source)) { + if (isSupported.value && value != null) { + await navigator2.clipboard.write(value); + content.value = value; + copied.value = true; + timeout.start(); + } + } + return { + isSupported, + content, + copied, + copy + }; +} +function cloneFnJSON(source) { + return JSON.parse(JSON.stringify(source)); +} +function useCloned(source, options = {}) { + const cloned = ref({}); + const isModified = shallowRef(false); + let _lastSync = false; + const { + manual, + clone = cloneFnJSON, + // watch options + deep = true, + immediate = true + } = options; + watch(cloned, () => { + if (_lastSync) { + _lastSync = false; + return; + } + isModified.value = true; + }, { + deep: true, + flush: "sync" + }); + function sync() { + _lastSync = true; + isModified.value = false; + cloned.value = clone(toValue(source)); + } + if (!manual && (isRef(source) || typeof source === "function")) { + watch(source, sync, { + ...options, + deep, + immediate + }); + } else { + sync(); + } + return { cloned, isModified, sync }; +} +var _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; +var globalKey = "__vueuse_ssr_handlers__"; +var handlers = getHandlers(); +function getHandlers() { + if (!(globalKey in _global)) + _global[globalKey] = _global[globalKey] || {}; + return _global[globalKey]; +} +function getSSRHandler(key, fallback) { + return handlers[key] || fallback; +} +function setSSRHandler(key, fn) { + handlers[key] = fn; +} +function usePreferredDark(options) { + return useMediaQuery("(prefers-color-scheme: dark)", options); +} +function guessSerializerType(rawInit) { + return rawInit == null ? "any" : rawInit instanceof Set ? "set" : rawInit instanceof Map ? "map" : rawInit instanceof Date ? "date" : typeof rawInit === "boolean" ? "boolean" : typeof rawInit === "string" ? "string" : typeof rawInit === "object" ? "object" : !Number.isNaN(rawInit) ? "number" : "any"; +} +var StorageSerializers = { + boolean: { + read: (v) => v === "true", + write: (v) => String(v) + }, + object: { + read: (v) => JSON.parse(v), + write: (v) => JSON.stringify(v) + }, + number: { + read: (v) => Number.parseFloat(v), + write: (v) => String(v) + }, + any: { + read: (v) => v, + write: (v) => String(v) + }, + string: { + read: (v) => v, + write: (v) => String(v) + }, + map: { + read: (v) => new Map(JSON.parse(v)), + write: (v) => JSON.stringify(Array.from(v.entries())) + }, + set: { + read: (v) => new Set(JSON.parse(v)), + write: (v) => JSON.stringify(Array.from(v)) + }, + date: { + read: (v) => new Date(v), + write: (v) => v.toISOString() + } +}; +var customStorageEventName = "vueuse-storage"; +function useStorage(key, defaults2, storage, options = {}) { + var _a; + const { + flush = "pre", + deep = true, + listenToStorageChanges = true, + writeDefaults = true, + mergeDefaults = false, + shallow, + window: window2 = defaultWindow, + eventFilter, + onError = (e) => { + console.error(e); + }, + initOnMounted + } = options; + const data = (shallow ? shallowRef : ref)(typeof defaults2 === "function" ? defaults2() : defaults2); + const keyComputed = computed(() => toValue(key)); + if (!storage) { + try { + storage = getSSRHandler("getDefaultStorage", () => { + var _a2; + return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage; + })(); + } catch (e) { + onError(e); + } + } + if (!storage) + return data; + const rawInit = toValue(defaults2); + const type = guessSerializerType(rawInit); + const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type]; + const { pause: pauseWatch, resume: resumeWatch } = watchPausable( + data, + () => write(data.value), + { flush, deep, eventFilter } + ); + watch(keyComputed, () => update(), { flush }); + if (window2 && listenToStorageChanges) { + tryOnMounted(() => { + if (storage instanceof Storage) + useEventListener(window2, "storage", update, { passive: true }); + else + useEventListener(window2, customStorageEventName, updateFromCustomEvent); + if (initOnMounted) + update(); + }); + } + if (!initOnMounted) + update(); + function dispatchWriteEvent(oldValue, newValue) { + if (window2) { + const payload = { + key: keyComputed.value, + oldValue, + newValue, + storageArea: storage + }; + window2.dispatchEvent(storage instanceof Storage ? new StorageEvent("storage", payload) : new CustomEvent(customStorageEventName, { + detail: payload + })); + } + } + function write(v) { + try { + const oldValue = storage.getItem(keyComputed.value); + if (v == null) { + dispatchWriteEvent(oldValue, null); + storage.removeItem(keyComputed.value); + } else { + const serialized = serializer.write(v); + if (oldValue !== serialized) { + storage.setItem(keyComputed.value, serialized); + dispatchWriteEvent(oldValue, serialized); + } + } + } catch (e) { + onError(e); + } + } + function read(event) { + const rawValue = event ? event.newValue : storage.getItem(keyComputed.value); + if (rawValue == null) { + if (writeDefaults && rawInit != null) + storage.setItem(keyComputed.value, serializer.write(rawInit)); + return rawInit; + } else if (!event && mergeDefaults) { + const value = serializer.read(rawValue); + if (typeof mergeDefaults === "function") + return mergeDefaults(value, rawInit); + else if (type === "object" && !Array.isArray(value)) + return { ...rawInit, ...value }; + return value; + } else if (typeof rawValue !== "string") { + return rawValue; + } else { + return serializer.read(rawValue); + } + } + function update(event) { + if (event && event.storageArea !== storage) + return; + if (event && event.key == null) { + data.value = rawInit; + return; + } + if (event && event.key !== keyComputed.value) + return; + pauseWatch(); + try { + if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value)) + data.value = read(event); + } catch (e) { + onError(e); + } finally { + if (event) + nextTick(resumeWatch); + else + resumeWatch(); + } + } + function updateFromCustomEvent(event) { + update(event.detail); + } + return data; +} +var CSS_DISABLE_TRANS = "*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}"; +function useColorMode(options = {}) { + const { + selector = "html", + attribute = "class", + initialValue = "auto", + window: window2 = defaultWindow, + storage, + storageKey = "vueuse-color-scheme", + listenToStorageChanges = true, + storageRef, + emitAuto, + disableTransition = true + } = options; + const modes = { + auto: "", + light: "light", + dark: "dark", + ...options.modes || {} + }; + const preferredDark = usePreferredDark({ window: window2 }); + const system = computed(() => preferredDark.value ? "dark" : "light"); + const store = storageRef || (storageKey == null ? toRef2(initialValue) : useStorage(storageKey, initialValue, storage, { window: window2, listenToStorageChanges })); + const state = computed(() => store.value === "auto" ? system.value : store.value); + const updateHTMLAttrs = getSSRHandler( + "updateHTMLAttrs", + (selector2, attribute2, value) => { + const el = typeof selector2 === "string" ? window2 == null ? void 0 : window2.document.querySelector(selector2) : unrefElement(selector2); + if (!el) + return; + const classesToAdd = /* @__PURE__ */ new Set(); + const classesToRemove = /* @__PURE__ */ new Set(); + let attributeToChange = null; + if (attribute2 === "class") { + const current = value.split(/\s/g); + Object.values(modes).flatMap((i) => (i || "").split(/\s/g)).filter(Boolean).forEach((v) => { + if (current.includes(v)) + classesToAdd.add(v); + else + classesToRemove.add(v); + }); + } else { + attributeToChange = { key: attribute2, value }; + } + if (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null) + return; + let style; + if (disableTransition) { + style = window2.document.createElement("style"); + style.appendChild(document.createTextNode(CSS_DISABLE_TRANS)); + window2.document.head.appendChild(style); + } + for (const c of classesToAdd) { + el.classList.add(c); + } + for (const c of classesToRemove) { + el.classList.remove(c); + } + if (attributeToChange) { + el.setAttribute(attributeToChange.key, attributeToChange.value); + } + if (disableTransition) { + window2.getComputedStyle(style).opacity; + document.head.removeChild(style); + } + } + ); + function defaultOnChanged(mode) { + var _a; + updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode); + } + function onChanged(mode) { + if (options.onChanged) + options.onChanged(mode, defaultOnChanged); + else + defaultOnChanged(mode); + } + watch(state, onChanged, { flush: "post", immediate: true }); + tryOnMounted(() => onChanged(state.value)); + const auto = computed({ + get() { + return emitAuto ? store.value : state.value; + }, + set(v) { + store.value = v; + } + }); + return Object.assign(auto, { store, system, state }); +} +function useConfirmDialog(revealed = shallowRef(false)) { + const confirmHook = createEventHook(); + const cancelHook = createEventHook(); + const revealHook = createEventHook(); + let _resolve = noop; + const reveal = (data) => { + revealHook.trigger(data); + revealed.value = true; + return new Promise((resolve) => { + _resolve = resolve; + }); + }; + const confirm = (data) => { + revealed.value = false; + confirmHook.trigger(data); + _resolve({ data, isCanceled: false }); + }; + const cancel = (data) => { + revealed.value = false; + cancelHook.trigger(data); + _resolve({ data, isCanceled: true }); + }; + return { + isRevealed: computed(() => revealed.value), + reveal, + confirm, + cancel, + onReveal: revealHook.on, + onConfirm: confirmHook.on, + onCancel: cancelHook.on + }; +} +function useCountdown(initialCountdown, options) { + var _a, _b; + const remaining = shallowRef(toValue(initialCountdown)); + const intervalController = useIntervalFn(() => { + var _a2, _b2; + const value = remaining.value - 1; + remaining.value = value < 0 ? 0 : value; + (_a2 = options == null ? void 0 : options.onTick) == null ? void 0 : _a2.call(options); + if (remaining.value <= 0) { + intervalController.pause(); + (_b2 = options == null ? void 0 : options.onComplete) == null ? void 0 : _b2.call(options); + } + }, (_a = options == null ? void 0 : options.interval) != null ? _a : 1e3, { immediate: (_b = options == null ? void 0 : options.immediate) != null ? _b : false }); + const reset = (countdown) => { + var _a2; + remaining.value = (_a2 = toValue(countdown)) != null ? _a2 : toValue(initialCountdown); + }; + const stop = () => { + intervalController.pause(); + reset(); + }; + const resume = () => { + if (!intervalController.isActive.value) { + if (remaining.value > 0) { + intervalController.resume(); + } + } + }; + const start = (countdown) => { + reset(countdown); + intervalController.resume(); + }; + return { + remaining, + reset, + stop, + start, + pause: intervalController.pause, + resume, + isActive: intervalController.isActive + }; +} +function useCssVar(prop, target, options = {}) { + const { window: window2 = defaultWindow, initialValue, observe = false } = options; + const variable = shallowRef(initialValue); + const elRef = computed(() => { + var _a; + return unrefElement(target) || ((_a = window2 == null ? void 0 : window2.document) == null ? void 0 : _a.documentElement); + }); + function updateCssVar() { + var _a; + const key = toValue(prop); + const el = toValue(elRef); + if (el && window2 && key) { + const value = (_a = window2.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim(); + variable.value = value || variable.value || initialValue; + } + } + if (observe) { + useMutationObserver(elRef, updateCssVar, { + attributeFilter: ["style", "class"], + window: window2 + }); + } + watch( + [elRef, () => toValue(prop)], + (_, old) => { + if (old[0] && old[1]) + old[0].style.removeProperty(old[1]); + updateCssVar(); + }, + { immediate: true } + ); + watch( + [variable, elRef], + ([val, el]) => { + const raw_prop = toValue(prop); + if ((el == null ? void 0 : el.style) && raw_prop) { + if (val == null) + el.style.removeProperty(raw_prop); + else + el.style.setProperty(raw_prop, val); + } + }, + { immediate: true } + ); + return variable; +} +function useCurrentElement(rootComponent) { + const vm = getCurrentInstance(); + const currentElement = computedWithControl( + () => null, + () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el + ); + onUpdated(currentElement.trigger); + onMounted(currentElement.trigger); + return currentElement; +} +function useCycleList(list, options) { + const state = shallowRef(getInitialValue()); + const listRef = toRef2(list); + const index = computed({ + get() { + var _a; + const targetList = listRef.value; + let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value); + if (index2 < 0) + index2 = (_a = options == null ? void 0 : options.fallbackIndex) != null ? _a : 0; + return index2; + }, + set(v) { + set2(v); + } + }); + function set2(i) { + const targetList = listRef.value; + const length = targetList.length; + const index2 = (i % length + length) % length; + const value = targetList[index2]; + state.value = value; + return value; + } + function shift(delta = 1) { + return set2(index.value + delta); + } + function next(n = 1) { + return shift(n); + } + function prev(n = 1) { + return shift(-n); + } + function getInitialValue() { + var _a, _b; + return (_b = toValue((_a = options == null ? void 0 : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : void 0; + } + watch(listRef, () => set2(index.value)); + return { + state, + index, + next, + prev, + go: set2 + }; +} +function useDark(options = {}) { + const { + valueDark = "dark", + valueLight = "" + } = options; + const mode = useColorMode({ + ...options, + onChanged: (mode2, defaultHandler) => { + var _a; + if (options.onChanged) + (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === "dark", defaultHandler, mode2); + else + defaultHandler(mode2); + }, + modes: { + dark: valueDark, + light: valueLight + } + }); + const system = computed(() => mode.system.value); + const isDark = computed({ + get() { + return mode.value === "dark"; + }, + set(v) { + const modeVal = v ? "dark" : "light"; + if (system.value === modeVal) + mode.value = "auto"; + else + mode.value = modeVal; + } + }); + return isDark; +} +function fnBypass(v) { + return v; +} +function fnSetSource(source, value) { + return source.value = value; +} +function defaultDump(clone) { + return clone ? typeof clone === "function" ? clone : cloneFnJSON : fnBypass; +} +function defaultParse(clone) { + return clone ? typeof clone === "function" ? clone : cloneFnJSON : fnBypass; +} +function useManualRefHistory(source, options = {}) { + const { + clone = false, + dump = defaultDump(clone), + parse = defaultParse(clone), + setSource = fnSetSource + } = options; + function _createHistoryRecord() { + return markRaw({ + snapshot: dump(source.value), + timestamp: timestamp() + }); + } + const last = ref(_createHistoryRecord()); + const undoStack = ref([]); + const redoStack = ref([]); + const _setSource = (record) => { + setSource(source, parse(record.snapshot)); + last.value = record; + }; + const commit = () => { + undoStack.value.unshift(last.value); + last.value = _createHistoryRecord(); + if (options.capacity && undoStack.value.length > options.capacity) + undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY); + if (redoStack.value.length) + redoStack.value.splice(0, redoStack.value.length); + }; + const clear = () => { + undoStack.value.splice(0, undoStack.value.length); + redoStack.value.splice(0, redoStack.value.length); + }; + const undo = () => { + const state = undoStack.value.shift(); + if (state) { + redoStack.value.unshift(last.value); + _setSource(state); + } + }; + const redo = () => { + const state = redoStack.value.shift(); + if (state) { + undoStack.value.unshift(last.value); + _setSource(state); + } + }; + const reset = () => { + _setSource(last.value); + }; + const history = computed(() => [last.value, ...undoStack.value]); + const canUndo = computed(() => undoStack.value.length > 0); + const canRedo = computed(() => redoStack.value.length > 0); + return { + source, + undoStack, + redoStack, + last, + history, + canUndo, + canRedo, + clear, + commit, + reset, + undo, + redo + }; +} +function useRefHistory(source, options = {}) { + const { + deep = false, + flush = "pre", + eventFilter + } = options; + const { + eventFilter: composedFilter, + pause, + resume: resumeTracking, + isActive: isTracking + } = pausableFilter(eventFilter); + const { + ignoreUpdates, + ignorePrevAsyncUpdates, + stop + } = watchIgnorable( + source, + commit, + { deep, flush, eventFilter: composedFilter } + ); + function setSource(source2, value) { + ignorePrevAsyncUpdates(); + ignoreUpdates(() => { + source2.value = value; + }); + } + const manualHistory = useManualRefHistory(source, { ...options, clone: options.clone || deep, setSource }); + const { clear, commit: manualCommit } = manualHistory; + function commit() { + ignorePrevAsyncUpdates(); + manualCommit(); + } + function resume(commitNow) { + resumeTracking(); + if (commitNow) + commit(); + } + function batch(fn) { + let canceled = false; + const cancel = () => canceled = true; + ignoreUpdates(() => { + fn(cancel); + }); + if (!canceled) + commit(); + } + function dispose() { + stop(); + clear(); + } + return { + ...manualHistory, + isTracking, + pause, + resume, + commit, + batch, + dispose + }; +} +function useDebouncedRefHistory(source, options = {}) { + const filter = options.debounce ? debounceFilter(options.debounce) : void 0; + const history = useRefHistory(source, { ...options, eventFilter: filter }); + return { + ...history + }; +} +function useDeviceMotion(options = {}) { + const { + window: window2 = defaultWindow, + requestPermissions = false, + eventFilter = bypassFilter + } = options; + const isSupported = useSupported(() => typeof DeviceMotionEvent !== "undefined"); + const requirePermissions = useSupported(() => isSupported.value && "requestPermission" in DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === "function"); + const permissionGranted = shallowRef(false); + const acceleration = ref({ x: null, y: null, z: null }); + const rotationRate = ref({ alpha: null, beta: null, gamma: null }); + const interval = shallowRef(0); + const accelerationIncludingGravity = ref({ + x: null, + y: null, + z: null + }); + function init() { + if (window2) { + const onDeviceMotion = createFilterWrapper( + eventFilter, + (event) => { + var _a, _b, _c, _d, _e, _f, _g, _h, _i; + acceleration.value = { + x: ((_a = event.acceleration) == null ? void 0 : _a.x) || null, + y: ((_b = event.acceleration) == null ? void 0 : _b.y) || null, + z: ((_c = event.acceleration) == null ? void 0 : _c.z) || null + }; + accelerationIncludingGravity.value = { + x: ((_d = event.accelerationIncludingGravity) == null ? void 0 : _d.x) || null, + y: ((_e = event.accelerationIncludingGravity) == null ? void 0 : _e.y) || null, + z: ((_f = event.accelerationIncludingGravity) == null ? void 0 : _f.z) || null + }; + rotationRate.value = { + alpha: ((_g = event.rotationRate) == null ? void 0 : _g.alpha) || null, + beta: ((_h = event.rotationRate) == null ? void 0 : _h.beta) || null, + gamma: ((_i = event.rotationRate) == null ? void 0 : _i.gamma) || null + }; + interval.value = event.interval; + } + ); + useEventListener(window2, "devicemotion", onDeviceMotion, { passive: true }); + } + } + const ensurePermissions = async () => { + if (!requirePermissions.value) + permissionGranted.value = true; + if (permissionGranted.value) + return; + if (requirePermissions.value) { + const requestPermission = DeviceMotionEvent.requestPermission; + try { + const response = await requestPermission(); + if (response === "granted") { + permissionGranted.value = true; + init(); + } + } catch (error) { + console.error(error); + } + } + }; + if (isSupported.value) { + if (requestPermissions && requirePermissions.value) { + ensurePermissions().then(() => init()); + } else { + init(); + } + } + return { + acceleration, + accelerationIncludingGravity, + rotationRate, + interval, + isSupported, + requirePermissions, + ensurePermissions, + permissionGranted + }; +} +function useDeviceOrientation(options = {}) { + const { window: window2 = defaultWindow } = options; + const isSupported = useSupported(() => window2 && "DeviceOrientationEvent" in window2); + const isAbsolute = shallowRef(false); + const alpha = shallowRef(null); + const beta = shallowRef(null); + const gamma = shallowRef(null); + if (window2 && isSupported.value) { + useEventListener(window2, "deviceorientation", (event) => { + isAbsolute.value = event.absolute; + alpha.value = event.alpha; + beta.value = event.beta; + gamma.value = event.gamma; + }, { passive: true }); + } + return { + isSupported, + isAbsolute, + alpha, + beta, + gamma + }; +} +function useDevicePixelRatio(options = {}) { + const { + window: window2 = defaultWindow + } = options; + const pixelRatio = shallowRef(1); + const query = useMediaQuery(() => `(resolution: ${pixelRatio.value}dppx)`, options); + let stop = noop; + if (window2) { + stop = watchImmediate(query, () => pixelRatio.value = window2.devicePixelRatio); + } + return { + pixelRatio: readonly(pixelRatio), + stop + }; +} +function useDevicesList(options = {}) { + const { + navigator: navigator2 = defaultNavigator, + requestPermissions = false, + constraints = { audio: true, video: true }, + onUpdated: onUpdated2 + } = options; + const devices = ref([]); + const videoInputs = computed(() => devices.value.filter((i) => i.kind === "videoinput")); + const audioInputs = computed(() => devices.value.filter((i) => i.kind === "audioinput")); + const audioOutputs = computed(() => devices.value.filter((i) => i.kind === "audiooutput")); + const isSupported = useSupported(() => navigator2 && navigator2.mediaDevices && navigator2.mediaDevices.enumerateDevices); + const permissionGranted = shallowRef(false); + let stream; + async function update() { + if (!isSupported.value) + return; + devices.value = await navigator2.mediaDevices.enumerateDevices(); + onUpdated2 == null ? void 0 : onUpdated2(devices.value); + if (stream) { + stream.getTracks().forEach((t) => t.stop()); + stream = null; + } + } + async function ensurePermissions() { + const deviceName = constraints.video ? "camera" : "microphone"; + if (!isSupported.value) + return false; + if (permissionGranted.value) + return true; + const { state, query } = usePermission(deviceName, { controls: true }); + await query(); + if (state.value !== "granted") { + let granted = true; + try { + stream = await navigator2.mediaDevices.getUserMedia(constraints); + } catch (e) { + stream = null; + granted = false; + } + update(); + permissionGranted.value = granted; + } else { + permissionGranted.value = true; + } + return permissionGranted.value; + } + if (isSupported.value) { + if (requestPermissions) + ensurePermissions(); + useEventListener(navigator2.mediaDevices, "devicechange", update, { passive: true }); + update(); + } + return { + devices, + ensurePermissions, + permissionGranted, + videoInputs, + audioInputs, + audioOutputs, + isSupported + }; +} +function useDisplayMedia(options = {}) { + var _a; + const enabled = shallowRef((_a = options.enabled) != null ? _a : false); + const video = options.video; + const audio = options.audio; + const { navigator: navigator2 = defaultNavigator } = options; + const isSupported = useSupported(() => { + var _a2; + return (_a2 = navigator2 == null ? void 0 : navigator2.mediaDevices) == null ? void 0 : _a2.getDisplayMedia; + }); + const constraint = { audio, video }; + const stream = shallowRef(); + async function _start() { + var _a2; + if (!isSupported.value || stream.value) + return; + stream.value = await navigator2.mediaDevices.getDisplayMedia(constraint); + (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => useEventListener(t, "ended", stop, { passive: true })); + return stream.value; + } + async function _stop() { + var _a2; + (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop()); + stream.value = void 0; + } + function stop() { + _stop(); + enabled.value = false; + } + async function start() { + await _start(); + if (stream.value) + enabled.value = true; + return stream.value; + } + watch( + enabled, + (v) => { + if (v) + _start(); + else + _stop(); + }, + { immediate: true } + ); + return { + isSupported, + stream, + start, + stop, + enabled + }; +} +function useDocumentVisibility(options = {}) { + const { document: document2 = defaultDocument } = options; + if (!document2) + return shallowRef("visible"); + const visibility = shallowRef(document2.visibilityState); + useEventListener(document2, "visibilitychange", () => { + visibility.value = document2.visibilityState; + }, { passive: true }); + return visibility; +} +function useDraggable(target, options = {}) { + var _a; + const { + pointerTypes, + preventDefault: preventDefault2, + stopPropagation, + exact, + onMove, + onEnd, + onStart, + initialValue, + axis = "both", + draggingElement = defaultWindow, + containerElement, + handle: draggingHandle = target, + buttons = [0] + } = options; + const position = ref( + (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 } + ); + const pressedDelta = ref(); + const filterEvent = (e) => { + if (pointerTypes) + return pointerTypes.includes(e.pointerType); + return true; + }; + const handleEvent = (e) => { + if (toValue(preventDefault2)) + e.preventDefault(); + if (toValue(stopPropagation)) + e.stopPropagation(); + }; + const start = (e) => { + var _a2; + if (!toValue(buttons).includes(e.button)) + return; + if (toValue(options.disabled) || !filterEvent(e)) + return; + if (toValue(exact) && e.target !== toValue(target)) + return; + const container = toValue(containerElement); + const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container); + const targetRect = toValue(target).getBoundingClientRect(); + const pos = { + x: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left), + y: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top) + }; + if ((onStart == null ? void 0 : onStart(pos, e)) === false) + return; + pressedDelta.value = pos; + handleEvent(e); + }; + const move = (e) => { + if (toValue(options.disabled) || !filterEvent(e)) + return; + if (!pressedDelta.value) + return; + const container = toValue(containerElement); + const targetRect = toValue(target).getBoundingClientRect(); + let { x, y } = position.value; + if (axis === "x" || axis === "both") { + x = e.clientX - pressedDelta.value.x; + if (container) + x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width); + } + if (axis === "y" || axis === "both") { + y = e.clientY - pressedDelta.value.y; + if (container) + y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height); + } + position.value = { + x, + y + }; + onMove == null ? void 0 : onMove(position.value, e); + handleEvent(e); + }; + const end = (e) => { + if (toValue(options.disabled) || !filterEvent(e)) + return; + if (!pressedDelta.value) + return; + pressedDelta.value = void 0; + onEnd == null ? void 0 : onEnd(position.value, e); + handleEvent(e); + }; + if (isClient) { + const config = () => { + var _a2; + return { + capture: (_a2 = options.capture) != null ? _a2 : true, + passive: !toValue(preventDefault2) + }; + }; + useEventListener(draggingHandle, "pointerdown", start, config); + useEventListener(draggingElement, "pointermove", move, config); + useEventListener(draggingElement, "pointerup", end, config); + } + return { + ...toRefs2(position), + position, + isDragging: computed(() => !!pressedDelta.value), + style: computed( + () => `left:${position.value.x}px;top:${position.value.y}px;` + ) + }; +} +function useDropZone(target, options = {}) { + var _a, _b; + const isOverDropZone = shallowRef(false); + const files = shallowRef(null); + let counter = 0; + let isValid = true; + if (isClient) { + const _options = typeof options === "function" ? { onDrop: options } : options; + const multiple = (_a = _options.multiple) != null ? _a : true; + const preventDefaultForUnhandled = (_b = _options.preventDefaultForUnhandled) != null ? _b : false; + const getFiles = (event) => { + var _a2, _b2; + const list = Array.from((_b2 = (_a2 = event.dataTransfer) == null ? void 0 : _a2.files) != null ? _b2 : []); + return list.length === 0 ? null : multiple ? list : [list[0]]; + }; + const checkDataTypes = (types) => { + const dataTypes = unref(_options.dataTypes); + if (typeof dataTypes === "function") + return dataTypes(types); + if (!(dataTypes == null ? void 0 : dataTypes.length)) + return true; + if (types.length === 0) + return false; + return types.every( + (type) => dataTypes.some((allowedType) => type.includes(allowedType)) + ); + }; + const checkValidity = (items) => { + const types = Array.from(items != null ? items : []).map((item) => item.type); + const dataTypesValid = checkDataTypes(types); + const multipleFilesValid = multiple || items.length <= 1; + return dataTypesValid && multipleFilesValid; + }; + const isSafari = () => /^(?:(?!chrome|android).)*safari/i.test(navigator.userAgent) && !("chrome" in window); + const handleDragEvent = (event, eventType) => { + var _a2, _b2, _c, _d, _e, _f; + const dataTransferItemList = (_a2 = event.dataTransfer) == null ? void 0 : _a2.items; + isValid = (_b2 = dataTransferItemList && checkValidity(dataTransferItemList)) != null ? _b2 : false; + if (preventDefaultForUnhandled) { + event.preventDefault(); + } + if (!isSafari() && !isValid) { + if (event.dataTransfer) { + event.dataTransfer.dropEffect = "none"; + } + return; + } + event.preventDefault(); + if (event.dataTransfer) { + event.dataTransfer.dropEffect = "copy"; + } + const currentFiles = getFiles(event); + switch (eventType) { + case "enter": + counter += 1; + isOverDropZone.value = true; + (_c = _options.onEnter) == null ? void 0 : _c.call(_options, null, event); + break; + case "over": + (_d = _options.onOver) == null ? void 0 : _d.call(_options, null, event); + break; + case "leave": + counter -= 1; + if (counter === 0) + isOverDropZone.value = false; + (_e = _options.onLeave) == null ? void 0 : _e.call(_options, null, event); + break; + case "drop": + counter = 0; + isOverDropZone.value = false; + if (isValid) { + files.value = currentFiles; + (_f = _options.onDrop) == null ? void 0 : _f.call(_options, currentFiles, event); + } + break; + } + }; + useEventListener(target, "dragenter", (event) => handleDragEvent(event, "enter")); + useEventListener(target, "dragover", (event) => handleDragEvent(event, "over")); + useEventListener(target, "dragleave", (event) => handleDragEvent(event, "leave")); + useEventListener(target, "drop", (event) => handleDragEvent(event, "drop")); + } + return { + files, + isOverDropZone + }; +} +function useResizeObserver(target, callback, options = {}) { + const { window: window2 = defaultWindow, ...observerOptions } = options; + let observer; + const isSupported = useSupported(() => window2 && "ResizeObserver" in window2); + const cleanup = () => { + if (observer) { + observer.disconnect(); + observer = void 0; + } + }; + const targets = computed(() => { + const _targets = toValue(target); + return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)]; + }); + const stopWatch = watch( + targets, + (els) => { + cleanup(); + if (isSupported.value && window2) { + observer = new ResizeObserver(callback); + for (const _el of els) { + if (_el) + observer.observe(_el, observerOptions); + } + } + }, + { immediate: true, flush: "post" } + ); + const stop = () => { + cleanup(); + stopWatch(); + }; + tryOnScopeDispose(stop); + return { + isSupported, + stop + }; +} +function useElementBounding(target, options = {}) { + const { + reset = true, + windowResize = true, + windowScroll = true, + immediate = true, + updateTiming = "sync" + } = options; + const height = shallowRef(0); + const bottom = shallowRef(0); + const left = shallowRef(0); + const right = shallowRef(0); + const top = shallowRef(0); + const width = shallowRef(0); + const x = shallowRef(0); + const y = shallowRef(0); + function recalculate() { + const el = unrefElement(target); + if (!el) { + if (reset) { + height.value = 0; + bottom.value = 0; + left.value = 0; + right.value = 0; + top.value = 0; + width.value = 0; + x.value = 0; + y.value = 0; + } + return; + } + const rect = el.getBoundingClientRect(); + height.value = rect.height; + bottom.value = rect.bottom; + left.value = rect.left; + right.value = rect.right; + top.value = rect.top; + width.value = rect.width; + x.value = rect.x; + y.value = rect.y; + } + function update() { + if (updateTiming === "sync") + recalculate(); + else if (updateTiming === "next-frame") + requestAnimationFrame(() => recalculate()); + } + useResizeObserver(target, update); + watch(() => unrefElement(target), (ele) => !ele && update()); + useMutationObserver(target, update, { + attributeFilter: ["style", "class"] + }); + if (windowScroll) + useEventListener("scroll", update, { capture: true, passive: true }); + if (windowResize) + useEventListener("resize", update, { passive: true }); + tryOnMounted(() => { + if (immediate) + update(); + }); + return { + height, + bottom, + left, + right, + top, + width, + x, + y, + update + }; +} +function useElementByPoint(options) { + const { + x, + y, + document: document2 = defaultDocument, + multiple, + interval = "requestAnimationFrame", + immediate = true + } = options; + const isSupported = useSupported(() => { + if (toValue(multiple)) + return document2 && "elementsFromPoint" in document2; + return document2 && "elementFromPoint" in document2; + }); + const element = shallowRef(null); + const cb = () => { + var _a, _b; + element.value = toValue(multiple) ? (_a = document2 == null ? void 0 : document2.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document2 == null ? void 0 : document2.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null; + }; + const controls = interval === "requestAnimationFrame" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate }); + return { + isSupported, + element, + ...controls + }; +} +function useElementHover(el, options = {}) { + const { + delayEnter = 0, + delayLeave = 0, + triggerOnRemoval = false, + window: window2 = defaultWindow + } = options; + const isHovered = shallowRef(false); + let timer; + const toggle = (entering) => { + const delay = entering ? delayEnter : delayLeave; + if (timer) { + clearTimeout(timer); + timer = void 0; + } + if (delay) + timer = setTimeout(() => isHovered.value = entering, delay); + else + isHovered.value = entering; + }; + if (!window2) + return isHovered; + useEventListener(el, "mouseenter", () => toggle(true), { passive: true }); + useEventListener(el, "mouseleave", () => toggle(false), { passive: true }); + if (triggerOnRemoval) { + onElementRemoval( + computed(() => unrefElement(el)), + () => toggle(false) + ); + } + return isHovered; +} +function useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) { + const { window: window2 = defaultWindow, box = "content-box" } = options; + const isSVG = computed(() => { + var _a, _b; + return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes("svg"); + }); + const width = shallowRef(initialSize.width); + const height = shallowRef(initialSize.height); + const { stop: stop1 } = useResizeObserver( + target, + ([entry]) => { + const boxSize = box === "border-box" ? entry.borderBoxSize : box === "content-box" ? entry.contentBoxSize : entry.devicePixelContentBoxSize; + if (window2 && isSVG.value) { + const $elem = unrefElement(target); + if ($elem) { + const rect = $elem.getBoundingClientRect(); + width.value = rect.width; + height.value = rect.height; + } + } else { + if (boxSize) { + const formatBoxSize = toArray(boxSize); + width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0); + height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0); + } else { + width.value = entry.contentRect.width; + height.value = entry.contentRect.height; + } + } + }, + options + ); + tryOnMounted(() => { + const ele = unrefElement(target); + if (ele) { + width.value = "offsetWidth" in ele ? ele.offsetWidth : initialSize.width; + height.value = "offsetHeight" in ele ? ele.offsetHeight : initialSize.height; + } + }); + const stop2 = watch( + () => unrefElement(target), + (ele) => { + width.value = ele ? initialSize.width : 0; + height.value = ele ? initialSize.height : 0; + } + ); + function stop() { + stop1(); + stop2(); + } + return { + width, + height, + stop + }; +} +function useIntersectionObserver(target, callback, options = {}) { + const { + root, + rootMargin = "0px", + threshold = 0, + window: window2 = defaultWindow, + immediate = true + } = options; + const isSupported = useSupported(() => window2 && "IntersectionObserver" in window2); + const targets = computed(() => { + const _target = toValue(target); + return toArray(_target).map(unrefElement).filter(notNullish); + }); + let cleanup = noop; + const isActive = shallowRef(immediate); + const stopWatch = isSupported.value ? watch( + () => [targets.value, unrefElement(root), isActive.value], + ([targets2, root2]) => { + cleanup(); + if (!isActive.value) + return; + if (!targets2.length) + return; + const observer = new IntersectionObserver( + callback, + { + root: unrefElement(root2), + rootMargin, + threshold + } + ); + targets2.forEach((el) => el && observer.observe(el)); + cleanup = () => { + observer.disconnect(); + cleanup = noop; + }; + }, + { immediate, flush: "post" } + ) : noop; + const stop = () => { + cleanup(); + stopWatch(); + isActive.value = false; + }; + tryOnScopeDispose(stop); + return { + isSupported, + isActive, + pause() { + cleanup(); + isActive.value = false; + }, + resume() { + isActive.value = true; + }, + stop + }; +} +function useElementVisibility(element, options = {}) { + const { + window: window2 = defaultWindow, + scrollTarget, + threshold = 0, + rootMargin, + once = false + } = options; + const elementIsVisible = shallowRef(false); + const { stop } = useIntersectionObserver( + element, + (intersectionObserverEntries) => { + let isIntersecting = elementIsVisible.value; + let latestTime = 0; + for (const entry of intersectionObserverEntries) { + if (entry.time >= latestTime) { + latestTime = entry.time; + isIntersecting = entry.isIntersecting; + } + } + elementIsVisible.value = isIntersecting; + if (once) { + watchOnce(elementIsVisible, () => { + stop(); + }); + } + }, + { + root: scrollTarget, + window: window2, + threshold, + rootMargin: toValue(rootMargin) + } + ); + return elementIsVisible; +} +var events = /* @__PURE__ */ new Map(); +function useEventBus(key) { + const scope = getCurrentScope(); + function on(listener) { + var _a; + const listeners = events.get(key) || /* @__PURE__ */ new Set(); + listeners.add(listener); + events.set(key, listeners); + const _off = () => off(listener); + (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off); + return _off; + } + function once(listener) { + function _listener(...args) { + off(_listener); + listener(...args); + } + return on(_listener); + } + function off(listener) { + const listeners = events.get(key); + if (!listeners) + return; + listeners.delete(listener); + if (!listeners.size) + reset(); + } + function reset() { + events.delete(key); + } + function emit(event, payload) { + var _a; + (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload)); + } + return { on, once, off, emit, reset }; +} +function resolveNestedOptions$1(options) { + if (options === true) + return {}; + return options; +} +function useEventSource(url, events2 = [], options = {}) { + const event = shallowRef(null); + const data = shallowRef(null); + const status = shallowRef("CONNECTING"); + const eventSource = ref(null); + const error = shallowRef(null); + const urlRef = toRef2(url); + const lastEventId = shallowRef(null); + let explicitlyClosed = false; + let retried = 0; + const { + withCredentials = false, + immediate = true, + autoConnect = true, + autoReconnect + } = options; + const close = () => { + if (isClient && eventSource.value) { + eventSource.value.close(); + eventSource.value = null; + status.value = "CLOSED"; + explicitlyClosed = true; + } + }; + const _init = () => { + if (explicitlyClosed || typeof urlRef.value === "undefined") + return; + const es = new EventSource(urlRef.value, { withCredentials }); + status.value = "CONNECTING"; + eventSource.value = es; + es.onopen = () => { + status.value = "OPEN"; + error.value = null; + }; + es.onerror = (e) => { + status.value = "CLOSED"; + error.value = e; + if (es.readyState === 2 && !explicitlyClosed && autoReconnect) { + es.close(); + const { + retries = -1, + delay = 1e3, + onFailed + } = resolveNestedOptions$1(autoReconnect); + retried += 1; + if (typeof retries === "number" && (retries < 0 || retried < retries)) + setTimeout(_init, delay); + else if (typeof retries === "function" && retries()) + setTimeout(_init, delay); + else + onFailed == null ? void 0 : onFailed(); + } + }; + es.onmessage = (e) => { + event.value = null; + data.value = e.data; + lastEventId.value = e.lastEventId; + }; + for (const event_name of events2) { + useEventListener(es, event_name, (e) => { + event.value = event_name; + data.value = e.data || null; + }, { passive: true }); + } + }; + const open = () => { + if (!isClient) + return; + close(); + explicitlyClosed = false; + retried = 0; + _init(); + }; + if (immediate) + open(); + if (autoConnect) + watch(urlRef, open); + tryOnScopeDispose(close); + return { + eventSource, + event, + data, + status, + error, + open, + close, + lastEventId + }; +} +function useEyeDropper(options = {}) { + const { initialValue = "" } = options; + const isSupported = useSupported(() => typeof window !== "undefined" && "EyeDropper" in window); + const sRGBHex = shallowRef(initialValue); + async function open(openOptions) { + if (!isSupported.value) + return; + const eyeDropper = new window.EyeDropper(); + const result = await eyeDropper.open(openOptions); + sRGBHex.value = result.sRGBHex; + return result; + } + return { isSupported, sRGBHex, open }; +} +function useFavicon(newIcon = null, options = {}) { + const { + baseUrl = "", + rel = "icon", + document: document2 = defaultDocument + } = options; + const favicon = toRef2(newIcon); + const applyIcon = (icon) => { + const elements = document2 == null ? void 0 : document2.head.querySelectorAll(`link[rel*="${rel}"]`); + if (!elements || elements.length === 0) { + const link = document2 == null ? void 0 : document2.createElement("link"); + if (link) { + link.rel = rel; + link.href = `${baseUrl}${icon}`; + link.type = `image/${icon.split(".").pop()}`; + document2 == null ? void 0 : document2.head.append(link); + } + return; + } + elements == null ? void 0 : elements.forEach((el) => el.href = `${baseUrl}${icon}`); + }; + watch( + favicon, + (i, o) => { + if (typeof i === "string" && i !== o) + applyIcon(i); + }, + { immediate: true } + ); + return favicon; +} +var payloadMapping = { + json: "application/json", + text: "text/plain" +}; +function isFetchOptions(obj) { + return obj && containsProp(obj, "immediate", "refetch", "initialData", "timeout", "beforeFetch", "afterFetch", "onFetchError", "fetch", "updateDataOnError"); +} +var reAbsolute = /^(?:[a-z][a-z\d+\-.]*:)?\/\//i; +function isAbsoluteURL(url) { + return reAbsolute.test(url); +} +function headersToObject(headers) { + if (typeof Headers !== "undefined" && headers instanceof Headers) + return Object.fromEntries(headers.entries()); + return headers; +} +function combineCallbacks(combination, ...callbacks) { + if (combination === "overwrite") { + return async (ctx) => { + let callback; + for (let i = callbacks.length - 1; i >= 0; i--) { + if (callbacks[i] != null) { + callback = callbacks[i]; + break; + } + } + if (callback) + return { ...ctx, ...await callback(ctx) }; + return ctx; + }; + } else { + return async (ctx) => { + for (const callback of callbacks) { + if (callback) + ctx = { ...ctx, ...await callback(ctx) }; + } + return ctx; + }; + } +} +function createFetch(config = {}) { + const _combination = config.combination || "chain"; + const _options = config.options || {}; + const _fetchOptions = config.fetchOptions || {}; + function useFactoryFetch(url, ...args) { + const computedUrl = computed(() => { + const baseUrl = toValue(config.baseUrl); + const targetUrl = toValue(url); + return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl; + }); + let options = _options; + let fetchOptions = _fetchOptions; + if (args.length > 0) { + if (isFetchOptions(args[0])) { + options = { + ...options, + ...args[0], + beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch), + afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch), + onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError) + }; + } else { + fetchOptions = { + ...fetchOptions, + ...args[0], + headers: { + ...headersToObject(fetchOptions.headers) || {}, + ...headersToObject(args[0].headers) || {} + } + }; + } + } + if (args.length > 1 && isFetchOptions(args[1])) { + options = { + ...options, + ...args[1], + beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch), + afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch), + onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError) + }; + } + return useFetch(computedUrl, fetchOptions, options); + } + return useFactoryFetch; +} +function useFetch(url, ...args) { + var _a; + const supportsAbort = typeof AbortController === "function"; + let fetchOptions = {}; + let options = { + immediate: true, + refetch: false, + timeout: 0, + updateDataOnError: false + }; + const config = { + method: "GET", + type: "text", + payload: void 0 + }; + if (args.length > 0) { + if (isFetchOptions(args[0])) + options = { ...options, ...args[0] }; + else + fetchOptions = args[0]; + } + if (args.length > 1) { + if (isFetchOptions(args[1])) + options = { ...options, ...args[1] }; + } + const { + fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch, + initialData, + timeout + } = options; + const responseEvent = createEventHook(); + const errorEvent = createEventHook(); + const finallyEvent = createEventHook(); + const isFinished = shallowRef(false); + const isFetching = shallowRef(false); + const aborted = shallowRef(false); + const statusCode = shallowRef(null); + const response = shallowRef(null); + const error = shallowRef(null); + const data = shallowRef(initialData || null); + const canAbort = computed(() => supportsAbort && isFetching.value); + let controller; + let timer; + const abort = () => { + if (supportsAbort) { + controller == null ? void 0 : controller.abort(); + controller = new AbortController(); + controller.signal.onabort = () => aborted.value = true; + fetchOptions = { + ...fetchOptions, + signal: controller.signal + }; + } + }; + const loading = (isLoading) => { + isFetching.value = isLoading; + isFinished.value = !isLoading; + }; + if (timeout) + timer = useTimeoutFn(abort, timeout, { immediate: false }); + let executeCounter = 0; + const execute = async (throwOnFailed = false) => { + var _a2, _b; + abort(); + loading(true); + error.value = null; + statusCode.value = null; + aborted.value = false; + executeCounter += 1; + const currentExecuteCounter = executeCounter; + const defaultFetchOptions = { + method: config.method, + headers: {} + }; + const payload = toValue(config.payload); + if (payload) { + const headers = headersToObject(defaultFetchOptions.headers); + const proto = Object.getPrototypeOf(payload); + if (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData)) + config.payloadType = "json"; + if (config.payloadType) + headers["Content-Type"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType; + defaultFetchOptions.body = config.payloadType === "json" ? JSON.stringify(payload) : payload; + } + let isCanceled = false; + const context = { + url: toValue(url), + options: { + ...defaultFetchOptions, + ...fetchOptions + }, + cancel: () => { + isCanceled = true; + } + }; + if (options.beforeFetch) + Object.assign(context, await options.beforeFetch(context)); + if (isCanceled || !fetch) { + loading(false); + return Promise.resolve(null); + } + let responseData = null; + if (timer) + timer.start(); + return fetch( + context.url, + { + ...defaultFetchOptions, + ...context.options, + headers: { + ...headersToObject(defaultFetchOptions.headers), + ...headersToObject((_b = context.options) == null ? void 0 : _b.headers) + } + } + ).then(async (fetchResponse) => { + response.value = fetchResponse; + statusCode.value = fetchResponse.status; + responseData = await fetchResponse.clone()[config.type](); + if (!fetchResponse.ok) { + data.value = initialData || null; + throw new Error(fetchResponse.statusText); + } + if (options.afterFetch) { + ({ data: responseData } = await options.afterFetch({ + data: responseData, + response: fetchResponse, + context, + execute + })); + } + data.value = responseData; + responseEvent.trigger(fetchResponse); + return fetchResponse; + }).catch(async (fetchError) => { + let errorData = fetchError.message || fetchError.name; + if (options.onFetchError) { + ({ error: errorData, data: responseData } = await options.onFetchError({ + data: responseData, + error: fetchError, + response: response.value, + context, + execute + })); + } + error.value = errorData; + if (options.updateDataOnError) + data.value = responseData; + errorEvent.trigger(fetchError); + if (throwOnFailed) + throw fetchError; + return null; + }).finally(() => { + if (currentExecuteCounter === executeCounter) + loading(false); + if (timer) + timer.stop(); + finallyEvent.trigger(null); + }); + }; + const refetch = toRef2(options.refetch); + watch( + [ + refetch, + toRef2(url) + ], + ([refetch2]) => refetch2 && execute(), + { deep: true } + ); + const shell = { + isFinished: readonly(isFinished), + isFetching: readonly(isFetching), + statusCode, + response, + error, + data, + canAbort, + aborted, + abort, + execute, + onFetchResponse: responseEvent.on, + onFetchError: errorEvent.on, + onFetchFinally: finallyEvent.on, + // method + get: setMethod("GET"), + put: setMethod("PUT"), + post: setMethod("POST"), + delete: setMethod("DELETE"), + patch: setMethod("PATCH"), + head: setMethod("HEAD"), + options: setMethod("OPTIONS"), + // type + json: setType("json"), + text: setType("text"), + blob: setType("blob"), + arrayBuffer: setType("arrayBuffer"), + formData: setType("formData") + }; + function setMethod(method) { + return (payload, payloadType) => { + if (!isFetching.value) { + config.method = method; + config.payload = payload; + config.payloadType = payloadType; + if (isRef(config.payload)) { + watch( + [ + refetch, + toRef2(config.payload) + ], + ([refetch2]) => refetch2 && execute(), + { deep: true } + ); + } + return { + ...shell, + then(onFulfilled, onRejected) { + return waitUntilFinished().then(onFulfilled, onRejected); + } + }; + } + return void 0; + }; + } + function waitUntilFinished() { + return new Promise((resolve, reject) => { + until(isFinished).toBe(true).then(() => resolve(shell)).catch(reject); + }); + } + function setType(type) { + return () => { + if (!isFetching.value) { + config.type = type; + return { + ...shell, + then(onFulfilled, onRejected) { + return waitUntilFinished().then(onFulfilled, onRejected); + } + }; + } + return void 0; + }; + } + if (options.immediate) + Promise.resolve().then(() => execute()); + return { + ...shell, + then(onFulfilled, onRejected) { + return waitUntilFinished().then(onFulfilled, onRejected); + } + }; +} +function joinPaths(start, end) { + if (!start.endsWith("/") && !end.startsWith("/")) { + return `${start}/${end}`; + } + if (start.endsWith("/") && end.startsWith("/")) { + return `${start.slice(0, -1)}${end}`; + } + return `${start}${end}`; +} +var DEFAULT_OPTIONS = { + multiple: true, + accept: "*", + reset: false, + directory: false +}; +function prepareInitialFiles(files) { + if (!files) + return null; + if (files instanceof FileList) + return files; + const dt = new DataTransfer(); + for (const file of files) { + dt.items.add(file); + } + return dt.files; +} +function useFileDialog(options = {}) { + const { + document: document2 = defaultDocument + } = options; + const files = ref(prepareInitialFiles(options.initialFiles)); + const { on: onChange, trigger: changeTrigger } = createEventHook(); + const { on: onCancel, trigger: cancelTrigger } = createEventHook(); + let input; + if (document2) { + input = document2.createElement("input"); + input.type = "file"; + input.onchange = (event) => { + const result = event.target; + files.value = result.files; + changeTrigger(files.value); + }; + input.oncancel = () => { + cancelTrigger(); + }; + } + const reset = () => { + files.value = null; + if (input && input.value) { + input.value = ""; + changeTrigger(null); + } + }; + const open = (localOptions) => { + if (!input) + return; + const _options = { + ...DEFAULT_OPTIONS, + ...options, + ...localOptions + }; + input.multiple = _options.multiple; + input.accept = _options.accept; + input.webkitdirectory = _options.directory; + if (hasOwn(_options, "capture")) + input.capture = _options.capture; + if (_options.reset) + reset(); + input.click(); + }; + return { + files: readonly(files), + open, + reset, + onCancel, + onChange + }; +} +function useFileSystemAccess(options = {}) { + const { + window: _window = defaultWindow, + dataType = "Text" + } = options; + const window2 = _window; + const isSupported = useSupported(() => window2 && "showSaveFilePicker" in window2 && "showOpenFilePicker" in window2); + const fileHandle = shallowRef(); + const data = shallowRef(); + const file = shallowRef(); + const fileName = computed(() => { + var _a, _b; + return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : ""; + }); + const fileMIME = computed(() => { + var _a, _b; + return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : ""; + }); + const fileSize = computed(() => { + var _a, _b; + return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0; + }); + const fileLastModified = computed(() => { + var _a, _b; + return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0; + }); + async function open(_options = {}) { + if (!isSupported.value) + return; + const [handle] = await window2.showOpenFilePicker({ ...toValue(options), ..._options }); + fileHandle.value = handle; + await updateData(); + } + async function create(_options = {}) { + if (!isSupported.value) + return; + fileHandle.value = await window2.showSaveFilePicker({ ...options, ..._options }); + data.value = void 0; + await updateData(); + } + async function save(_options = {}) { + if (!isSupported.value) + return; + if (!fileHandle.value) + return saveAs(_options); + if (data.value) { + const writableStream = await fileHandle.value.createWritable(); + await writableStream.write(data.value); + await writableStream.close(); + } + await updateFile(); + } + async function saveAs(_options = {}) { + if (!isSupported.value) + return; + fileHandle.value = await window2.showSaveFilePicker({ ...options, ..._options }); + if (data.value) { + const writableStream = await fileHandle.value.createWritable(); + await writableStream.write(data.value); + await writableStream.close(); + } + await updateFile(); + } + async function updateFile() { + var _a; + file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile()); + } + async function updateData() { + var _a, _b; + await updateFile(); + const type = toValue(dataType); + if (type === "Text") + data.value = await ((_a = file.value) == null ? void 0 : _a.text()); + else if (type === "ArrayBuffer") + data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer()); + else if (type === "Blob") + data.value = file.value; + } + watch(() => toValue(dataType), updateData); + return { + isSupported, + data, + file, + fileName, + fileMIME, + fileSize, + fileLastModified, + open, + create, + save, + saveAs, + updateData + }; +} +function useFocus(target, options = {}) { + const { initialValue = false, focusVisible = false, preventScroll = false } = options; + const innerFocused = shallowRef(false); + const targetElement = computed(() => unrefElement(target)); + const listenerOptions = { passive: true }; + useEventListener(targetElement, "focus", (event) => { + var _a, _b; + if (!focusVisible || ((_b = (_a = event.target).matches) == null ? void 0 : _b.call(_a, ":focus-visible"))) + innerFocused.value = true; + }, listenerOptions); + useEventListener(targetElement, "blur", () => innerFocused.value = false, listenerOptions); + const focused = computed({ + get: () => innerFocused.value, + set(value) { + var _a, _b; + if (!value && innerFocused.value) + (_a = targetElement.value) == null ? void 0 : _a.blur(); + else if (value && !innerFocused.value) + (_b = targetElement.value) == null ? void 0 : _b.focus({ preventScroll }); + } + }); + watch( + targetElement, + () => { + focused.value = initialValue; + }, + { immediate: true, flush: "post" } + ); + return { focused }; +} +var EVENT_FOCUS_IN = "focusin"; +var EVENT_FOCUS_OUT = "focusout"; +var PSEUDO_CLASS_FOCUS_WITHIN = ":focus-within"; +function useFocusWithin(target, options = {}) { + const { window: window2 = defaultWindow } = options; + const targetElement = computed(() => unrefElement(target)); + const _focused = shallowRef(false); + const focused = computed(() => _focused.value); + const activeElement = useActiveElement(options); + if (!window2 || !activeElement.value) { + return { focused }; + } + const listenerOptions = { passive: true }; + useEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true, listenerOptions); + useEventListener(targetElement, EVENT_FOCUS_OUT, () => { + var _a, _b, _c; + return _focused.value = (_c = (_b = (_a = targetElement.value) == null ? void 0 : _a.matches) == null ? void 0 : _b.call(_a, PSEUDO_CLASS_FOCUS_WITHIN)) != null ? _c : false; + }, listenerOptions); + return { focused }; +} +function useFps(options) { + var _a; + const fps = shallowRef(0); + if (typeof performance === "undefined") + return fps; + const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10; + let last = performance.now(); + let ticks = 0; + useRafFn(() => { + ticks += 1; + if (ticks >= every) { + const now2 = performance.now(); + const diff = now2 - last; + fps.value = Math.round(1e3 / (diff / ticks)); + last = now2; + ticks = 0; + } + }); + return fps; +} +var eventHandlers = [ + "fullscreenchange", + "webkitfullscreenchange", + "webkitendfullscreen", + "mozfullscreenchange", + "MSFullscreenChange" +]; +function useFullscreen(target, options = {}) { + const { + document: document2 = defaultDocument, + autoExit = false + } = options; + const targetRef = computed(() => { + var _a; + return (_a = unrefElement(target)) != null ? _a : document2 == null ? void 0 : document2.documentElement; + }); + const isFullscreen = shallowRef(false); + const requestMethod = computed(() => { + return [ + "requestFullscreen", + "webkitRequestFullscreen", + "webkitEnterFullscreen", + "webkitEnterFullScreen", + "webkitRequestFullScreen", + "mozRequestFullScreen", + "msRequestFullscreen" + ].find((m) => document2 && m in document2 || targetRef.value && m in targetRef.value); + }); + const exitMethod = computed(() => { + return [ + "exitFullscreen", + "webkitExitFullscreen", + "webkitExitFullScreen", + "webkitCancelFullScreen", + "mozCancelFullScreen", + "msExitFullscreen" + ].find((m) => document2 && m in document2 || targetRef.value && m in targetRef.value); + }); + const fullscreenEnabled = computed(() => { + return [ + "fullScreen", + "webkitIsFullScreen", + "webkitDisplayingFullscreen", + "mozFullScreen", + "msFullscreenElement" + ].find((m) => document2 && m in document2 || targetRef.value && m in targetRef.value); + }); + const fullscreenElementMethod = [ + "fullscreenElement", + "webkitFullscreenElement", + "mozFullScreenElement", + "msFullscreenElement" + ].find((m) => document2 && m in document2); + const isSupported = useSupported(() => targetRef.value && document2 && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0); + const isCurrentElementFullScreen = () => { + if (fullscreenElementMethod) + return (document2 == null ? void 0 : document2[fullscreenElementMethod]) === targetRef.value; + return false; + }; + const isElementFullScreen = () => { + if (fullscreenEnabled.value) { + if (document2 && document2[fullscreenEnabled.value] != null) { + return document2[fullscreenEnabled.value]; + } else { + const target2 = targetRef.value; + if ((target2 == null ? void 0 : target2[fullscreenEnabled.value]) != null) { + return Boolean(target2[fullscreenEnabled.value]); + } + } + } + return false; + }; + async function exit() { + if (!isSupported.value || !isFullscreen.value) + return; + if (exitMethod.value) { + if ((document2 == null ? void 0 : document2[exitMethod.value]) != null) { + await document2[exitMethod.value](); + } else { + const target2 = targetRef.value; + if ((target2 == null ? void 0 : target2[exitMethod.value]) != null) + await target2[exitMethod.value](); + } + } + isFullscreen.value = false; + } + async function enter() { + if (!isSupported.value || isFullscreen.value) + return; + if (isElementFullScreen()) + await exit(); + const target2 = targetRef.value; + if (requestMethod.value && (target2 == null ? void 0 : target2[requestMethod.value]) != null) { + await target2[requestMethod.value](); + isFullscreen.value = true; + } + } + async function toggle() { + await (isFullscreen.value ? exit() : enter()); + } + const handlerCallback = () => { + const isElementFullScreenValue = isElementFullScreen(); + if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen()) + isFullscreen.value = isElementFullScreenValue; + }; + const listenerOptions = { capture: false, passive: true }; + useEventListener(document2, eventHandlers, handlerCallback, listenerOptions); + useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, listenerOptions); + if (autoExit) + tryOnScopeDispose(exit); + return { + isSupported, + isFullscreen, + enter, + exit, + toggle + }; +} +function mapGamepadToXbox360Controller(gamepad) { + return computed(() => { + if (gamepad.value) { + return { + buttons: { + a: gamepad.value.buttons[0], + b: gamepad.value.buttons[1], + x: gamepad.value.buttons[2], + y: gamepad.value.buttons[3] + }, + bumper: { + left: gamepad.value.buttons[4], + right: gamepad.value.buttons[5] + }, + triggers: { + left: gamepad.value.buttons[6], + right: gamepad.value.buttons[7] + }, + stick: { + left: { + horizontal: gamepad.value.axes[0], + vertical: gamepad.value.axes[1], + button: gamepad.value.buttons[10] + }, + right: { + horizontal: gamepad.value.axes[2], + vertical: gamepad.value.axes[3], + button: gamepad.value.buttons[11] + } + }, + dpad: { + up: gamepad.value.buttons[12], + down: gamepad.value.buttons[13], + left: gamepad.value.buttons[14], + right: gamepad.value.buttons[15] + }, + back: gamepad.value.buttons[8], + start: gamepad.value.buttons[9] + }; + } + return null; + }); +} +function useGamepad(options = {}) { + const { + navigator: navigator2 = defaultNavigator + } = options; + const isSupported = useSupported(() => navigator2 && "getGamepads" in navigator2); + const gamepads = ref([]); + const onConnectedHook = createEventHook(); + const onDisconnectedHook = createEventHook(); + const stateFromGamepad = (gamepad) => { + const hapticActuators = []; + const vibrationActuator = "vibrationActuator" in gamepad ? gamepad.vibrationActuator : null; + if (vibrationActuator) + hapticActuators.push(vibrationActuator); + if (gamepad.hapticActuators) + hapticActuators.push(...gamepad.hapticActuators); + return { + id: gamepad.id, + index: gamepad.index, + connected: gamepad.connected, + mapping: gamepad.mapping, + timestamp: gamepad.timestamp, + vibrationActuator: gamepad.vibrationActuator, + hapticActuators, + axes: gamepad.axes.map((axes) => axes), + buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value })) + }; + }; + const updateGamepadState = () => { + const _gamepads = (navigator2 == null ? void 0 : navigator2.getGamepads()) || []; + for (const gamepad of _gamepads) { + if (gamepad && gamepads.value[gamepad.index]) + gamepads.value[gamepad.index] = stateFromGamepad(gamepad); + } + }; + const { isActive, pause, resume } = useRafFn(updateGamepadState); + const onGamepadConnected = (gamepad) => { + if (!gamepads.value.some(({ index }) => index === gamepad.index)) { + gamepads.value.push(stateFromGamepad(gamepad)); + onConnectedHook.trigger(gamepad.index); + } + resume(); + }; + const onGamepadDisconnected = (gamepad) => { + gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index); + onDisconnectedHook.trigger(gamepad.index); + }; + const listenerOptions = { passive: true }; + useEventListener("gamepadconnected", (e) => onGamepadConnected(e.gamepad), listenerOptions); + useEventListener("gamepaddisconnected", (e) => onGamepadDisconnected(e.gamepad), listenerOptions); + tryOnMounted(() => { + const _gamepads = (navigator2 == null ? void 0 : navigator2.getGamepads()) || []; + for (const gamepad of _gamepads) { + if (gamepad && gamepads.value[gamepad.index]) + onGamepadConnected(gamepad); + } + }); + pause(); + return { + isSupported, + onConnected: onConnectedHook.on, + onDisconnected: onDisconnectedHook.on, + gamepads, + pause, + resume, + isActive + }; +} +function useGeolocation(options = {}) { + const { + enableHighAccuracy = true, + maximumAge = 3e4, + timeout = 27e3, + navigator: navigator2 = defaultNavigator, + immediate = true + } = options; + const isSupported = useSupported(() => navigator2 && "geolocation" in navigator2); + const locatedAt = shallowRef(null); + const error = shallowRef(null); + const coords = ref({ + accuracy: 0, + latitude: Number.POSITIVE_INFINITY, + longitude: Number.POSITIVE_INFINITY, + altitude: null, + altitudeAccuracy: null, + heading: null, + speed: null + }); + function updatePosition(position) { + locatedAt.value = position.timestamp; + coords.value = position.coords; + error.value = null; + } + let watcher; + function resume() { + if (isSupported.value) { + watcher = navigator2.geolocation.watchPosition( + updatePosition, + (err) => error.value = err, + { + enableHighAccuracy, + maximumAge, + timeout + } + ); + } + } + if (immediate) + resume(); + function pause() { + if (watcher && navigator2) + navigator2.geolocation.clearWatch(watcher); + } + tryOnScopeDispose(() => { + pause(); + }); + return { + isSupported, + coords, + locatedAt, + error, + resume, + pause + }; +} +var defaultEvents$1 = ["mousemove", "mousedown", "resize", "keydown", "touchstart", "wheel"]; +var oneMinute = 6e4; +function useIdle(timeout = oneMinute, options = {}) { + const { + initialState = false, + listenForVisibilityChange = true, + events: events2 = defaultEvents$1, + window: window2 = defaultWindow, + eventFilter = throttleFilter(50) + } = options; + const idle = shallowRef(initialState); + const lastActive = shallowRef(timestamp()); + let timer; + const reset = () => { + idle.value = false; + clearTimeout(timer); + timer = setTimeout(() => idle.value = true, timeout); + }; + const onEvent = createFilterWrapper( + eventFilter, + () => { + lastActive.value = timestamp(); + reset(); + } + ); + if (window2) { + const document2 = window2.document; + const listenerOptions = { passive: true }; + for (const event of events2) + useEventListener(window2, event, onEvent, listenerOptions); + if (listenForVisibilityChange) { + useEventListener(document2, "visibilitychange", () => { + if (!document2.hidden) + onEvent(); + }, listenerOptions); + } + reset(); + } + return { + idle, + lastActive, + reset + }; +} +async function loadImage(options) { + return new Promise((resolve, reject) => { + const img = new Image(); + const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy, width, height, decoding, fetchPriority, ismap, usemap } = options; + img.src = src; + if (srcset != null) + img.srcset = srcset; + if (sizes != null) + img.sizes = sizes; + if (clazz != null) + img.className = clazz; + if (loading != null) + img.loading = loading; + if (crossorigin != null) + img.crossOrigin = crossorigin; + if (referrerPolicy != null) + img.referrerPolicy = referrerPolicy; + if (width != null) + img.width = width; + if (height != null) + img.height = height; + if (decoding != null) + img.decoding = decoding; + if (fetchPriority != null) + img.fetchPriority = fetchPriority; + if (ismap != null) + img.isMap = ismap; + if (usemap != null) + img.useMap = usemap; + img.onload = () => resolve(img); + img.onerror = reject; + }); +} +function useImage(options, asyncStateOptions = {}) { + const state = useAsyncState( + () => loadImage(toValue(options)), + void 0, + { + resetOnExecute: true, + ...asyncStateOptions + } + ); + watch( + () => toValue(options), + () => state.execute(asyncStateOptions.delay), + { deep: true } + ); + return state; +} +function resolveElement(el) { + if (typeof Window !== "undefined" && el instanceof Window) + return el.document.documentElement; + if (typeof Document !== "undefined" && el instanceof Document) + return el.documentElement; + return el; +} +var ARRIVED_STATE_THRESHOLD_PIXELS = 1; +function useScroll(element, options = {}) { + const { + throttle = 0, + idle = 200, + onStop = noop, + onScroll = noop, + offset = { + left: 0, + right: 0, + top: 0, + bottom: 0 + }, + eventListenerOptions = { + capture: false, + passive: true + }, + behavior = "auto", + window: window2 = defaultWindow, + onError = (e) => { + console.error(e); + } + } = options; + const internalX = shallowRef(0); + const internalY = shallowRef(0); + const x = computed({ + get() { + return internalX.value; + }, + set(x2) { + scrollTo(x2, void 0); + } + }); + const y = computed({ + get() { + return internalY.value; + }, + set(y2) { + scrollTo(void 0, y2); + } + }); + function scrollTo(_x, _y) { + var _a, _b, _c, _d; + if (!window2) + return; + const _element = toValue(element); + if (!_element) + return; + (_c = _element instanceof Document ? window2.document.body : _element) == null ? void 0 : _c.scrollTo({ + top: (_a = toValue(_y)) != null ? _a : y.value, + left: (_b = toValue(_x)) != null ? _b : x.value, + behavior: toValue(behavior) + }); + const scrollContainer = ((_d = _element == null ? void 0 : _element.document) == null ? void 0 : _d.documentElement) || (_element == null ? void 0 : _element.documentElement) || _element; + if (x != null) + internalX.value = scrollContainer.scrollLeft; + if (y != null) + internalY.value = scrollContainer.scrollTop; + } + const isScrolling = shallowRef(false); + const arrivedState = reactive({ + left: true, + right: false, + top: true, + bottom: false + }); + const directions = reactive({ + left: false, + right: false, + top: false, + bottom: false + }); + const onScrollEnd = (e) => { + if (!isScrolling.value) + return; + isScrolling.value = false; + directions.left = false; + directions.right = false; + directions.top = false; + directions.bottom = false; + onStop(e); + }; + const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle); + const setArrivedState = (target) => { + var _a; + if (!window2) + return; + const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target); + const { display, flexDirection, direction } = getComputedStyle(el); + const directionMultipler = direction === "rtl" ? -1 : 1; + const scrollLeft = el.scrollLeft; + directions.left = scrollLeft < internalX.value; + directions.right = scrollLeft > internalX.value; + const left = Math.abs(scrollLeft * directionMultipler) <= (offset.left || 0); + const right = Math.abs(scrollLeft * directionMultipler) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS; + if (display === "flex" && flexDirection === "row-reverse") { + arrivedState.left = right; + arrivedState.right = left; + } else { + arrivedState.left = left; + arrivedState.right = right; + } + internalX.value = scrollLeft; + let scrollTop = el.scrollTop; + if (target === window2.document && !scrollTop) + scrollTop = window2.document.body.scrollTop; + directions.top = scrollTop < internalY.value; + directions.bottom = scrollTop > internalY.value; + const top = Math.abs(scrollTop) <= (offset.top || 0); + const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS; + if (display === "flex" && flexDirection === "column-reverse") { + arrivedState.top = bottom; + arrivedState.bottom = top; + } else { + arrivedState.top = top; + arrivedState.bottom = bottom; + } + internalY.value = scrollTop; + }; + const onScrollHandler = (e) => { + var _a; + if (!window2) + return; + const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target; + setArrivedState(eventTarget); + isScrolling.value = true; + onScrollEndDebounced(e); + onScroll(e); + }; + useEventListener( + element, + "scroll", + throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, + eventListenerOptions + ); + tryOnMounted(() => { + try { + const _element = toValue(element); + if (!_element) + return; + setArrivedState(_element); + } catch (e) { + onError(e); + } + }); + useEventListener( + element, + "scrollend", + onScrollEnd, + eventListenerOptions + ); + return { + x, + y, + isScrolling, + arrivedState, + directions, + measure() { + const _element = toValue(element); + if (window2 && _element) + setArrivedState(_element); + } + }; +} +function useInfiniteScroll(element, onLoadMore, options = {}) { + var _a; + const { + direction = "bottom", + interval = 100, + canLoadMore = () => true + } = options; + const state = reactive(useScroll( + element, + { + ...options, + offset: { + [direction]: (_a = options.distance) != null ? _a : 0, + ...options.offset + } + } + )); + const promise = ref(); + const isLoading = computed(() => !!promise.value); + const observedElement = computed(() => { + return resolveElement(toValue(element)); + }); + const isElementVisible = useElementVisibility(observedElement); + function checkAndLoad() { + state.measure(); + if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value)) + return; + const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value; + const isNarrower = direction === "bottom" || direction === "top" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth; + if (state.arrivedState[direction] || isNarrower) { + if (!promise.value) { + promise.value = Promise.all([ + onLoadMore(state), + new Promise((resolve) => setTimeout(resolve, interval)) + ]).finally(() => { + promise.value = null; + nextTick(() => checkAndLoad()); + }); + } + } + } + const stop = watch( + () => [state.arrivedState[direction], isElementVisible.value], + checkAndLoad, + { immediate: true } + ); + tryOnUnmounted(stop); + return { + isLoading, + reset() { + nextTick(() => checkAndLoad()); + } + }; +} +var defaultEvents = ["mousedown", "mouseup", "keydown", "keyup"]; +function useKeyModifier(modifier, options = {}) { + const { + events: events2 = defaultEvents, + document: document2 = defaultDocument, + initial = null + } = options; + const state = shallowRef(initial); + if (document2) { + events2.forEach((listenerEvent) => { + useEventListener(document2, listenerEvent, (evt) => { + if (typeof evt.getModifierState === "function") + state.value = evt.getModifierState(modifier); + }, { passive: true }); + }); + } + return state; +} +function useLocalStorage(key, initialValue, options = {}) { + const { window: window2 = defaultWindow } = options; + return useStorage(key, initialValue, window2 == null ? void 0 : window2.localStorage, options); +} +var DefaultMagicKeysAliasMap = { + ctrl: "control", + command: "meta", + cmd: "meta", + option: "alt", + up: "arrowup", + down: "arrowdown", + left: "arrowleft", + right: "arrowright" +}; +function useMagicKeys(options = {}) { + const { + reactive: useReactive = false, + target = defaultWindow, + aliasMap = DefaultMagicKeysAliasMap, + passive = true, + onEventFired = noop + } = options; + const current = reactive(/* @__PURE__ */ new Set()); + const obj = { + toJSON() { + return {}; + }, + current + }; + const refs = useReactive ? reactive(obj) : obj; + const metaDeps = /* @__PURE__ */ new Set(); + const usedKeys = /* @__PURE__ */ new Set(); + function setRefs(key, value) { + if (key in refs) { + if (useReactive) + refs[key] = value; + else + refs[key].value = value; + } + } + function reset() { + current.clear(); + for (const key of usedKeys) + setRefs(key, false); + } + function updateRefs(e, value) { + var _a, _b; + const key = (_a = e.key) == null ? void 0 : _a.toLowerCase(); + const code = (_b = e.code) == null ? void 0 : _b.toLowerCase(); + const values = [code, key].filter(Boolean); + if (key) { + if (value) + current.add(key); + else + current.delete(key); + } + for (const key2 of values) { + usedKeys.add(key2); + setRefs(key2, value); + } + if (key === "meta" && !value) { + metaDeps.forEach((key2) => { + current.delete(key2); + setRefs(key2, false); + }); + metaDeps.clear(); + } else if (typeof e.getModifierState === "function" && e.getModifierState("Meta") && value) { + [...current, ...values].forEach((key2) => metaDeps.add(key2)); + } + } + useEventListener(target, "keydown", (e) => { + updateRefs(e, true); + return onEventFired(e); + }, { passive }); + useEventListener(target, "keyup", (e) => { + updateRefs(e, false); + return onEventFired(e); + }, { passive }); + useEventListener("blur", reset, { passive }); + useEventListener("focus", reset, { passive }); + const proxy = new Proxy( + refs, + { + get(target2, prop, rec) { + if (typeof prop !== "string") + return Reflect.get(target2, prop, rec); + prop = prop.toLowerCase(); + if (prop in aliasMap) + prop = aliasMap[prop]; + if (!(prop in refs)) { + if (/[+_-]/.test(prop)) { + const keys2 = prop.split(/[+_-]/g).map((i) => i.trim()); + refs[prop] = computed(() => keys2.map((key) => toValue(proxy[key])).every(Boolean)); + } else { + refs[prop] = shallowRef(false); + } + } + const r = Reflect.get(target2, prop, rec); + return useReactive ? toValue(r) : r; + } + } + ); + return proxy; +} +function usingElRef(source, cb) { + if (toValue(source)) + cb(toValue(source)); +} +function timeRangeToArray(timeRanges) { + let ranges = []; + for (let i = 0; i < timeRanges.length; ++i) + ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]]; + return ranges; +} +function tracksToArray(tracks) { + return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType })); +} +var defaultOptions = { + src: "", + tracks: [] +}; +function useMediaControls(target, options = {}) { + target = toRef2(target); + options = { + ...defaultOptions, + ...options + }; + const { + document: document2 = defaultDocument + } = options; + const listenerOptions = { passive: true }; + const currentTime = shallowRef(0); + const duration = shallowRef(0); + const seeking = shallowRef(false); + const volume = shallowRef(1); + const waiting = shallowRef(false); + const ended = shallowRef(false); + const playing = shallowRef(false); + const rate = shallowRef(1); + const stalled = shallowRef(false); + const buffered = ref([]); + const tracks = ref([]); + const selectedTrack = shallowRef(-1); + const isPictureInPicture = shallowRef(false); + const muted = shallowRef(false); + const supportsPictureInPicture = document2 && "pictureInPictureEnabled" in document2; + const sourceErrorEvent = createEventHook(); + const playbackErrorEvent = createEventHook(); + const disableTrack = (track) => { + usingElRef(target, (el) => { + if (track) { + const id = typeof track === "number" ? track : track.id; + el.textTracks[id].mode = "disabled"; + } else { + for (let i = 0; i < el.textTracks.length; ++i) + el.textTracks[i].mode = "disabled"; + } + selectedTrack.value = -1; + }); + }; + const enableTrack = (track, disableTracks = true) => { + usingElRef(target, (el) => { + const id = typeof track === "number" ? track : track.id; + if (disableTracks) + disableTrack(); + el.textTracks[id].mode = "showing"; + selectedTrack.value = id; + }); + }; + const togglePictureInPicture = () => { + return new Promise((resolve, reject) => { + usingElRef(target, async (el) => { + if (supportsPictureInPicture) { + if (!isPictureInPicture.value) { + el.requestPictureInPicture().then(resolve).catch(reject); + } else { + document2.exitPictureInPicture().then(resolve).catch(reject); + } + } + }); + }); + }; + watchEffect(() => { + if (!document2) + return; + const el = toValue(target); + if (!el) + return; + const src = toValue(options.src); + let sources = []; + if (!src) + return; + if (typeof src === "string") + sources = [{ src }]; + else if (Array.isArray(src)) + sources = src; + else if (isObject(src)) + sources = [src]; + el.querySelectorAll("source").forEach((e) => { + e.remove(); + }); + sources.forEach(({ src: src2, type, media }) => { + const source = document2.createElement("source"); + source.setAttribute("src", src2); + source.setAttribute("type", type || ""); + source.setAttribute("media", media || ""); + useEventListener(source, "error", sourceErrorEvent.trigger, listenerOptions); + el.appendChild(source); + }); + el.load(); + }); + watch([target, volume], () => { + const el = toValue(target); + if (!el) + return; + el.volume = volume.value; + }); + watch([target, muted], () => { + const el = toValue(target); + if (!el) + return; + el.muted = muted.value; + }); + watch([target, rate], () => { + const el = toValue(target); + if (!el) + return; + el.playbackRate = rate.value; + }); + watchEffect(() => { + if (!document2) + return; + const textTracks = toValue(options.tracks); + const el = toValue(target); + if (!textTracks || !textTracks.length || !el) + return; + el.querySelectorAll("track").forEach((e) => e.remove()); + textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => { + const track = document2.createElement("track"); + track.default = isDefault || false; + track.kind = kind; + track.label = label; + track.src = src; + track.srclang = srcLang; + if (track.default) + selectedTrack.value = i; + el.appendChild(track); + }); + }); + const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => { + const el = toValue(target); + if (!el) + return; + el.currentTime = time; + }); + const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => { + const el = toValue(target); + if (!el) + return; + if (isPlaying) { + el.play().catch((e) => { + playbackErrorEvent.trigger(e); + throw e; + }); + } else { + el.pause(); + } + }); + useEventListener( + target, + "timeupdate", + () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime), + listenerOptions + ); + useEventListener( + target, + "durationchange", + () => duration.value = toValue(target).duration, + listenerOptions + ); + useEventListener( + target, + "progress", + () => buffered.value = timeRangeToArray(toValue(target).buffered), + listenerOptions + ); + useEventListener( + target, + "seeking", + () => seeking.value = true, + listenerOptions + ); + useEventListener( + target, + "seeked", + () => seeking.value = false, + listenerOptions + ); + useEventListener( + target, + ["waiting", "loadstart"], + () => { + waiting.value = true; + ignorePlayingUpdates(() => playing.value = false); + }, + listenerOptions + ); + useEventListener( + target, + "loadeddata", + () => waiting.value = false, + listenerOptions + ); + useEventListener( + target, + "playing", + () => { + waiting.value = false; + ended.value = false; + ignorePlayingUpdates(() => playing.value = true); + }, + listenerOptions + ); + useEventListener( + target, + "ratechange", + () => rate.value = toValue(target).playbackRate, + listenerOptions + ); + useEventListener( + target, + "stalled", + () => stalled.value = true, + listenerOptions + ); + useEventListener( + target, + "ended", + () => ended.value = true, + listenerOptions + ); + useEventListener( + target, + "pause", + () => ignorePlayingUpdates(() => playing.value = false), + listenerOptions + ); + useEventListener( + target, + "play", + () => ignorePlayingUpdates(() => playing.value = true), + listenerOptions + ); + useEventListener( + target, + "enterpictureinpicture", + () => isPictureInPicture.value = true, + listenerOptions + ); + useEventListener( + target, + "leavepictureinpicture", + () => isPictureInPicture.value = false, + listenerOptions + ); + useEventListener( + target, + "volumechange", + () => { + const el = toValue(target); + if (!el) + return; + volume.value = el.volume; + muted.value = el.muted; + }, + listenerOptions + ); + const listeners = []; + const stop = watch([target], () => { + const el = toValue(target); + if (!el) + return; + stop(); + listeners[0] = useEventListener(el.textTracks, "addtrack", () => tracks.value = tracksToArray(el.textTracks), listenerOptions); + listeners[1] = useEventListener(el.textTracks, "removetrack", () => tracks.value = tracksToArray(el.textTracks), listenerOptions); + listeners[2] = useEventListener(el.textTracks, "change", () => tracks.value = tracksToArray(el.textTracks), listenerOptions); + }); + tryOnScopeDispose(() => listeners.forEach((listener) => listener())); + return { + currentTime, + duration, + waiting, + seeking, + ended, + stalled, + buffered, + playing, + rate, + // Volume + volume, + muted, + // Tracks + tracks, + selectedTrack, + enableTrack, + disableTrack, + // Picture in Picture + supportsPictureInPicture, + togglePictureInPicture, + isPictureInPicture, + // Events + onSourceError: sourceErrorEvent.on, + onPlaybackError: playbackErrorEvent.on + }; +} +function useMemoize(resolver, options) { + const initCache = () => { + if (options == null ? void 0 : options.cache) + return shallowReactive(options.cache); + return shallowReactive(/* @__PURE__ */ new Map()); + }; + const cache = initCache(); + const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args); + const _loadData = (key, ...args) => { + cache.set(key, resolver(...args)); + return cache.get(key); + }; + const loadData = (...args) => _loadData(generateKey(...args), ...args); + const deleteData = (...args) => { + cache.delete(generateKey(...args)); + }; + const clearData = () => { + cache.clear(); + }; + const memoized = (...args) => { + const key = generateKey(...args); + if (cache.has(key)) + return cache.get(key); + return _loadData(key, ...args); + }; + memoized.load = loadData; + memoized.delete = deleteData; + memoized.clear = clearData; + memoized.generateKey = generateKey; + memoized.cache = cache; + return memoized; +} +function useMemory(options = {}) { + const memory = ref(); + const isSupported = useSupported(() => typeof performance !== "undefined" && "memory" in performance); + if (isSupported.value) { + const { interval = 1e3 } = options; + useIntervalFn(() => { + memory.value = performance.memory; + }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback }); + } + return { isSupported, memory }; +} +var UseMouseBuiltinExtractors = { + page: (event) => [event.pageX, event.pageY], + client: (event) => [event.clientX, event.clientY], + screen: (event) => [event.screenX, event.screenY], + movement: (event) => event instanceof MouseEvent ? [event.movementX, event.movementY] : null +}; +function useMouse(options = {}) { + const { + type = "page", + touch = true, + resetOnTouchEnds = false, + initialValue = { x: 0, y: 0 }, + window: window2 = defaultWindow, + target = window2, + scroll = true, + eventFilter + } = options; + let _prevMouseEvent = null; + let _prevScrollX = 0; + let _prevScrollY = 0; + const x = shallowRef(initialValue.x); + const y = shallowRef(initialValue.y); + const sourceType = shallowRef(null); + const extractor = typeof type === "function" ? type : UseMouseBuiltinExtractors[type]; + const mouseHandler = (event) => { + const result = extractor(event); + _prevMouseEvent = event; + if (result) { + [x.value, y.value] = result; + sourceType.value = "mouse"; + } + if (window2) { + _prevScrollX = window2.scrollX; + _prevScrollY = window2.scrollY; + } + }; + const touchHandler = (event) => { + if (event.touches.length > 0) { + const result = extractor(event.touches[0]); + if (result) { + [x.value, y.value] = result; + sourceType.value = "touch"; + } + } + }; + const scrollHandler = () => { + if (!_prevMouseEvent || !window2) + return; + const pos = extractor(_prevMouseEvent); + if (_prevMouseEvent instanceof MouseEvent && pos) { + x.value = pos[0] + window2.scrollX - _prevScrollX; + y.value = pos[1] + window2.scrollY - _prevScrollY; + } + }; + const reset = () => { + x.value = initialValue.x; + y.value = initialValue.y; + }; + const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event); + const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event); + const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler(); + if (target) { + const listenerOptions = { passive: true }; + useEventListener(target, ["mousemove", "dragover"], mouseHandlerWrapper, listenerOptions); + if (touch && type !== "movement") { + useEventListener(target, ["touchstart", "touchmove"], touchHandlerWrapper, listenerOptions); + if (resetOnTouchEnds) + useEventListener(target, "touchend", reset, listenerOptions); + } + if (scroll && type === "page") + useEventListener(window2, "scroll", scrollHandlerWrapper, listenerOptions); + } + return { + x, + y, + sourceType + }; +} +function useMouseInElement(target, options = {}) { + const { + handleOutside = true, + window: window2 = defaultWindow + } = options; + const type = options.type || "page"; + const { x, y, sourceType } = useMouse(options); + const targetRef = shallowRef(target != null ? target : window2 == null ? void 0 : window2.document.body); + const elementX = shallowRef(0); + const elementY = shallowRef(0); + const elementPositionX = shallowRef(0); + const elementPositionY = shallowRef(0); + const elementHeight = shallowRef(0); + const elementWidth = shallowRef(0); + const isOutside = shallowRef(true); + let stop = () => { + }; + if (window2) { + stop = watch( + [targetRef, x, y], + () => { + const el = unrefElement(targetRef); + if (!el || !(el instanceof Element)) + return; + const { + left, + top, + width, + height + } = el.getBoundingClientRect(); + elementPositionX.value = left + (type === "page" ? window2.pageXOffset : 0); + elementPositionY.value = top + (type === "page" ? window2.pageYOffset : 0); + elementHeight.value = height; + elementWidth.value = width; + const elX = x.value - elementPositionX.value; + const elY = y.value - elementPositionY.value; + isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height; + if (handleOutside || !isOutside.value) { + elementX.value = elX; + elementY.value = elY; + } + }, + { immediate: true } + ); + useEventListener( + document, + "mouseleave", + () => isOutside.value = true, + { passive: true } + ); + } + return { + x, + y, + sourceType, + elementX, + elementY, + elementPositionX, + elementPositionY, + elementHeight, + elementWidth, + isOutside, + stop + }; +} +function useMousePressed(options = {}) { + const { + touch = true, + drag = true, + capture = false, + initialValue = false, + window: window2 = defaultWindow + } = options; + const pressed = shallowRef(initialValue); + const sourceType = shallowRef(null); + if (!window2) { + return { + pressed, + sourceType + }; + } + const onPressed = (srcType) => (event) => { + var _a; + pressed.value = true; + sourceType.value = srcType; + (_a = options.onPressed) == null ? void 0 : _a.call(options, event); + }; + const onReleased = (event) => { + var _a; + pressed.value = false; + sourceType.value = null; + (_a = options.onReleased) == null ? void 0 : _a.call(options, event); + }; + const target = computed(() => unrefElement(options.target) || window2); + const listenerOptions = { passive: true, capture }; + useEventListener(target, "mousedown", onPressed("mouse"), listenerOptions); + useEventListener(window2, "mouseleave", onReleased, listenerOptions); + useEventListener(window2, "mouseup", onReleased, listenerOptions); + if (drag) { + useEventListener(target, "dragstart", onPressed("mouse"), listenerOptions); + useEventListener(window2, "drop", onReleased, listenerOptions); + useEventListener(window2, "dragend", onReleased, listenerOptions); + } + if (touch) { + useEventListener(target, "touchstart", onPressed("touch"), listenerOptions); + useEventListener(window2, "touchend", onReleased, listenerOptions); + useEventListener(window2, "touchcancel", onReleased, listenerOptions); + } + return { + pressed, + sourceType + }; +} +function useNavigatorLanguage(options = {}) { + const { window: window2 = defaultWindow } = options; + const navigator2 = window2 == null ? void 0 : window2.navigator; + const isSupported = useSupported(() => navigator2 && "language" in navigator2); + const language = shallowRef(navigator2 == null ? void 0 : navigator2.language); + useEventListener(window2, "languagechange", () => { + if (navigator2) + language.value = navigator2.language; + }, { passive: true }); + return { + isSupported, + language + }; +} +function useNetwork(options = {}) { + const { window: window2 = defaultWindow } = options; + const navigator2 = window2 == null ? void 0 : window2.navigator; + const isSupported = useSupported(() => navigator2 && "connection" in navigator2); + const isOnline = shallowRef(true); + const saveData = shallowRef(false); + const offlineAt = shallowRef(void 0); + const onlineAt = shallowRef(void 0); + const downlink = shallowRef(void 0); + const downlinkMax = shallowRef(void 0); + const rtt = shallowRef(void 0); + const effectiveType = shallowRef(void 0); + const type = shallowRef("unknown"); + const connection = isSupported.value && navigator2.connection; + function updateNetworkInformation() { + if (!navigator2) + return; + isOnline.value = navigator2.onLine; + offlineAt.value = isOnline.value ? void 0 : Date.now(); + onlineAt.value = isOnline.value ? Date.now() : void 0; + if (connection) { + downlink.value = connection.downlink; + downlinkMax.value = connection.downlinkMax; + effectiveType.value = connection.effectiveType; + rtt.value = connection.rtt; + saveData.value = connection.saveData; + type.value = connection.type; + } + } + const listenerOptions = { passive: true }; + if (window2) { + useEventListener(window2, "offline", () => { + isOnline.value = false; + offlineAt.value = Date.now(); + }, listenerOptions); + useEventListener(window2, "online", () => { + isOnline.value = true; + onlineAt.value = Date.now(); + }, listenerOptions); + } + if (connection) + useEventListener(connection, "change", updateNetworkInformation, listenerOptions); + updateNetworkInformation(); + return { + isSupported, + isOnline: readonly(isOnline), + saveData: readonly(saveData), + offlineAt: readonly(offlineAt), + onlineAt: readonly(onlineAt), + downlink: readonly(downlink), + downlinkMax: readonly(downlinkMax), + effectiveType: readonly(effectiveType), + rtt: readonly(rtt), + type: readonly(type) + }; +} +function useNow(options = {}) { + const { + controls: exposeControls = false, + interval = "requestAnimationFrame" + } = options; + const now2 = ref(/* @__PURE__ */ new Date()); + const update = () => now2.value = /* @__PURE__ */ new Date(); + const controls = interval === "requestAnimationFrame" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true }); + if (exposeControls) { + return { + now: now2, + ...controls + }; + } else { + return now2; + } +} +function useObjectUrl(object) { + const url = shallowRef(); + const release = () => { + if (url.value) + URL.revokeObjectURL(url.value); + url.value = void 0; + }; + watch( + () => toValue(object), + (newObject) => { + release(); + if (newObject) + url.value = URL.createObjectURL(newObject); + }, + { immediate: true } + ); + tryOnScopeDispose(release); + return readonly(url); +} +function useClamp(value, min, max) { + if (typeof value === "function" || isReadonly(value)) + return computed(() => clamp(toValue(value), toValue(min), toValue(max))); + const _value = ref(value); + return computed({ + get() { + return _value.value = clamp(_value.value, toValue(min), toValue(max)); + }, + set(value2) { + _value.value = clamp(value2, toValue(min), toValue(max)); + } + }); +} +function useOffsetPagination(options) { + const { + total = Number.POSITIVE_INFINITY, + pageSize = 10, + page = 1, + onPageChange = noop, + onPageSizeChange = noop, + onPageCountChange = noop + } = options; + const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY); + const pageCount = computed(() => Math.max( + 1, + Math.ceil(toValue(total) / toValue(currentPageSize)) + )); + const currentPage = useClamp(page, 1, pageCount); + const isFirstPage = computed(() => currentPage.value === 1); + const isLastPage = computed(() => currentPage.value === pageCount.value); + if (isRef(page)) { + syncRef(page, currentPage, { + direction: isReadonly(page) ? "ltr" : "both" + }); + } + if (isRef(pageSize)) { + syncRef(pageSize, currentPageSize, { + direction: isReadonly(pageSize) ? "ltr" : "both" + }); + } + function prev() { + currentPage.value--; + } + function next() { + currentPage.value++; + } + const returnValue = { + currentPage, + currentPageSize, + pageCount, + isFirstPage, + isLastPage, + prev, + next + }; + watch(currentPage, () => { + onPageChange(reactive(returnValue)); + }); + watch(currentPageSize, () => { + onPageSizeChange(reactive(returnValue)); + }); + watch(pageCount, () => { + onPageCountChange(reactive(returnValue)); + }); + return returnValue; +} +function useOnline(options = {}) { + const { isOnline } = useNetwork(options); + return isOnline; +} +function usePageLeave(options = {}) { + const { window: window2 = defaultWindow } = options; + const isLeft = shallowRef(false); + const handler = (event) => { + if (!window2) + return; + event = event || window2.event; + const from = event.relatedTarget || event.toElement; + isLeft.value = !from; + }; + if (window2) { + const listenerOptions = { passive: true }; + useEventListener(window2, "mouseout", handler, listenerOptions); + useEventListener(window2.document, "mouseleave", handler, listenerOptions); + useEventListener(window2.document, "mouseenter", handler, listenerOptions); + } + return isLeft; +} +function useScreenOrientation(options = {}) { + const { + window: window2 = defaultWindow + } = options; + const isSupported = useSupported(() => window2 && "screen" in window2 && "orientation" in window2.screen); + const screenOrientation = isSupported.value ? window2.screen.orientation : {}; + const orientation = ref(screenOrientation.type); + const angle = shallowRef(screenOrientation.angle || 0); + if (isSupported.value) { + useEventListener(window2, "orientationchange", () => { + orientation.value = screenOrientation.type; + angle.value = screenOrientation.angle; + }, { passive: true }); + } + const lockOrientation = (type) => { + if (isSupported.value && typeof screenOrientation.lock === "function") + return screenOrientation.lock(type); + return Promise.reject(new Error("Not supported")); + }; + const unlockOrientation = () => { + if (isSupported.value && typeof screenOrientation.unlock === "function") + screenOrientation.unlock(); + }; + return { + isSupported, + orientation, + angle, + lockOrientation, + unlockOrientation + }; +} +function useParallax(target, options = {}) { + const { + deviceOrientationTiltAdjust = (i) => i, + deviceOrientationRollAdjust = (i) => i, + mouseTiltAdjust = (i) => i, + mouseRollAdjust = (i) => i, + window: window2 = defaultWindow + } = options; + const orientation = reactive(useDeviceOrientation({ window: window2 })); + const screenOrientation = reactive(useScreenOrientation({ window: window2 })); + const { + elementX: x, + elementY: y, + elementWidth: width, + elementHeight: height + } = useMouseInElement(target, { handleOutside: false, window: window2 }); + const source = computed(() => { + if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) { + return "deviceOrientation"; + } + return "mouse"; + }); + const roll = computed(() => { + if (source.value === "deviceOrientation") { + let value; + switch (screenOrientation.orientation) { + case "landscape-primary": + value = orientation.gamma / 90; + break; + case "landscape-secondary": + value = -orientation.gamma / 90; + break; + case "portrait-primary": + value = -orientation.beta / 90; + break; + case "portrait-secondary": + value = orientation.beta / 90; + break; + default: + value = -orientation.beta / 90; + } + return deviceOrientationRollAdjust(value); + } else { + const value = -(y.value - height.value / 2) / height.value; + return mouseRollAdjust(value); + } + }); + const tilt = computed(() => { + if (source.value === "deviceOrientation") { + let value; + switch (screenOrientation.orientation) { + case "landscape-primary": + value = orientation.beta / 90; + break; + case "landscape-secondary": + value = -orientation.beta / 90; + break; + case "portrait-primary": + value = orientation.gamma / 90; + break; + case "portrait-secondary": + value = -orientation.gamma / 90; + break; + default: + value = orientation.gamma / 90; + } + return deviceOrientationTiltAdjust(value); + } else { + const value = (x.value - width.value / 2) / width.value; + return mouseTiltAdjust(value); + } + }); + return { roll, tilt, source }; +} +function useParentElement(element = useCurrentElement()) { + const parentElement = shallowRef(); + const update = () => { + const el = unrefElement(element); + if (el) + parentElement.value = el.parentElement; + }; + tryOnMounted(update); + watch(() => toValue(element), update); + return parentElement; +} +function usePerformanceObserver(options, callback) { + const { + window: window2 = defaultWindow, + immediate = true, + ...performanceOptions + } = options; + const isSupported = useSupported(() => window2 && "PerformanceObserver" in window2); + let observer; + const stop = () => { + observer == null ? void 0 : observer.disconnect(); + }; + const start = () => { + if (isSupported.value) { + stop(); + observer = new PerformanceObserver(callback); + observer.observe(performanceOptions); + } + }; + tryOnScopeDispose(stop); + if (immediate) + start(); + return { + isSupported, + start, + stop + }; +} +var defaultState = { + x: 0, + y: 0, + pointerId: 0, + pressure: 0, + tiltX: 0, + tiltY: 0, + width: 0, + height: 0, + twist: 0, + pointerType: null +}; +var keys = Object.keys(defaultState); +function usePointer(options = {}) { + const { + target = defaultWindow + } = options; + const isInside = shallowRef(false); + const state = ref(options.initialValue || {}); + Object.assign(state.value, defaultState, state.value); + const handler = (event) => { + isInside.value = true; + if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType)) + return; + state.value = objectPick(event, keys, false); + }; + if (target) { + const listenerOptions = { passive: true }; + useEventListener(target, ["pointerdown", "pointermove", "pointerup"], handler, listenerOptions); + useEventListener(target, "pointerleave", () => isInside.value = false, listenerOptions); + } + return { + ...toRefs2(state), + isInside + }; +} +function usePointerLock(target, options = {}) { + const { document: document2 = defaultDocument } = options; + const isSupported = useSupported(() => document2 && "pointerLockElement" in document2); + const element = shallowRef(); + const triggerElement = shallowRef(); + let targetElement; + if (isSupported.value) { + const listenerOptions = { passive: true }; + useEventListener(document2, "pointerlockchange", () => { + var _a; + const currentElement = (_a = document2.pointerLockElement) != null ? _a : element.value; + if (targetElement && currentElement === targetElement) { + element.value = document2.pointerLockElement; + if (!element.value) + targetElement = triggerElement.value = null; + } + }, listenerOptions); + useEventListener(document2, "pointerlockerror", () => { + var _a; + const currentElement = (_a = document2.pointerLockElement) != null ? _a : element.value; + if (targetElement && currentElement === targetElement) { + const action = document2.pointerLockElement ? "release" : "acquire"; + throw new Error(`Failed to ${action} pointer lock.`); + } + }, listenerOptions); + } + async function lock(e) { + var _a; + if (!isSupported.value) + throw new Error("Pointer Lock API is not supported by your browser."); + triggerElement.value = e instanceof Event ? e.currentTarget : null; + targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e); + if (!targetElement) + throw new Error("Target element undefined."); + targetElement.requestPointerLock(); + return await until(element).toBe(targetElement); + } + async function unlock() { + if (!element.value) + return false; + document2.exitPointerLock(); + await until(element).toBeNull(); + return true; + } + return { + isSupported, + element, + triggerElement, + lock, + unlock + }; +} +function usePointerSwipe(target, options = {}) { + const targetRef = toRef2(target); + const { + threshold = 50, + onSwipe, + onSwipeEnd, + onSwipeStart, + disableTextSelect = false + } = options; + const posStart = reactive({ x: 0, y: 0 }); + const updatePosStart = (x, y) => { + posStart.x = x; + posStart.y = y; + }; + const posEnd = reactive({ x: 0, y: 0 }); + const updatePosEnd = (x, y) => { + posEnd.x = x; + posEnd.y = y; + }; + const distanceX = computed(() => posStart.x - posEnd.x); + const distanceY = computed(() => posStart.y - posEnd.y); + const { max, abs } = Math; + const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold); + const isSwiping = shallowRef(false); + const isPointerDown = shallowRef(false); + const direction = computed(() => { + if (!isThresholdExceeded.value) + return "none"; + if (abs(distanceX.value) > abs(distanceY.value)) { + return distanceX.value > 0 ? "left" : "right"; + } else { + return distanceY.value > 0 ? "up" : "down"; + } + }); + const eventIsAllowed = (e) => { + var _a, _b, _c; + const isReleasingButton = e.buttons === 0; + const isPrimaryButton = e.buttons === 1; + return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true; + }; + const listenerOptions = { passive: true }; + const stops = [ + useEventListener(target, "pointerdown", (e) => { + if (!eventIsAllowed(e)) + return; + isPointerDown.value = true; + const eventTarget = e.target; + eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId); + const { clientX: x, clientY: y } = e; + updatePosStart(x, y); + updatePosEnd(x, y); + onSwipeStart == null ? void 0 : onSwipeStart(e); + }, listenerOptions), + useEventListener(target, "pointermove", (e) => { + if (!eventIsAllowed(e)) + return; + if (!isPointerDown.value) + return; + const { clientX: x, clientY: y } = e; + updatePosEnd(x, y); + if (!isSwiping.value && isThresholdExceeded.value) + isSwiping.value = true; + if (isSwiping.value) + onSwipe == null ? void 0 : onSwipe(e); + }, listenerOptions), + useEventListener(target, "pointerup", (e) => { + if (!eventIsAllowed(e)) + return; + if (isSwiping.value) + onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value); + isPointerDown.value = false; + isSwiping.value = false; + }, listenerOptions) + ]; + tryOnMounted(() => { + var _a, _b, _c, _d, _e, _f, _g, _h; + (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty("touch-action", "none"); + if (disableTextSelect) { + (_d = (_c = targetRef.value) == null ? void 0 : _c.style) == null ? void 0 : _d.setProperty("-webkit-user-select", "none"); + (_f = (_e = targetRef.value) == null ? void 0 : _e.style) == null ? void 0 : _f.setProperty("-ms-user-select", "none"); + (_h = (_g = targetRef.value) == null ? void 0 : _g.style) == null ? void 0 : _h.setProperty("user-select", "none"); + } + }); + const stop = () => stops.forEach((s) => s()); + return { + isSwiping: readonly(isSwiping), + direction: readonly(direction), + posStart: readonly(posStart), + posEnd: readonly(posEnd), + distanceX, + distanceY, + stop + }; +} +function usePreferredColorScheme(options) { + const isLight = useMediaQuery("(prefers-color-scheme: light)", options); + const isDark = useMediaQuery("(prefers-color-scheme: dark)", options); + return computed(() => { + if (isDark.value) + return "dark"; + if (isLight.value) + return "light"; + return "no-preference"; + }); +} +function usePreferredContrast(options) { + const isMore = useMediaQuery("(prefers-contrast: more)", options); + const isLess = useMediaQuery("(prefers-contrast: less)", options); + const isCustom = useMediaQuery("(prefers-contrast: custom)", options); + return computed(() => { + if (isMore.value) + return "more"; + if (isLess.value) + return "less"; + if (isCustom.value) + return "custom"; + return "no-preference"; + }); +} +function usePreferredLanguages(options = {}) { + const { window: window2 = defaultWindow } = options; + if (!window2) + return ref(["en"]); + const navigator2 = window2.navigator; + const value = ref(navigator2.languages); + useEventListener(window2, "languagechange", () => { + value.value = navigator2.languages; + }, { passive: true }); + return value; +} +function usePreferredReducedMotion(options) { + const isReduced = useMediaQuery("(prefers-reduced-motion: reduce)", options); + return computed(() => { + if (isReduced.value) + return "reduce"; + return "no-preference"; + }); +} +function usePreferredReducedTransparency(options) { + const isReduced = useMediaQuery("(prefers-reduced-transparency: reduce)", options); + return computed(() => { + if (isReduced.value) + return "reduce"; + return "no-preference"; + }); +} +function usePrevious(value, initialValue) { + const previous = shallowRef(initialValue); + watch( + toRef2(value), + (_, oldValue) => { + previous.value = oldValue; + }, + { flush: "sync" } + ); + return readonly(previous); +} +var topVarName = "--vueuse-safe-area-top"; +var rightVarName = "--vueuse-safe-area-right"; +var bottomVarName = "--vueuse-safe-area-bottom"; +var leftVarName = "--vueuse-safe-area-left"; +function useScreenSafeArea() { + const top = shallowRef(""); + const right = shallowRef(""); + const bottom = shallowRef(""); + const left = shallowRef(""); + if (isClient) { + const topCssVar = useCssVar(topVarName); + const rightCssVar = useCssVar(rightVarName); + const bottomCssVar = useCssVar(bottomVarName); + const leftCssVar = useCssVar(leftVarName); + topCssVar.value = "env(safe-area-inset-top, 0px)"; + rightCssVar.value = "env(safe-area-inset-right, 0px)"; + bottomCssVar.value = "env(safe-area-inset-bottom, 0px)"; + leftCssVar.value = "env(safe-area-inset-left, 0px)"; + update(); + useEventListener("resize", useDebounceFn(update), { passive: true }); + } + function update() { + top.value = getValue(topVarName); + right.value = getValue(rightVarName); + bottom.value = getValue(bottomVarName); + left.value = getValue(leftVarName); + } + return { + top, + right, + bottom, + left, + update + }; +} +function getValue(position) { + return getComputedStyle(document.documentElement).getPropertyValue(position); +} +function useScriptTag(src, onLoaded = noop, options = {}) { + const { + immediate = true, + manual = false, + type = "text/javascript", + async = true, + crossOrigin, + referrerPolicy, + noModule, + defer, + document: document2 = defaultDocument, + attrs = {} + } = options; + const scriptTag = shallowRef(null); + let _promise = null; + const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => { + const resolveWithElement = (el2) => { + scriptTag.value = el2; + resolve(el2); + return el2; + }; + if (!document2) { + resolve(false); + return; + } + let shouldAppend = false; + let el = document2.querySelector(`script[src="${toValue(src)}"]`); + if (!el) { + el = document2.createElement("script"); + el.type = type; + el.async = async; + el.src = toValue(src); + if (defer) + el.defer = defer; + if (crossOrigin) + el.crossOrigin = crossOrigin; + if (noModule) + el.noModule = noModule; + if (referrerPolicy) + el.referrerPolicy = referrerPolicy; + Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value)); + shouldAppend = true; + } else if (el.hasAttribute("data-loaded")) { + resolveWithElement(el); + } + const listenerOptions = { + passive: true + }; + useEventListener(el, "error", (event) => reject(event), listenerOptions); + useEventListener(el, "abort", (event) => reject(event), listenerOptions); + useEventListener(el, "load", () => { + el.setAttribute("data-loaded", "true"); + onLoaded(el); + resolveWithElement(el); + }, listenerOptions); + if (shouldAppend) + el = document2.head.appendChild(el); + if (!waitForScriptLoad) + resolveWithElement(el); + }); + const load = (waitForScriptLoad = true) => { + if (!_promise) + _promise = loadScript(waitForScriptLoad); + return _promise; + }; + const unload = () => { + if (!document2) + return; + _promise = null; + if (scriptTag.value) + scriptTag.value = null; + const el = document2.querySelector(`script[src="${toValue(src)}"]`); + if (el) + document2.head.removeChild(el); + }; + if (immediate && !manual) + tryOnMounted(load); + if (!manual) + tryOnUnmounted(unload); + return { scriptTag, load, unload }; +} +function checkOverflowScroll(ele) { + const style = window.getComputedStyle(ele); + if (style.overflowX === "scroll" || style.overflowY === "scroll" || style.overflowX === "auto" && ele.clientWidth < ele.scrollWidth || style.overflowY === "auto" && ele.clientHeight < ele.scrollHeight) { + return true; + } else { + const parent = ele.parentNode; + if (!parent || parent.tagName === "BODY") + return false; + return checkOverflowScroll(parent); + } +} +function preventDefault(rawEvent) { + const e = rawEvent || window.event; + const _target = e.target; + if (checkOverflowScroll(_target)) + return false; + if (e.touches.length > 1) + return true; + if (e.preventDefault) + e.preventDefault(); + return false; +} +var elInitialOverflow = /* @__PURE__ */ new WeakMap(); +function useScrollLock(element, initialState = false) { + const isLocked = shallowRef(initialState); + let stopTouchMoveListener = null; + let initialOverflow = ""; + watch(toRef2(element), (el) => { + const target = resolveElement(toValue(el)); + if (target) { + const ele = target; + if (!elInitialOverflow.get(ele)) + elInitialOverflow.set(ele, ele.style.overflow); + if (ele.style.overflow !== "hidden") + initialOverflow = ele.style.overflow; + if (ele.style.overflow === "hidden") + return isLocked.value = true; + if (isLocked.value) + return ele.style.overflow = "hidden"; + } + }, { + immediate: true + }); + const lock = () => { + const el = resolveElement(toValue(element)); + if (!el || isLocked.value) + return; + if (isIOS) { + stopTouchMoveListener = useEventListener( + el, + "touchmove", + (e) => { + preventDefault(e); + }, + { passive: false } + ); + } + el.style.overflow = "hidden"; + isLocked.value = true; + }; + const unlock = () => { + const el = resolveElement(toValue(element)); + if (!el || !isLocked.value) + return; + if (isIOS) + stopTouchMoveListener == null ? void 0 : stopTouchMoveListener(); + el.style.overflow = initialOverflow; + elInitialOverflow.delete(el); + isLocked.value = false; + }; + tryOnScopeDispose(unlock); + return computed({ + get() { + return isLocked.value; + }, + set(v) { + if (v) + lock(); + else unlock(); + } + }); +} +function useSessionStorage(key, initialValue, options = {}) { + const { window: window2 = defaultWindow } = options; + return useStorage(key, initialValue, window2 == null ? void 0 : window2.sessionStorage, options); +} +function useShare(shareOptions = {}, options = {}) { + const { navigator: navigator2 = defaultNavigator } = options; + const _navigator = navigator2; + const isSupported = useSupported(() => _navigator && "canShare" in _navigator); + const share = async (overrideOptions = {}) => { + if (isSupported.value) { + const data = { + ...toValue(shareOptions), + ...toValue(overrideOptions) + }; + let granted = true; + if (data.files && _navigator.canShare) + granted = _navigator.canShare({ files: data.files }); + if (granted) + return _navigator.share(data); + } + }; + return { + isSupported, + share + }; +} +var defaultSortFn = (source, compareFn) => source.sort(compareFn); +var defaultCompare = (a, b) => a - b; +function useSorted(...args) { + var _a, _b, _c, _d; + const [source] = args; + let compareFn = defaultCompare; + let options = {}; + if (args.length === 2) { + if (typeof args[1] === "object") { + options = args[1]; + compareFn = (_a = options.compareFn) != null ? _a : defaultCompare; + } else { + compareFn = (_b = args[1]) != null ? _b : defaultCompare; + } + } else if (args.length > 2) { + compareFn = (_c = args[1]) != null ? _c : defaultCompare; + options = (_d = args[2]) != null ? _d : {}; + } + const { + dirty = false, + sortFn = defaultSortFn + } = options; + if (!dirty) + return computed(() => sortFn([...toValue(source)], compareFn)); + watchEffect(() => { + const result = sortFn(toValue(source), compareFn); + if (isRef(source)) + source.value = result; + else + source.splice(0, source.length, ...result); + }); + return source; +} +function useSpeechRecognition(options = {}) { + const { + interimResults = true, + continuous = true, + maxAlternatives = 1, + window: window2 = defaultWindow + } = options; + const lang = toRef2(options.lang || "en-US"); + const isListening = shallowRef(false); + const isFinal = shallowRef(false); + const result = shallowRef(""); + const error = shallowRef(void 0); + let recognition; + const start = () => { + isListening.value = true; + }; + const stop = () => { + isListening.value = false; + }; + const toggle = (value = !isListening.value) => { + if (value) { + start(); + } else { + stop(); + } + }; + const SpeechRecognition = window2 && (window2.SpeechRecognition || window2.webkitSpeechRecognition); + const isSupported = useSupported(() => SpeechRecognition); + if (isSupported.value) { + recognition = new SpeechRecognition(); + recognition.continuous = continuous; + recognition.interimResults = interimResults; + recognition.lang = toValue(lang); + recognition.maxAlternatives = maxAlternatives; + recognition.onstart = () => { + isListening.value = true; + isFinal.value = false; + }; + watch(lang, (lang2) => { + if (recognition && !isListening.value) + recognition.lang = lang2; + }); + recognition.onresult = (event) => { + const currentResult = event.results[event.resultIndex]; + const { transcript } = currentResult[0]; + isFinal.value = currentResult.isFinal; + result.value = transcript; + error.value = void 0; + }; + recognition.onerror = (event) => { + error.value = event; + }; + recognition.onend = () => { + isListening.value = false; + recognition.lang = toValue(lang); + }; + watch(isListening, (newValue, oldValue) => { + if (newValue === oldValue) + return; + if (newValue) + recognition.start(); + else + recognition.stop(); + }); + } + tryOnScopeDispose(() => { + stop(); + }); + return { + isSupported, + isListening, + isFinal, + recognition, + result, + error, + toggle, + start, + stop + }; +} +function useSpeechSynthesis(text, options = {}) { + const { + pitch = 1, + rate = 1, + volume = 1, + window: window2 = defaultWindow + } = options; + const synth = window2 && window2.speechSynthesis; + const isSupported = useSupported(() => synth); + const isPlaying = shallowRef(false); + const status = shallowRef("init"); + const spokenText = toRef2(text || ""); + const lang = toRef2(options.lang || "en-US"); + const error = shallowRef(void 0); + const toggle = (value = !isPlaying.value) => { + isPlaying.value = value; + }; + const bindEventsForUtterance = (utterance2) => { + utterance2.lang = toValue(lang); + utterance2.voice = toValue(options.voice) || null; + utterance2.pitch = toValue(pitch); + utterance2.rate = toValue(rate); + utterance2.volume = volume; + utterance2.onstart = () => { + isPlaying.value = true; + status.value = "play"; + }; + utterance2.onpause = () => { + isPlaying.value = false; + status.value = "pause"; + }; + utterance2.onresume = () => { + isPlaying.value = true; + status.value = "play"; + }; + utterance2.onend = () => { + isPlaying.value = false; + status.value = "end"; + }; + utterance2.onerror = (event) => { + error.value = event; + }; + }; + const utterance = computed(() => { + isPlaying.value = false; + status.value = "init"; + const newUtterance = new SpeechSynthesisUtterance(spokenText.value); + bindEventsForUtterance(newUtterance); + return newUtterance; + }); + const speak = () => { + synth.cancel(); + if (utterance) + synth.speak(utterance.value); + }; + const stop = () => { + synth.cancel(); + isPlaying.value = false; + }; + if (isSupported.value) { + bindEventsForUtterance(utterance.value); + watch(lang, (lang2) => { + if (utterance.value && !isPlaying.value) + utterance.value.lang = lang2; + }); + if (options.voice) { + watch(options.voice, () => { + synth.cancel(); + }); + } + watch(isPlaying, () => { + if (isPlaying.value) + synth.resume(); + else + synth.pause(); + }); + } + tryOnScopeDispose(() => { + isPlaying.value = false; + }); + return { + isSupported, + isPlaying, + status, + utterance, + error, + stop, + toggle, + speak + }; +} +function useStepper(steps, initialStep) { + const stepsRef = ref(steps); + const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value)); + const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0])); + const current = computed(() => at(index.value)); + const isFirst = computed(() => index.value === 0); + const isLast = computed(() => index.value === stepNames.value.length - 1); + const next = computed(() => stepNames.value[index.value + 1]); + const previous = computed(() => stepNames.value[index.value - 1]); + function at(index2) { + if (Array.isArray(stepsRef.value)) + return stepsRef.value[index2]; + return stepsRef.value[stepNames.value[index2]]; + } + function get2(step) { + if (!stepNames.value.includes(step)) + return; + return at(stepNames.value.indexOf(step)); + } + function goTo(step) { + if (stepNames.value.includes(step)) + index.value = stepNames.value.indexOf(step); + } + function goToNext() { + if (isLast.value) + return; + index.value++; + } + function goToPrevious() { + if (isFirst.value) + return; + index.value--; + } + function goBackTo(step) { + if (isAfter(step)) + goTo(step); + } + function isNext(step) { + return stepNames.value.indexOf(step) === index.value + 1; + } + function isPrevious(step) { + return stepNames.value.indexOf(step) === index.value - 1; + } + function isCurrent(step) { + return stepNames.value.indexOf(step) === index.value; + } + function isBefore(step) { + return index.value < stepNames.value.indexOf(step); + } + function isAfter(step) { + return index.value > stepNames.value.indexOf(step); + } + return { + steps: stepsRef, + stepNames, + index, + current, + next, + previous, + isFirst, + isLast, + at, + get: get2, + goTo, + goToNext, + goToPrevious, + goBackTo, + isNext, + isPrevious, + isCurrent, + isBefore, + isAfter + }; +} +function useStorageAsync(key, initialValue, storage, options = {}) { + var _a; + const { + flush = "pre", + deep = true, + listenToStorageChanges = true, + writeDefaults = true, + mergeDefaults = false, + shallow, + window: window2 = defaultWindow, + eventFilter, + onError = (e) => { + console.error(e); + } + } = options; + const rawInit = toValue(initialValue); + const type = guessSerializerType(rawInit); + const data = (shallow ? shallowRef : ref)(toValue(initialValue)); + const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type]; + if (!storage) { + try { + storage = getSSRHandler("getDefaultStorageAsync", () => { + var _a2; + return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage; + })(); + } catch (e) { + onError(e); + } + } + async function read(event) { + if (!storage || event && event.key !== key) + return; + try { + const rawValue = event ? event.newValue : await storage.getItem(key); + if (rawValue == null) { + data.value = rawInit; + if (writeDefaults && rawInit !== null) + await storage.setItem(key, await serializer.write(rawInit)); + } else if (mergeDefaults) { + const value = await serializer.read(rawValue); + if (typeof mergeDefaults === "function") + data.value = mergeDefaults(value, rawInit); + else if (type === "object" && !Array.isArray(value)) + data.value = { ...rawInit, ...value }; + else data.value = value; + } else { + data.value = await serializer.read(rawValue); + } + } catch (e) { + onError(e); + } + } + read(); + if (window2 && listenToStorageChanges) + useEventListener(window2, "storage", (e) => Promise.resolve().then(() => read(e)), { passive: true }); + if (storage) { + watchWithFilter( + data, + async () => { + try { + if (data.value == null) + await storage.removeItem(key); + else + await storage.setItem(key, await serializer.write(data.value)); + } catch (e) { + onError(e); + } + }, + { + flush, + deep, + eventFilter + } + ); + } + return data; +} +var _id = 0; +function useStyleTag(css, options = {}) { + const isLoaded = shallowRef(false); + const { + document: document2 = defaultDocument, + immediate = true, + manual = false, + id = `vueuse_styletag_${++_id}` + } = options; + const cssRef = shallowRef(css); + let stop = () => { + }; + const load = () => { + if (!document2) + return; + const el = document2.getElementById(id) || document2.createElement("style"); + if (!el.isConnected) { + el.id = id; + if (options.media) + el.media = options.media; + document2.head.appendChild(el); + } + if (isLoaded.value) + return; + stop = watch( + cssRef, + (value) => { + el.textContent = value; + }, + { immediate: true } + ); + isLoaded.value = true; + }; + const unload = () => { + if (!document2 || !isLoaded.value) + return; + stop(); + document2.head.removeChild(document2.getElementById(id)); + isLoaded.value = false; + }; + if (immediate && !manual) + tryOnMounted(load); + if (!manual) + tryOnScopeDispose(unload); + return { + id, + css: cssRef, + unload, + load, + isLoaded: readonly(isLoaded) + }; +} +function useSwipe(target, options = {}) { + const { + threshold = 50, + onSwipe, + onSwipeEnd, + onSwipeStart, + passive = true + } = options; + const coordsStart = reactive({ x: 0, y: 0 }); + const coordsEnd = reactive({ x: 0, y: 0 }); + const diffX = computed(() => coordsStart.x - coordsEnd.x); + const diffY = computed(() => coordsStart.y - coordsEnd.y); + const { max, abs } = Math; + const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold); + const isSwiping = shallowRef(false); + const direction = computed(() => { + if (!isThresholdExceeded.value) + return "none"; + if (abs(diffX.value) > abs(diffY.value)) { + return diffX.value > 0 ? "left" : "right"; + } else { + return diffY.value > 0 ? "up" : "down"; + } + }); + const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY]; + const updateCoordsStart = (x, y) => { + coordsStart.x = x; + coordsStart.y = y; + }; + const updateCoordsEnd = (x, y) => { + coordsEnd.x = x; + coordsEnd.y = y; + }; + const listenerOptions = { passive, capture: !passive }; + const onTouchEnd = (e) => { + if (isSwiping.value) + onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value); + isSwiping.value = false; + }; + const stops = [ + useEventListener(target, "touchstart", (e) => { + if (e.touches.length !== 1) + return; + const [x, y] = getTouchEventCoords(e); + updateCoordsStart(x, y); + updateCoordsEnd(x, y); + onSwipeStart == null ? void 0 : onSwipeStart(e); + }, listenerOptions), + useEventListener(target, "touchmove", (e) => { + if (e.touches.length !== 1) + return; + const [x, y] = getTouchEventCoords(e); + updateCoordsEnd(x, y); + if (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value)) + e.preventDefault(); + if (!isSwiping.value && isThresholdExceeded.value) + isSwiping.value = true; + if (isSwiping.value) + onSwipe == null ? void 0 : onSwipe(e); + }, listenerOptions), + useEventListener(target, ["touchend", "touchcancel"], onTouchEnd, listenerOptions) + ]; + const stop = () => stops.forEach((s) => s()); + return { + isSwiping, + direction, + coordsStart, + coordsEnd, + lengthX: diffX, + lengthY: diffY, + stop, + // TODO: Remove in the next major version + isPassiveEventSupported: true + }; +} +function useTemplateRefsList() { + const refs = ref([]); + refs.value.set = (el) => { + if (el) + refs.value.push(el); + }; + onBeforeUpdate(() => { + refs.value.length = 0; + }); + return refs; +} +function useTextDirection(options = {}) { + const { + document: document2 = defaultDocument, + selector = "html", + observe = false, + initialValue = "ltr" + } = options; + function getValue2() { + var _a, _b; + return (_b = (_a = document2 == null ? void 0 : document2.querySelector(selector)) == null ? void 0 : _a.getAttribute("dir")) != null ? _b : initialValue; + } + const dir = ref(getValue2()); + tryOnMounted(() => dir.value = getValue2()); + if (observe && document2) { + useMutationObserver( + document2.querySelector(selector), + () => dir.value = getValue2(), + { attributes: true } + ); + } + return computed({ + get() { + return dir.value; + }, + set(v) { + var _a, _b; + dir.value = v; + if (!document2) + return; + if (dir.value) + (_a = document2.querySelector(selector)) == null ? void 0 : _a.setAttribute("dir", dir.value); + else + (_b = document2.querySelector(selector)) == null ? void 0 : _b.removeAttribute("dir"); + } + }); +} +function getRangesFromSelection(selection) { + var _a; + const rangeCount = (_a = selection.rangeCount) != null ? _a : 0; + return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i)); +} +function useTextSelection(options = {}) { + const { + window: window2 = defaultWindow + } = options; + const selection = ref(null); + const text = computed(() => { + var _a, _b; + return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : ""; + }); + const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []); + const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect())); + function onSelectionChange() { + selection.value = null; + if (window2) + selection.value = window2.getSelection(); + } + if (window2) + useEventListener(window2.document, "selectionchange", onSelectionChange, { passive: true }); + return { + text, + rects, + ranges, + selection + }; +} +function tryRequestAnimationFrame(window2 = defaultWindow, fn) { + if (window2 && typeof window2.requestAnimationFrame === "function") { + window2.requestAnimationFrame(fn); + } else { + fn(); + } +} +function useTextareaAutosize(options = {}) { + var _a, _b; + const { window: window2 = defaultWindow } = options; + const textarea = toRef2(options == null ? void 0 : options.element); + const input = toRef2((_a = options == null ? void 0 : options.input) != null ? _a : ""); + const styleProp = (_b = options == null ? void 0 : options.styleProp) != null ? _b : "height"; + const textareaScrollHeight = shallowRef(1); + const textareaOldWidth = shallowRef(0); + function triggerResize() { + var _a2; + if (!textarea.value) + return; + let height = ""; + textarea.value.style[styleProp] = "1px"; + textareaScrollHeight.value = (_a2 = textarea.value) == null ? void 0 : _a2.scrollHeight; + const _styleTarget = toValue(options == null ? void 0 : options.styleTarget); + if (_styleTarget) + _styleTarget.style[styleProp] = `${textareaScrollHeight.value}px`; + else + height = `${textareaScrollHeight.value}px`; + textarea.value.style[styleProp] = height; + } + watch([input, textarea], () => nextTick(triggerResize), { immediate: true }); + watch(textareaScrollHeight, () => { + var _a2; + return (_a2 = options == null ? void 0 : options.onResize) == null ? void 0 : _a2.call(options); + }); + useResizeObserver(textarea, ([{ contentRect }]) => { + if (textareaOldWidth.value === contentRect.width) + return; + tryRequestAnimationFrame(window2, () => { + textareaOldWidth.value = contentRect.width; + triggerResize(); + }); + }); + if (options == null ? void 0 : options.watch) + watch(options.watch, triggerResize, { immediate: true, deep: true }); + return { + textarea, + input, + triggerResize + }; +} +function useThrottledRefHistory(source, options = {}) { + const { throttle = 200, trailing = true } = options; + const filter = throttleFilter(throttle, trailing); + const history = useRefHistory(source, { ...options, eventFilter: filter }); + return { + ...history + }; +} +var DEFAULT_UNITS = [ + { max: 6e4, value: 1e3, name: "second" }, + { max: 276e4, value: 6e4, name: "minute" }, + { max: 72e6, value: 36e5, name: "hour" }, + { max: 5184e5, value: 864e5, name: "day" }, + { max: 24192e5, value: 6048e5, name: "week" }, + { max: 28512e6, value: 2592e6, name: "month" }, + { max: Number.POSITIVE_INFINITY, value: 31536e6, name: "year" } +]; +var DEFAULT_MESSAGES = { + justNow: "just now", + past: (n) => n.match(/\d/) ? `${n} ago` : n, + future: (n) => n.match(/\d/) ? `in ${n}` : n, + month: (n, past) => n === 1 ? past ? "last month" : "next month" : `${n} month${n > 1 ? "s" : ""}`, + year: (n, past) => n === 1 ? past ? "last year" : "next year" : `${n} year${n > 1 ? "s" : ""}`, + day: (n, past) => n === 1 ? past ? "yesterday" : "tomorrow" : `${n} day${n > 1 ? "s" : ""}`, + week: (n, past) => n === 1 ? past ? "last week" : "next week" : `${n} week${n > 1 ? "s" : ""}`, + hour: (n) => `${n} hour${n > 1 ? "s" : ""}`, + minute: (n) => `${n} minute${n > 1 ? "s" : ""}`, + second: (n) => `${n} second${n > 1 ? "s" : ""}`, + invalid: "" +}; +function DEFAULT_FORMATTER(date) { + return date.toISOString().slice(0, 10); +} +function useTimeAgo(time, options = {}) { + const { + controls: exposeControls = false, + updateInterval = 3e4 + } = options; + const { now: now2, ...controls } = useNow({ interval: updateInterval, controls: true }); + const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now2))); + if (exposeControls) { + return { + timeAgo, + ...controls + }; + } else { + return timeAgo; + } +} +function formatTimeAgo(from, options = {}, now2 = Date.now()) { + var _a; + const { + max, + messages = DEFAULT_MESSAGES, + fullDateFormatter = DEFAULT_FORMATTER, + units = DEFAULT_UNITS, + showSecond = false, + rounding = "round" + } = options; + const roundFn = typeof rounding === "number" ? (n) => +n.toFixed(rounding) : Math[rounding]; + const diff = +now2 - +from; + const absDiff = Math.abs(diff); + function getValue2(diff2, unit) { + return roundFn(Math.abs(diff2) / unit.value); + } + function format(diff2, unit) { + const val = getValue2(diff2, unit); + const past = diff2 > 0; + const str = applyFormat(unit.name, val, past); + return applyFormat(past ? "past" : "future", str, past); + } + function applyFormat(name, val, isPast) { + const formatter = messages[name]; + if (typeof formatter === "function") + return formatter(val, isPast); + return formatter.replace("{0}", val.toString()); + } + if (absDiff < 6e4 && !showSecond) + return messages.justNow; + if (typeof max === "number" && absDiff > max) + return fullDateFormatter(new Date(from)); + if (typeof max === "string") { + const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max; + if (unitMax && absDiff > unitMax) + return fullDateFormatter(new Date(from)); + } + for (const [idx, unit] of units.entries()) { + const val = getValue2(diff, unit); + if (val <= 0 && units[idx - 1]) + return format(diff, units[idx - 1]); + if (absDiff < unit.max) + return format(diff, unit); + } + return messages.invalid; +} +function useTimeoutPoll(fn, interval, options = {}) { + const { + immediate = true, + immediateCallback = false + } = options; + const { start } = useTimeoutFn(loop, interval, { immediate }); + const isActive = shallowRef(false); + async function loop() { + if (!isActive.value) + return; + await fn(); + start(); + } + function resume() { + if (!isActive.value) { + isActive.value = true; + if (immediateCallback) + fn(); + start(); + } + } + function pause() { + isActive.value = false; + } + if (immediate && isClient) + resume(); + tryOnScopeDispose(pause); + return { + isActive, + pause, + resume + }; +} +function useTimestamp(options = {}) { + const { + controls: exposeControls = false, + offset = 0, + immediate = true, + interval = "requestAnimationFrame", + callback + } = options; + const ts = shallowRef(timestamp() + offset); + const update = () => ts.value = timestamp() + offset; + const cb = callback ? () => { + update(); + callback(ts.value); + } : update; + const controls = interval === "requestAnimationFrame" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate }); + if (exposeControls) { + return { + timestamp: ts, + ...controls + }; + } else { + return ts; + } +} +function useTitle(newTitle = null, options = {}) { + var _a, _b, _c; + const { + document: document2 = defaultDocument, + restoreOnUnmount = (t) => t + } = options; + const originalTitle = (_a = document2 == null ? void 0 : document2.title) != null ? _a : ""; + const title = toRef2((_b = newTitle != null ? newTitle : document2 == null ? void 0 : document2.title) != null ? _b : null); + const isReadonly2 = !!(newTitle && typeof newTitle === "function"); + function format(t) { + if (!("titleTemplate" in options)) + return t; + const template = options.titleTemplate || "%s"; + return typeof template === "function" ? template(t) : toValue(template).replace(/%s/g, t); + } + watch( + title, + (newValue, oldValue) => { + if (newValue !== oldValue && document2) + document2.title = format(newValue != null ? newValue : ""); + }, + { immediate: true } + ); + if (options.observe && !options.titleTemplate && document2 && !isReadonly2) { + useMutationObserver( + (_c = document2.head) == null ? void 0 : _c.querySelector("title"), + () => { + if (document2 && document2.title !== title.value) + title.value = format(document2.title); + }, + { childList: true } + ); + } + tryOnScopeDispose(() => { + if (restoreOnUnmount) { + const restoredTitle = restoreOnUnmount(originalTitle, title.value || ""); + if (restoredTitle != null && document2) + document2.title = restoredTitle; + } + }); + return title; +} +var _TransitionPresets = { + easeInSine: [0.12, 0, 0.39, 0], + easeOutSine: [0.61, 1, 0.88, 1], + easeInOutSine: [0.37, 0, 0.63, 1], + easeInQuad: [0.11, 0, 0.5, 0], + easeOutQuad: [0.5, 1, 0.89, 1], + easeInOutQuad: [0.45, 0, 0.55, 1], + easeInCubic: [0.32, 0, 0.67, 0], + easeOutCubic: [0.33, 1, 0.68, 1], + easeInOutCubic: [0.65, 0, 0.35, 1], + easeInQuart: [0.5, 0, 0.75, 0], + easeOutQuart: [0.25, 1, 0.5, 1], + easeInOutQuart: [0.76, 0, 0.24, 1], + easeInQuint: [0.64, 0, 0.78, 0], + easeOutQuint: [0.22, 1, 0.36, 1], + easeInOutQuint: [0.83, 0, 0.17, 1], + easeInExpo: [0.7, 0, 0.84, 0], + easeOutExpo: [0.16, 1, 0.3, 1], + easeInOutExpo: [0.87, 0, 0.13, 1], + easeInCirc: [0.55, 0, 1, 0.45], + easeOutCirc: [0, 0.55, 0.45, 1], + easeInOutCirc: [0.85, 0, 0.15, 1], + easeInBack: [0.36, 0, 0.66, -0.56], + easeOutBack: [0.34, 1.56, 0.64, 1], + easeInOutBack: [0.68, -0.6, 0.32, 1.6] +}; +var TransitionPresets = Object.assign({}, { linear: identity }, _TransitionPresets); +function createEasingFunction([p0, p1, p2, p3]) { + const a = (a1, a2) => 1 - 3 * a2 + 3 * a1; + const b = (a1, a2) => 3 * a2 - 6 * a1; + const c = (a1) => 3 * a1; + const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t; + const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1); + const getTforX = (x) => { + let aGuessT = x; + for (let i = 0; i < 4; ++i) { + const currentSlope = getSlope(aGuessT, p0, p2); + if (currentSlope === 0) + return aGuessT; + const currentX = calcBezier(aGuessT, p0, p2) - x; + aGuessT -= currentX / currentSlope; + } + return aGuessT; + }; + return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3); +} +function lerp(a, b, alpha) { + return a + alpha * (b - a); +} +function toVec(t) { + return (typeof t === "number" ? [t] : t) || []; +} +function executeTransition(source, from, to, options = {}) { + var _a, _b; + const fromVal = toValue(from); + const toVal = toValue(to); + const v1 = toVec(fromVal); + const v2 = toVec(toVal); + const duration = (_a = toValue(options.duration)) != null ? _a : 1e3; + const startedAt = Date.now(); + const endAt = Date.now() + duration; + const trans = typeof options.transition === "function" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity; + const ease = typeof trans === "function" ? trans : createEasingFunction(trans); + return new Promise((resolve) => { + source.value = fromVal; + const tick = () => { + var _a2; + if ((_a2 = options.abort) == null ? void 0 : _a2.call(options)) { + resolve(); + return; + } + const now2 = Date.now(); + const alpha = ease((now2 - startedAt) / duration); + const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha)); + if (Array.isArray(source.value)) + source.value = arr.map((n, i) => { + var _a3, _b2; + return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha); + }); + else if (typeof source.value === "number") + source.value = arr[0]; + if (now2 < endAt) { + requestAnimationFrame(tick); + } else { + source.value = toVal; + resolve(); + } + }; + tick(); + }); +} +function useTransition(source, options = {}) { + let currentId = 0; + const sourceVal = () => { + const v = toValue(source); + return typeof v === "number" ? v : v.map(toValue); + }; + const outputRef = ref(sourceVal()); + watch(sourceVal, async (to) => { + var _a, _b; + if (toValue(options.disabled)) + return; + const id = ++currentId; + if (options.delay) + await promiseTimeout(toValue(options.delay)); + if (id !== currentId) + return; + const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to); + (_a = options.onStarted) == null ? void 0 : _a.call(options); + await executeTransition(outputRef, outputRef.value, toVal, { + ...options, + abort: () => { + var _a2; + return id !== currentId || ((_a2 = options.abort) == null ? void 0 : _a2.call(options)); + } + }); + (_b = options.onFinished) == null ? void 0 : _b.call(options); + }, { deep: true }); + watch(() => toValue(options.disabled), (disabled) => { + if (disabled) { + currentId++; + outputRef.value = sourceVal(); + } + }); + tryOnScopeDispose(() => { + currentId++; + }); + return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value); +} +function useUrlSearchParams(mode = "history", options = {}) { + const { + initialValue = {}, + removeNullishValues = true, + removeFalsyValues = false, + write: enableWrite = true, + writeMode = "replace", + window: window2 = defaultWindow + } = options; + if (!window2) + return reactive(initialValue); + const state = reactive({}); + function getRawParams() { + if (mode === "history") { + return window2.location.search || ""; + } else if (mode === "hash") { + const hash = window2.location.hash || ""; + const index = hash.indexOf("?"); + return index > 0 ? hash.slice(index) : ""; + } else { + return (window2.location.hash || "").replace(/^#/, ""); + } + } + function constructQuery(params) { + const stringified = params.toString(); + if (mode === "history") + return `${stringified ? `?${stringified}` : ""}${window2.location.hash || ""}`; + if (mode === "hash-params") + return `${window2.location.search || ""}${stringified ? `#${stringified}` : ""}`; + const hash = window2.location.hash || "#"; + const index = hash.indexOf("?"); + if (index > 0) + return `${window2.location.search || ""}${hash.slice(0, index)}${stringified ? `?${stringified}` : ""}`; + return `${window2.location.search || ""}${hash}${stringified ? `?${stringified}` : ""}`; + } + function read() { + return new URLSearchParams(getRawParams()); + } + function updateState(params) { + const unusedKeys = new Set(Object.keys(state)); + for (const key of params.keys()) { + const paramsForKey = params.getAll(key); + state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || ""; + unusedKeys.delete(key); + } + Array.from(unusedKeys).forEach((key) => delete state[key]); + } + const { pause, resume } = watchPausable( + state, + () => { + const params = new URLSearchParams(""); + Object.keys(state).forEach((key) => { + const mapEntry = state[key]; + if (Array.isArray(mapEntry)) + mapEntry.forEach((value) => params.append(key, value)); + else if (removeNullishValues && mapEntry == null) + params.delete(key); + else if (removeFalsyValues && !mapEntry) + params.delete(key); + else + params.set(key, mapEntry); + }); + write(params, false); + }, + { deep: true } + ); + function write(params, shouldUpdate) { + pause(); + if (shouldUpdate) + updateState(params); + if (writeMode === "replace") { + window2.history.replaceState( + window2.history.state, + window2.document.title, + window2.location.pathname + constructQuery(params) + ); + } else { + window2.history.pushState( + window2.history.state, + window2.document.title, + window2.location.pathname + constructQuery(params) + ); + } + resume(); + } + function onChanged() { + if (!enableWrite) + return; + write(read(), true); + } + const listenerOptions = { passive: true }; + useEventListener(window2, "popstate", onChanged, listenerOptions); + if (mode !== "history") + useEventListener(window2, "hashchange", onChanged, listenerOptions); + const initial = read(); + if (initial.keys().next().value) + updateState(initial); + else + Object.assign(state, initialValue); + return state; +} +function useUserMedia(options = {}) { + var _a, _b; + const enabled = shallowRef((_a = options.enabled) != null ? _a : false); + const autoSwitch = shallowRef((_b = options.autoSwitch) != null ? _b : true); + const constraints = ref(options.constraints); + const { navigator: navigator2 = defaultNavigator } = options; + const isSupported = useSupported(() => { + var _a2; + return (_a2 = navigator2 == null ? void 0 : navigator2.mediaDevices) == null ? void 0 : _a2.getUserMedia; + }); + const stream = shallowRef(); + function getDeviceOptions(type) { + switch (type) { + case "video": { + if (constraints.value) + return constraints.value.video || false; + break; + } + case "audio": { + if (constraints.value) + return constraints.value.audio || false; + break; + } + } + } + async function _start() { + if (!isSupported.value || stream.value) + return; + stream.value = await navigator2.mediaDevices.getUserMedia({ + video: getDeviceOptions("video"), + audio: getDeviceOptions("audio") + }); + return stream.value; + } + function _stop() { + var _a2; + (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop()); + stream.value = void 0; + } + function stop() { + _stop(); + enabled.value = false; + } + async function start() { + await _start(); + if (stream.value) + enabled.value = true; + return stream.value; + } + async function restart() { + _stop(); + return await start(); + } + watch( + enabled, + (v) => { + if (v) + _start(); + else _stop(); + }, + { immediate: true } + ); + watch( + constraints, + () => { + if (autoSwitch.value && stream.value) + restart(); + }, + { immediate: true } + ); + tryOnScopeDispose(() => { + stop(); + }); + return { + isSupported, + stream, + start, + stop, + restart, + constraints, + enabled, + autoSwitch + }; +} +function useVModel(props, key, emit, options = {}) { + var _a, _b, _c; + const { + clone = false, + passive = false, + eventName, + deep = false, + defaultValue, + shouldEmit + } = options; + const vm = getCurrentInstance(); + const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy)); + let event = eventName; + if (!key) { + key = "modelValue"; + } + event = event || `update:${key.toString()}`; + const cloneFn = (val) => !clone ? val : typeof clone === "function" ? clone(val) : cloneFnJSON(val); + const getValue2 = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue; + const triggerEmit = (value) => { + if (shouldEmit) { + if (shouldEmit(value)) + _emit(event, value); + } else { + _emit(event, value); + } + }; + if (passive) { + const initialValue = getValue2(); + const proxy = ref(initialValue); + let isUpdating = false; + watch( + () => props[key], + (v) => { + if (!isUpdating) { + isUpdating = true; + proxy.value = cloneFn(v); + nextTick(() => isUpdating = false); + } + } + ); + watch( + proxy, + (v) => { + if (!isUpdating && (v !== props[key] || deep)) + triggerEmit(v); + }, + { deep } + ); + return proxy; + } else { + return computed({ + get() { + return getValue2(); + }, + set(value) { + triggerEmit(value); + } + }); + } +} +function useVModels(props, emit, options = {}) { + const ret = {}; + for (const key in props) { + ret[key] = useVModel( + props, + key, + emit, + options + ); + } + return ret; +} +function useVibrate(options) { + const { + pattern = [], + interval = 0, + navigator: navigator2 = defaultNavigator + } = options || {}; + const isSupported = useSupported(() => typeof navigator2 !== "undefined" && "vibrate" in navigator2); + const patternRef = toRef2(pattern); + let intervalControls; + const vibrate = (pattern2 = patternRef.value) => { + if (isSupported.value) + navigator2.vibrate(pattern2); + }; + const stop = () => { + if (isSupported.value) + navigator2.vibrate(0); + intervalControls == null ? void 0 : intervalControls.pause(); + }; + if (interval > 0) { + intervalControls = useIntervalFn( + vibrate, + interval, + { + immediate: false, + immediateCallback: false + } + ); + } + return { + isSupported, + pattern, + intervalControls, + vibrate, + stop + }; +} +function useVirtualList(list, options) { + const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = "itemHeight" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list); + return { + list: currentList, + scrollTo, + containerProps: { + ref: containerRef, + onScroll: () => { + calculateRange(); + }, + style: containerStyle + }, + wrapperProps + }; +} +function useVirtualListResources(list) { + const containerRef = shallowRef(null); + const size = useElementSize(containerRef); + const currentList = ref([]); + const source = shallowRef(list); + const state = ref({ start: 0, end: 10 }); + return { state, source, currentList, size, containerRef }; +} +function createGetViewCapacity(state, source, itemSize) { + return (containerSize) => { + if (typeof itemSize === "number") + return Math.ceil(containerSize / itemSize); + const { start = 0 } = state.value; + let sum = 0; + let capacity = 0; + for (let i = start; i < source.value.length; i++) { + const size = itemSize(i); + sum += size; + capacity = i; + if (sum > containerSize) + break; + } + return capacity - start; + }; +} +function createGetOffset(source, itemSize) { + return (scrollDirection) => { + if (typeof itemSize === "number") + return Math.floor(scrollDirection / itemSize) + 1; + let sum = 0; + let offset = 0; + for (let i = 0; i < source.value.length; i++) { + const size = itemSize(i); + sum += size; + if (sum >= scrollDirection) { + offset = i; + break; + } + } + return offset + 1; + }; +} +function createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) { + return () => { + const element = containerRef.value; + if (element) { + const offset = getOffset(type === "vertical" ? element.scrollTop : element.scrollLeft); + const viewCapacity = getViewCapacity(type === "vertical" ? element.clientHeight : element.clientWidth); + const from = offset - overscan; + const to = offset + viewCapacity + overscan; + state.value = { + start: from < 0 ? 0 : from, + end: to > source.value.length ? source.value.length : to + }; + currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({ + data: ele, + index: index + state.value.start + })); + } + }; +} +function createGetDistance(itemSize, source) { + return (index) => { + if (typeof itemSize === "number") { + const size2 = index * itemSize; + return size2; + } + const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0); + return size; + }; +} +function useWatchForSizes(size, list, containerRef, calculateRange) { + watch([size.width, size.height, list, containerRef], () => { + calculateRange(); + }); +} +function createComputedTotalSize(itemSize, source) { + return computed(() => { + if (typeof itemSize === "number") + return source.value.length * itemSize; + return source.value.reduce((sum, _, index) => sum + itemSize(index), 0); + }); +} +var scrollToDictionaryForElementScrollKey = { + horizontal: "scrollLeft", + vertical: "scrollTop" +}; +function createScrollTo(type, calculateRange, getDistance, containerRef) { + return (index) => { + if (containerRef.value) { + containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index); + calculateRange(); + } + }; +} +function useHorizontalVirtualList(options, list) { + const resources = useVirtualListResources(list); + const { state, source, currentList, size, containerRef } = resources; + const containerStyle = { overflowX: "auto" }; + const { itemWidth, overscan = 5 } = options; + const getViewCapacity = createGetViewCapacity(state, source, itemWidth); + const getOffset = createGetOffset(source, itemWidth); + const calculateRange = createCalculateRange("horizontal", overscan, getOffset, getViewCapacity, resources); + const getDistanceLeft = createGetDistance(itemWidth, source); + const offsetLeft = computed(() => getDistanceLeft(state.value.start)); + const totalWidth = createComputedTotalSize(itemWidth, source); + useWatchForSizes(size, list, containerRef, calculateRange); + const scrollTo = createScrollTo("horizontal", calculateRange, getDistanceLeft, containerRef); + const wrapperProps = computed(() => { + return { + style: { + height: "100%", + width: `${totalWidth.value - offsetLeft.value}px`, + marginLeft: `${offsetLeft.value}px`, + display: "flex" + } + }; + }); + return { + scrollTo, + calculateRange, + wrapperProps, + containerStyle, + currentList, + containerRef + }; +} +function useVerticalVirtualList(options, list) { + const resources = useVirtualListResources(list); + const { state, source, currentList, size, containerRef } = resources; + const containerStyle = { overflowY: "auto" }; + const { itemHeight, overscan = 5 } = options; + const getViewCapacity = createGetViewCapacity(state, source, itemHeight); + const getOffset = createGetOffset(source, itemHeight); + const calculateRange = createCalculateRange("vertical", overscan, getOffset, getViewCapacity, resources); + const getDistanceTop = createGetDistance(itemHeight, source); + const offsetTop = computed(() => getDistanceTop(state.value.start)); + const totalHeight = createComputedTotalSize(itemHeight, source); + useWatchForSizes(size, list, containerRef, calculateRange); + const scrollTo = createScrollTo("vertical", calculateRange, getDistanceTop, containerRef); + const wrapperProps = computed(() => { + return { + style: { + width: "100%", + height: `${totalHeight.value - offsetTop.value}px`, + marginTop: `${offsetTop.value}px` + } + }; + }); + return { + calculateRange, + scrollTo, + containerStyle, + wrapperProps, + currentList, + containerRef + }; +} +function useWakeLock(options = {}) { + const { + navigator: navigator2 = defaultNavigator, + document: document2 = defaultDocument + } = options; + const requestedType = shallowRef(false); + const sentinel = shallowRef(null); + const documentVisibility = useDocumentVisibility({ document: document2 }); + const isSupported = useSupported(() => navigator2 && "wakeLock" in navigator2); + const isActive = computed(() => !!sentinel.value && documentVisibility.value === "visible"); + if (isSupported.value) { + useEventListener(sentinel, "release", () => { + var _a, _b; + requestedType.value = (_b = (_a = sentinel.value) == null ? void 0 : _a.type) != null ? _b : false; + }, { passive: true }); + whenever( + () => documentVisibility.value === "visible" && (document2 == null ? void 0 : document2.visibilityState) === "visible" && requestedType.value, + (type) => { + requestedType.value = false; + forceRequest(type); + } + ); + } + async function forceRequest(type) { + var _a; + await ((_a = sentinel.value) == null ? void 0 : _a.release()); + sentinel.value = isSupported.value ? await navigator2.wakeLock.request(type) : null; + } + async function request(type) { + if (documentVisibility.value === "visible") + await forceRequest(type); + else + requestedType.value = type; + } + async function release() { + requestedType.value = false; + const s = sentinel.value; + sentinel.value = null; + await (s == null ? void 0 : s.release()); + } + return { + sentinel, + isSupported, + isActive, + request, + forceRequest, + release + }; +} +function useWebNotification(options = {}) { + const { + window: window2 = defaultWindow, + requestPermissions: _requestForPermissions = true + } = options; + const defaultWebNotificationOptions = options; + const isSupported = useSupported(() => { + if (!window2 || !("Notification" in window2)) + return false; + if (Notification.permission === "granted") + return true; + try { + const notification2 = new Notification(""); + notification2.onshow = () => { + notification2.close(); + }; + } catch (e) { + if (e.name === "TypeError") + return false; + } + return true; + }); + const permissionGranted = shallowRef(isSupported.value && "permission" in Notification && Notification.permission === "granted"); + const notification = ref(null); + const ensurePermissions = async () => { + if (!isSupported.value) + return; + if (!permissionGranted.value && Notification.permission !== "denied") { + const result = await Notification.requestPermission(); + if (result === "granted") + permissionGranted.value = true; + } + return permissionGranted.value; + }; + const { on: onClick, trigger: clickTrigger } = createEventHook(); + const { on: onShow, trigger: showTrigger } = createEventHook(); + const { on: onError, trigger: errorTrigger } = createEventHook(); + const { on: onClose, trigger: closeTrigger } = createEventHook(); + const show = async (overrides) => { + if (!isSupported.value || !permissionGranted.value) + return; + const options2 = Object.assign({}, defaultWebNotificationOptions, overrides); + notification.value = new Notification(options2.title || "", options2); + notification.value.onclick = clickTrigger; + notification.value.onshow = showTrigger; + notification.value.onerror = errorTrigger; + notification.value.onclose = closeTrigger; + return notification.value; + }; + const close = () => { + if (notification.value) + notification.value.close(); + notification.value = null; + }; + if (_requestForPermissions) + tryOnMounted(ensurePermissions); + tryOnScopeDispose(close); + if (isSupported.value && window2) { + const document2 = window2.document; + useEventListener(document2, "visibilitychange", (e) => { + e.preventDefault(); + if (document2.visibilityState === "visible") { + close(); + } + }); + } + return { + isSupported, + notification, + ensurePermissions, + permissionGranted, + show, + close, + onClick, + onShow, + onError, + onClose + }; +} +var DEFAULT_PING_MESSAGE = "ping"; +function resolveNestedOptions(options) { + if (options === true) + return {}; + return options; +} +function useWebSocket(url, options = {}) { + const { + onConnected, + onDisconnected, + onError, + onMessage, + immediate = true, + autoConnect = true, + autoClose = true, + protocols = [] + } = options; + const data = ref(null); + const status = shallowRef("CLOSED"); + const wsRef = ref(); + const urlRef = toRef2(url); + let heartbeatPause; + let heartbeatResume; + let explicitlyClosed = false; + let retried = 0; + let bufferedData = []; + let retryTimeout; + let pongTimeoutWait; + const _sendBuffer = () => { + if (bufferedData.length && wsRef.value && status.value === "OPEN") { + for (const buffer of bufferedData) + wsRef.value.send(buffer); + bufferedData = []; + } + }; + const resetRetry = () => { + if (retryTimeout != null) { + clearTimeout(retryTimeout); + retryTimeout = void 0; + } + }; + const resetHeartbeat = () => { + clearTimeout(pongTimeoutWait); + pongTimeoutWait = void 0; + }; + const close = (code = 1e3, reason) => { + resetRetry(); + if (!isClient && !isWorker || !wsRef.value) + return; + explicitlyClosed = true; + resetHeartbeat(); + heartbeatPause == null ? void 0 : heartbeatPause(); + wsRef.value.close(code, reason); + wsRef.value = void 0; + }; + const send = (data2, useBuffer = true) => { + if (!wsRef.value || status.value !== "OPEN") { + if (useBuffer) + bufferedData.push(data2); + return false; + } + _sendBuffer(); + wsRef.value.send(data2); + return true; + }; + const _init = () => { + if (explicitlyClosed || typeof urlRef.value === "undefined") + return; + const ws = new WebSocket(urlRef.value, protocols); + wsRef.value = ws; + status.value = "CONNECTING"; + ws.onopen = () => { + status.value = "OPEN"; + retried = 0; + onConnected == null ? void 0 : onConnected(ws); + heartbeatResume == null ? void 0 : heartbeatResume(); + _sendBuffer(); + }; + ws.onclose = (ev) => { + status.value = "CLOSED"; + resetHeartbeat(); + heartbeatPause == null ? void 0 : heartbeatPause(); + onDisconnected == null ? void 0 : onDisconnected(ws, ev); + if (!explicitlyClosed && options.autoReconnect && (wsRef.value == null || ws === wsRef.value)) { + const { + retries = -1, + delay = 1e3, + onFailed + } = resolveNestedOptions(options.autoReconnect); + const checkRetires = typeof retries === "function" ? retries : () => typeof retries === "number" && (retries < 0 || retried < retries); + if (checkRetires(retried)) { + retried += 1; + retryTimeout = setTimeout(_init, delay); + } else { + onFailed == null ? void 0 : onFailed(); + } + } + }; + ws.onerror = (e) => { + onError == null ? void 0 : onError(ws, e); + }; + ws.onmessage = (e) => { + if (options.heartbeat) { + resetHeartbeat(); + const { + message = DEFAULT_PING_MESSAGE, + responseMessage = message + } = resolveNestedOptions(options.heartbeat); + if (e.data === toValue(responseMessage)) + return; + } + data.value = e.data; + onMessage == null ? void 0 : onMessage(ws, e); + }; + }; + if (options.heartbeat) { + const { + message = DEFAULT_PING_MESSAGE, + interval = 1e3, + pongTimeout = 1e3 + } = resolveNestedOptions(options.heartbeat); + const { pause, resume } = useIntervalFn( + () => { + send(toValue(message), false); + if (pongTimeoutWait != null) + return; + pongTimeoutWait = setTimeout(() => { + close(); + explicitlyClosed = false; + }, pongTimeout); + }, + interval, + { immediate: false } + ); + heartbeatPause = pause; + heartbeatResume = resume; + } + if (autoClose) { + if (isClient) + useEventListener("beforeunload", () => close(), { passive: true }); + tryOnScopeDispose(close); + } + const open = () => { + if (!isClient && !isWorker) + return; + close(); + explicitlyClosed = false; + retried = 0; + _init(); + }; + if (immediate) + open(); + if (autoConnect) + watch(urlRef, open); + return { + data, + status, + close, + send, + open, + ws: wsRef + }; +} +function useWebWorker(arg0, workerOptions, options) { + const { + window: window2 = defaultWindow + } = options != null ? options : {}; + const data = ref(null); + const worker = shallowRef(); + const post = (...args) => { + if (!worker.value) + return; + worker.value.postMessage(...args); + }; + const terminate = function terminate2() { + if (!worker.value) + return; + worker.value.terminate(); + }; + if (window2) { + if (typeof arg0 === "string") + worker.value = new Worker(arg0, workerOptions); + else if (typeof arg0 === "function") + worker.value = arg0(); + else + worker.value = arg0; + worker.value.onmessage = (e) => { + data.value = e.data; + }; + tryOnScopeDispose(() => { + if (worker.value) + worker.value.terminate(); + }); + } + return { + data, + post, + terminate, + worker + }; +} +function depsParser(deps, localDeps) { + if (deps.length === 0 && localDeps.length === 0) + return ""; + const depsString = deps.map((dep) => `'${dep}'`).toString(); + const depsFunctionString = localDeps.filter((dep) => typeof dep === "function").map((fn) => { + const str = fn.toString(); + if (str.trim().startsWith("function")) { + return str; + } else { + const name = fn.name; + return `const ${name} = ${str}`; + } + }).join(";"); + const importString = `importScripts(${depsString});`; + return `${depsString.trim() === "" ? "" : importString} ${depsFunctionString}`; +} +function jobRunner(userFunc) { + return (e) => { + const userFuncArgs = e.data[0]; + return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => { + postMessage(["SUCCESS", result]); + }).catch((error) => { + postMessage(["ERROR", error]); + }); + }; +} +function createWorkerBlobUrl(fn, deps, localDeps) { + const blobCode = `${depsParser(deps, localDeps)}; onmessage=(${jobRunner})(${fn})`; + const blob = new Blob([blobCode], { type: "text/javascript" }); + const url = URL.createObjectURL(blob); + return url; +} +function useWebWorkerFn(fn, options = {}) { + const { + dependencies = [], + localDependencies = [], + timeout, + window: window2 = defaultWindow + } = options; + const worker = ref(); + const workerStatus = shallowRef("PENDING"); + const promise = ref({}); + const timeoutId = shallowRef(); + const workerTerminate = (status = "PENDING") => { + if (worker.value && worker.value._url && window2) { + worker.value.terminate(); + URL.revokeObjectURL(worker.value._url); + promise.value = {}; + worker.value = void 0; + window2.clearTimeout(timeoutId.value); + workerStatus.value = status; + } + }; + workerTerminate(); + tryOnScopeDispose(workerTerminate); + const generateWorker = () => { + const blobUrl = createWorkerBlobUrl(fn, dependencies, localDependencies); + const newWorker = new Worker(blobUrl); + newWorker._url = blobUrl; + newWorker.onmessage = (e) => { + const { resolve = () => { + }, reject = () => { + } } = promise.value; + const [status, result] = e.data; + switch (status) { + case "SUCCESS": + resolve(result); + workerTerminate(status); + break; + default: + reject(result); + workerTerminate("ERROR"); + break; + } + }; + newWorker.onerror = (e) => { + const { reject = () => { + } } = promise.value; + e.preventDefault(); + reject(e); + workerTerminate("ERROR"); + }; + if (timeout) { + timeoutId.value = setTimeout( + () => workerTerminate("TIMEOUT_EXPIRED"), + timeout + ); + } + return newWorker; + }; + const callWorker = (...fnArgs) => new Promise((resolve, reject) => { + var _a; + promise.value = { + resolve, + reject + }; + (_a = worker.value) == null ? void 0 : _a.postMessage([[...fnArgs]]); + workerStatus.value = "RUNNING"; + }); + const workerFn = (...fnArgs) => { + if (workerStatus.value === "RUNNING") { + console.error( + "[useWebWorkerFn] You can only run one instance of the worker at a time." + ); + return Promise.reject(); + } + worker.value = generateWorker(); + return callWorker(...fnArgs); + }; + return { + workerFn, + workerStatus, + workerTerminate + }; +} +function useWindowFocus(options = {}) { + const { window: window2 = defaultWindow } = options; + if (!window2) + return shallowRef(false); + const focused = shallowRef(window2.document.hasFocus()); + const listenerOptions = { passive: true }; + useEventListener(window2, "blur", () => { + focused.value = false; + }, listenerOptions); + useEventListener(window2, "focus", () => { + focused.value = true; + }, listenerOptions); + return focused; +} +function useWindowScroll(options = {}) { + const { window: window2 = defaultWindow, ...rest } = options; + return useScroll(window2, rest); +} +function useWindowSize(options = {}) { + const { + window: window2 = defaultWindow, + initialWidth = Number.POSITIVE_INFINITY, + initialHeight = Number.POSITIVE_INFINITY, + listenOrientation = true, + includeScrollbar = true, + type = "inner" + } = options; + const width = shallowRef(initialWidth); + const height = shallowRef(initialHeight); + const update = () => { + if (window2) { + if (type === "outer") { + width.value = window2.outerWidth; + height.value = window2.outerHeight; + } else if (type === "visual" && window2.visualViewport) { + const { width: visualViewportWidth, height: visualViewportHeight, scale } = window2.visualViewport; + width.value = Math.round(visualViewportWidth * scale); + height.value = Math.round(visualViewportHeight * scale); + } else if (includeScrollbar) { + width.value = window2.innerWidth; + height.value = window2.innerHeight; + } else { + width.value = window2.document.documentElement.clientWidth; + height.value = window2.document.documentElement.clientHeight; + } + } + }; + update(); + tryOnMounted(update); + const listenerOptions = { passive: true }; + useEventListener("resize", update, listenerOptions); + if (window2 && type === "visual" && window2.visualViewport) { + useEventListener(window2.visualViewport, "resize", update, listenerOptions); + } + if (listenOrientation) { + const matches = useMediaQuery("(orientation: portrait)"); + watch(matches, () => update()); + } + return { width, height }; +} + +export { + computedEager, + computedWithControl, + tryOnScopeDispose, + createEventHook, + createGlobalState, + injectLocal, + provideLocal, + createInjectionState, + createRef, + createSharedComposable, + extendRef, + get, + isDefined, + makeDestructurable, + reactify, + reactifyObject, + toReactive, + reactiveComputed, + reactiveOmit, + isClient, + isWorker, + isDef, + notNullish, + assert, + isObject, + now, + timestamp, + clamp, + noop, + rand, + hasOwn, + isIOS, + createFilterWrapper, + bypassFilter, + debounceFilter, + throttleFilter, + pausableFilter, + hyphenate, + camelize, + promiseTimeout, + identity, + createSingletonPromise, + invoke, + containsProp, + increaseWithUnit, + pxValue, + objectPick, + objectOmit, + objectEntries, + getLifeCycleTarget, + toArray, + toRef2 as toRef, + resolveRef, + reactivePick, + refAutoReset, + useDebounceFn, + refDebounced, + refDefault, + useThrottleFn, + refThrottled, + refWithControl, + controlledRef, + set, + watchWithFilter, + watchPausable, + syncRef, + syncRefs, + toRefs2 as toRefs, + toValue2 as toValue, + resolveUnref, + tryOnBeforeMount, + tryOnBeforeUnmount, + tryOnMounted, + tryOnUnmounted, + until, + useArrayDifference, + useArrayEvery, + useArrayFilter, + useArrayFind, + useArrayFindIndex, + useArrayFindLast, + useArrayIncludes, + useArrayJoin, + useArrayMap, + useArrayReduce, + useArraySome, + useArrayUnique, + useCounter, + formatDate, + normalizeDate, + useDateFormat, + useIntervalFn, + useInterval, + useLastChanged, + useTimeoutFn, + useTimeout, + useToNumber, + useToString, + useToggle, + watchArray, + watchAtMost, + watchDebounced, + watchDeep, + watchIgnorable, + watchImmediate, + watchOnce, + watchThrottled, + watchTriggerable, + whenever, + computedAsync, + computedInject, + createReusableTemplate, + createTemplatePromise, + createUnrefFn, + defaultWindow, + defaultDocument, + defaultNavigator, + defaultLocation, + unrefElement, + useEventListener, + onClickOutside, + useMounted, + useSupported, + useMutationObserver, + onElementRemoval, + onKeyStroke, + onKeyDown, + onKeyPressed, + onKeyUp, + onLongPress, + onStartTyping, + templateRef, + useActiveElement, + useRafFn, + useAnimate, + useAsyncQueue, + useAsyncState, + useBase64, + useBattery, + useBluetooth, + useSSRWidth, + provideSSRWidth, + useMediaQuery, + breakpointsTailwind, + breakpointsBootstrapV5, + breakpointsVuetifyV2, + breakpointsVuetifyV3, + breakpointsVuetify, + breakpointsAntDesign, + breakpointsQuasar, + breakpointsSematic, + breakpointsMasterCss, + breakpointsPrimeFlex, + breakpointsElement, + useBreakpoints, + useBroadcastChannel, + useBrowserLocation, + useCached, + usePermission, + useClipboard, + useClipboardItems, + cloneFnJSON, + useCloned, + getSSRHandler, + setSSRHandler, + usePreferredDark, + StorageSerializers, + customStorageEventName, + useStorage, + useColorMode, + useConfirmDialog, + useCountdown, + useCssVar, + useCurrentElement, + useCycleList, + useDark, + useManualRefHistory, + useRefHistory, + useDebouncedRefHistory, + useDeviceMotion, + useDeviceOrientation, + useDevicePixelRatio, + useDevicesList, + useDisplayMedia, + useDocumentVisibility, + useDraggable, + useDropZone, + useResizeObserver, + useElementBounding, + useElementByPoint, + useElementHover, + useElementSize, + useIntersectionObserver, + useElementVisibility, + useEventBus, + useEventSource, + useEyeDropper, + useFavicon, + createFetch, + useFetch, + useFileDialog, + useFileSystemAccess, + useFocus, + useFocusWithin, + useFps, + useFullscreen, + mapGamepadToXbox360Controller, + useGamepad, + useGeolocation, + useIdle, + useImage, + useScroll, + useInfiniteScroll, + useKeyModifier, + useLocalStorage, + DefaultMagicKeysAliasMap, + useMagicKeys, + useMediaControls, + useMemoize, + useMemory, + useMouse, + useMouseInElement, + useMousePressed, + useNavigatorLanguage, + useNetwork, + useNow, + useObjectUrl, + useOffsetPagination, + useOnline, + usePageLeave, + useScreenOrientation, + useParallax, + useParentElement, + usePerformanceObserver, + usePointer, + usePointerLock, + usePointerSwipe, + usePreferredColorScheme, + usePreferredContrast, + usePreferredLanguages, + usePreferredReducedMotion, + usePreferredReducedTransparency, + usePrevious, + useScreenSafeArea, + useScriptTag, + useScrollLock, + useSessionStorage, + useShare, + useSorted, + useSpeechRecognition, + useSpeechSynthesis, + useStepper, + useStorageAsync, + useStyleTag, + useSwipe, + useTemplateRefsList, + useTextDirection, + useTextSelection, + useTextareaAutosize, + useThrottledRefHistory, + useTimeAgo, + formatTimeAgo, + useTimeoutPoll, + useTimestamp, + useTitle, + TransitionPresets, + executeTransition, + useTransition, + useUrlSearchParams, + useUserMedia, + useVModel, + useVModels, + useVibrate, + useVirtualList, + useWakeLock, + useWebNotification, + useWebSocket, + useWebWorker, + useWebWorkerFn, + useWindowFocus, + useWindowScroll, + useWindowSize +}; +//# sourceMappingURL=chunk-RBPEH57I.js.map diff --git a/packages/tempo/.vitepress/cache/deps/chunk-RBPEH57I.js.map b/packages/tempo/.vitepress/cache/deps/chunk-RBPEH57I.js.map new file mode 100644 index 00000000..37b488a5 --- /dev/null +++ b/packages/tempo/.vitepress/cache/deps/chunk-RBPEH57I.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../../../../node_modules/@vueuse/shared/index.mjs", "../../../../../node_modules/@vueuse/core/index.mjs"], + "sourcesContent": ["import { shallowRef, watchEffect, readonly, watch, customRef, getCurrentScope, onScopeDispose, effectScope, getCurrentInstance, hasInjectionContext, inject, provide, ref, isRef, unref, toValue as toValue$1, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue';\n\nfunction computedEager(fn, options) {\n var _a;\n const result = shallowRef();\n watchEffect(() => {\n result.value = fn();\n }, {\n ...options,\n flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n });\n return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n let v = void 0;\n let track;\n let trigger;\n const dirty = shallowRef(true);\n const update = () => {\n dirty.value = true;\n trigger();\n };\n watch(source, update, { flush: \"sync\" });\n const get = typeof fn === \"function\" ? fn : fn.get;\n const set = typeof fn === \"function\" ? void 0 : fn.set;\n const result = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n if (dirty.value) {\n v = get(v);\n dirty.value = false;\n }\n track();\n return v;\n },\n set(v2) {\n set == null ? void 0 : set(v2);\n }\n };\n });\n if (Object.isExtensible(result))\n result.trigger = update;\n return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n if (getCurrentScope()) {\n onScopeDispose(fn);\n return true;\n }\n return false;\n}\n\nfunction createEventHook() {\n const fns = /* @__PURE__ */ new Set();\n const off = (fn) => {\n fns.delete(fn);\n };\n const clear = () => {\n fns.clear();\n };\n const on = (fn) => {\n fns.add(fn);\n const offFn = () => off(fn);\n tryOnScopeDispose(offFn);\n return {\n off: offFn\n };\n };\n const trigger = (...args) => {\n return Promise.all(Array.from(fns).map((fn) => fn(...args)));\n };\n return {\n on,\n off,\n trigger,\n clear\n };\n}\n\nfunction createGlobalState(stateFactory) {\n let initialized = false;\n let state;\n const scope = effectScope(true);\n return (...args) => {\n if (!initialized) {\n state = scope.run(() => stateFactory(...args));\n initialized = true;\n }\n return state;\n };\n}\n\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\nconst injectLocal = (...args) => {\n var _a;\n const key = args[0];\n const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n if (instance == null && !hasInjectionContext())\n throw new Error(\"injectLocal must be called in setup\");\n if (instance && localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance))\n return localProvidedStateMap.get(instance)[key];\n return inject(...args);\n};\n\nconst provideLocal = (key, value) => {\n var _a;\n const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n if (instance == null)\n throw new Error(\"provideLocal must be called in setup\");\n if (!localProvidedStateMap.has(instance))\n localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null));\n const localProvidedState = localProvidedStateMap.get(instance);\n localProvidedState[key] = value;\n provide(key, value);\n};\n\nfunction createInjectionState(composable, options) {\n const key = (options == null ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n const defaultValue = options == null ? void 0 : options.defaultValue;\n const useProvidingState = (...args) => {\n const state = composable(...args);\n provideLocal(key, state);\n return state;\n };\n const useInjectedState = () => injectLocal(key, defaultValue);\n return [useProvidingState, useInjectedState];\n}\n\nfunction createRef(value, deep) {\n if (deep === true) {\n return ref(value);\n } else {\n return shallowRef(value);\n }\n}\n\nfunction createSharedComposable(composable) {\n let subscribers = 0;\n let state;\n let scope;\n const dispose = () => {\n subscribers -= 1;\n if (scope && subscribers <= 0) {\n scope.stop();\n state = void 0;\n scope = void 0;\n }\n };\n return (...args) => {\n subscribers += 1;\n if (!scope) {\n scope = effectScope(true);\n state = scope.run(() => composable(...args));\n }\n tryOnScopeDispose(dispose);\n return state;\n };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n for (const [key, value] of Object.entries(extend)) {\n if (key === \"value\")\n continue;\n if (isRef(value) && unwrap) {\n Object.defineProperty(ref, key, {\n get() {\n return value.value;\n },\n set(v) {\n value.value = v;\n },\n enumerable\n });\n } else {\n Object.defineProperty(ref, key, { value, enumerable });\n }\n }\n return ref;\n}\n\nfunction get(obj, key) {\n if (key == null)\n return unref(obj);\n return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n return unref(v) != null;\n}\n\nfunction makeDestructurable(obj, arr) {\n if (typeof Symbol !== \"undefined\") {\n const clone = { ...obj };\n Object.defineProperty(clone, Symbol.iterator, {\n enumerable: false,\n value() {\n let index = 0;\n return {\n next: () => ({\n value: arr[index++],\n done: index > arr.length\n })\n };\n }\n });\n return clone;\n } else {\n return Object.assign([...arr], obj);\n }\n}\n\nfunction reactify(fn, options) {\n const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue$1;\n return function(...args) {\n return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n let keys = [];\n let options;\n if (Array.isArray(optionsOrKeys)) {\n keys = optionsOrKeys;\n } else {\n options = optionsOrKeys;\n const { includeOwnProperties = true } = optionsOrKeys;\n keys.push(...Object.keys(obj));\n if (includeOwnProperties)\n keys.push(...Object.getOwnPropertyNames(obj));\n }\n return Object.fromEntries(\n keys.map((key) => {\n const value = obj[key];\n return [\n key,\n typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n ];\n })\n );\n}\n\nfunction toReactive(objectRef) {\n if (!isRef(objectRef))\n return reactive(objectRef);\n const proxy = new Proxy({}, {\n get(_, p, receiver) {\n return unref(Reflect.get(objectRef.value, p, receiver));\n },\n set(_, p, value) {\n if (isRef(objectRef.value[p]) && !isRef(value))\n objectRef.value[p].value = value;\n else\n objectRef.value[p] = value;\n return true;\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(objectRef.value, p);\n },\n has(_, p) {\n return Reflect.has(objectRef.value, p);\n },\n ownKeys() {\n return Object.keys(objectRef.value);\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true\n };\n }\n });\n return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue$1(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n if (!condition)\n console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n var _a, _b;\n return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent));\n}\n\nfunction createFilterWrapper(filter, fn) {\n function wrapper(...args) {\n return new Promise((resolve, reject) => {\n Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n });\n }\n return wrapper;\n}\nconst bypassFilter = (invoke) => {\n return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n let timer;\n let maxTimer;\n let lastRejector = noop;\n const _clearTimeout = (timer2) => {\n clearTimeout(timer2);\n lastRejector();\n lastRejector = noop;\n };\n let lastInvoker;\n const filter = (invoke) => {\n const duration = toValue$1(ms);\n const maxDuration = toValue$1(options.maxWait);\n if (timer)\n _clearTimeout(timer);\n if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n if (maxTimer) {\n _clearTimeout(maxTimer);\n maxTimer = null;\n }\n return Promise.resolve(invoke());\n }\n return new Promise((resolve, reject) => {\n lastRejector = options.rejectOnCancel ? reject : resolve;\n lastInvoker = invoke;\n if (maxDuration && !maxTimer) {\n maxTimer = setTimeout(() => {\n if (timer)\n _clearTimeout(timer);\n maxTimer = null;\n resolve(lastInvoker());\n }, maxDuration);\n }\n timer = setTimeout(() => {\n if (maxTimer)\n _clearTimeout(maxTimer);\n maxTimer = null;\n resolve(invoke());\n }, duration);\n });\n };\n return filter;\n}\nfunction throttleFilter(...args) {\n let lastExec = 0;\n let timer;\n let isLeading = true;\n let lastRejector = noop;\n let lastValue;\n let ms;\n let trailing;\n let leading;\n let rejectOnCancel;\n if (!isRef(args[0]) && typeof args[0] === \"object\")\n ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);\n else\n [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n const clear = () => {\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n lastRejector();\n lastRejector = noop;\n }\n };\n const filter = (_invoke) => {\n const duration = toValue$1(ms);\n const elapsed = Date.now() - lastExec;\n const invoke = () => {\n return lastValue = _invoke();\n };\n clear();\n if (duration <= 0) {\n lastExec = Date.now();\n return invoke();\n }\n if (elapsed > duration && (leading || !isLeading)) {\n lastExec = Date.now();\n invoke();\n } else if (trailing) {\n lastValue = new Promise((resolve, reject) => {\n lastRejector = rejectOnCancel ? reject : resolve;\n timer = setTimeout(() => {\n lastExec = Date.now();\n isLeading = true;\n resolve(invoke());\n clear();\n }, Math.max(0, duration - elapsed));\n });\n }\n if (!leading && !timer)\n timer = setTimeout(() => isLeading = true, duration);\n isLeading = false;\n return lastValue;\n };\n return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter, options = {}) {\n const {\n initialState = \"active\"\n } = options;\n const isActive = toRef(initialState === \"active\");\n function pause() {\n isActive.value = false;\n }\n function resume() {\n isActive.value = true;\n }\n const eventFilter = (...args) => {\n if (isActive.value)\n extendFilter(...args);\n };\n return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nfunction cacheStringFunction(fn) {\n const cache = /* @__PURE__ */ Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n return new Promise((resolve, reject) => {\n if (throwOnTimeout)\n setTimeout(() => reject(reason), ms);\n else\n setTimeout(resolve, ms);\n });\n}\nfunction identity(arg) {\n return arg;\n}\nfunction createSingletonPromise(fn) {\n let _promise;\n function wrapper() {\n if (!_promise)\n _promise = fn();\n return _promise;\n }\n wrapper.reset = async () => {\n const _prev = _promise;\n _promise = void 0;\n if (_prev)\n await _prev;\n };\n return wrapper;\n}\nfunction invoke(fn) {\n return fn();\n}\nfunction containsProp(obj, ...props) {\n return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n var _a;\n if (typeof target === \"number\")\n return target + delta;\n const value = ((_a = target.match(/^-?\\d+\\.?\\d*/)) == null ? void 0 : _a[0]) || \"\";\n const unit = target.slice(value.length);\n const result = Number.parseFloat(value) + delta;\n if (Number.isNaN(result))\n return target;\n return result + unit;\n}\nfunction pxValue(px) {\n return px.endsWith(\"rem\") ? Number.parseFloat(px) * 16 : Number.parseFloat(px);\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n return keys.reduce((n, k) => {\n if (k in obj) {\n if (!omitUndefined || obj[k] !== void 0)\n n[k] = obj[k];\n }\n return n;\n }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n return (!omitUndefined || value !== void 0) && !keys.includes(key);\n }));\n}\nfunction objectEntries(obj) {\n return Object.entries(obj);\n}\nfunction getLifeCycleTarget(target) {\n return target || getCurrentInstance();\n}\nfunction toArray(value) {\n return Array.isArray(value) ? value : [value];\n}\n\nfunction toRef(...args) {\n if (args.length !== 1)\n return toRef$1(...args);\n const r = args[0];\n return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue$1(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n return customRef((track, trigger) => {\n let value = toValue$1(defaultValue);\n let timer;\n const resetAfter = () => setTimeout(() => {\n value = toValue$1(defaultValue);\n trigger();\n }, toValue$1(afterMs));\n tryOnScopeDispose(() => {\n clearTimeout(timer);\n });\n return {\n get() {\n track();\n return value;\n },\n set(newValue) {\n value = newValue;\n trigger();\n clearTimeout(timer);\n timer = resetAfter();\n }\n };\n });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n return createFilterWrapper(\n debounceFilter(ms, options),\n fn\n );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n const debounced = ref(value.value);\n const updater = useDebounceFn(() => {\n debounced.value = value.value;\n }, ms, options);\n watch(value, () => updater());\n return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n return computed({\n get() {\n var _a;\n return (_a = source.value) != null ? _a : defaultValue;\n },\n set(value) {\n source.value = value;\n }\n });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n return createFilterWrapper(\n throttleFilter(ms, trailing, leading, rejectOnCancel),\n fn\n );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n if (delay <= 0)\n return value;\n const throttled = ref(value.value);\n const updater = useThrottleFn(() => {\n throttled.value = value.value;\n }, delay, trailing, leading);\n watch(value, () => updater());\n return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n let source = initial;\n let track;\n let trigger;\n const ref = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n return get();\n },\n set(v) {\n set(v);\n }\n };\n });\n function get(tracking = true) {\n if (tracking)\n track();\n return source;\n }\n function set(value, triggering = true) {\n var _a, _b;\n if (value === source)\n return;\n const old = source;\n if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n return;\n source = value;\n (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n if (triggering)\n trigger();\n }\n const untrackedGet = () => get(false);\n const silentSet = (v) => set(v, false);\n const peek = () => get(false);\n const lay = (v) => set(v, false);\n return extendRef(\n ref,\n {\n get,\n set,\n untrackedGet,\n silentSet,\n peek,\n lay\n },\n { enumerable: true }\n );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n if (args.length === 2) {\n const [ref, value] = args;\n ref.value = value;\n }\n if (args.length === 3) {\n const [target, key, value] = args;\n target[key] = value;\n }\n}\n\nfunction watchWithFilter(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n return watch(\n source,\n createFilterWrapper(\n eventFilter,\n cb\n ),\n watchOptions\n );\n}\n\nfunction watchPausable(source, cb, options = {}) {\n const {\n eventFilter: filter,\n initialState = \"active\",\n ...watchOptions\n } = options;\n const { eventFilter, pause, resume, isActive } = pausableFilter(filter, { initialState });\n const stop = watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter\n }\n );\n return { stop, pause, resume, isActive };\n}\n\nfunction syncRef(left, right, ...[options]) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true,\n direction = \"both\",\n transform = {}\n } = options || {};\n const watchers = [];\n const transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n const transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n if (direction === \"both\" || direction === \"ltr\") {\n watchers.push(watchPausable(\n left,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n right.value = transformLTR(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n if (direction === \"both\" || direction === \"rtl\") {\n watchers.push(watchPausable(\n right,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n left.value = transformRTL(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n const stop = () => {\n watchers.forEach((w) => w.stop());\n };\n return stop;\n}\n\nfunction syncRefs(source, targets, options = {}) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true\n } = options;\n const targetsArray = toArray(targets);\n return watch(\n source,\n (newValue) => targetsArray.forEach((target) => target.value = newValue),\n { flush, deep, immediate }\n );\n}\n\nfunction toRefs(objectRef, options = {}) {\n if (!isRef(objectRef))\n return toRefs$1(objectRef);\n const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n for (const key in objectRef.value) {\n result[key] = customRef(() => ({\n get() {\n return objectRef.value[key];\n },\n set(v) {\n var _a;\n const replaceRef = (_a = toValue$1(options.replaceRef)) != null ? _a : true;\n if (replaceRef) {\n if (Array.isArray(objectRef.value)) {\n const copy = [...objectRef.value];\n copy[key] = v;\n objectRef.value = copy;\n } else {\n const newObject = { ...objectRef.value, [key]: v };\n Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n objectRef.value = newObject;\n }\n } else {\n objectRef.value[key] = v;\n }\n }\n }));\n }\n return result;\n}\n\nconst toValue = toValue$1;\nconst resolveUnref = toValue$1;\n\nfunction tryOnBeforeMount(fn, sync = true, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeMount(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeUnmount(fn, target);\n}\n\nfunction tryOnMounted(fn, sync = true, target) {\n const instance = getLifeCycleTarget();\n if (instance)\n onMounted(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onUnmounted(fn, target);\n}\n\nfunction createUntil(r, isNot = false) {\n function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n r,\n (v) => {\n if (condition(v) !== isNot) {\n if (stop)\n stop();\n else\n nextTick(() => stop == null ? void 0 : stop());\n resolve(v);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue$1(r)).finally(() => stop == null ? void 0 : stop())\n );\n }\n return Promise.race(promises);\n }\n function toBe(value, options) {\n if (!isRef(value))\n return toMatch((v) => v === value, options);\n const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n [r, value],\n ([v1, v2]) => {\n if (isNot !== (v1 === v2)) {\n if (stop)\n stop();\n else\n nextTick(() => stop == null ? void 0 : stop());\n resolve(v1);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue$1(r)).finally(() => {\n stop == null ? void 0 : stop();\n return toValue$1(r);\n })\n );\n }\n return Promise.race(promises);\n }\n function toBeTruthy(options) {\n return toMatch((v) => Boolean(v), options);\n }\n function toBeNull(options) {\n return toBe(null, options);\n }\n function toBeUndefined(options) {\n return toBe(void 0, options);\n }\n function toBeNaN(options) {\n return toMatch(Number.isNaN, options);\n }\n function toContains(value, options) {\n return toMatch((v) => {\n const array = Array.from(v);\n return array.includes(value) || array.includes(toValue$1(value));\n }, options);\n }\n function changed(options) {\n return changedTimes(1, options);\n }\n function changedTimes(n = 1, options) {\n let count = -1;\n return toMatch(() => {\n count += 1;\n return count >= n;\n }, options);\n }\n if (Array.isArray(toValue$1(r))) {\n const instance = {\n toMatch,\n toContains,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n } else {\n const instance = {\n toMatch,\n toBe,\n toBeTruthy,\n toBeNull,\n toBeNaN,\n toBeUndefined,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n }\n}\nfunction until(r) {\n return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n return value === othVal;\n}\nfunction useArrayDifference(...args) {\n var _a, _b;\n const list = args[0];\n const values = args[1];\n let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n const {\n symmetric = false\n } = (_b = args[3]) != null ? _b : {};\n if (typeof compareFn === \"string\") {\n const key = compareFn;\n compareFn = (value, othVal) => value[key] === othVal[key];\n }\n const diff1 = computed(() => toValue$1(list).filter((x) => toValue$1(values).findIndex((y) => compareFn(x, y)) === -1));\n if (symmetric) {\n const diff2 = computed(() => toValue$1(values).filter((x) => toValue$1(list).findIndex((y) => compareFn(x, y)) === -1));\n return computed(() => symmetric ? [...toValue$1(diff1), ...toValue$1(diff2)] : toValue$1(diff1));\n } else {\n return diff1;\n }\n}\n\nfunction useArrayEvery(list, fn) {\n return computed(() => toValue$1(list).every((element, index, array) => fn(toValue$1(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n return computed(() => toValue$1(list).map((i) => toValue$1(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n return computed(() => toValue$1(\n toValue$1(list).find((element, index, array) => fn(toValue$1(element), index, array))\n ));\n}\n\nfunction useArrayFindIndex(list, fn) {\n return computed(() => toValue$1(list).findIndex((element, index, array) => fn(toValue$1(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n let index = arr.length;\n while (index-- > 0) {\n if (cb(arr[index], index, arr))\n return arr[index];\n }\n return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n return computed(() => toValue$1(\n !Array.prototype.findLast ? findLast(toValue$1(list), (element, index, array) => fn(toValue$1(element), index, array)) : toValue$1(list).findLast((element, index, array) => fn(toValue$1(element), index, array))\n ));\n}\n\nfunction isArrayIncludesOptions(obj) {\n return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n var _a;\n const list = args[0];\n const value = args[1];\n let comparator = args[2];\n let formIndex = 0;\n if (isArrayIncludesOptions(comparator)) {\n formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n comparator = comparator.comparator;\n }\n if (typeof comparator === \"string\") {\n const key = comparator;\n comparator = (element, value2) => element[key] === toValue$1(value2);\n }\n comparator = comparator != null ? comparator : (element, value2) => element === toValue$1(value2);\n return computed(() => toValue$1(list).slice(formIndex).some((element, index, array) => comparator(\n toValue$1(element),\n toValue$1(value),\n index,\n toValue$1(array)\n )));\n}\n\nfunction useArrayJoin(list, separator) {\n return computed(() => toValue$1(list).map((i) => toValue$1(i)).join(toValue$1(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n return computed(() => toValue$1(list).map((i) => toValue$1(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n const reduceCallback = (sum, value, index) => reducer(toValue$1(sum), toValue$1(value), index);\n return computed(() => {\n const resolved = toValue$1(list);\n return args.length ? resolved.reduce(reduceCallback, typeof args[0] === \"function\" ? toValue$1(args[0]()) : toValue$1(args[0])) : resolved.reduce(reduceCallback);\n });\n}\n\nfunction useArraySome(list, fn) {\n return computed(() => toValue$1(list).some((element, index, array) => fn(toValue$1(element), index, array)));\n}\n\nfunction uniq(array) {\n return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n return array.reduce((acc, v) => {\n if (!acc.some((x) => fn(v, x, array)))\n acc.push(v);\n return acc;\n }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n return computed(() => {\n const resolvedList = toValue$1(list).map((element) => toValue$1(element));\n return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n let _initialValue = unref(initialValue);\n const count = shallowRef(initialValue);\n const {\n max = Number.POSITIVE_INFINITY,\n min = Number.NEGATIVE_INFINITY\n } = options;\n const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n const get = () => count.value;\n const set = (val) => count.value = Math.max(min, Math.min(max, val));\n const reset = (val = _initialValue) => {\n _initialValue = val;\n return set(val);\n };\n return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[T\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/i;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)\\]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|z{1,4}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n let m = hours < 12 ? \"AM\" : \"PM\";\n if (hasPeriod)\n m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n const suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n const v = num % 100;\n return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n var _a;\n const years = date.getFullYear();\n const month = date.getMonth();\n const days = date.getDate();\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n const milliseconds = date.getMilliseconds();\n const day = date.getDay();\n const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n const stripTimeZone = (dateString) => {\n var _a2;\n return (_a2 = dateString.split(\" \")[1]) != null ? _a2 : \"\";\n };\n const matches = {\n Yo: () => formatOrdinal(years),\n YY: () => String(years).slice(-2),\n YYYY: () => years,\n M: () => month + 1,\n Mo: () => formatOrdinal(month + 1),\n MM: () => `${month + 1}`.padStart(2, \"0\"),\n MMM: () => date.toLocaleDateString(toValue$1(options.locales), { month: \"short\" }),\n MMMM: () => date.toLocaleDateString(toValue$1(options.locales), { month: \"long\" }),\n D: () => String(days),\n Do: () => formatOrdinal(days),\n DD: () => `${days}`.padStart(2, \"0\"),\n H: () => String(hours),\n Ho: () => formatOrdinal(hours),\n HH: () => `${hours}`.padStart(2, \"0\"),\n h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n ho: () => formatOrdinal(hours % 12 || 12),\n hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n m: () => String(minutes),\n mo: () => formatOrdinal(minutes),\n mm: () => `${minutes}`.padStart(2, \"0\"),\n s: () => String(seconds),\n so: () => formatOrdinal(seconds),\n ss: () => `${seconds}`.padStart(2, \"0\"),\n SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n d: () => day,\n dd: () => date.toLocaleDateString(toValue$1(options.locales), { weekday: \"narrow\" }),\n ddd: () => date.toLocaleDateString(toValue$1(options.locales), { weekday: \"short\" }),\n dddd: () => date.toLocaleDateString(toValue$1(options.locales), { weekday: \"long\" }),\n A: () => meridiem(hours, minutes),\n AA: () => meridiem(hours, minutes, false, true),\n a: () => meridiem(hours, minutes, true),\n aa: () => meridiem(hours, minutes, true, true),\n z: () => stripTimeZone(date.toLocaleDateString(toValue$1(options.locales), { timeZoneName: \"shortOffset\" })),\n zz: () => stripTimeZone(date.toLocaleDateString(toValue$1(options.locales), { timeZoneName: \"shortOffset\" })),\n zzz: () => stripTimeZone(date.toLocaleDateString(toValue$1(options.locales), { timeZoneName: \"shortOffset\" })),\n zzzz: () => stripTimeZone(date.toLocaleDateString(toValue$1(options.locales), { timeZoneName: \"longOffset\" }))\n };\n return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n var _a2, _b;\n return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match;\n });\n}\nfunction normalizeDate(date) {\n if (date === null)\n return new Date(Number.NaN);\n if (date === void 0)\n return /* @__PURE__ */ new Date();\n if (date instanceof Date)\n return new Date(date);\n if (typeof date === \"string\" && !/Z$/i.test(date)) {\n const d = date.match(REGEX_PARSE);\n if (d) {\n const m = d[2] - 1 || 0;\n const ms = (d[7] || \"0\").substring(0, 3);\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n return computed(() => formatDate(normalizeDate(toValue$1(date)), toValue$1(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n let timer = null;\n const isActive = shallowRef(false);\n function clean() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n }\n function pause() {\n isActive.value = false;\n clean();\n }\n function resume() {\n const intervalValue = toValue$1(interval);\n if (intervalValue <= 0)\n return;\n isActive.value = true;\n if (immediateCallback)\n cb();\n clean();\n if (isActive.value)\n timer = setInterval(cb, intervalValue);\n }\n if (immediate && isClient)\n resume();\n if (isRef(interval) || typeof interval === \"function\") {\n const stopWatch = watch(interval, () => {\n if (isActive.value && isClient)\n resume();\n });\n tryOnScopeDispose(stopWatch);\n }\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useInterval(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n immediate = true,\n callback\n } = options;\n const counter = shallowRef(0);\n const update = () => counter.value += 1;\n const reset = () => {\n counter.value = 0;\n };\n const controls = useIntervalFn(\n callback ? () => {\n update();\n callback(counter.value);\n } : update,\n interval,\n { immediate }\n );\n if (exposeControls) {\n return {\n counter,\n reset,\n ...controls\n };\n } else {\n return counter;\n }\n}\n\nfunction useLastChanged(source, options = {}) {\n var _a;\n const ms = shallowRef((_a = options.initialValue) != null ? _a : null);\n watch(\n source,\n () => ms.value = timestamp(),\n options\n );\n return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n const isPending = shallowRef(false);\n let timer = null;\n function clear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function stop() {\n isPending.value = false;\n clear();\n }\n function start(...args) {\n if (immediateCallback)\n cb();\n clear();\n isPending.value = true;\n timer = setTimeout(() => {\n isPending.value = false;\n timer = null;\n cb(...args);\n }, toValue$1(interval));\n }\n if (immediate) {\n isPending.value = true;\n if (isClient)\n start();\n }\n tryOnScopeDispose(stop);\n return {\n isPending: readonly(isPending),\n start,\n stop\n };\n}\n\nfunction useTimeout(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n callback\n } = options;\n const controls = useTimeoutFn(\n callback != null ? callback : noop,\n interval,\n options\n );\n const ready = computed(() => !controls.isPending.value);\n if (exposeControls) {\n return {\n ready,\n ...controls\n };\n } else {\n return ready;\n }\n}\n\nfunction useToNumber(value, options = {}) {\n const {\n method = \"parseFloat\",\n radix,\n nanToZero\n } = options;\n return computed(() => {\n let resolved = toValue$1(value);\n if (typeof method === \"function\")\n resolved = method(resolved);\n else if (typeof resolved === \"string\")\n resolved = Number[method](resolved, radix);\n if (nanToZero && Number.isNaN(resolved))\n resolved = 0;\n return resolved;\n });\n}\n\nfunction useToString(value) {\n return computed(() => `${toValue$1(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n const {\n truthyValue = true,\n falsyValue = false\n } = options;\n const valueIsRef = isRef(initialValue);\n const _value = shallowRef(initialValue);\n function toggle(value) {\n if (arguments.length) {\n _value.value = value;\n return _value.value;\n } else {\n const truthy = toValue$1(truthyValue);\n _value.value = _value.value === truthy ? toValue$1(falsyValue) : truthy;\n return _value.value;\n }\n }\n if (valueIsRef)\n return toggle;\n else\n return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n let oldList = (options == null ? void 0 : options.immediate) ? [] : [...typeof source === \"function\" ? source() : Array.isArray(source) ? source : toValue$1(source)];\n return watch(source, (newList, _, onCleanup) => {\n const oldListRemains = Array.from({ length: oldList.length });\n const added = [];\n for (const obj of newList) {\n let found = false;\n for (let i = 0; i < oldList.length; i++) {\n if (!oldListRemains[i] && obj === oldList[i]) {\n oldListRemains[i] = true;\n found = true;\n break;\n }\n }\n if (!found)\n added.push(obj);\n }\n const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n cb(newList, oldList, added, removed, onCleanup);\n oldList = [...newList];\n }, options);\n}\n\nfunction watchAtMost(source, cb, options) {\n const {\n count,\n ...watchOptions\n } = options;\n const current = shallowRef(0);\n const stop = watchWithFilter(\n source,\n (...args) => {\n current.value += 1;\n if (current.value >= toValue$1(count))\n nextTick(() => stop());\n cb(...args);\n },\n watchOptions\n );\n return { count: current, stop };\n}\n\nfunction watchDebounced(source, cb, options = {}) {\n const {\n debounce = 0,\n maxWait = void 0,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: debounceFilter(debounce, { maxWait })\n }\n );\n}\n\nfunction watchDeep(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n deep: true\n }\n );\n}\n\nfunction watchIgnorable(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n const filteredCb = createFilterWrapper(\n eventFilter,\n cb\n );\n let ignoreUpdates;\n let ignorePrevAsyncUpdates;\n let stop;\n if (watchOptions.flush === \"sync\") {\n const ignore = shallowRef(false);\n ignorePrevAsyncUpdates = () => {\n };\n ignoreUpdates = (updater) => {\n ignore.value = true;\n updater();\n ignore.value = false;\n };\n stop = watch(\n source,\n (...args) => {\n if (!ignore.value)\n filteredCb(...args);\n },\n watchOptions\n );\n } else {\n const disposables = [];\n const ignoreCounter = shallowRef(0);\n const syncCounter = shallowRef(0);\n ignorePrevAsyncUpdates = () => {\n ignoreCounter.value = syncCounter.value;\n };\n disposables.push(\n watch(\n source,\n () => {\n syncCounter.value++;\n },\n { ...watchOptions, flush: \"sync\" }\n )\n );\n ignoreUpdates = (updater) => {\n const syncCounterPrev = syncCounter.value;\n updater();\n ignoreCounter.value += syncCounter.value - syncCounterPrev;\n };\n disposables.push(\n watch(\n source,\n (...args) => {\n const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n ignoreCounter.value = 0;\n syncCounter.value = 0;\n if (ignore)\n return;\n filteredCb(...args);\n },\n watchOptions\n )\n );\n stop = () => {\n disposables.forEach((fn) => fn());\n };\n }\n return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchImmediate(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n immediate: true\n }\n );\n}\n\nfunction watchOnce(source, cb, options) {\n const stop = watch(source, (...args) => {\n nextTick(() => stop());\n return cb(...args);\n }, options);\n return stop;\n}\n\nfunction watchThrottled(source, cb, options = {}) {\n const {\n throttle = 0,\n trailing = true,\n leading = true,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: throttleFilter(throttle, trailing, leading)\n }\n );\n}\n\nfunction watchTriggerable(source, cb, options = {}) {\n let cleanupFn;\n function onEffect() {\n if (!cleanupFn)\n return;\n const fn = cleanupFn;\n cleanupFn = void 0;\n fn();\n }\n function onCleanup(callback) {\n cleanupFn = callback;\n }\n const _cb = (value, oldValue) => {\n onEffect();\n return cb(value, oldValue, onCleanup);\n };\n const res = watchIgnorable(source, _cb, options);\n const { ignoreUpdates } = res;\n const trigger = () => {\n let res2;\n ignoreUpdates(() => {\n res2 = _cb(getWatchSources(source), getOldValue(source));\n });\n return res2;\n };\n return {\n ...res,\n trigger\n };\n}\nfunction getWatchSources(sources) {\n if (isReactive(sources))\n return sources;\n if (Array.isArray(sources))\n return sources.map((item) => toValue$1(item));\n return toValue$1(sources);\n}\nfunction getOldValue(source) {\n return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n const stop = watch(\n source,\n (v, ov, onInvalidate) => {\n if (v) {\n if (options == null ? void 0 : options.once)\n nextTick(() => stop());\n cb(v, ov, onInvalidate);\n }\n },\n {\n ...options,\n once: false\n }\n );\n return stop;\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createRef, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, computedEager as eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, provideLocal, pxValue, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toArray, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n", "import { noop, makeDestructurable, camelize, isClient, toArray, watchImmediate, isObject, tryOnScopeDispose, isIOS, notNullish, tryOnMounted, objectOmit, promiseTimeout, until, injectLocal, provideLocal, pxValue, increaseWithUnit, objectEntries, createRef, createSingletonPromise, useTimeoutFn, pausableWatch, toRef, createEventHook, useIntervalFn, computedWithControl, timestamp, pausableFilter, watchIgnorable, debounceFilter, bypassFilter, createFilterWrapper, toRefs, watchOnce, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, tryOnUnmounted, clamp, syncRef, objectPick, watchWithFilter, identity, isDef, whenever, isWorker } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, shallowRef, ref, watchEffect, computed, inject, defineComponent, h, TransitionGroup, shallowReactive, Fragment, toValue, unref, getCurrentInstance, onMounted, watch, customRef, onUpdated, readonly, reactive, hasInjectionContext, toRaw, nextTick, markRaw, getCurrentScope, isReadonly, onBeforeUpdate } from 'vue';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n let options;\n if (isRef(optionsOrRef)) {\n options = {\n evaluating: optionsOrRef\n };\n } else {\n options = optionsOrRef || {};\n }\n const {\n lazy = false,\n evaluating = void 0,\n shallow = true,\n onError = noop\n } = options;\n const started = shallowRef(!lazy);\n const current = shallow ? shallowRef(initialState) : ref(initialState);\n let counter = 0;\n watchEffect(async (onInvalidate) => {\n if (!started.value)\n return;\n counter++;\n const counterAtBeginning = counter;\n let hasFinished = false;\n if (evaluating) {\n Promise.resolve().then(() => {\n evaluating.value = true;\n });\n }\n try {\n const result = await evaluationCallback((cancelCallback) => {\n onInvalidate(() => {\n if (evaluating)\n evaluating.value = false;\n if (!hasFinished)\n cancelCallback();\n });\n });\n if (counterAtBeginning === counter)\n current.value = result;\n } catch (e) {\n onError(e);\n } finally {\n if (evaluating && counterAtBeginning === counter)\n evaluating.value = false;\n hasFinished = true;\n }\n });\n if (lazy) {\n return computed(() => {\n started.value = true;\n return current.value;\n });\n } else {\n return current;\n }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n let source = inject(key);\n if (defaultSource)\n source = inject(key, defaultSource);\n if (treatDefaultAsFactory)\n source = inject(key, defaultSource, treatDefaultAsFactory);\n if (typeof options === \"function\") {\n return computed((ctx) => options(source, ctx));\n } else {\n return computed({\n get: (ctx) => options.get(source, ctx),\n set: options.set\n });\n }\n}\n\nfunction createReusableTemplate(options = {}) {\n const {\n inheritAttrs = true\n } = options;\n const render = shallowRef();\n const define = /*@__PURE__*/ defineComponent({\n setup(_, { slots }) {\n return () => {\n render.value = slots.default;\n };\n }\n });\n const reuse = /*@__PURE__*/ defineComponent({\n inheritAttrs,\n props: options.props,\n setup(props, { attrs, slots }) {\n return () => {\n var _a;\n if (!render.value && process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n const vnode = (_a = render.value) == null ? void 0 : _a.call(render, {\n ...options.props == null ? keysToCamelKebabCase(attrs) : props,\n $slots: slots\n });\n return inheritAttrs && (vnode == null ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n };\n }\n });\n return makeDestructurable(\n { define, reuse },\n [define, reuse]\n );\n}\nfunction keysToCamelKebabCase(obj) {\n const newObj = {};\n for (const key in obj)\n newObj[camelize(key)] = obj[key];\n return newObj;\n}\n\nfunction createTemplatePromise(options = {}) {\n let index = 0;\n const instances = ref([]);\n function create(...args) {\n const props = shallowReactive({\n key: index++,\n args,\n promise: void 0,\n resolve: () => {\n },\n reject: () => {\n },\n isResolving: false,\n options\n });\n instances.value.push(props);\n props.promise = new Promise((_resolve, _reject) => {\n props.resolve = (v) => {\n props.isResolving = true;\n return _resolve(v);\n };\n props.reject = _reject;\n }).finally(() => {\n props.promise = void 0;\n const index2 = instances.value.indexOf(props);\n if (index2 !== -1)\n instances.value.splice(index2, 1);\n });\n return props.promise;\n }\n function start(...args) {\n if (options.singleton && instances.value.length > 0)\n return instances.value[0].promise;\n return create(...args);\n }\n const component = /*@__PURE__*/ defineComponent((_, { slots }) => {\n const renderList = () => instances.value.map((props) => {\n var _a;\n return h(Fragment, { key: props.key }, (_a = slots.default) == null ? void 0 : _a.call(slots, props));\n });\n if (options.transition)\n return () => h(TransitionGroup, options.transition, renderList);\n return renderList;\n });\n component.start = start;\n return component;\n}\n\nfunction createUnrefFn(fn) {\n return function(...args) {\n return fn.apply(this, args.map((i) => toValue(i)));\n };\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = toValue(elRef);\n return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nfunction useEventListener(...args) {\n const cleanups = [];\n const cleanup = () => {\n cleanups.forEach((fn) => fn());\n cleanups.length = 0;\n };\n const register = (el, event, listener, options) => {\n el.addEventListener(event, listener, options);\n return () => el.removeEventListener(event, listener, options);\n };\n const firstParamTargets = computed(() => {\n const test = toArray(toValue(args[0])).filter((e) => e != null);\n return test.every((e) => typeof e !== \"string\") ? test : void 0;\n });\n const stopWatch = watchImmediate(\n () => {\n var _a, _b;\n return [\n (_b = (_a = firstParamTargets.value) == null ? void 0 : _a.map((e) => unrefElement(e))) != null ? _b : [defaultWindow].filter((e) => e != null),\n toArray(toValue(firstParamTargets.value ? args[1] : args[0])),\n toArray(unref(firstParamTargets.value ? args[2] : args[1])),\n // @ts-expect-error - TypeScript gets the correct types, but somehow still complains\n toValue(firstParamTargets.value ? args[3] : args[2])\n ];\n },\n ([raw_targets, raw_events, raw_listeners, raw_options]) => {\n cleanup();\n if (!(raw_targets == null ? void 0 : raw_targets.length) || !(raw_events == null ? void 0 : raw_events.length) || !(raw_listeners == null ? void 0 : raw_listeners.length))\n return;\n const optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;\n cleanups.push(\n ...raw_targets.flatMap(\n (el) => raw_events.flatMap(\n (event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))\n )\n )\n );\n },\n { flush: \"post\" }\n );\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(cleanup);\n return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore = [], capture = true, detectIframe = false, controls = false } = options;\n if (!window) {\n return controls ? { stop: noop, cancel: noop, trigger: noop } : noop;\n }\n if (isIOS && !_iOSWorkaround) {\n _iOSWorkaround = true;\n const listenerOptions = { passive: true };\n Array.from(window.document.body.children).forEach((el) => useEventListener(el, \"click\", noop, listenerOptions));\n useEventListener(window.document.documentElement, \"click\", noop, listenerOptions);\n }\n let shouldListen = true;\n const shouldIgnore = (event) => {\n return toValue(ignore).some((target2) => {\n if (typeof target2 === \"string\") {\n return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n } else {\n const el = unrefElement(target2);\n return el && (event.target === el || event.composedPath().includes(el));\n }\n });\n };\n function hasMultipleRoots(target2) {\n const vm = toValue(target2);\n return vm && vm.$.subTree.shapeFlag === 16;\n }\n function checkMultipleRoots(target2, event) {\n const vm = toValue(target2);\n const children = vm.$.subTree && vm.$.subTree.children;\n if (children == null || !Array.isArray(children))\n return false;\n return children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n }\n const listener = (event) => {\n const el = unrefElement(target);\n if (event.target == null)\n return;\n if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event))\n return;\n if (!el || el === event.target || event.composedPath().includes(el))\n return;\n if (\"detail\" in event && event.detail === 0)\n shouldListen = !shouldIgnore(event);\n if (!shouldListen) {\n shouldListen = true;\n return;\n }\n handler(event);\n };\n let isProcessingClick = false;\n const cleanup = [\n useEventListener(window, \"click\", (event) => {\n if (!isProcessingClick) {\n isProcessingClick = true;\n setTimeout(() => {\n isProcessingClick = false;\n }, 0);\n listener(event);\n }\n }, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n }, { passive: true }),\n detectIframe && useEventListener(window, \"blur\", (event) => {\n setTimeout(() => {\n var _a;\n const el = unrefElement(target);\n if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement))) {\n handler(event);\n }\n }, 0);\n }, { passive: true })\n ].filter(Boolean);\n const stop = () => cleanup.forEach((fn) => fn());\n if (controls) {\n return {\n stop,\n cancel: () => {\n shouldListen = false;\n },\n trigger: (event) => {\n shouldListen = true;\n listener(event);\n shouldListen = false;\n }\n };\n }\n return stop;\n}\n\nfunction useMounted() {\n const isMounted = shallowRef(false);\n const instance = getCurrentInstance();\n if (instance) {\n onMounted(() => {\n isMounted.value = true;\n }, instance);\n }\n return isMounted;\n}\n\nfunction useSupported(callback) {\n const isMounted = useMounted();\n return computed(() => {\n isMounted.value;\n return Boolean(callback());\n });\n}\n\nfunction useMutationObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...mutationOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const value = toValue(target);\n const items = toArray(value).map(unrefElement).filter(notNullish);\n return new Set(items);\n });\n const stopWatch = watch(\n () => targets.value,\n (targets2) => {\n cleanup();\n if (isSupported.value && targets2.size) {\n observer = new MutationObserver(callback);\n targets2.forEach((el) => observer.observe(el, mutationOptions));\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const takeRecords = () => {\n return observer == null ? void 0 : observer.takeRecords();\n };\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop,\n takeRecords\n };\n}\n\nfunction onElementRemoval(target, callback, options = {}) {\n const {\n window = defaultWindow,\n document = window == null ? void 0 : window.document,\n flush = \"sync\"\n } = options;\n if (!window || !document)\n return noop;\n let stopFn;\n const cleanupAndUpdate = (fn) => {\n stopFn == null ? void 0 : stopFn();\n stopFn = fn;\n };\n const stopWatch = watchEffect(() => {\n const el = unrefElement(target);\n if (el) {\n const { stop } = useMutationObserver(\n document,\n (mutationsList) => {\n const targetRemoved = mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el));\n if (targetRemoved) {\n callback(mutationsList);\n }\n },\n {\n window,\n childList: true,\n subtree: true\n }\n );\n cleanupAndUpdate(stop);\n }\n }, { flush });\n const stopHandle = () => {\n stopWatch();\n cleanupAndUpdate();\n };\n tryOnScopeDispose(stopHandle);\n return stopHandle;\n}\n\nfunction createKeyPredicate(keyFilter) {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n return () => true;\n}\nfunction onKeyStroke(...args) {\n let key;\n let handler;\n let options = {};\n if (args.length === 3) {\n key = args[0];\n handler = args[1];\n options = args[2];\n } else if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n key = true;\n handler = args[0];\n options = args[1];\n } else {\n key = args[0];\n handler = args[1];\n }\n } else {\n key = true;\n handler = args[0];\n }\n const {\n target = defaultWindow,\n eventName = \"keydown\",\n passive = false,\n dedupe = false\n } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (e.repeat && toValue(dedupe))\n return;\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keydown\" });\n}\nfunction onKeyPressed(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keypress\" });\n}\nfunction onKeyUp(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keyup\" });\n}\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n var _a, _b;\n const elementRef = computed(() => unrefElement(target));\n let timeout;\n let posStart;\n let startTimestamp;\n let hasLongPressed = false;\n function clear() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = void 0;\n }\n posStart = void 0;\n startTimestamp = void 0;\n hasLongPressed = false;\n }\n function onRelease(ev) {\n var _a2, _b2, _c;\n const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed];\n clear();\n if (!(options == null ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp)\n return;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - _posStart.x;\n const dy = ev.y - _posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n }\n function onDown(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n clear();\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n posStart = {\n x: ev.x,\n y: ev.y\n };\n startTimestamp = ev.timeStamp;\n timeout = setTimeout(\n () => {\n hasLongPressed = true;\n handler(ev);\n },\n (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n );\n }\n function onMove(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - posStart.x;\n const dy = ev.y - posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n clear();\n }\n const listenerOptions = {\n capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n };\n const cleanup = [\n useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n ];\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction isFocusedElementEditable() {\n const { activeElement, body } = document;\n if (!activeElement)\n return false;\n if (activeElement === body)\n return false;\n switch (activeElement.tagName) {\n case \"INPUT\":\n case \"TEXTAREA\":\n return true;\n }\n return activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({\n keyCode,\n metaKey,\n ctrlKey,\n altKey\n}) {\n if (metaKey || ctrlKey || altKey)\n return false;\n if (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105)\n return true;\n if (keyCode >= 65 && keyCode <= 90)\n return true;\n return false;\n}\nfunction onStartTyping(callback, options = {}) {\n const { document: document2 = defaultDocument } = options;\n const keydown = (event) => {\n if (!isFocusedElementEditable() && isTypedCharValid(event)) {\n callback(event);\n }\n };\n if (document2)\n useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n const instance = getCurrentInstance();\n let _trigger = () => {\n };\n const element = customRef((track, trigger) => {\n _trigger = trigger;\n return {\n get() {\n var _a, _b;\n track();\n return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n },\n set() {\n }\n };\n });\n tryOnMounted(_trigger);\n onUpdated(_trigger);\n return element;\n}\n\nfunction useActiveElement(options = {}) {\n var _a;\n const {\n window = defaultWindow,\n deep = true,\n triggerOnRemoval = false\n } = options;\n const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n const getDeepActiveElement = () => {\n var _a2;\n let element = document == null ? void 0 : document.activeElement;\n if (deep) {\n while (element == null ? void 0 : element.shadowRoot)\n element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement;\n }\n return element;\n };\n const activeElement = shallowRef();\n const trigger = () => {\n activeElement.value = getDeepActiveElement();\n };\n if (window) {\n const listenerOptions = {\n capture: true,\n passive: true\n };\n useEventListener(\n window,\n \"blur\",\n (event) => {\n if (event.relatedTarget !== null)\n return;\n trigger();\n },\n listenerOptions\n );\n useEventListener(\n window,\n \"focus\",\n trigger,\n listenerOptions\n );\n }\n if (triggerOnRemoval) {\n onElementRemoval(activeElement, trigger, { document });\n }\n trigger();\n return activeElement;\n}\n\nfunction useRafFn(fn, options = {}) {\n const {\n immediate = true,\n fpsLimit = void 0,\n window = defaultWindow,\n once = false\n } = options;\n const isActive = shallowRef(false);\n const intervalLimit = computed(() => {\n return fpsLimit ? 1e3 / toValue(fpsLimit) : null;\n });\n let previousFrameTimestamp = 0;\n let rafId = null;\n function loop(timestamp) {\n if (!isActive.value || !window)\n return;\n if (!previousFrameTimestamp)\n previousFrameTimestamp = timestamp;\n const delta = timestamp - previousFrameTimestamp;\n if (intervalLimit.value && delta < intervalLimit.value) {\n rafId = window.requestAnimationFrame(loop);\n return;\n }\n previousFrameTimestamp = timestamp;\n fn({ delta, timestamp });\n if (once) {\n isActive.value = false;\n rafId = null;\n return;\n }\n rafId = window.requestAnimationFrame(loop);\n }\n function resume() {\n if (!isActive.value && window) {\n isActive.value = true;\n previousFrameTimestamp = 0;\n rafId = window.requestAnimationFrame(loop);\n }\n }\n function pause() {\n isActive.value = false;\n if (rafId != null && window) {\n window.cancelAnimationFrame(rafId);\n rafId = null;\n }\n }\n if (immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive: readonly(isActive),\n pause,\n resume\n };\n}\n\nfunction useAnimate(target, keyframes, options) {\n let config;\n let animateOptions;\n if (isObject(options)) {\n config = options;\n animateOptions = objectOmit(options, [\"window\", \"immediate\", \"commitStyles\", \"persist\", \"onReady\", \"onError\"]);\n } else {\n config = { duration: options };\n animateOptions = options;\n }\n const {\n window = defaultWindow,\n immediate = true,\n commitStyles,\n persist,\n playbackRate: _playbackRate = 1,\n onReady,\n onError = (e) => {\n console.error(e);\n }\n } = config;\n const isSupported = useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n const animate = shallowRef(void 0);\n const store = shallowReactive({\n startTime: null,\n currentTime: null,\n timeline: null,\n playbackRate: _playbackRate,\n pending: false,\n playState: immediate ? \"idle\" : \"paused\",\n replaceState: \"active\"\n });\n const pending = computed(() => store.pending);\n const playState = computed(() => store.playState);\n const replaceState = computed(() => store.replaceState);\n const startTime = computed({\n get() {\n return store.startTime;\n },\n set(value) {\n store.startTime = value;\n if (animate.value)\n animate.value.startTime = value;\n }\n });\n const currentTime = computed({\n get() {\n return store.currentTime;\n },\n set(value) {\n store.currentTime = value;\n if (animate.value) {\n animate.value.currentTime = value;\n syncResume();\n }\n }\n });\n const timeline = computed({\n get() {\n return store.timeline;\n },\n set(value) {\n store.timeline = value;\n if (animate.value)\n animate.value.timeline = value;\n }\n });\n const playbackRate = computed({\n get() {\n return store.playbackRate;\n },\n set(value) {\n store.playbackRate = value;\n if (animate.value)\n animate.value.playbackRate = value;\n }\n });\n const play = () => {\n if (animate.value) {\n try {\n animate.value.play();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n } else {\n update();\n }\n };\n const pause = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.pause();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const reverse = () => {\n var _a;\n if (!animate.value)\n update();\n try {\n (_a = animate.value) == null ? void 0 : _a.reverse();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n };\n const finish = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.finish();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const cancel = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.cancel();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n watch(() => unrefElement(target), (el) => {\n if (el) {\n update();\n } else {\n animate.value = void 0;\n }\n });\n watch(() => keyframes, (value) => {\n if (animate.value) {\n update();\n const targetEl = unrefElement(target);\n if (targetEl) {\n animate.value.effect = new KeyframeEffect(\n targetEl,\n toValue(value),\n animateOptions\n );\n }\n }\n }, { deep: true });\n tryOnMounted(() => update(true), false);\n tryOnScopeDispose(cancel);\n function update(init) {\n const el = unrefElement(target);\n if (!isSupported.value || !el)\n return;\n if (!animate.value)\n animate.value = el.animate(toValue(keyframes), animateOptions);\n if (persist)\n animate.value.persist();\n if (_playbackRate !== 1)\n animate.value.playbackRate = _playbackRate;\n if (init && !immediate)\n animate.value.pause();\n else\n syncResume();\n onReady == null ? void 0 : onReady(animate.value);\n }\n const listenerOptions = { passive: true };\n useEventListener(animate, [\"cancel\", \"finish\", \"remove\"], syncPause, listenerOptions);\n useEventListener(animate, \"finish\", () => {\n var _a;\n if (commitStyles)\n (_a = animate.value) == null ? void 0 : _a.commitStyles();\n }, listenerOptions);\n const { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n if (!animate.value)\n return;\n store.pending = animate.value.pending;\n store.playState = animate.value.playState;\n store.replaceState = animate.value.replaceState;\n store.startTime = animate.value.startTime;\n store.currentTime = animate.value.currentTime;\n store.timeline = animate.value.timeline;\n store.playbackRate = animate.value.playbackRate;\n }, { immediate: false });\n function syncResume() {\n if (isSupported.value)\n resumeRef();\n }\n function syncPause() {\n if (isSupported.value && window)\n window.requestAnimationFrame(pauseRef);\n }\n return {\n isSupported,\n animate,\n // actions\n play,\n pause,\n reverse,\n finish,\n cancel,\n // state\n pending,\n playState,\n replaceState,\n startTime,\n currentTime,\n timeline,\n playbackRate\n };\n}\n\nfunction useAsyncQueue(tasks, options) {\n const {\n interrupt = true,\n onError = noop,\n onFinished = noop,\n signal\n } = options || {};\n const promiseState = {\n aborted: \"aborted\",\n fulfilled: \"fulfilled\",\n pending: \"pending\",\n rejected: \"rejected\"\n };\n const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null }));\n const result = reactive(initialResult);\n const activeIndex = shallowRef(-1);\n if (!tasks || tasks.length === 0) {\n onFinished();\n return {\n activeIndex,\n result\n };\n }\n function updateResult(state, res) {\n activeIndex.value++;\n result[activeIndex.value].data = res;\n result[activeIndex.value].state = state;\n }\n tasks.reduce((prev, curr) => {\n return prev.then((prevRes) => {\n var _a;\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, new Error(\"aborted\"));\n return;\n }\n if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n onFinished();\n return;\n }\n const done = curr(prevRes).then((currentRes) => {\n updateResult(promiseState.fulfilled, currentRes);\n if (activeIndex.value === tasks.length - 1)\n onFinished();\n return currentRes;\n });\n if (!signal)\n return done;\n return Promise.race([done, whenAborted(signal)]);\n }).catch((e) => {\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, e);\n return e;\n }\n updateResult(promiseState.rejected, e);\n onError();\n return e;\n });\n }, Promise.resolve());\n return {\n activeIndex,\n result\n };\n}\nfunction whenAborted(signal) {\n return new Promise((resolve, reject) => {\n const error = new Error(\"aborted\");\n if (signal.aborted)\n reject(error);\n else\n signal.addEventListener(\"abort\", () => reject(error), { once: true });\n });\n}\n\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n onSuccess = noop,\n resetOnExecute = true,\n shallow = true,\n throwError\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = shallowRef(false);\n const isLoading = shallowRef(false);\n const error = shallowRef(void 0);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = void 0;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n onSuccess(data);\n } catch (e) {\n error.value = e;\n onError(e);\n if (throwError)\n throw e;\n } finally {\n isLoading.value = false;\n }\n return state.value;\n }\n if (immediate) {\n execute(delay);\n }\n const shell = {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n function waitUntilIsLoaded() {\n return new Promise((resolve, reject) => {\n until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n });\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilIsLoaded().then(onFulfilled, onRejected);\n }\n };\n}\n\nconst defaults = {\n array: (v) => JSON.stringify(v),\n object: (v) => JSON.stringify(v),\n set: (v) => JSON.stringify(Array.from(v)),\n map: (v) => JSON.stringify(Object.fromEntries(v)),\n null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n if (!target)\n return defaults.null;\n if (target instanceof Map)\n return defaults.map;\n else if (target instanceof Set)\n return defaults.set;\n else if (Array.isArray(target))\n return defaults.array;\n else\n return defaults.object;\n}\n\nfunction useBase64(target, options) {\n const base64 = shallowRef(\"\");\n const promise = shallowRef();\n function execute() {\n if (!isClient)\n return;\n promise.value = new Promise((resolve, reject) => {\n try {\n const _target = toValue(target);\n if (_target == null) {\n resolve(\"\");\n } else if (typeof _target === \"string\") {\n resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n } else if (_target instanceof Blob) {\n resolve(blobToBase64(_target));\n } else if (_target instanceof ArrayBuffer) {\n resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n } else if (_target instanceof HTMLCanvasElement) {\n resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n } else if (_target instanceof HTMLImageElement) {\n const img = _target.cloneNode(false);\n img.crossOrigin = \"Anonymous\";\n imgLoaded(img).then(() => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n }).catch(reject);\n } else if (typeof _target === \"object\") {\n const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n const serialized = _serializeFn(_target);\n return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n } else {\n reject(new Error(\"target is unsupported types\"));\n }\n } catch (error) {\n reject(error);\n }\n });\n promise.value.then((res) => {\n base64.value = (options == null ? void 0 : options.dataUrl) === false ? res.replace(/^data:.*?;base64,/, \"\") : res;\n });\n return promise.value;\n }\n if (isRef(target) || typeof target === \"function\")\n watch(target, execute, { immediate: true });\n else\n execute();\n return {\n base64,\n promise,\n execute\n };\n}\nfunction imgLoaded(img) {\n return new Promise((resolve, reject) => {\n if (!img.complete) {\n img.onload = () => {\n resolve();\n };\n img.onerror = reject;\n } else {\n resolve();\n }\n });\n}\nfunction blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const fr = new FileReader();\n fr.onload = (e) => {\n resolve(e.target.result);\n };\n fr.onerror = reject;\n fr.readAsDataURL(blob);\n });\n}\n\nfunction useBattery(options = {}) {\n const { navigator = defaultNavigator } = options;\n const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n const isSupported = useSupported(() => navigator && \"getBattery\" in navigator && typeof navigator.getBattery === \"function\");\n const charging = shallowRef(false);\n const chargingTime = shallowRef(0);\n const dischargingTime = shallowRef(0);\n const level = shallowRef(1);\n let battery;\n function updateBatteryInfo() {\n charging.value = this.charging;\n chargingTime.value = this.chargingTime || 0;\n dischargingTime.value = this.dischargingTime || 0;\n level.value = this.level;\n }\n if (isSupported.value) {\n navigator.getBattery().then((_battery) => {\n battery = _battery;\n updateBatteryInfo.call(battery);\n useEventListener(battery, events, updateBatteryInfo, { passive: true });\n });\n }\n return {\n isSupported,\n charging,\n chargingTime,\n dischargingTime,\n level\n };\n}\n\nfunction useBluetooth(options) {\n let {\n acceptAllDevices = false\n } = options || {};\n const {\n filters = void 0,\n optionalServices = void 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n const device = shallowRef();\n const error = shallowRef(null);\n watch(device, () => {\n connectToBluetoothGATTServer();\n });\n async function requestDevice() {\n if (!isSupported.value)\n return;\n error.value = null;\n if (filters && filters.length > 0)\n acceptAllDevices = false;\n try {\n device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n acceptAllDevices,\n filters,\n optionalServices\n }));\n } catch (err) {\n error.value = err;\n }\n }\n const server = shallowRef();\n const isConnected = shallowRef(false);\n function reset() {\n isConnected.value = false;\n device.value = void 0;\n server.value = void 0;\n }\n async function connectToBluetoothGATTServer() {\n error.value = null;\n if (device.value && device.value.gatt) {\n useEventListener(device, \"gattserverdisconnected\", reset, { passive: true });\n try {\n server.value = await device.value.gatt.connect();\n isConnected.value = server.value.connected;\n } catch (err) {\n error.value = err;\n }\n }\n }\n tryOnMounted(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.connect();\n });\n tryOnScopeDispose(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n });\n return {\n isSupported,\n isConnected: readonly(isConnected),\n // Device:\n device,\n requestDevice,\n // Server:\n server,\n // Errors:\n error\n };\n}\n\nconst ssrWidthSymbol = Symbol(\"vueuse-ssr-width\");\nfunction useSSRWidth() {\n const ssrWidth = hasInjectionContext() ? injectLocal(ssrWidthSymbol, null) : null;\n return typeof ssrWidth === \"number\" ? ssrWidth : void 0;\n}\nfunction provideSSRWidth(width, app) {\n if (app !== void 0) {\n app.provide(ssrWidthSymbol, width);\n } else {\n provideLocal(ssrWidthSymbol, width);\n }\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow, ssrWidth = useSSRWidth() } = options;\n const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n const ssrSupport = shallowRef(typeof ssrWidth === \"number\");\n const mediaQuery = shallowRef();\n const matches = shallowRef(false);\n const handler = (event) => {\n matches.value = event.matches;\n };\n watchEffect(() => {\n if (ssrSupport.value) {\n ssrSupport.value = !isSupported.value;\n const queryStrings = toValue(query).split(\",\");\n matches.value = queryStrings.some((queryString) => {\n const not = queryString.includes(\"not all\");\n const minWidth = queryString.match(/\\(\\s*min-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n const maxWidth = queryString.match(/\\(\\s*max-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n let res = Boolean(minWidth || maxWidth);\n if (minWidth && res) {\n res = ssrWidth >= pxValue(minWidth[1]);\n }\n if (maxWidth && res) {\n res = ssrWidth <= pxValue(maxWidth[1]);\n }\n return not ? !res : res;\n });\n return;\n }\n if (!isSupported.value)\n return;\n mediaQuery.value = window.matchMedia(toValue(query));\n matches.value = mediaQuery.value.matches;\n });\n useEventListener(mediaQuery, \"change\", handler, { passive: true });\n return computed(() => matches.value);\n}\n\nconst breakpointsTailwind = {\n \"sm\": 640,\n \"md\": 768,\n \"lg\": 1024,\n \"xl\": 1280,\n \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\nconst breakpointsVuetifyV2 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1264,\n xl: 1904\n};\nconst breakpointsVuetifyV3 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n xxl: 2560\n};\nconst breakpointsVuetify = breakpointsVuetifyV2;\nconst breakpointsAntDesign = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\nconst breakpointsQuasar = {\n xs: 0,\n sm: 600,\n md: 1024,\n lg: 1440,\n xl: 1920\n};\nconst breakpointsSematic = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n \"3xs\": 360,\n \"2xs\": 480,\n \"xs\": 600,\n \"sm\": 768,\n \"md\": 1024,\n \"lg\": 1280,\n \"xl\": 1440,\n \"2xl\": 1600,\n \"3xl\": 1920,\n \"4xl\": 2560\n};\nconst breakpointsPrimeFlex = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200\n};\nconst breakpointsElement = {\n xs: 0,\n sm: 768,\n md: 992,\n lg: 1200,\n xl: 1920\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n function getValue(k, delta) {\n let v = toValue(breakpoints[toValue(k)]);\n if (delta != null)\n v = increaseWithUnit(v, delta);\n if (typeof v === \"number\")\n v = `${v}px`;\n return v;\n }\n const { window = defaultWindow, strategy = \"min-width\", ssrWidth = useSSRWidth() } = options;\n const ssrSupport = typeof ssrWidth === \"number\";\n const mounted = ssrSupport ? shallowRef(false) : { value: true };\n if (ssrSupport) {\n tryOnMounted(() => mounted.value = !!window);\n }\n function match(query, size) {\n if (!mounted.value && ssrSupport) {\n return query === \"min\" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size);\n }\n if (!window)\n return false;\n return window.matchMedia(`(${query}-width: ${size})`).matches;\n }\n const greaterOrEqual = (k) => {\n return useMediaQuery(() => `(min-width: ${getValue(k)})`, options);\n };\n const smallerOrEqual = (k) => {\n return useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n };\n const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n Object.defineProperty(shortcuts, k, {\n get: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n enumerable: true,\n configurable: true\n });\n return shortcuts;\n }, {});\n function current() {\n const points = Object.keys(breakpoints).map((k) => [k, shortcutMethods[k], pxValue(getValue(k))]).sort((a, b) => a[2] - b[2]);\n return computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n }\n return Object.assign(shortcutMethods, {\n greaterOrEqual,\n smallerOrEqual,\n greater(k) {\n return useMediaQuery(() => `(min-width: ${getValue(k, 0.1)})`, options);\n },\n smaller(k) {\n return useMediaQuery(() => `(max-width: ${getValue(k, -0.1)})`, options);\n },\n between(a, b) {\n return useMediaQuery(() => `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n },\n isGreater(k) {\n return match(\"min\", getValue(k, 0.1));\n },\n isGreaterOrEqual(k) {\n return match(\"min\", getValue(k));\n },\n isSmaller(k) {\n return match(\"max\", getValue(k, -0.1));\n },\n isSmallerOrEqual(k) {\n return match(\"max\", getValue(k));\n },\n isInBetween(a, b) {\n return match(\"min\", getValue(a)) && match(\"max\", getValue(b, -0.1));\n },\n current,\n active() {\n const bps = current();\n return computed(() => bps.value.length === 0 ? \"\" : bps.value.at(strategy === \"min-width\" ? -1 : 0));\n }\n });\n}\n\nfunction useBroadcastChannel(options) {\n const {\n name,\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n const isClosed = shallowRef(false);\n const channel = ref();\n const data = ref();\n const error = shallowRef(null);\n const post = (data2) => {\n if (channel.value)\n channel.value.postMessage(data2);\n };\n const close = () => {\n if (channel.value)\n channel.value.close();\n isClosed.value = true;\n };\n if (isSupported.value) {\n tryOnMounted(() => {\n error.value = null;\n channel.value = new BroadcastChannel(name);\n const listenerOptions = {\n passive: true\n };\n useEventListener(channel, \"message\", (e) => {\n data.value = e.data;\n }, listenerOptions);\n useEventListener(channel, \"messageerror\", (e) => {\n error.value = e;\n }, listenerOptions);\n useEventListener(channel, \"close\", () => {\n isClosed.value = true;\n }, listenerOptions);\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n isSupported,\n channel,\n data,\n post,\n close,\n error,\n isClosed\n };\n}\n\nconst WRITABLE_PROPERTIES = [\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"search\"\n];\nfunction useBrowserLocation(options = {}) {\n const { window = defaultWindow } = options;\n const refs = Object.fromEntries(\n WRITABLE_PROPERTIES.map((key) => [key, ref()])\n );\n for (const [key, ref] of objectEntries(refs)) {\n watch(ref, (value) => {\n if (!(window == null ? void 0 : window.location) || window.location[key] === value)\n return;\n window.location[key] = value;\n });\n }\n const buildState = (trigger) => {\n var _a;\n const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n const { origin } = (window == null ? void 0 : window.location) || {};\n for (const key of WRITABLE_PROPERTIES)\n refs[key].value = (_a = window == null ? void 0 : window.location) == null ? void 0 : _a[key];\n return reactive({\n trigger,\n state: state2,\n length,\n origin,\n ...refs\n });\n };\n const state = ref(buildState(\"load\"));\n if (window) {\n const listenerOptions = { passive: true };\n useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), listenerOptions);\n useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), listenerOptions);\n }\n return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, options) {\n const { deepRefs = true, ...watchOptions } = options || {};\n const cachedValue = createRef(refValue.value, deepRefs);\n watch(() => refValue.value, (value) => {\n if (!comparator(value, cachedValue.value))\n cachedValue.value = value;\n }, watchOptions);\n return cachedValue;\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n const {\n controls = false,\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n const permissionStatus = shallowRef();\n const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n const state = shallowRef();\n const update = () => {\n var _a, _b;\n state.value = (_b = (_a = permissionStatus.value) == null ? void 0 : _a.state) != null ? _b : \"prompt\";\n };\n useEventListener(permissionStatus, \"change\", update, { passive: true });\n const query = createSingletonPromise(async () => {\n if (!isSupported.value)\n return;\n if (!permissionStatus.value) {\n try {\n permissionStatus.value = await navigator.permissions.query(desc);\n } catch (e) {\n permissionStatus.value = void 0;\n } finally {\n update();\n }\n }\n if (controls)\n return toRaw(permissionStatus.value);\n });\n query();\n if (controls) {\n return {\n state,\n isSupported,\n query\n };\n } else {\n return state;\n }\n}\n\nfunction useClipboard(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500,\n legacy = false\n } = options;\n const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const permissionRead = usePermission(\"clipboard-read\");\n const permissionWrite = usePermission(\"clipboard-write\");\n const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n const text = shallowRef(\"\");\n const copied = shallowRef(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n async function updateText() {\n let useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionRead.value));\n if (!useLegacy) {\n try {\n text.value = await navigator.clipboard.readText();\n } catch (e) {\n useLegacy = true;\n }\n }\n if (useLegacy) {\n text.value = legacyRead();\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateText, { passive: true });\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n let useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionWrite.value));\n if (!useLegacy) {\n try {\n await navigator.clipboard.writeText(value);\n } catch (e) {\n useLegacy = true;\n }\n }\n if (useLegacy)\n legacyCopy(value);\n text.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n function legacyCopy(value) {\n const ta = document.createElement(\"textarea\");\n ta.value = value != null ? value : \"\";\n ta.style.position = \"absolute\";\n ta.style.opacity = \"0\";\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n ta.remove();\n }\n function legacyRead() {\n var _a, _b, _c;\n return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n }\n function isAllowed(status) {\n return status === \"granted\" || status === \"prompt\";\n }\n return {\n isSupported,\n text,\n copied,\n copy\n };\n}\n\nfunction useClipboardItems(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500\n } = options;\n const isSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const content = ref([]);\n const copied = shallowRef(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n function updateContent() {\n if (isSupported.value) {\n navigator.clipboard.read().then((items) => {\n content.value = items;\n });\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateContent, { passive: true });\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n await navigator.clipboard.write(value);\n content.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n return {\n isSupported,\n content,\n copied,\n copy\n };\n}\n\nfunction cloneFnJSON(source) {\n return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n const cloned = ref({});\n const isModified = shallowRef(false);\n let _lastSync = false;\n const {\n manual,\n clone = cloneFnJSON,\n // watch options\n deep = true,\n immediate = true\n } = options;\n watch(cloned, () => {\n if (_lastSync) {\n _lastSync = false;\n return;\n }\n isModified.value = true;\n }, {\n deep: true,\n flush: \"sync\"\n });\n function sync() {\n _lastSync = true;\n isModified.value = false;\n cloned.value = clone(toValue(source));\n }\n if (!manual && (isRef(source) || typeof source === \"function\")) {\n watch(source, sync, {\n ...options,\n deep,\n immediate\n });\n } else {\n sync();\n }\n return { cloned, isModified, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n if (!(globalKey in _global))\n _global[globalKey] = _global[globalKey] || {};\n return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n handlers[key] = fn;\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n },\n initOnMounted\n } = options;\n const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n const keyComputed = computed(() => toValue(key));\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = toValue(defaults);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n data,\n () => write(data.value),\n { flush, deep, eventFilter }\n );\n watch(keyComputed, () => update(), { flush });\n if (window && listenToStorageChanges) {\n tryOnMounted(() => {\n if (storage instanceof Storage)\n useEventListener(window, \"storage\", update, { passive: true });\n else\n useEventListener(window, customStorageEventName, updateFromCustomEvent);\n if (initOnMounted)\n update();\n });\n }\n if (!initOnMounted)\n update();\n function dispatchWriteEvent(oldValue, newValue) {\n if (window) {\n const payload = {\n key: keyComputed.value,\n oldValue,\n newValue,\n storageArea: storage\n };\n window.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, {\n detail: payload\n }));\n }\n }\n function write(v) {\n try {\n const oldValue = storage.getItem(keyComputed.value);\n if (v == null) {\n dispatchWriteEvent(oldValue, null);\n storage.removeItem(keyComputed.value);\n } else {\n const serialized = serializer.write(v);\n if (oldValue !== serialized) {\n storage.setItem(keyComputed.value, serialized);\n dispatchWriteEvent(oldValue, serialized);\n }\n }\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n const rawValue = event ? event.newValue : storage.getItem(keyComputed.value);\n if (rawValue == null) {\n if (writeDefaults && rawInit != null)\n storage.setItem(keyComputed.value, serializer.write(rawInit));\n return rawInit;\n } else if (!event && mergeDefaults) {\n const value = serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n return mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n return { ...rawInit, ...value };\n return value;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n }\n function update(event) {\n if (event && event.storageArea !== storage)\n return;\n if (event && event.key == null) {\n data.value = rawInit;\n return;\n }\n if (event && event.key !== keyComputed.value)\n return;\n pauseWatch();\n try {\n if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n data.value = read(event);\n } catch (e) {\n onError(e);\n } finally {\n if (event)\n nextTick(resumeWatch);\n else\n resumeWatch();\n }\n }\n function updateFromCustomEvent(event) {\n update(event.detail);\n }\n return data;\n}\n\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n initialValue = \"auto\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef,\n emitAuto,\n disableTransition = true\n } = options;\n const modes = {\n auto: \"\",\n light: \"light\",\n dark: \"dark\",\n ...options.modes || {}\n };\n const preferredDark = usePreferredDark({ window });\n const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n const updateHTMLAttrs = getSSRHandler(\n \"updateHTMLAttrs\",\n (selector2, attribute2, value) => {\n const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n if (!el)\n return;\n const classesToAdd = /* @__PURE__ */ new Set();\n const classesToRemove = /* @__PURE__ */ new Set();\n let attributeToChange = null;\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n classesToAdd.add(v);\n else\n classesToRemove.add(v);\n });\n } else {\n attributeToChange = { key: attribute2, value };\n }\n if (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null)\n return;\n let style;\n if (disableTransition) {\n style = window.document.createElement(\"style\");\n style.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n window.document.head.appendChild(style);\n }\n for (const c of classesToAdd) {\n el.classList.add(c);\n }\n for (const c of classesToRemove) {\n el.classList.remove(c);\n }\n if (attributeToChange) {\n el.setAttribute(attributeToChange.key, attributeToChange.value);\n }\n if (disableTransition) {\n window.getComputedStyle(style).opacity;\n document.head.removeChild(style);\n }\n }\n );\n function defaultOnChanged(mode) {\n var _a;\n updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n tryOnMounted(() => onChanged(state.value));\n const auto = computed({\n get() {\n return emitAuto ? store.value : state.value;\n },\n set(v) {\n store.value = v;\n }\n });\n return Object.assign(auto, { store, system, state });\n}\n\nfunction useConfirmDialog(revealed = shallowRef(false)) {\n const confirmHook = createEventHook();\n const cancelHook = createEventHook();\n const revealHook = createEventHook();\n let _resolve = noop;\n const reveal = (data) => {\n revealHook.trigger(data);\n revealed.value = true;\n return new Promise((resolve) => {\n _resolve = resolve;\n });\n };\n const confirm = (data) => {\n revealed.value = false;\n confirmHook.trigger(data);\n _resolve({ data, isCanceled: false });\n };\n const cancel = (data) => {\n revealed.value = false;\n cancelHook.trigger(data);\n _resolve({ data, isCanceled: true });\n };\n return {\n isRevealed: computed(() => revealed.value),\n reveal,\n confirm,\n cancel,\n onReveal: revealHook.on,\n onConfirm: confirmHook.on,\n onCancel: cancelHook.on\n };\n}\n\nfunction useCountdown(initialCountdown, options) {\n var _a, _b;\n const remaining = shallowRef(toValue(initialCountdown));\n const intervalController = useIntervalFn(() => {\n var _a2, _b2;\n const value = remaining.value - 1;\n remaining.value = value < 0 ? 0 : value;\n (_a2 = options == null ? void 0 : options.onTick) == null ? void 0 : _a2.call(options);\n if (remaining.value <= 0) {\n intervalController.pause();\n (_b2 = options == null ? void 0 : options.onComplete) == null ? void 0 : _b2.call(options);\n }\n }, (_a = options == null ? void 0 : options.interval) != null ? _a : 1e3, { immediate: (_b = options == null ? void 0 : options.immediate) != null ? _b : false });\n const reset = (countdown) => {\n var _a2;\n remaining.value = (_a2 = toValue(countdown)) != null ? _a2 : toValue(initialCountdown);\n };\n const stop = () => {\n intervalController.pause();\n reset();\n };\n const resume = () => {\n if (!intervalController.isActive.value) {\n if (remaining.value > 0) {\n intervalController.resume();\n }\n }\n };\n const start = (countdown) => {\n reset(countdown);\n intervalController.resume();\n };\n return {\n remaining,\n reset,\n stop,\n start,\n pause: intervalController.pause,\n resume,\n isActive: intervalController.isActive\n };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n const { window = defaultWindow, initialValue, observe = false } = options;\n const variable = shallowRef(initialValue);\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n });\n function updateCssVar() {\n var _a;\n const key = toValue(prop);\n const el = toValue(elRef);\n if (el && window && key) {\n const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n variable.value = value || variable.value || initialValue;\n }\n }\n if (observe) {\n useMutationObserver(elRef, updateCssVar, {\n attributeFilter: [\"style\", \"class\"],\n window\n });\n }\n watch(\n [elRef, () => toValue(prop)],\n (_, old) => {\n if (old[0] && old[1])\n old[0].style.removeProperty(old[1]);\n updateCssVar();\n },\n { immediate: true }\n );\n watch(\n [variable, elRef],\n ([val, el]) => {\n const raw_prop = toValue(prop);\n if ((el == null ? void 0 : el.style) && raw_prop) {\n if (val == null)\n el.style.removeProperty(raw_prop);\n else\n el.style.setProperty(raw_prop, val);\n }\n },\n { immediate: true }\n );\n return variable;\n}\n\nfunction useCurrentElement(rootComponent) {\n const vm = getCurrentInstance();\n const currentElement = computedWithControl(\n () => null,\n () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el\n );\n onUpdated(currentElement.trigger);\n onMounted(currentElement.trigger);\n return currentElement;\n}\n\nfunction useCycleList(list, options) {\n const state = shallowRef(getInitialValue());\n const listRef = toRef(list);\n const index = computed({\n get() {\n var _a;\n const targetList = listRef.value;\n let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n if (index2 < 0)\n index2 = (_a = options == null ? void 0 : options.fallbackIndex) != null ? _a : 0;\n return index2;\n },\n set(v) {\n set(v);\n }\n });\n function set(i) {\n const targetList = listRef.value;\n const length = targetList.length;\n const index2 = (i % length + length) % length;\n const value = targetList[index2];\n state.value = value;\n return value;\n }\n function shift(delta = 1) {\n return set(index.value + delta);\n }\n function next(n = 1) {\n return shift(n);\n }\n function prev(n = 1) {\n return shift(-n);\n }\n function getInitialValue() {\n var _a, _b;\n return (_b = toValue((_a = options == null ? void 0 : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : void 0;\n }\n watch(listRef, () => set(index.value));\n return {\n state,\n index,\n next,\n prev,\n go: set\n };\n}\n\nfunction useDark(options = {}) {\n const {\n valueDark = \"dark\",\n valueLight = \"\"\n } = options;\n const mode = useColorMode({\n ...options,\n onChanged: (mode2, defaultHandler) => {\n var _a;\n if (options.onChanged)\n (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\", defaultHandler, mode2);\n else\n defaultHandler(mode2);\n },\n modes: {\n dark: valueDark,\n light: valueLight\n }\n });\n const system = computed(() => mode.system.value);\n const isDark = computed({\n get() {\n return mode.value === \"dark\";\n },\n set(v) {\n const modeVal = v ? \"dark\" : \"light\";\n if (system.value === modeVal)\n mode.value = \"auto\";\n else\n mode.value = modeVal;\n }\n });\n return isDark;\n}\n\nfunction fnBypass(v) {\n return v;\n}\nfunction fnSetSource(source, value) {\n return source.value = value;\n}\nfunction defaultDump(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n const {\n clone = false,\n dump = defaultDump(clone),\n parse = defaultParse(clone),\n setSource = fnSetSource\n } = options;\n function _createHistoryRecord() {\n return markRaw({\n snapshot: dump(source.value),\n timestamp: timestamp()\n });\n }\n const last = ref(_createHistoryRecord());\n const undoStack = ref([]);\n const redoStack = ref([]);\n const _setSource = (record) => {\n setSource(source, parse(record.snapshot));\n last.value = record;\n };\n const commit = () => {\n undoStack.value.unshift(last.value);\n last.value = _createHistoryRecord();\n if (options.capacity && undoStack.value.length > options.capacity)\n undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n if (redoStack.value.length)\n redoStack.value.splice(0, redoStack.value.length);\n };\n const clear = () => {\n undoStack.value.splice(0, undoStack.value.length);\n redoStack.value.splice(0, redoStack.value.length);\n };\n const undo = () => {\n const state = undoStack.value.shift();\n if (state) {\n redoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const redo = () => {\n const state = redoStack.value.shift();\n if (state) {\n undoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const reset = () => {\n _setSource(last.value);\n };\n const history = computed(() => [last.value, ...undoStack.value]);\n const canUndo = computed(() => undoStack.value.length > 0);\n const canRedo = computed(() => redoStack.value.length > 0);\n return {\n source,\n undoStack,\n redoStack,\n last,\n history,\n canUndo,\n canRedo,\n clear,\n commit,\n reset,\n undo,\n redo\n };\n}\n\nfunction useRefHistory(source, options = {}) {\n const {\n deep = false,\n flush = \"pre\",\n eventFilter\n } = options;\n const {\n eventFilter: composedFilter,\n pause,\n resume: resumeTracking,\n isActive: isTracking\n } = pausableFilter(eventFilter);\n const {\n ignoreUpdates,\n ignorePrevAsyncUpdates,\n stop\n } = watchIgnorable(\n source,\n commit,\n { deep, flush, eventFilter: composedFilter }\n );\n function setSource(source2, value) {\n ignorePrevAsyncUpdates();\n ignoreUpdates(() => {\n source2.value = value;\n });\n }\n const manualHistory = useManualRefHistory(source, { ...options, clone: options.clone || deep, setSource });\n const { clear, commit: manualCommit } = manualHistory;\n function commit() {\n ignorePrevAsyncUpdates();\n manualCommit();\n }\n function resume(commitNow) {\n resumeTracking();\n if (commitNow)\n commit();\n }\n function batch(fn) {\n let canceled = false;\n const cancel = () => canceled = true;\n ignoreUpdates(() => {\n fn(cancel);\n });\n if (!canceled)\n commit();\n }\n function dispose() {\n stop();\n clear();\n }\n return {\n ...manualHistory,\n isTracking,\n pause,\n resume,\n commit,\n batch,\n dispose\n };\n}\n\nfunction useDebouncedRefHistory(source, options = {}) {\n const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nfunction useDeviceMotion(options = {}) {\n const {\n window = defaultWindow,\n requestPermissions = false,\n eventFilter = bypassFilter\n } = options;\n const isSupported = useSupported(() => typeof DeviceMotionEvent !== \"undefined\");\n const requirePermissions = useSupported(() => isSupported.value && \"requestPermission\" in DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === \"function\");\n const permissionGranted = shallowRef(false);\n const acceleration = ref({ x: null, y: null, z: null });\n const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n const interval = shallowRef(0);\n const accelerationIncludingGravity = ref({\n x: null,\n y: null,\n z: null\n });\n function init() {\n if (window) {\n const onDeviceMotion = createFilterWrapper(\n eventFilter,\n (event) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n acceleration.value = {\n x: ((_a = event.acceleration) == null ? void 0 : _a.x) || null,\n y: ((_b = event.acceleration) == null ? void 0 : _b.y) || null,\n z: ((_c = event.acceleration) == null ? void 0 : _c.z) || null\n };\n accelerationIncludingGravity.value = {\n x: ((_d = event.accelerationIncludingGravity) == null ? void 0 : _d.x) || null,\n y: ((_e = event.accelerationIncludingGravity) == null ? void 0 : _e.y) || null,\n z: ((_f = event.accelerationIncludingGravity) == null ? void 0 : _f.z) || null\n };\n rotationRate.value = {\n alpha: ((_g = event.rotationRate) == null ? void 0 : _g.alpha) || null,\n beta: ((_h = event.rotationRate) == null ? void 0 : _h.beta) || null,\n gamma: ((_i = event.rotationRate) == null ? void 0 : _i.gamma) || null\n };\n interval.value = event.interval;\n }\n );\n useEventListener(window, \"devicemotion\", onDeviceMotion, { passive: true });\n }\n }\n const ensurePermissions = async () => {\n if (!requirePermissions.value)\n permissionGranted.value = true;\n if (permissionGranted.value)\n return;\n if (requirePermissions.value) {\n const requestPermission = DeviceMotionEvent.requestPermission;\n try {\n const response = await requestPermission();\n if (response === \"granted\") {\n permissionGranted.value = true;\n init();\n }\n } catch (error) {\n console.error(error);\n }\n }\n };\n if (isSupported.value) {\n if (requestPermissions && requirePermissions.value) {\n ensurePermissions().then(() => init());\n } else {\n init();\n }\n }\n return {\n acceleration,\n accelerationIncludingGravity,\n rotationRate,\n interval,\n isSupported,\n requirePermissions,\n ensurePermissions,\n permissionGranted\n };\n}\n\nfunction useDeviceOrientation(options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n const isAbsolute = shallowRef(false);\n const alpha = shallowRef(null);\n const beta = shallowRef(null);\n const gamma = shallowRef(null);\n if (window && isSupported.value) {\n useEventListener(window, \"deviceorientation\", (event) => {\n isAbsolute.value = event.absolute;\n alpha.value = event.alpha;\n beta.value = event.beta;\n gamma.value = event.gamma;\n }, { passive: true });\n }\n return {\n isSupported,\n isAbsolute,\n alpha,\n beta,\n gamma\n };\n}\n\nfunction useDevicePixelRatio(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const pixelRatio = shallowRef(1);\n const query = useMediaQuery(() => `(resolution: ${pixelRatio.value}dppx)`, options);\n let stop = noop;\n if (window) {\n stop = watchImmediate(query, () => pixelRatio.value = window.devicePixelRatio);\n }\n return {\n pixelRatio: readonly(pixelRatio),\n stop\n };\n}\n\nfunction useDevicesList(options = {}) {\n const {\n navigator = defaultNavigator,\n requestPermissions = false,\n constraints = { audio: true, video: true },\n onUpdated\n } = options;\n const devices = ref([]);\n const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n const permissionGranted = shallowRef(false);\n let stream;\n async function update() {\n if (!isSupported.value)\n return;\n devices.value = await navigator.mediaDevices.enumerateDevices();\n onUpdated == null ? void 0 : onUpdated(devices.value);\n if (stream) {\n stream.getTracks().forEach((t) => t.stop());\n stream = null;\n }\n }\n async function ensurePermissions() {\n const deviceName = constraints.video ? \"camera\" : \"microphone\";\n if (!isSupported.value)\n return false;\n if (permissionGranted.value)\n return true;\n const { state, query } = usePermission(deviceName, { controls: true });\n await query();\n if (state.value !== \"granted\") {\n let granted = true;\n try {\n stream = await navigator.mediaDevices.getUserMedia(constraints);\n } catch (e) {\n stream = null;\n granted = false;\n }\n update();\n permissionGranted.value = granted;\n } else {\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n }\n if (isSupported.value) {\n if (requestPermissions)\n ensurePermissions();\n useEventListener(navigator.mediaDevices, \"devicechange\", update, { passive: true });\n update();\n }\n return {\n devices,\n ensurePermissions,\n permissionGranted,\n videoInputs,\n audioInputs,\n audioOutputs,\n isSupported\n };\n}\n\nfunction useDisplayMedia(options = {}) {\n var _a;\n const enabled = shallowRef((_a = options.enabled) != null ? _a : false);\n const video = options.video;\n const audio = options.audio;\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n });\n const constraint = { audio, video };\n const stream = shallowRef();\n async function _start() {\n var _a2;\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => useEventListener(t, \"ended\", stop, { passive: true }));\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else\n _stop();\n },\n { immediate: true }\n );\n return {\n isSupported,\n stream,\n start,\n stop,\n enabled\n };\n}\n\nfunction useDocumentVisibility(options = {}) {\n const { document = defaultDocument } = options;\n if (!document)\n return shallowRef(\"visible\");\n const visibility = shallowRef(document.visibilityState);\n useEventListener(document, \"visibilitychange\", () => {\n visibility.value = document.visibilityState;\n }, { passive: true });\n return visibility;\n}\n\nfunction useDraggable(target, options = {}) {\n var _a;\n const {\n pointerTypes,\n preventDefault,\n stopPropagation,\n exact,\n onMove,\n onEnd,\n onStart,\n initialValue,\n axis = \"both\",\n draggingElement = defaultWindow,\n containerElement,\n handle: draggingHandle = target,\n buttons = [0]\n } = options;\n const position = ref(\n (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }\n );\n const pressedDelta = ref();\n const filterEvent = (e) => {\n if (pointerTypes)\n return pointerTypes.includes(e.pointerType);\n return true;\n };\n const handleEvent = (e) => {\n if (toValue(preventDefault))\n e.preventDefault();\n if (toValue(stopPropagation))\n e.stopPropagation();\n };\n const start = (e) => {\n var _a2;\n if (!toValue(buttons).includes(e.button))\n return;\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (toValue(exact) && e.target !== toValue(target))\n return;\n const container = toValue(containerElement);\n const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container);\n const targetRect = toValue(target).getBoundingClientRect();\n const pos = {\n x: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),\n y: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)\n };\n if ((onStart == null ? void 0 : onStart(pos, e)) === false)\n return;\n pressedDelta.value = pos;\n handleEvent(e);\n };\n const move = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n const container = toValue(containerElement);\n const targetRect = toValue(target).getBoundingClientRect();\n let { x, y } = position.value;\n if (axis === \"x\" || axis === \"both\") {\n x = e.clientX - pressedDelta.value.x;\n if (container)\n x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n }\n if (axis === \"y\" || axis === \"both\") {\n y = e.clientY - pressedDelta.value.y;\n if (container)\n y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n }\n position.value = {\n x,\n y\n };\n onMove == null ? void 0 : onMove(position.value, e);\n handleEvent(e);\n };\n const end = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n pressedDelta.value = void 0;\n onEnd == null ? void 0 : onEnd(position.value, e);\n handleEvent(e);\n };\n if (isClient) {\n const config = () => {\n var _a2;\n return {\n capture: (_a2 = options.capture) != null ? _a2 : true,\n passive: !toValue(preventDefault)\n };\n };\n useEventListener(draggingHandle, \"pointerdown\", start, config);\n useEventListener(draggingElement, \"pointermove\", move, config);\n useEventListener(draggingElement, \"pointerup\", end, config);\n }\n return {\n ...toRefs(position),\n position,\n isDragging: computed(() => !!pressedDelta.value),\n style: computed(\n () => `left:${position.value.x}px;top:${position.value.y}px;`\n )\n };\n}\n\nfunction useDropZone(target, options = {}) {\n var _a, _b;\n const isOverDropZone = shallowRef(false);\n const files = shallowRef(null);\n let counter = 0;\n let isValid = true;\n if (isClient) {\n const _options = typeof options === \"function\" ? { onDrop: options } : options;\n const multiple = (_a = _options.multiple) != null ? _a : true;\n const preventDefaultForUnhandled = (_b = _options.preventDefaultForUnhandled) != null ? _b : false;\n const getFiles = (event) => {\n var _a2, _b2;\n const list = Array.from((_b2 = (_a2 = event.dataTransfer) == null ? void 0 : _a2.files) != null ? _b2 : []);\n return list.length === 0 ? null : multiple ? list : [list[0]];\n };\n const checkDataTypes = (types) => {\n const dataTypes = unref(_options.dataTypes);\n if (typeof dataTypes === \"function\")\n return dataTypes(types);\n if (!(dataTypes == null ? void 0 : dataTypes.length))\n return true;\n if (types.length === 0)\n return false;\n return types.every(\n (type) => dataTypes.some((allowedType) => type.includes(allowedType))\n );\n };\n const checkValidity = (items) => {\n const types = Array.from(items != null ? items : []).map((item) => item.type);\n const dataTypesValid = checkDataTypes(types);\n const multipleFilesValid = multiple || items.length <= 1;\n return dataTypesValid && multipleFilesValid;\n };\n const isSafari = () => /^(?:(?!chrome|android).)*safari/i.test(navigator.userAgent) && !(\"chrome\" in window);\n const handleDragEvent = (event, eventType) => {\n var _a2, _b2, _c, _d, _e, _f;\n const dataTransferItemList = (_a2 = event.dataTransfer) == null ? void 0 : _a2.items;\n isValid = (_b2 = dataTransferItemList && checkValidity(dataTransferItemList)) != null ? _b2 : false;\n if (preventDefaultForUnhandled) {\n event.preventDefault();\n }\n if (!isSafari() && !isValid) {\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"none\";\n }\n return;\n }\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"copy\";\n }\n const currentFiles = getFiles(event);\n switch (eventType) {\n case \"enter\":\n counter += 1;\n isOverDropZone.value = true;\n (_c = _options.onEnter) == null ? void 0 : _c.call(_options, null, event);\n break;\n case \"over\":\n (_d = _options.onOver) == null ? void 0 : _d.call(_options, null, event);\n break;\n case \"leave\":\n counter -= 1;\n if (counter === 0)\n isOverDropZone.value = false;\n (_e = _options.onLeave) == null ? void 0 : _e.call(_options, null, event);\n break;\n case \"drop\":\n counter = 0;\n isOverDropZone.value = false;\n if (isValid) {\n files.value = currentFiles;\n (_f = _options.onDrop) == null ? void 0 : _f.call(_options, currentFiles, event);\n }\n break;\n }\n };\n useEventListener(target, \"dragenter\", (event) => handleDragEvent(event, \"enter\"));\n useEventListener(target, \"dragover\", (event) => handleDragEvent(event, \"over\"));\n useEventListener(target, \"dragleave\", (event) => handleDragEvent(event, \"leave\"));\n useEventListener(target, \"drop\", (event) => handleDragEvent(event, \"drop\"));\n }\n return {\n files,\n isOverDropZone\n };\n}\n\nfunction useResizeObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...observerOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const _targets = toValue(target);\n return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n });\n const stopWatch = watch(\n targets,\n (els) => {\n cleanup();\n if (isSupported.value && window) {\n observer = new ResizeObserver(callback);\n for (const _el of els) {\n if (_el)\n observer.observe(_el, observerOptions);\n }\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementBounding(target, options = {}) {\n const {\n reset = true,\n windowResize = true,\n windowScroll = true,\n immediate = true,\n updateTiming = \"sync\"\n } = options;\n const height = shallowRef(0);\n const bottom = shallowRef(0);\n const left = shallowRef(0);\n const right = shallowRef(0);\n const top = shallowRef(0);\n const width = shallowRef(0);\n const x = shallowRef(0);\n const y = shallowRef(0);\n function recalculate() {\n const el = unrefElement(target);\n if (!el) {\n if (reset) {\n height.value = 0;\n bottom.value = 0;\n left.value = 0;\n right.value = 0;\n top.value = 0;\n width.value = 0;\n x.value = 0;\n y.value = 0;\n }\n return;\n }\n const rect = el.getBoundingClientRect();\n height.value = rect.height;\n bottom.value = rect.bottom;\n left.value = rect.left;\n right.value = rect.right;\n top.value = rect.top;\n width.value = rect.width;\n x.value = rect.x;\n y.value = rect.y;\n }\n function update() {\n if (updateTiming === \"sync\")\n recalculate();\n else if (updateTiming === \"next-frame\")\n requestAnimationFrame(() => recalculate());\n }\n useResizeObserver(target, update);\n watch(() => unrefElement(target), (ele) => !ele && update());\n useMutationObserver(target, update, {\n attributeFilter: [\"style\", \"class\"]\n });\n if (windowScroll)\n useEventListener(\"scroll\", update, { capture: true, passive: true });\n if (windowResize)\n useEventListener(\"resize\", update, { passive: true });\n tryOnMounted(() => {\n if (immediate)\n update();\n });\n return {\n height,\n bottom,\n left,\n right,\n top,\n width,\n x,\n y,\n update\n };\n}\n\nfunction useElementByPoint(options) {\n const {\n x,\n y,\n document = defaultDocument,\n multiple,\n interval = \"requestAnimationFrame\",\n immediate = true\n } = options;\n const isSupported = useSupported(() => {\n if (toValue(multiple))\n return document && \"elementsFromPoint\" in document;\n return document && \"elementFromPoint\" in document;\n });\n const element = shallowRef(null);\n const cb = () => {\n var _a, _b;\n element.value = toValue(multiple) ? (_a = document == null ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document == null ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null;\n };\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n return {\n isSupported,\n element,\n ...controls\n };\n}\n\nfunction useElementHover(el, options = {}) {\n const {\n delayEnter = 0,\n delayLeave = 0,\n triggerOnRemoval = false,\n window = defaultWindow\n } = options;\n const isHovered = shallowRef(false);\n let timer;\n const toggle = (entering) => {\n const delay = entering ? delayEnter : delayLeave;\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n }\n if (delay)\n timer = setTimeout(() => isHovered.value = entering, delay);\n else\n isHovered.value = entering;\n };\n if (!window)\n return isHovered;\n useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n if (triggerOnRemoval) {\n onElementRemoval(\n computed(() => unrefElement(el)),\n () => toggle(false)\n );\n }\n return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const { window = defaultWindow, box = \"content-box\" } = options;\n const isSVG = computed(() => {\n var _a, _b;\n return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n });\n const width = shallowRef(initialSize.width);\n const height = shallowRef(initialSize.height);\n const { stop: stop1 } = useResizeObserver(\n target,\n ([entry]) => {\n const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n if (window && isSVG.value) {\n const $elem = unrefElement(target);\n if ($elem) {\n const rect = $elem.getBoundingClientRect();\n width.value = rect.width;\n height.value = rect.height;\n }\n } else {\n if (boxSize) {\n const formatBoxSize = toArray(boxSize);\n width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n } else {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }\n }\n },\n options\n );\n tryOnMounted(() => {\n const ele = unrefElement(target);\n if (ele) {\n width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n }\n });\n const stop2 = watch(\n () => unrefElement(target),\n (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n }\n );\n function stop() {\n stop1();\n stop2();\n }\n return {\n width,\n height,\n stop\n };\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0,\n window = defaultWindow,\n immediate = true\n } = options;\n const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n const targets = computed(() => {\n const _target = toValue(target);\n return toArray(_target).map(unrefElement).filter(notNullish);\n });\n let cleanup = noop;\n const isActive = shallowRef(immediate);\n const stopWatch = isSupported.value ? watch(\n () => [targets.value, unrefElement(root), isActive.value],\n ([targets2, root2]) => {\n cleanup();\n if (!isActive.value)\n return;\n if (!targets2.length)\n return;\n const observer = new IntersectionObserver(\n callback,\n {\n root: unrefElement(root2),\n rootMargin,\n threshold\n }\n );\n targets2.forEach((el) => el && observer.observe(el));\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n },\n { immediate, flush: \"post\" }\n ) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n isActive.value = false;\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n isActive,\n pause() {\n cleanup();\n isActive.value = false;\n },\n resume() {\n isActive.value = true;\n },\n stop\n };\n}\n\nfunction useElementVisibility(element, options = {}) {\n const {\n window = defaultWindow,\n scrollTarget,\n threshold = 0,\n rootMargin,\n once = false\n } = options;\n const elementIsVisible = shallowRef(false);\n const { stop } = useIntersectionObserver(\n element,\n (intersectionObserverEntries) => {\n let isIntersecting = elementIsVisible.value;\n let latestTime = 0;\n for (const entry of intersectionObserverEntries) {\n if (entry.time >= latestTime) {\n latestTime = entry.time;\n isIntersecting = entry.isIntersecting;\n }\n }\n elementIsVisible.value = isIntersecting;\n if (once) {\n watchOnce(elementIsVisible, () => {\n stop();\n });\n }\n },\n {\n root: scrollTarget,\n window,\n threshold,\n rootMargin: toValue(rootMargin)\n }\n );\n return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n const scope = getCurrentScope();\n function on(listener) {\n var _a;\n const listeners = events.get(key) || /* @__PURE__ */ new Set();\n listeners.add(listener);\n events.set(key, listeners);\n const _off = () => off(listener);\n (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n return _off;\n }\n function once(listener) {\n function _listener(...args) {\n off(_listener);\n listener(...args);\n }\n return on(_listener);\n }\n function off(listener) {\n const listeners = events.get(key);\n if (!listeners)\n return;\n listeners.delete(listener);\n if (!listeners.size)\n reset();\n }\n function reset() {\n events.delete(key);\n }\n function emit(event, payload) {\n var _a;\n (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n }\n return { on, once, off, emit, reset };\n}\n\nfunction resolveNestedOptions$1(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useEventSource(url, events = [], options = {}) {\n const event = shallowRef(null);\n const data = shallowRef(null);\n const status = shallowRef(\"CONNECTING\");\n const eventSource = ref(null);\n const error = shallowRef(null);\n const urlRef = toRef(url);\n const lastEventId = shallowRef(null);\n let explicitlyClosed = false;\n let retried = 0;\n const {\n withCredentials = false,\n immediate = true,\n autoConnect = true,\n autoReconnect\n } = options;\n const close = () => {\n if (isClient && eventSource.value) {\n eventSource.value.close();\n eventSource.value = null;\n status.value = \"CLOSED\";\n explicitlyClosed = true;\n }\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const es = new EventSource(urlRef.value, { withCredentials });\n status.value = \"CONNECTING\";\n eventSource.value = es;\n es.onopen = () => {\n status.value = \"OPEN\";\n error.value = null;\n };\n es.onerror = (e) => {\n status.value = \"CLOSED\";\n error.value = e;\n if (es.readyState === 2 && !explicitlyClosed && autoReconnect) {\n es.close();\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions$1(autoReconnect);\n retried += 1;\n if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n setTimeout(_init, delay);\n else if (typeof retries === \"function\" && retries())\n setTimeout(_init, delay);\n else\n onFailed == null ? void 0 : onFailed();\n }\n };\n es.onmessage = (e) => {\n event.value = null;\n data.value = e.data;\n lastEventId.value = e.lastEventId;\n };\n for (const event_name of events) {\n useEventListener(es, event_name, (e) => {\n event.value = event_name;\n data.value = e.data || null;\n }, { passive: true });\n }\n };\n const open = () => {\n if (!isClient)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n open();\n if (autoConnect)\n watch(urlRef, open);\n tryOnScopeDispose(close);\n return {\n eventSource,\n event,\n data,\n status,\n error,\n open,\n close,\n lastEventId\n };\n}\n\nfunction useEyeDropper(options = {}) {\n const { initialValue = \"\" } = options;\n const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n const sRGBHex = shallowRef(initialValue);\n async function open(openOptions) {\n if (!isSupported.value)\n return;\n const eyeDropper = new window.EyeDropper();\n const result = await eyeDropper.open(openOptions);\n sRGBHex.value = result.sRGBHex;\n return result;\n }\n return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n const {\n baseUrl = \"\",\n rel = \"icon\",\n document = defaultDocument\n } = options;\n const favicon = toRef(newIcon);\n const applyIcon = (icon) => {\n const elements = document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n if (!elements || elements.length === 0) {\n const link = document == null ? void 0 : document.createElement(\"link\");\n if (link) {\n link.rel = rel;\n link.href = `${baseUrl}${icon}`;\n link.type = `image/${icon.split(\".\").pop()}`;\n document == null ? void 0 : document.head.append(link);\n }\n return;\n }\n elements == null ? void 0 : elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n };\n watch(\n favicon,\n (i, o) => {\n if (typeof i === \"string\" && i !== o)\n applyIcon(i);\n },\n { immediate: true }\n );\n return favicon;\n}\n\nconst payloadMapping = {\n json: \"application/json\",\n text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nconst reAbsolute = /^(?:[a-z][a-z\\d+\\-.]*:)?\\/\\//i;\nfunction isAbsoluteURL(url) {\n return reAbsolute.test(url);\n}\nfunction headersToObject(headers) {\n if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n return Object.fromEntries(headers.entries());\n return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n if (combination === \"overwrite\") {\n return async (ctx) => {\n let callback;\n for (let i = callbacks.length - 1; i >= 0; i--) {\n if (callbacks[i] != null) {\n callback = callbacks[i];\n break;\n }\n }\n if (callback)\n return { ...ctx, ...await callback(ctx) };\n return ctx;\n };\n } else {\n return async (ctx) => {\n for (const callback of callbacks) {\n if (callback)\n ctx = { ...ctx, ...await callback(ctx) };\n }\n return ctx;\n };\n }\n}\nfunction createFetch(config = {}) {\n const _combination = config.combination || \"chain\";\n const _options = config.options || {};\n const _fetchOptions = config.fetchOptions || {};\n function useFactoryFetch(url, ...args) {\n const computedUrl = computed(() => {\n const baseUrl = toValue(config.baseUrl);\n const targetUrl = toValue(url);\n return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n });\n let options = _options;\n let fetchOptions = _fetchOptions;\n if (args.length > 0) {\n if (isFetchOptions(args[0])) {\n options = {\n ...options,\n ...args[0],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n };\n } else {\n fetchOptions = {\n ...fetchOptions,\n ...args[0],\n headers: {\n ...headersToObject(fetchOptions.headers) || {},\n ...headersToObject(args[0].headers) || {}\n }\n };\n }\n }\n if (args.length > 1 && isFetchOptions(args[1])) {\n options = {\n ...options,\n ...args[1],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n };\n }\n return useFetch(computedUrl, fetchOptions, options);\n }\n return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n var _a;\n const supportsAbort = typeof AbortController === \"function\";\n let fetchOptions = {};\n let options = {\n immediate: true,\n refetch: false,\n timeout: 0,\n updateDataOnError: false\n };\n const config = {\n method: \"GET\",\n type: \"text\",\n payload: void 0\n };\n if (args.length > 0) {\n if (isFetchOptions(args[0]))\n options = { ...options, ...args[0] };\n else\n fetchOptions = args[0];\n }\n if (args.length > 1) {\n if (isFetchOptions(args[1]))\n options = { ...options, ...args[1] };\n }\n const {\n fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n initialData,\n timeout\n } = options;\n const responseEvent = createEventHook();\n const errorEvent = createEventHook();\n const finallyEvent = createEventHook();\n const isFinished = shallowRef(false);\n const isFetching = shallowRef(false);\n const aborted = shallowRef(false);\n const statusCode = shallowRef(null);\n const response = shallowRef(null);\n const error = shallowRef(null);\n const data = shallowRef(initialData || null);\n const canAbort = computed(() => supportsAbort && isFetching.value);\n let controller;\n let timer;\n const abort = () => {\n if (supportsAbort) {\n controller == null ? void 0 : controller.abort();\n controller = new AbortController();\n controller.signal.onabort = () => aborted.value = true;\n fetchOptions = {\n ...fetchOptions,\n signal: controller.signal\n };\n }\n };\n const loading = (isLoading) => {\n isFetching.value = isLoading;\n isFinished.value = !isLoading;\n };\n if (timeout)\n timer = useTimeoutFn(abort, timeout, { immediate: false });\n let executeCounter = 0;\n const execute = async (throwOnFailed = false) => {\n var _a2, _b;\n abort();\n loading(true);\n error.value = null;\n statusCode.value = null;\n aborted.value = false;\n executeCounter += 1;\n const currentExecuteCounter = executeCounter;\n const defaultFetchOptions = {\n method: config.method,\n headers: {}\n };\n const payload = toValue(config.payload);\n if (payload) {\n const headers = headersToObject(defaultFetchOptions.headers);\n const proto = Object.getPrototypeOf(payload);\n if (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData))\n config.payloadType = \"json\";\n if (config.payloadType)\n headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n }\n let isCanceled = false;\n const context = {\n url: toValue(url),\n options: {\n ...defaultFetchOptions,\n ...fetchOptions\n },\n cancel: () => {\n isCanceled = true;\n }\n };\n if (options.beforeFetch)\n Object.assign(context, await options.beforeFetch(context));\n if (isCanceled || !fetch) {\n loading(false);\n return Promise.resolve(null);\n }\n let responseData = null;\n if (timer)\n timer.start();\n return fetch(\n context.url,\n {\n ...defaultFetchOptions,\n ...context.options,\n headers: {\n ...headersToObject(defaultFetchOptions.headers),\n ...headersToObject((_b = context.options) == null ? void 0 : _b.headers)\n }\n }\n ).then(async (fetchResponse) => {\n response.value = fetchResponse;\n statusCode.value = fetchResponse.status;\n responseData = await fetchResponse.clone()[config.type]();\n if (!fetchResponse.ok) {\n data.value = initialData || null;\n throw new Error(fetchResponse.statusText);\n }\n if (options.afterFetch) {\n ({ data: responseData } = await options.afterFetch({\n data: responseData,\n response: fetchResponse,\n context,\n execute\n }));\n }\n data.value = responseData;\n responseEvent.trigger(fetchResponse);\n return fetchResponse;\n }).catch(async (fetchError) => {\n let errorData = fetchError.message || fetchError.name;\n if (options.onFetchError) {\n ({ error: errorData, data: responseData } = await options.onFetchError({\n data: responseData,\n error: fetchError,\n response: response.value,\n context,\n execute\n }));\n }\n error.value = errorData;\n if (options.updateDataOnError)\n data.value = responseData;\n errorEvent.trigger(fetchError);\n if (throwOnFailed)\n throw fetchError;\n return null;\n }).finally(() => {\n if (currentExecuteCounter === executeCounter)\n loading(false);\n if (timer)\n timer.stop();\n finallyEvent.trigger(null);\n });\n };\n const refetch = toRef(options.refetch);\n watch(\n [\n refetch,\n toRef(url)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n const shell = {\n isFinished: readonly(isFinished),\n isFetching: readonly(isFetching),\n statusCode,\n response,\n error,\n data,\n canAbort,\n aborted,\n abort,\n execute,\n onFetchResponse: responseEvent.on,\n onFetchError: errorEvent.on,\n onFetchFinally: finallyEvent.on,\n // method\n get: setMethod(\"GET\"),\n put: setMethod(\"PUT\"),\n post: setMethod(\"POST\"),\n delete: setMethod(\"DELETE\"),\n patch: setMethod(\"PATCH\"),\n head: setMethod(\"HEAD\"),\n options: setMethod(\"OPTIONS\"),\n // type\n json: setType(\"json\"),\n text: setType(\"text\"),\n blob: setType(\"blob\"),\n arrayBuffer: setType(\"arrayBuffer\"),\n formData: setType(\"formData\")\n };\n function setMethod(method) {\n return (payload, payloadType) => {\n if (!isFetching.value) {\n config.method = method;\n config.payload = payload;\n config.payloadType = payloadType;\n if (isRef(config.payload)) {\n watch(\n [\n refetch,\n toRef(config.payload)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return void 0;\n };\n }\n function waitUntilFinished() {\n return new Promise((resolve, reject) => {\n until(isFinished).toBe(true).then(() => resolve(shell)).catch(reject);\n });\n }\n function setType(type) {\n return () => {\n if (!isFetching.value) {\n config.type = type;\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return void 0;\n };\n }\n if (options.immediate)\n Promise.resolve().then(() => execute());\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n}\nfunction joinPaths(start, end) {\n if (!start.endsWith(\"/\") && !end.startsWith(\"/\")) {\n return `${start}/${end}`;\n }\n if (start.endsWith(\"/\") && end.startsWith(\"/\")) {\n return `${start.slice(0, -1)}${end}`;\n }\n return `${start}${end}`;\n}\n\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: \"*\",\n reset: false,\n directory: false\n};\nfunction prepareInitialFiles(files) {\n if (!files)\n return null;\n if (files instanceof FileList)\n return files;\n const dt = new DataTransfer();\n for (const file of files) {\n dt.items.add(file);\n }\n return dt.files;\n}\nfunction useFileDialog(options = {}) {\n const {\n document = defaultDocument\n } = options;\n const files = ref(prepareInitialFiles(options.initialFiles));\n const { on: onChange, trigger: changeTrigger } = createEventHook();\n const { on: onCancel, trigger: cancelTrigger } = createEventHook();\n let input;\n if (document) {\n input = document.createElement(\"input\");\n input.type = \"file\";\n input.onchange = (event) => {\n const result = event.target;\n files.value = result.files;\n changeTrigger(files.value);\n };\n input.oncancel = () => {\n cancelTrigger();\n };\n }\n const reset = () => {\n files.value = null;\n if (input && input.value) {\n input.value = \"\";\n changeTrigger(null);\n }\n };\n const open = (localOptions) => {\n if (!input)\n return;\n const _options = {\n ...DEFAULT_OPTIONS,\n ...options,\n ...localOptions\n };\n input.multiple = _options.multiple;\n input.accept = _options.accept;\n input.webkitdirectory = _options.directory;\n if (hasOwn(_options, \"capture\"))\n input.capture = _options.capture;\n if (_options.reset)\n reset();\n input.click();\n };\n return {\n files: readonly(files),\n open,\n reset,\n onCancel,\n onChange\n };\n}\n\nfunction useFileSystemAccess(options = {}) {\n const {\n window: _window = defaultWindow,\n dataType = \"Text\"\n } = options;\n const window = _window;\n const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n const fileHandle = shallowRef();\n const data = shallowRef();\n const file = shallowRef();\n const fileName = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n });\n const fileMIME = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n });\n const fileSize = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n });\n const fileLastModified = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n });\n async function open(_options = {}) {\n if (!isSupported.value)\n return;\n const [handle] = await window.showOpenFilePicker({ ...toValue(options), ..._options });\n fileHandle.value = handle;\n await updateData();\n }\n async function create(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n data.value = void 0;\n await updateData();\n }\n async function save(_options = {}) {\n if (!isSupported.value)\n return;\n if (!fileHandle.value)\n return saveAs(_options);\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function saveAs(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function updateFile() {\n var _a;\n file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n }\n async function updateData() {\n var _a, _b;\n await updateFile();\n const type = toValue(dataType);\n if (type === \"Text\")\n data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n else if (type === \"ArrayBuffer\")\n data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n else if (type === \"Blob\")\n data.value = file.value;\n }\n watch(() => toValue(dataType), updateData);\n return {\n isSupported,\n data,\n file,\n fileName,\n fileMIME,\n fileSize,\n fileLastModified,\n open,\n create,\n save,\n saveAs,\n updateData\n };\n}\n\nfunction useFocus(target, options = {}) {\n const { initialValue = false, focusVisible = false, preventScroll = false } = options;\n const innerFocused = shallowRef(false);\n const targetElement = computed(() => unrefElement(target));\n const listenerOptions = { passive: true };\n useEventListener(targetElement, \"focus\", (event) => {\n var _a, _b;\n if (!focusVisible || ((_b = (_a = event.target).matches) == null ? void 0 : _b.call(_a, \":focus-visible\")))\n innerFocused.value = true;\n }, listenerOptions);\n useEventListener(targetElement, \"blur\", () => innerFocused.value = false, listenerOptions);\n const focused = computed({\n get: () => innerFocused.value,\n set(value) {\n var _a, _b;\n if (!value && innerFocused.value)\n (_a = targetElement.value) == null ? void 0 : _a.blur();\n else if (value && !innerFocused.value)\n (_b = targetElement.value) == null ? void 0 : _b.focus({ preventScroll });\n }\n });\n watch(\n targetElement,\n () => {\n focused.value = initialValue;\n },\n { immediate: true, flush: \"post\" }\n );\n return { focused };\n}\n\nconst EVENT_FOCUS_IN = \"focusin\";\nconst EVENT_FOCUS_OUT = \"focusout\";\nconst PSEUDO_CLASS_FOCUS_WITHIN = \":focus-within\";\nfunction useFocusWithin(target, options = {}) {\n const { window = defaultWindow } = options;\n const targetElement = computed(() => unrefElement(target));\n const _focused = shallowRef(false);\n const focused = computed(() => _focused.value);\n const activeElement = useActiveElement(options);\n if (!window || !activeElement.value) {\n return { focused };\n }\n const listenerOptions = { passive: true };\n useEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true, listenerOptions);\n useEventListener(targetElement, EVENT_FOCUS_OUT, () => {\n var _a, _b, _c;\n return _focused.value = (_c = (_b = (_a = targetElement.value) == null ? void 0 : _a.matches) == null ? void 0 : _b.call(_a, PSEUDO_CLASS_FOCUS_WITHIN)) != null ? _c : false;\n }, listenerOptions);\n return { focused };\n}\n\nfunction useFps(options) {\n var _a;\n const fps = shallowRef(0);\n if (typeof performance === \"undefined\")\n return fps;\n const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n let last = performance.now();\n let ticks = 0;\n useRafFn(() => {\n ticks += 1;\n if (ticks >= every) {\n const now = performance.now();\n const diff = now - last;\n fps.value = Math.round(1e3 / (diff / ticks));\n last = now;\n ticks = 0;\n }\n });\n return fps;\n}\n\nconst eventHandlers = [\n \"fullscreenchange\",\n \"webkitfullscreenchange\",\n \"webkitendfullscreen\",\n \"mozfullscreenchange\",\n \"MSFullscreenChange\"\n];\nfunction useFullscreen(target, options = {}) {\n const {\n document = defaultDocument,\n autoExit = false\n } = options;\n const targetRef = computed(() => {\n var _a;\n return (_a = unrefElement(target)) != null ? _a : document == null ? void 0 : document.documentElement;\n });\n const isFullscreen = shallowRef(false);\n const requestMethod = computed(() => {\n return [\n \"requestFullscreen\",\n \"webkitRequestFullscreen\",\n \"webkitEnterFullscreen\",\n \"webkitEnterFullScreen\",\n \"webkitRequestFullScreen\",\n \"mozRequestFullScreen\",\n \"msRequestFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const exitMethod = computed(() => {\n return [\n \"exitFullscreen\",\n \"webkitExitFullscreen\",\n \"webkitExitFullScreen\",\n \"webkitCancelFullScreen\",\n \"mozCancelFullScreen\",\n \"msExitFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenEnabled = computed(() => {\n return [\n \"fullScreen\",\n \"webkitIsFullScreen\",\n \"webkitDisplayingFullscreen\",\n \"mozFullScreen\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenElementMethod = [\n \"fullscreenElement\",\n \"webkitFullscreenElement\",\n \"mozFullScreenElement\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document);\n const isSupported = useSupported(() => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n const isCurrentElementFullScreen = () => {\n if (fullscreenElementMethod)\n return (document == null ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n return false;\n };\n const isElementFullScreen = () => {\n if (fullscreenEnabled.value) {\n if (document && document[fullscreenEnabled.value] != null) {\n return document[fullscreenEnabled.value];\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[fullscreenEnabled.value]) != null) {\n return Boolean(target2[fullscreenEnabled.value]);\n }\n }\n }\n return false;\n };\n async function exit() {\n if (!isSupported.value || !isFullscreen.value)\n return;\n if (exitMethod.value) {\n if ((document == null ? void 0 : document[exitMethod.value]) != null) {\n await document[exitMethod.value]();\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[exitMethod.value]) != null)\n await target2[exitMethod.value]();\n }\n }\n isFullscreen.value = false;\n }\n async function enter() {\n if (!isSupported.value || isFullscreen.value)\n return;\n if (isElementFullScreen())\n await exit();\n const target2 = targetRef.value;\n if (requestMethod.value && (target2 == null ? void 0 : target2[requestMethod.value]) != null) {\n await target2[requestMethod.value]();\n isFullscreen.value = true;\n }\n }\n async function toggle() {\n await (isFullscreen.value ? exit() : enter());\n }\n const handlerCallback = () => {\n const isElementFullScreenValue = isElementFullScreen();\n if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen())\n isFullscreen.value = isElementFullScreenValue;\n };\n const listenerOptions = { capture: false, passive: true };\n useEventListener(document, eventHandlers, handlerCallback, listenerOptions);\n useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, listenerOptions);\n if (autoExit)\n tryOnScopeDispose(exit);\n return {\n isSupported,\n isFullscreen,\n enter,\n exit,\n toggle\n };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n return computed(() => {\n if (gamepad.value) {\n return {\n buttons: {\n a: gamepad.value.buttons[0],\n b: gamepad.value.buttons[1],\n x: gamepad.value.buttons[2],\n y: gamepad.value.buttons[3]\n },\n bumper: {\n left: gamepad.value.buttons[4],\n right: gamepad.value.buttons[5]\n },\n triggers: {\n left: gamepad.value.buttons[6],\n right: gamepad.value.buttons[7]\n },\n stick: {\n left: {\n horizontal: gamepad.value.axes[0],\n vertical: gamepad.value.axes[1],\n button: gamepad.value.buttons[10]\n },\n right: {\n horizontal: gamepad.value.axes[2],\n vertical: gamepad.value.axes[3],\n button: gamepad.value.buttons[11]\n }\n },\n dpad: {\n up: gamepad.value.buttons[12],\n down: gamepad.value.buttons[13],\n left: gamepad.value.buttons[14],\n right: gamepad.value.buttons[15]\n },\n back: gamepad.value.buttons[8],\n start: gamepad.value.buttons[9]\n };\n }\n return null;\n });\n}\nfunction useGamepad(options = {}) {\n const {\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n const gamepads = ref([]);\n const onConnectedHook = createEventHook();\n const onDisconnectedHook = createEventHook();\n const stateFromGamepad = (gamepad) => {\n const hapticActuators = [];\n const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n if (vibrationActuator)\n hapticActuators.push(vibrationActuator);\n if (gamepad.hapticActuators)\n hapticActuators.push(...gamepad.hapticActuators);\n return {\n id: gamepad.id,\n index: gamepad.index,\n connected: gamepad.connected,\n mapping: gamepad.mapping,\n timestamp: gamepad.timestamp,\n vibrationActuator: gamepad.vibrationActuator,\n hapticActuators,\n axes: gamepad.axes.map((axes) => axes),\n buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n };\n };\n const updateGamepadState = () => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\n }\n };\n const { isActive, pause, resume } = useRafFn(updateGamepadState);\n const onGamepadConnected = (gamepad) => {\n if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n gamepads.value.push(stateFromGamepad(gamepad));\n onConnectedHook.trigger(gamepad.index);\n }\n resume();\n };\n const onGamepadDisconnected = (gamepad) => {\n gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n onDisconnectedHook.trigger(gamepad.index);\n };\n const listenerOptions = { passive: true };\n useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad), listenerOptions);\n useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad), listenerOptions);\n tryOnMounted(() => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n onGamepadConnected(gamepad);\n }\n });\n pause();\n return {\n isSupported,\n onConnected: onConnectedHook.on,\n onDisconnected: onDisconnectedHook.on,\n gamepads,\n pause,\n resume,\n isActive\n };\n}\n\nfunction useGeolocation(options = {}) {\n const {\n enableHighAccuracy = true,\n maximumAge = 3e4,\n timeout = 27e3,\n navigator = defaultNavigator,\n immediate = true\n } = options;\n const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n const locatedAt = shallowRef(null);\n const error = shallowRef(null);\n const coords = ref({\n accuracy: 0,\n latitude: Number.POSITIVE_INFINITY,\n longitude: Number.POSITIVE_INFINITY,\n altitude: null,\n altitudeAccuracy: null,\n heading: null,\n speed: null\n });\n function updatePosition(position) {\n locatedAt.value = position.timestamp;\n coords.value = position.coords;\n error.value = null;\n }\n let watcher;\n function resume() {\n if (isSupported.value) {\n watcher = navigator.geolocation.watchPosition(\n updatePosition,\n (err) => error.value = err,\n {\n enableHighAccuracy,\n maximumAge,\n timeout\n }\n );\n }\n }\n if (immediate)\n resume();\n function pause() {\n if (watcher && navigator)\n navigator.geolocation.clearWatch(watcher);\n }\n tryOnScopeDispose(() => {\n pause();\n });\n return {\n isSupported,\n coords,\n locatedAt,\n error,\n resume,\n pause\n };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n const {\n initialState = false,\n listenForVisibilityChange = true,\n events = defaultEvents$1,\n window = defaultWindow,\n eventFilter = throttleFilter(50)\n } = options;\n const idle = shallowRef(initialState);\n const lastActive = shallowRef(timestamp());\n let timer;\n const reset = () => {\n idle.value = false;\n clearTimeout(timer);\n timer = setTimeout(() => idle.value = true, timeout);\n };\n const onEvent = createFilterWrapper(\n eventFilter,\n () => {\n lastActive.value = timestamp();\n reset();\n }\n );\n if (window) {\n const document = window.document;\n const listenerOptions = { passive: true };\n for (const event of events)\n useEventListener(window, event, onEvent, listenerOptions);\n if (listenForVisibilityChange) {\n useEventListener(document, \"visibilitychange\", () => {\n if (!document.hidden)\n onEvent();\n }, listenerOptions);\n }\n reset();\n }\n return {\n idle,\n lastActive,\n reset\n };\n}\n\nasync function loadImage(options) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy, width, height, decoding, fetchPriority, ismap, usemap } = options;\n img.src = src;\n if (srcset != null)\n img.srcset = srcset;\n if (sizes != null)\n img.sizes = sizes;\n if (clazz != null)\n img.className = clazz;\n if (loading != null)\n img.loading = loading;\n if (crossorigin != null)\n img.crossOrigin = crossorigin;\n if (referrerPolicy != null)\n img.referrerPolicy = referrerPolicy;\n if (width != null)\n img.width = width;\n if (height != null)\n img.height = height;\n if (decoding != null)\n img.decoding = decoding;\n if (fetchPriority != null)\n img.fetchPriority = fetchPriority;\n if (ismap != null)\n img.isMap = ismap;\n if (usemap != null)\n img.useMap = usemap;\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n const state = useAsyncState(\n () => loadImage(toValue(options)),\n void 0,\n {\n resetOnExecute: true,\n ...asyncStateOptions\n }\n );\n watch(\n () => toValue(options),\n () => state.execute(asyncStateOptions.delay),\n { deep: true }\n );\n return state;\n}\n\nfunction resolveElement(el) {\n if (typeof Window !== \"undefined\" && el instanceof Window)\n return el.document.documentElement;\n if (typeof Document !== \"undefined\" && el instanceof Document)\n return el.documentElement;\n return el;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n },\n behavior = \"auto\",\n window = defaultWindow,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const internalX = shallowRef(0);\n const internalY = shallowRef(0);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo(x2, void 0);\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo(void 0, y2);\n }\n });\n function scrollTo(_x, _y) {\n var _a, _b, _c, _d;\n if (!window)\n return;\n const _element = toValue(element);\n if (!_element)\n return;\n (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n top: (_a = toValue(_y)) != null ? _a : y.value,\n left: (_b = toValue(_x)) != null ? _b : x.value,\n behavior: toValue(behavior)\n });\n const scrollContainer = ((_d = _element == null ? void 0 : _element.document) == null ? void 0 : _d.documentElement) || (_element == null ? void 0 : _element.documentElement) || _element;\n if (x != null)\n internalX.value = scrollContainer.scrollLeft;\n if (y != null)\n internalY.value = scrollContainer.scrollTop;\n }\n const isScrolling = shallowRef(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n const onScrollEnd = (e) => {\n if (!isScrolling.value)\n return;\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n };\n const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n const setArrivedState = (target) => {\n var _a;\n if (!window)\n return;\n const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target);\n const { display, flexDirection, direction } = getComputedStyle(el);\n const directionMultipler = direction === \"rtl\" ? -1 : 1;\n const scrollLeft = el.scrollLeft;\n directions.left = scrollLeft < internalX.value;\n directions.right = scrollLeft > internalX.value;\n const left = Math.abs(scrollLeft * directionMultipler) <= (offset.left || 0);\n const right = Math.abs(scrollLeft * directionMultipler) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"row-reverse\") {\n arrivedState.left = right;\n arrivedState.right = left;\n } else {\n arrivedState.left = left;\n arrivedState.right = right;\n }\n internalX.value = scrollLeft;\n let scrollTop = el.scrollTop;\n if (target === window.document && !scrollTop)\n scrollTop = window.document.body.scrollTop;\n directions.top = scrollTop < internalY.value;\n directions.bottom = scrollTop > internalY.value;\n const top = Math.abs(scrollTop) <= (offset.top || 0);\n const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"column-reverse\") {\n arrivedState.top = bottom;\n arrivedState.bottom = top;\n } else {\n arrivedState.top = top;\n arrivedState.bottom = bottom;\n }\n internalY.value = scrollTop;\n };\n const onScrollHandler = (e) => {\n var _a;\n if (!window)\n return;\n const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n setArrivedState(eventTarget);\n isScrolling.value = true;\n onScrollEndDebounced(e);\n onScroll(e);\n };\n useEventListener(\n element,\n \"scroll\",\n throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n eventListenerOptions\n );\n tryOnMounted(() => {\n try {\n const _element = toValue(element);\n if (!_element)\n return;\n setArrivedState(_element);\n } catch (e) {\n onError(e);\n }\n });\n useEventListener(\n element,\n \"scrollend\",\n onScrollEnd,\n eventListenerOptions\n );\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions,\n measure() {\n const _element = toValue(element);\n if (window && _element)\n setArrivedState(_element);\n }\n };\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a;\n const {\n direction = \"bottom\",\n interval = 100,\n canLoadMore = () => true\n } = options;\n const state = reactive(useScroll(\n element,\n {\n ...options,\n offset: {\n [direction]: (_a = options.distance) != null ? _a : 0,\n ...options.offset\n }\n }\n ));\n const promise = ref();\n const isLoading = computed(() => !!promise.value);\n const observedElement = computed(() => {\n return resolveElement(toValue(element));\n });\n const isElementVisible = useElementVisibility(observedElement);\n function checkAndLoad() {\n state.measure();\n if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n return;\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n if (state.arrivedState[direction] || isNarrower) {\n if (!promise.value) {\n promise.value = Promise.all([\n onLoadMore(state),\n new Promise((resolve) => setTimeout(resolve, interval))\n ]).finally(() => {\n promise.value = null;\n nextTick(() => checkAndLoad());\n });\n }\n }\n }\n const stop = watch(\n () => [state.arrivedState[direction], isElementVisible.value],\n checkAndLoad,\n { immediate: true }\n );\n tryOnUnmounted(stop);\n return {\n isLoading,\n reset() {\n nextTick(() => checkAndLoad());\n }\n };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n const {\n events = defaultEvents,\n document = defaultDocument,\n initial = null\n } = options;\n const state = shallowRef(initial);\n if (document) {\n events.forEach((listenerEvent) => {\n useEventListener(document, listenerEvent, (evt) => {\n if (typeof evt.getModifierState === \"function\")\n state.value = evt.getModifierState(modifier);\n }, { passive: true });\n });\n }\n return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n ctrl: \"control\",\n command: \"meta\",\n cmd: \"meta\",\n option: \"alt\",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n const {\n reactive: useReactive = false,\n target = defaultWindow,\n aliasMap = DefaultMagicKeysAliasMap,\n passive = true,\n onEventFired = noop\n } = options;\n const current = reactive(/* @__PURE__ */ new Set());\n const obj = {\n toJSON() {\n return {};\n },\n current\n };\n const refs = useReactive ? reactive(obj) : obj;\n const metaDeps = /* @__PURE__ */ new Set();\n const usedKeys = /* @__PURE__ */ new Set();\n function setRefs(key, value) {\n if (key in refs) {\n if (useReactive)\n refs[key] = value;\n else\n refs[key].value = value;\n }\n }\n function reset() {\n current.clear();\n for (const key of usedKeys)\n setRefs(key, false);\n }\n function updateRefs(e, value) {\n var _a, _b;\n const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n const values = [code, key].filter(Boolean);\n if (key) {\n if (value)\n current.add(key);\n else\n current.delete(key);\n }\n for (const key2 of values) {\n usedKeys.add(key2);\n setRefs(key2, value);\n }\n if (key === \"meta\" && !value) {\n metaDeps.forEach((key2) => {\n current.delete(key2);\n setRefs(key2, false);\n });\n metaDeps.clear();\n } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n [...current, ...values].forEach((key2) => metaDeps.add(key2));\n }\n }\n useEventListener(target, \"keydown\", (e) => {\n updateRefs(e, true);\n return onEventFired(e);\n }, { passive });\n useEventListener(target, \"keyup\", (e) => {\n updateRefs(e, false);\n return onEventFired(e);\n }, { passive });\n useEventListener(\"blur\", reset, { passive });\n useEventListener(\"focus\", reset, { passive });\n const proxy = new Proxy(\n refs,\n {\n get(target2, prop, rec) {\n if (typeof prop !== \"string\")\n return Reflect.get(target2, prop, rec);\n prop = prop.toLowerCase();\n if (prop in aliasMap)\n prop = aliasMap[prop];\n if (!(prop in refs)) {\n if (/[+_-]/.test(prop)) {\n const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n refs[prop] = computed(() => keys.map((key) => toValue(proxy[key])).every(Boolean));\n } else {\n refs[prop] = shallowRef(false);\n }\n }\n const r = Reflect.get(target2, prop, rec);\n return useReactive ? toValue(r) : r;\n }\n }\n );\n return proxy;\n}\n\nfunction usingElRef(source, cb) {\n if (toValue(source))\n cb(toValue(source));\n}\nfunction timeRangeToArray(timeRanges) {\n let ranges = [];\n for (let i = 0; i < timeRanges.length; ++i)\n ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n return ranges;\n}\nfunction tracksToArray(tracks) {\n return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n src: \"\",\n tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n target = toRef(target);\n options = {\n ...defaultOptions,\n ...options\n };\n const {\n document = defaultDocument\n } = options;\n const listenerOptions = { passive: true };\n const currentTime = shallowRef(0);\n const duration = shallowRef(0);\n const seeking = shallowRef(false);\n const volume = shallowRef(1);\n const waiting = shallowRef(false);\n const ended = shallowRef(false);\n const playing = shallowRef(false);\n const rate = shallowRef(1);\n const stalled = shallowRef(false);\n const buffered = ref([]);\n const tracks = ref([]);\n const selectedTrack = shallowRef(-1);\n const isPictureInPicture = shallowRef(false);\n const muted = shallowRef(false);\n const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n const sourceErrorEvent = createEventHook();\n const playbackErrorEvent = createEventHook();\n const disableTrack = (track) => {\n usingElRef(target, (el) => {\n if (track) {\n const id = typeof track === \"number\" ? track : track.id;\n el.textTracks[id].mode = \"disabled\";\n } else {\n for (let i = 0; i < el.textTracks.length; ++i)\n el.textTracks[i].mode = \"disabled\";\n }\n selectedTrack.value = -1;\n });\n };\n const enableTrack = (track, disableTracks = true) => {\n usingElRef(target, (el) => {\n const id = typeof track === \"number\" ? track : track.id;\n if (disableTracks)\n disableTrack();\n el.textTracks[id].mode = \"showing\";\n selectedTrack.value = id;\n });\n };\n const togglePictureInPicture = () => {\n return new Promise((resolve, reject) => {\n usingElRef(target, async (el) => {\n if (supportsPictureInPicture) {\n if (!isPictureInPicture.value) {\n el.requestPictureInPicture().then(resolve).catch(reject);\n } else {\n document.exitPictureInPicture().then(resolve).catch(reject);\n }\n }\n });\n });\n };\n watchEffect(() => {\n if (!document)\n return;\n const el = toValue(target);\n if (!el)\n return;\n const src = toValue(options.src);\n let sources = [];\n if (!src)\n return;\n if (typeof src === \"string\")\n sources = [{ src }];\n else if (Array.isArray(src))\n sources = src;\n else if (isObject(src))\n sources = [src];\n el.querySelectorAll(\"source\").forEach((e) => {\n e.remove();\n });\n sources.forEach(({ src: src2, type, media }) => {\n const source = document.createElement(\"source\");\n source.setAttribute(\"src\", src2);\n source.setAttribute(\"type\", type || \"\");\n source.setAttribute(\"media\", media || \"\");\n useEventListener(source, \"error\", sourceErrorEvent.trigger, listenerOptions);\n el.appendChild(source);\n });\n el.load();\n });\n watch([target, volume], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.volume = volume.value;\n });\n watch([target, muted], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.muted = muted.value;\n });\n watch([target, rate], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.playbackRate = rate.value;\n });\n watchEffect(() => {\n if (!document)\n return;\n const textTracks = toValue(options.tracks);\n const el = toValue(target);\n if (!textTracks || !textTracks.length || !el)\n return;\n el.querySelectorAll(\"track\").forEach((e) => e.remove());\n textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n const track = document.createElement(\"track\");\n track.default = isDefault || false;\n track.kind = kind;\n track.label = label;\n track.src = src;\n track.srclang = srcLang;\n if (track.default)\n selectedTrack.value = i;\n el.appendChild(track);\n });\n });\n const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n const el = toValue(target);\n if (!el)\n return;\n el.currentTime = time;\n });\n const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n const el = toValue(target);\n if (!el)\n return;\n if (isPlaying) {\n el.play().catch((e) => {\n playbackErrorEvent.trigger(e);\n throw e;\n });\n } else {\n el.pause();\n }\n });\n useEventListener(\n target,\n \"timeupdate\",\n () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime),\n listenerOptions\n );\n useEventListener(\n target,\n \"durationchange\",\n () => duration.value = toValue(target).duration,\n listenerOptions\n );\n useEventListener(\n target,\n \"progress\",\n () => buffered.value = timeRangeToArray(toValue(target).buffered),\n listenerOptions\n );\n useEventListener(\n target,\n \"seeking\",\n () => seeking.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"seeked\",\n () => seeking.value = false,\n listenerOptions\n );\n useEventListener(\n target,\n [\"waiting\", \"loadstart\"],\n () => {\n waiting.value = true;\n ignorePlayingUpdates(() => playing.value = false);\n },\n listenerOptions\n );\n useEventListener(\n target,\n \"loadeddata\",\n () => waiting.value = false,\n listenerOptions\n );\n useEventListener(\n target,\n \"playing\",\n () => {\n waiting.value = false;\n ended.value = false;\n ignorePlayingUpdates(() => playing.value = true);\n },\n listenerOptions\n );\n useEventListener(\n target,\n \"ratechange\",\n () => rate.value = toValue(target).playbackRate,\n listenerOptions\n );\n useEventListener(\n target,\n \"stalled\",\n () => stalled.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"ended\",\n () => ended.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"pause\",\n () => ignorePlayingUpdates(() => playing.value = false),\n listenerOptions\n );\n useEventListener(\n target,\n \"play\",\n () => ignorePlayingUpdates(() => playing.value = true),\n listenerOptions\n );\n useEventListener(\n target,\n \"enterpictureinpicture\",\n () => isPictureInPicture.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"leavepictureinpicture\",\n () => isPictureInPicture.value = false,\n listenerOptions\n );\n useEventListener(\n target,\n \"volumechange\",\n () => {\n const el = toValue(target);\n if (!el)\n return;\n volume.value = el.volume;\n muted.value = el.muted;\n },\n listenerOptions\n );\n const listeners = [];\n const stop = watch([target], () => {\n const el = toValue(target);\n if (!el)\n return;\n stop();\n listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n });\n tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n return {\n currentTime,\n duration,\n waiting,\n seeking,\n ended,\n stalled,\n buffered,\n playing,\n rate,\n // Volume\n volume,\n muted,\n // Tracks\n tracks,\n selectedTrack,\n enableTrack,\n disableTrack,\n // Picture in Picture\n supportsPictureInPicture,\n togglePictureInPicture,\n isPictureInPicture,\n // Events\n onSourceError: sourceErrorEvent.on,\n onPlaybackError: playbackErrorEvent.on\n };\n}\n\nfunction useMemoize(resolver, options) {\n const initCache = () => {\n if (options == null ? void 0 : options.cache)\n return shallowReactive(options.cache);\n return shallowReactive(/* @__PURE__ */ new Map());\n };\n const cache = initCache();\n const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n const _loadData = (key, ...args) => {\n cache.set(key, resolver(...args));\n return cache.get(key);\n };\n const loadData = (...args) => _loadData(generateKey(...args), ...args);\n const deleteData = (...args) => {\n cache.delete(generateKey(...args));\n };\n const clearData = () => {\n cache.clear();\n };\n const memoized = (...args) => {\n const key = generateKey(...args);\n if (cache.has(key))\n return cache.get(key);\n return _loadData(key, ...args);\n };\n memoized.load = loadData;\n memoized.delete = deleteData;\n memoized.clear = clearData;\n memoized.generateKey = generateKey;\n memoized.cache = cache;\n return memoized;\n}\n\nfunction useMemory(options = {}) {\n const memory = ref();\n const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n if (isSupported.value) {\n const { interval = 1e3 } = options;\n useIntervalFn(() => {\n memory.value = performance.memory;\n }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n }\n return { isSupported, memory };\n}\n\nconst UseMouseBuiltinExtractors = {\n page: (event) => [event.pageX, event.pageY],\n client: (event) => [event.clientX, event.clientY],\n screen: (event) => [event.screenX, event.screenY],\n movement: (event) => event instanceof MouseEvent ? [event.movementX, event.movementY] : null\n};\nfunction useMouse(options = {}) {\n const {\n type = \"page\",\n touch = true,\n resetOnTouchEnds = false,\n initialValue = { x: 0, y: 0 },\n window = defaultWindow,\n target = window,\n scroll = true,\n eventFilter\n } = options;\n let _prevMouseEvent = null;\n let _prevScrollX = 0;\n let _prevScrollY = 0;\n const x = shallowRef(initialValue.x);\n const y = shallowRef(initialValue.y);\n const sourceType = shallowRef(null);\n const extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n const mouseHandler = (event) => {\n const result = extractor(event);\n _prevMouseEvent = event;\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"mouse\";\n }\n if (window) {\n _prevScrollX = window.scrollX;\n _prevScrollY = window.scrollY;\n }\n };\n const touchHandler = (event) => {\n if (event.touches.length > 0) {\n const result = extractor(event.touches[0]);\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"touch\";\n }\n }\n };\n const scrollHandler = () => {\n if (!_prevMouseEvent || !window)\n return;\n const pos = extractor(_prevMouseEvent);\n if (_prevMouseEvent instanceof MouseEvent && pos) {\n x.value = pos[0] + window.scrollX - _prevScrollX;\n y.value = pos[1] + window.scrollY - _prevScrollY;\n }\n };\n const reset = () => {\n x.value = initialValue.x;\n y.value = initialValue.y;\n };\n const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n if (touch && type !== \"movement\") {\n useEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n if (resetOnTouchEnds)\n useEventListener(target, \"touchend\", reset, listenerOptions);\n }\n if (scroll && type === \"page\")\n useEventListener(window, \"scroll\", scrollHandlerWrapper, listenerOptions);\n }\n return {\n x,\n y,\n sourceType\n };\n}\n\nfunction useMouseInElement(target, options = {}) {\n const {\n handleOutside = true,\n window = defaultWindow\n } = options;\n const type = options.type || \"page\";\n const { x, y, sourceType } = useMouse(options);\n const targetRef = shallowRef(target != null ? target : window == null ? void 0 : window.document.body);\n const elementX = shallowRef(0);\n const elementY = shallowRef(0);\n const elementPositionX = shallowRef(0);\n const elementPositionY = shallowRef(0);\n const elementHeight = shallowRef(0);\n const elementWidth = shallowRef(0);\n const isOutside = shallowRef(true);\n let stop = () => {\n };\n if (window) {\n stop = watch(\n [targetRef, x, y],\n () => {\n const el = unrefElement(targetRef);\n if (!el || !(el instanceof Element))\n return;\n const {\n left,\n top,\n width,\n height\n } = el.getBoundingClientRect();\n elementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n elementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n elementHeight.value = height;\n elementWidth.value = width;\n const elX = x.value - elementPositionX.value;\n const elY = y.value - elementPositionY.value;\n isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n if (handleOutside || !isOutside.value) {\n elementX.value = elX;\n elementY.value = elY;\n }\n },\n { immediate: true }\n );\n useEventListener(\n document,\n \"mouseleave\",\n () => isOutside.value = true,\n { passive: true }\n );\n }\n return {\n x,\n y,\n sourceType,\n elementX,\n elementY,\n elementPositionX,\n elementPositionY,\n elementHeight,\n elementWidth,\n isOutside,\n stop\n };\n}\n\nfunction useMousePressed(options = {}) {\n const {\n touch = true,\n drag = true,\n capture = false,\n initialValue = false,\n window = defaultWindow\n } = options;\n const pressed = shallowRef(initialValue);\n const sourceType = shallowRef(null);\n if (!window) {\n return {\n pressed,\n sourceType\n };\n }\n const onPressed = (srcType) => (event) => {\n var _a;\n pressed.value = true;\n sourceType.value = srcType;\n (_a = options.onPressed) == null ? void 0 : _a.call(options, event);\n };\n const onReleased = (event) => {\n var _a;\n pressed.value = false;\n sourceType.value = null;\n (_a = options.onReleased) == null ? void 0 : _a.call(options, event);\n };\n const target = computed(() => unrefElement(options.target) || window);\n const listenerOptions = { passive: true, capture };\n useEventListener(target, \"mousedown\", onPressed(\"mouse\"), listenerOptions);\n useEventListener(window, \"mouseleave\", onReleased, listenerOptions);\n useEventListener(window, \"mouseup\", onReleased, listenerOptions);\n if (drag) {\n useEventListener(target, \"dragstart\", onPressed(\"mouse\"), listenerOptions);\n useEventListener(window, \"drop\", onReleased, listenerOptions);\n useEventListener(window, \"dragend\", onReleased, listenerOptions);\n }\n if (touch) {\n useEventListener(target, \"touchstart\", onPressed(\"touch\"), listenerOptions);\n useEventListener(window, \"touchend\", onReleased, listenerOptions);\n useEventListener(window, \"touchcancel\", onReleased, listenerOptions);\n }\n return {\n pressed,\n sourceType\n };\n}\n\nfunction useNavigatorLanguage(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"language\" in navigator);\n const language = shallowRef(navigator == null ? void 0 : navigator.language);\n useEventListener(window, \"languagechange\", () => {\n if (navigator)\n language.value = navigator.language;\n }, { passive: true });\n return {\n isSupported,\n language\n };\n}\n\nfunction useNetwork(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n const isOnline = shallowRef(true);\n const saveData = shallowRef(false);\n const offlineAt = shallowRef(void 0);\n const onlineAt = shallowRef(void 0);\n const downlink = shallowRef(void 0);\n const downlinkMax = shallowRef(void 0);\n const rtt = shallowRef(void 0);\n const effectiveType = shallowRef(void 0);\n const type = shallowRef(\"unknown\");\n const connection = isSupported.value && navigator.connection;\n function updateNetworkInformation() {\n if (!navigator)\n return;\n isOnline.value = navigator.onLine;\n offlineAt.value = isOnline.value ? void 0 : Date.now();\n onlineAt.value = isOnline.value ? Date.now() : void 0;\n if (connection) {\n downlink.value = connection.downlink;\n downlinkMax.value = connection.downlinkMax;\n effectiveType.value = connection.effectiveType;\n rtt.value = connection.rtt;\n saveData.value = connection.saveData;\n type.value = connection.type;\n }\n }\n const listenerOptions = { passive: true };\n if (window) {\n useEventListener(window, \"offline\", () => {\n isOnline.value = false;\n offlineAt.value = Date.now();\n }, listenerOptions);\n useEventListener(window, \"online\", () => {\n isOnline.value = true;\n onlineAt.value = Date.now();\n }, listenerOptions);\n }\n if (connection)\n useEventListener(connection, \"change\", updateNetworkInformation, listenerOptions);\n updateNetworkInformation();\n return {\n isSupported,\n isOnline: readonly(isOnline),\n saveData: readonly(saveData),\n offlineAt: readonly(offlineAt),\n onlineAt: readonly(onlineAt),\n downlink: readonly(downlink),\n downlinkMax: readonly(downlinkMax),\n effectiveType: readonly(effectiveType),\n rtt: readonly(rtt),\n type: readonly(type)\n };\n}\n\nfunction useNow(options = {}) {\n const {\n controls: exposeControls = false,\n interval = \"requestAnimationFrame\"\n } = options;\n const now = ref(/* @__PURE__ */ new Date());\n const update = () => now.value = /* @__PURE__ */ new Date();\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n if (exposeControls) {\n return {\n now,\n ...controls\n };\n } else {\n return now;\n }\n}\n\nfunction useObjectUrl(object) {\n const url = shallowRef();\n const release = () => {\n if (url.value)\n URL.revokeObjectURL(url.value);\n url.value = void 0;\n };\n watch(\n () => toValue(object),\n (newObject) => {\n release();\n if (newObject)\n url.value = URL.createObjectURL(newObject);\n },\n { immediate: true }\n );\n tryOnScopeDispose(release);\n return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n if (typeof value === \"function\" || isReadonly(value))\n return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n const _value = ref(value);\n return computed({\n get() {\n return _value.value = clamp(_value.value, toValue(min), toValue(max));\n },\n set(value2) {\n _value.value = clamp(value2, toValue(min), toValue(max));\n }\n });\n}\n\nfunction useOffsetPagination(options) {\n const {\n total = Number.POSITIVE_INFINITY,\n pageSize = 10,\n page = 1,\n onPageChange = noop,\n onPageSizeChange = noop,\n onPageCountChange = noop\n } = options;\n const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n const pageCount = computed(() => Math.max(\n 1,\n Math.ceil(toValue(total) / toValue(currentPageSize))\n ));\n const currentPage = useClamp(page, 1, pageCount);\n const isFirstPage = computed(() => currentPage.value === 1);\n const isLastPage = computed(() => currentPage.value === pageCount.value);\n if (isRef(page)) {\n syncRef(page, currentPage, {\n direction: isReadonly(page) ? \"ltr\" : \"both\"\n });\n }\n if (isRef(pageSize)) {\n syncRef(pageSize, currentPageSize, {\n direction: isReadonly(pageSize) ? \"ltr\" : \"both\"\n });\n }\n function prev() {\n currentPage.value--;\n }\n function next() {\n currentPage.value++;\n }\n const returnValue = {\n currentPage,\n currentPageSize,\n pageCount,\n isFirstPage,\n isLastPage,\n prev,\n next\n };\n watch(currentPage, () => {\n onPageChange(reactive(returnValue));\n });\n watch(currentPageSize, () => {\n onPageSizeChange(reactive(returnValue));\n });\n watch(pageCount, () => {\n onPageCountChange(reactive(returnValue));\n });\n return returnValue;\n}\n\nfunction useOnline(options = {}) {\n const { isOnline } = useNetwork(options);\n return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n const { window = defaultWindow } = options;\n const isLeft = shallowRef(false);\n const handler = (event) => {\n if (!window)\n return;\n event = event || window.event;\n const from = event.relatedTarget || event.toElement;\n isLeft.value = !from;\n };\n if (window) {\n const listenerOptions = { passive: true };\n useEventListener(window, \"mouseout\", handler, listenerOptions);\n useEventListener(window.document, \"mouseleave\", handler, listenerOptions);\n useEventListener(window.document, \"mouseenter\", handler, listenerOptions);\n }\n return isLeft;\n}\n\nfunction useScreenOrientation(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n const screenOrientation = isSupported.value ? window.screen.orientation : {};\n const orientation = ref(screenOrientation.type);\n const angle = shallowRef(screenOrientation.angle || 0);\n if (isSupported.value) {\n useEventListener(window, \"orientationchange\", () => {\n orientation.value = screenOrientation.type;\n angle.value = screenOrientation.angle;\n }, { passive: true });\n }\n const lockOrientation = (type) => {\n if (isSupported.value && typeof screenOrientation.lock === \"function\")\n return screenOrientation.lock(type);\n return Promise.reject(new Error(\"Not supported\"));\n };\n const unlockOrientation = () => {\n if (isSupported.value && typeof screenOrientation.unlock === \"function\")\n screenOrientation.unlock();\n };\n return {\n isSupported,\n orientation,\n angle,\n lockOrientation,\n unlockOrientation\n };\n}\n\nfunction useParallax(target, options = {}) {\n const {\n deviceOrientationTiltAdjust = (i) => i,\n deviceOrientationRollAdjust = (i) => i,\n mouseTiltAdjust = (i) => i,\n mouseRollAdjust = (i) => i,\n window = defaultWindow\n } = options;\n const orientation = reactive(useDeviceOrientation({ window }));\n const screenOrientation = reactive(useScreenOrientation({ window }));\n const {\n elementX: x,\n elementY: y,\n elementWidth: width,\n elementHeight: height\n } = useMouseInElement(target, { handleOutside: false, window });\n const source = computed(() => {\n if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) {\n return \"deviceOrientation\";\n }\n return \"mouse\";\n });\n const roll = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.gamma / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.gamma / 90;\n break;\n case \"portrait-primary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-secondary\":\n value = orientation.beta / 90;\n break;\n default:\n value = -orientation.beta / 90;\n }\n return deviceOrientationRollAdjust(value);\n } else {\n const value = -(y.value - height.value / 2) / height.value;\n return mouseRollAdjust(value);\n }\n });\n const tilt = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.beta / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-primary\":\n value = orientation.gamma / 90;\n break;\n case \"portrait-secondary\":\n value = -orientation.gamma / 90;\n break;\n default:\n value = orientation.gamma / 90;\n }\n return deviceOrientationTiltAdjust(value);\n } else {\n const value = (x.value - width.value / 2) / width.value;\n return mouseTiltAdjust(value);\n }\n });\n return { roll, tilt, source };\n}\n\nfunction useParentElement(element = useCurrentElement()) {\n const parentElement = shallowRef();\n const update = () => {\n const el = unrefElement(element);\n if (el)\n parentElement.value = el.parentElement;\n };\n tryOnMounted(update);\n watch(() => toValue(element), update);\n return parentElement;\n}\n\nfunction usePerformanceObserver(options, callback) {\n const {\n window = defaultWindow,\n immediate = true,\n ...performanceOptions\n } = options;\n const isSupported = useSupported(() => window && \"PerformanceObserver\" in window);\n let observer;\n const stop = () => {\n observer == null ? void 0 : observer.disconnect();\n };\n const start = () => {\n if (isSupported.value) {\n stop();\n observer = new PerformanceObserver(callback);\n observer.observe(performanceOptions);\n }\n };\n tryOnScopeDispose(stop);\n if (immediate)\n start();\n return {\n isSupported,\n start,\n stop\n };\n}\n\nconst defaultState = {\n x: 0,\n y: 0,\n pointerId: 0,\n pressure: 0,\n tiltX: 0,\n tiltY: 0,\n width: 0,\n height: 0,\n twist: 0,\n pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n const {\n target = defaultWindow\n } = options;\n const isInside = shallowRef(false);\n const state = ref(options.initialValue || {});\n Object.assign(state.value, defaultState, state.value);\n const handler = (event) => {\n isInside.value = true;\n if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n return;\n state.value = objectPick(event, keys, false);\n };\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"pointerdown\", \"pointermove\", \"pointerup\"], handler, listenerOptions);\n useEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n }\n return {\n ...toRefs(state),\n isInside\n };\n}\n\nfunction usePointerLock(target, options = {}) {\n const { document = defaultDocument } = options;\n const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n const element = shallowRef();\n const triggerElement = shallowRef();\n let targetElement;\n if (isSupported.value) {\n const listenerOptions = { passive: true };\n useEventListener(document, \"pointerlockchange\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n element.value = document.pointerLockElement;\n if (!element.value)\n targetElement = triggerElement.value = null;\n }\n }, listenerOptions);\n useEventListener(document, \"pointerlockerror\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n const action = document.pointerLockElement ? \"release\" : \"acquire\";\n throw new Error(`Failed to ${action} pointer lock.`);\n }\n }, listenerOptions);\n }\n async function lock(e) {\n var _a;\n if (!isSupported.value)\n throw new Error(\"Pointer Lock API is not supported by your browser.\");\n triggerElement.value = e instanceof Event ? e.currentTarget : null;\n targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n if (!targetElement)\n throw new Error(\"Target element undefined.\");\n targetElement.requestPointerLock();\n return await until(element).toBe(targetElement);\n }\n async function unlock() {\n if (!element.value)\n return false;\n document.exitPointerLock();\n await until(element).toBeNull();\n return true;\n }\n return {\n isSupported,\n element,\n triggerElement,\n lock,\n unlock\n };\n}\n\nfunction usePointerSwipe(target, options = {}) {\n const targetRef = toRef(target);\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n disableTextSelect = false\n } = options;\n const posStart = reactive({ x: 0, y: 0 });\n const updatePosStart = (x, y) => {\n posStart.x = x;\n posStart.y = y;\n };\n const posEnd = reactive({ x: 0, y: 0 });\n const updatePosEnd = (x, y) => {\n posEnd.x = x;\n posEnd.y = y;\n };\n const distanceX = computed(() => posStart.x - posEnd.x);\n const distanceY = computed(() => posStart.y - posEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n const isSwiping = shallowRef(false);\n const isPointerDown = shallowRef(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(distanceX.value) > abs(distanceY.value)) {\n return distanceX.value > 0 ? \"left\" : \"right\";\n } else {\n return distanceY.value > 0 ? \"up\" : \"down\";\n }\n });\n const eventIsAllowed = (e) => {\n var _a, _b, _c;\n const isReleasingButton = e.buttons === 0;\n const isPrimaryButton = e.buttons === 1;\n return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n };\n const listenerOptions = { passive: true };\n const stops = [\n useEventListener(target, \"pointerdown\", (e) => {\n if (!eventIsAllowed(e))\n return;\n isPointerDown.value = true;\n const eventTarget = e.target;\n eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n const { clientX: x, clientY: y } = e;\n updatePosStart(x, y);\n updatePosEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"pointermove\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (!isPointerDown.value)\n return;\n const { clientX: x, clientY: y } = e;\n updatePosEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, \"pointerup\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isPointerDown.value = false;\n isSwiping.value = false;\n }, listenerOptions)\n ];\n tryOnMounted(() => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n if (disableTextSelect) {\n (_d = (_c = targetRef.value) == null ? void 0 : _c.style) == null ? void 0 : _d.setProperty(\"-webkit-user-select\", \"none\");\n (_f = (_e = targetRef.value) == null ? void 0 : _e.style) == null ? void 0 : _f.setProperty(\"-ms-user-select\", \"none\");\n (_h = (_g = targetRef.value) == null ? void 0 : _g.style) == null ? void 0 : _h.setProperty(\"user-select\", \"none\");\n }\n });\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping: readonly(isSwiping),\n direction: readonly(direction),\n posStart: readonly(posStart),\n posEnd: readonly(posEnd),\n distanceX,\n distanceY,\n stop\n };\n}\n\nfunction usePreferredColorScheme(options) {\n const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n return computed(() => {\n if (isDark.value)\n return \"dark\";\n if (isLight.value)\n return \"light\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredContrast(options) {\n const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n return computed(() => {\n if (isMore.value)\n return \"more\";\n if (isLess.value)\n return \"less\";\n if (isCustom.value)\n return \"custom\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredLanguages(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref([\"en\"]);\n const navigator = window.navigator;\n const value = ref(navigator.languages);\n useEventListener(window, \"languagechange\", () => {\n value.value = navigator.languages;\n }, { passive: true });\n return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredReducedTransparency(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-transparency: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePrevious(value, initialValue) {\n const previous = shallowRef(initialValue);\n watch(\n toRef(value),\n (_, oldValue) => {\n previous.value = oldValue;\n },\n { flush: \"sync\" }\n );\n return readonly(previous);\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = shallowRef(\"\");\n const right = shallowRef(\"\");\n const bottom = shallowRef(\"\");\n const left = shallowRef(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update), { passive: true });\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n const {\n immediate = true,\n manual = false,\n type = \"text/javascript\",\n async = true,\n crossOrigin,\n referrerPolicy,\n noModule,\n defer,\n document = defaultDocument,\n attrs = {}\n } = options;\n const scriptTag = shallowRef(null);\n let _promise = null;\n const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n const resolveWithElement = (el2) => {\n scriptTag.value = el2;\n resolve(el2);\n return el2;\n };\n if (!document) {\n resolve(false);\n return;\n }\n let shouldAppend = false;\n let el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (!el) {\n el = document.createElement(\"script\");\n el.type = type;\n el.async = async;\n el.src = toValue(src);\n if (defer)\n el.defer = defer;\n if (crossOrigin)\n el.crossOrigin = crossOrigin;\n if (noModule)\n el.noModule = noModule;\n if (referrerPolicy)\n el.referrerPolicy = referrerPolicy;\n Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n shouldAppend = true;\n } else if (el.hasAttribute(\"data-loaded\")) {\n resolveWithElement(el);\n }\n const listenerOptions = {\n passive: true\n };\n useEventListener(el, \"error\", (event) => reject(event), listenerOptions);\n useEventListener(el, \"abort\", (event) => reject(event), listenerOptions);\n useEventListener(el, \"load\", () => {\n el.setAttribute(\"data-loaded\", \"true\");\n onLoaded(el);\n resolveWithElement(el);\n }, listenerOptions);\n if (shouldAppend)\n el = document.head.appendChild(el);\n if (!waitForScriptLoad)\n resolveWithElement(el);\n });\n const load = (waitForScriptLoad = true) => {\n if (!_promise)\n _promise = loadScript(waitForScriptLoad);\n return _promise;\n };\n const unload = () => {\n if (!document)\n return;\n _promise = null;\n if (scriptTag.value)\n scriptTag.value = null;\n const el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (el)\n document.head.removeChild(el);\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnUnmounted(unload);\n return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n const style = window.getComputedStyle(ele);\n if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n return true;\n } else {\n const parent = ele.parentNode;\n if (!parent || parent.tagName === \"BODY\")\n return false;\n return checkOverflowScroll(parent);\n }\n}\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n const _target = e.target;\n if (checkOverflowScroll(_target))\n return false;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n const isLocked = shallowRef(initialState);\n let stopTouchMoveListener = null;\n let initialOverflow = \"\";\n watch(toRef(element), (el) => {\n const target = resolveElement(toValue(el));\n if (target) {\n const ele = target;\n if (!elInitialOverflow.get(ele))\n elInitialOverflow.set(ele, ele.style.overflow);\n if (ele.style.overflow !== \"hidden\")\n initialOverflow = ele.style.overflow;\n if (ele.style.overflow === \"hidden\")\n return isLocked.value = true;\n if (isLocked.value)\n return ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const el = resolveElement(toValue(element));\n if (!el || isLocked.value)\n return;\n if (isIOS) {\n stopTouchMoveListener = useEventListener(\n el,\n \"touchmove\",\n (e) => {\n preventDefault(e);\n },\n { passive: false }\n );\n }\n el.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n const el = resolveElement(toValue(element));\n if (!el || !isLocked.value)\n return;\n if (isIOS)\n stopTouchMoveListener == null ? void 0 : stopTouchMoveListener();\n el.style.overflow = initialOverflow;\n elInitialOverflow.delete(el);\n isLocked.value = false;\n };\n tryOnScopeDispose(unlock);\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else unlock();\n }\n });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nfunction useShare(shareOptions = {}, options = {}) {\n const { navigator = defaultNavigator } = options;\n const _navigator = navigator;\n const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n const share = async (overrideOptions = {}) => {\n if (isSupported.value) {\n const data = {\n ...toValue(shareOptions),\n ...toValue(overrideOptions)\n };\n let granted = true;\n if (data.files && _navigator.canShare)\n granted = _navigator.canShare({ files: data.files });\n if (granted)\n return _navigator.share(data);\n }\n };\n return {\n isSupported,\n share\n };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n var _a, _b, _c, _d;\n const [source] = args;\n let compareFn = defaultCompare;\n let options = {};\n if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n options = args[1];\n compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n } else {\n compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n }\n } else if (args.length > 2) {\n compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n options = (_d = args[2]) != null ? _d : {};\n }\n const {\n dirty = false,\n sortFn = defaultSortFn\n } = options;\n if (!dirty)\n return computed(() => sortFn([...toValue(source)], compareFn));\n watchEffect(() => {\n const result = sortFn(toValue(source), compareFn);\n if (isRef(source))\n source.value = result;\n else\n source.splice(0, source.length, ...result);\n });\n return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n const {\n interimResults = true,\n continuous = true,\n maxAlternatives = 1,\n window = defaultWindow\n } = options;\n const lang = toRef(options.lang || \"en-US\");\n const isListening = shallowRef(false);\n const isFinal = shallowRef(false);\n const result = shallowRef(\"\");\n const error = shallowRef(void 0);\n let recognition;\n const start = () => {\n isListening.value = true;\n };\n const stop = () => {\n isListening.value = false;\n };\n const toggle = (value = !isListening.value) => {\n if (value) {\n start();\n } else {\n stop();\n }\n };\n const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n const isSupported = useSupported(() => SpeechRecognition);\n if (isSupported.value) {\n recognition = new SpeechRecognition();\n recognition.continuous = continuous;\n recognition.interimResults = interimResults;\n recognition.lang = toValue(lang);\n recognition.maxAlternatives = maxAlternatives;\n recognition.onstart = () => {\n isListening.value = true;\n isFinal.value = false;\n };\n watch(lang, (lang2) => {\n if (recognition && !isListening.value)\n recognition.lang = lang2;\n });\n recognition.onresult = (event) => {\n const currentResult = event.results[event.resultIndex];\n const { transcript } = currentResult[0];\n isFinal.value = currentResult.isFinal;\n result.value = transcript;\n error.value = void 0;\n };\n recognition.onerror = (event) => {\n error.value = event;\n };\n recognition.onend = () => {\n isListening.value = false;\n recognition.lang = toValue(lang);\n };\n watch(isListening, (newValue, oldValue) => {\n if (newValue === oldValue)\n return;\n if (newValue)\n recognition.start();\n else\n recognition.stop();\n });\n }\n tryOnScopeDispose(() => {\n stop();\n });\n return {\n isSupported,\n isListening,\n isFinal,\n recognition,\n result,\n error,\n toggle,\n start,\n stop\n };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n const {\n pitch = 1,\n rate = 1,\n volume = 1,\n window = defaultWindow\n } = options;\n const synth = window && window.speechSynthesis;\n const isSupported = useSupported(() => synth);\n const isPlaying = shallowRef(false);\n const status = shallowRef(\"init\");\n const spokenText = toRef(text || \"\");\n const lang = toRef(options.lang || \"en-US\");\n const error = shallowRef(void 0);\n const toggle = (value = !isPlaying.value) => {\n isPlaying.value = value;\n };\n const bindEventsForUtterance = (utterance2) => {\n utterance2.lang = toValue(lang);\n utterance2.voice = toValue(options.voice) || null;\n utterance2.pitch = toValue(pitch);\n utterance2.rate = toValue(rate);\n utterance2.volume = volume;\n utterance2.onstart = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onpause = () => {\n isPlaying.value = false;\n status.value = \"pause\";\n };\n utterance2.onresume = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onend = () => {\n isPlaying.value = false;\n status.value = \"end\";\n };\n utterance2.onerror = (event) => {\n error.value = event;\n };\n };\n const utterance = computed(() => {\n isPlaying.value = false;\n status.value = \"init\";\n const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n bindEventsForUtterance(newUtterance);\n return newUtterance;\n });\n const speak = () => {\n synth.cancel();\n if (utterance)\n synth.speak(utterance.value);\n };\n const stop = () => {\n synth.cancel();\n isPlaying.value = false;\n };\n if (isSupported.value) {\n bindEventsForUtterance(utterance.value);\n watch(lang, (lang2) => {\n if (utterance.value && !isPlaying.value)\n utterance.value.lang = lang2;\n });\n if (options.voice) {\n watch(options.voice, () => {\n synth.cancel();\n });\n }\n watch(isPlaying, () => {\n if (isPlaying.value)\n synth.resume();\n else\n synth.pause();\n });\n }\n tryOnScopeDispose(() => {\n isPlaying.value = false;\n });\n return {\n isSupported,\n isPlaying,\n status,\n utterance,\n error,\n stop,\n toggle,\n speak\n };\n}\n\nfunction useStepper(steps, initialStep) {\n const stepsRef = ref(steps);\n const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n const current = computed(() => at(index.value));\n const isFirst = computed(() => index.value === 0);\n const isLast = computed(() => index.value === stepNames.value.length - 1);\n const next = computed(() => stepNames.value[index.value + 1]);\n const previous = computed(() => stepNames.value[index.value - 1]);\n function at(index2) {\n if (Array.isArray(stepsRef.value))\n return stepsRef.value[index2];\n return stepsRef.value[stepNames.value[index2]];\n }\n function get(step) {\n if (!stepNames.value.includes(step))\n return;\n return at(stepNames.value.indexOf(step));\n }\n function goTo(step) {\n if (stepNames.value.includes(step))\n index.value = stepNames.value.indexOf(step);\n }\n function goToNext() {\n if (isLast.value)\n return;\n index.value++;\n }\n function goToPrevious() {\n if (isFirst.value)\n return;\n index.value--;\n }\n function goBackTo(step) {\n if (isAfter(step))\n goTo(step);\n }\n function isNext(step) {\n return stepNames.value.indexOf(step) === index.value + 1;\n }\n function isPrevious(step) {\n return stepNames.value.indexOf(step) === index.value - 1;\n }\n function isCurrent(step) {\n return stepNames.value.indexOf(step) === index.value;\n }\n function isBefore(step) {\n return index.value < stepNames.value.indexOf(step);\n }\n function isAfter(step) {\n return index.value > stepNames.value.indexOf(step);\n }\n return {\n steps: stepsRef,\n stepNames,\n index,\n current,\n next,\n previous,\n isFirst,\n isLast,\n at,\n get,\n goTo,\n goToNext,\n goToPrevious,\n goBackTo,\n isNext,\n isPrevious,\n isCurrent,\n isBefore,\n isAfter\n };\n}\n\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const rawInit = toValue(initialValue);\n const type = guessSerializerType(rawInit);\n const data = (shallow ? shallowRef : ref)(toValue(initialValue));\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorageAsync\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n async function read(event) {\n if (!storage || event && event.key !== key)\n return;\n try {\n const rawValue = event ? event.newValue : await storage.getItem(key);\n if (rawValue == null) {\n data.value = rawInit;\n if (writeDefaults && rawInit !== null)\n await storage.setItem(key, await serializer.write(rawInit));\n } else if (mergeDefaults) {\n const value = await serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n data.value = mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n data.value = { ...rawInit, ...value };\n else data.value = value;\n } else {\n data.value = await serializer.read(rawValue);\n }\n } catch (e) {\n onError(e);\n }\n }\n read();\n if (window && listenToStorageChanges)\n useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)), { passive: true });\n if (storage) {\n watchWithFilter(\n data,\n async () => {\n try {\n if (data.value == null)\n await storage.removeItem(key);\n else\n await storage.setItem(key, await serializer.write(data.value));\n } catch (e) {\n onError(e);\n }\n },\n {\n flush,\n deep,\n eventFilter\n }\n );\n }\n return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n const isLoaded = shallowRef(false);\n const {\n document = defaultDocument,\n immediate = true,\n manual = false,\n id = `vueuse_styletag_${++_id}`\n } = options;\n const cssRef = shallowRef(css);\n let stop = () => {\n };\n const load = () => {\n if (!document)\n return;\n const el = document.getElementById(id) || document.createElement(\"style\");\n if (!el.isConnected) {\n el.id = id;\n if (options.media)\n el.media = options.media;\n document.head.appendChild(el);\n }\n if (isLoaded.value)\n return;\n stop = watch(\n cssRef,\n (value) => {\n el.textContent = value;\n },\n { immediate: true }\n );\n isLoaded.value = true;\n };\n const unload = () => {\n if (!document || !isLoaded.value)\n return;\n stop();\n document.head.removeChild(document.getElementById(id));\n isLoaded.value = false;\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnScopeDispose(unload);\n return {\n id,\n css: cssRef,\n unload,\n load,\n isLoaded: readonly(isLoaded)\n };\n}\n\nfunction useSwipe(target, options = {}) {\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n passive = true\n } = options;\n const coordsStart = reactive({ x: 0, y: 0 });\n const coordsEnd = reactive({ x: 0, y: 0 });\n const diffX = computed(() => coordsStart.x - coordsEnd.x);\n const diffY = computed(() => coordsStart.y - coordsEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n const isSwiping = shallowRef(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(diffX.value) > abs(diffY.value)) {\n return diffX.value > 0 ? \"left\" : \"right\";\n } else {\n return diffY.value > 0 ? \"up\" : \"down\";\n }\n });\n const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n const updateCoordsStart = (x, y) => {\n coordsStart.x = x;\n coordsStart.y = y;\n };\n const updateCoordsEnd = (x, y) => {\n coordsEnd.x = x;\n coordsEnd.y = y;\n };\n const listenerOptions = { passive, capture: !passive };\n const onTouchEnd = (e) => {\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isSwiping.value = false;\n };\n const stops = [\n useEventListener(target, \"touchstart\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsStart(x, y);\n updateCoordsEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"touchmove\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsEnd(x, y);\n if (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value))\n e.preventDefault();\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping,\n direction,\n coordsStart,\n coordsEnd,\n lengthX: diffX,\n lengthY: diffY,\n stop,\n // TODO: Remove in the next major version\n isPassiveEventSupported: true\n };\n}\n\nfunction useTemplateRefsList() {\n const refs = ref([]);\n refs.value.set = (el) => {\n if (el)\n refs.value.push(el);\n };\n onBeforeUpdate(() => {\n refs.value.length = 0;\n });\n return refs;\n}\n\nfunction useTextDirection(options = {}) {\n const {\n document = defaultDocument,\n selector = \"html\",\n observe = false,\n initialValue = \"ltr\"\n } = options;\n function getValue() {\n var _a, _b;\n return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n }\n const dir = ref(getValue());\n tryOnMounted(() => dir.value = getValue());\n if (observe && document) {\n useMutationObserver(\n document.querySelector(selector),\n () => dir.value = getValue(),\n { attributes: true }\n );\n }\n return computed({\n get() {\n return dir.value;\n },\n set(v) {\n var _a, _b;\n dir.value = v;\n if (!document)\n return;\n if (dir.value)\n (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n else\n (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n }\n });\n}\n\nfunction getRangesFromSelection(selection) {\n var _a;\n const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\nfunction useTextSelection(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const selection = ref(null);\n const text = computed(() => {\n var _a, _b;\n return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n });\n const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n function onSelectionChange() {\n selection.value = null;\n if (window)\n selection.value = window.getSelection();\n }\n if (window)\n useEventListener(window.document, \"selectionchange\", onSelectionChange, { passive: true });\n return {\n text,\n rects,\n ranges,\n selection\n };\n}\n\nfunction tryRequestAnimationFrame(window = defaultWindow, fn) {\n if (window && typeof window.requestAnimationFrame === \"function\") {\n window.requestAnimationFrame(fn);\n } else {\n fn();\n }\n}\nfunction useTextareaAutosize(options = {}) {\n var _a, _b;\n const { window = defaultWindow } = options;\n const textarea = toRef(options == null ? void 0 : options.element);\n const input = toRef((_a = options == null ? void 0 : options.input) != null ? _a : \"\");\n const styleProp = (_b = options == null ? void 0 : options.styleProp) != null ? _b : \"height\";\n const textareaScrollHeight = shallowRef(1);\n const textareaOldWidth = shallowRef(0);\n function triggerResize() {\n var _a2;\n if (!textarea.value)\n return;\n let height = \"\";\n textarea.value.style[styleProp] = \"1px\";\n textareaScrollHeight.value = (_a2 = textarea.value) == null ? void 0 : _a2.scrollHeight;\n const _styleTarget = toValue(options == null ? void 0 : options.styleTarget);\n if (_styleTarget)\n _styleTarget.style[styleProp] = `${textareaScrollHeight.value}px`;\n else\n height = `${textareaScrollHeight.value}px`;\n textarea.value.style[styleProp] = height;\n }\n watch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n watch(textareaScrollHeight, () => {\n var _a2;\n return (_a2 = options == null ? void 0 : options.onResize) == null ? void 0 : _a2.call(options);\n });\n useResizeObserver(textarea, ([{ contentRect }]) => {\n if (textareaOldWidth.value === contentRect.width)\n return;\n tryRequestAnimationFrame(window, () => {\n textareaOldWidth.value = contentRect.width;\n triggerResize();\n });\n });\n if (options == null ? void 0 : options.watch)\n watch(options.watch, triggerResize, { immediate: true, deep: true });\n return {\n textarea,\n input,\n triggerResize\n };\n}\n\nfunction useThrottledRefHistory(source, options = {}) {\n const { throttle = 200, trailing = true } = options;\n const filter = throttleFilter(throttle, trailing);\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nconst DEFAULT_UNITS = [\n { max: 6e4, value: 1e3, name: \"second\" },\n { max: 276e4, value: 6e4, name: \"minute\" },\n { max: 72e6, value: 36e5, name: \"hour\" },\n { max: 5184e5, value: 864e5, name: \"day\" },\n { max: 24192e5, value: 6048e5, name: \"week\" },\n { max: 28512e6, value: 2592e6, name: \"month\" },\n { max: Number.POSITIVE_INFINITY, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n justNow: \"just now\",\n past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n invalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n return date.toISOString().slice(0, 10);\n}\nfunction useTimeAgo(time, options = {}) {\n const {\n controls: exposeControls = false,\n updateInterval = 3e4\n } = options;\n const { now, ...controls } = useNow({ interval: updateInterval, controls: true });\n const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n if (exposeControls) {\n return {\n timeAgo,\n ...controls\n };\n } else {\n return timeAgo;\n }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n var _a;\n const {\n max,\n messages = DEFAULT_MESSAGES,\n fullDateFormatter = DEFAULT_FORMATTER,\n units = DEFAULT_UNITS,\n showSecond = false,\n rounding = \"round\"\n } = options;\n const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n const diff = +now - +from;\n const absDiff = Math.abs(diff);\n function getValue(diff2, unit) {\n return roundFn(Math.abs(diff2) / unit.value);\n }\n function format(diff2, unit) {\n const val = getValue(diff2, unit);\n const past = diff2 > 0;\n const str = applyFormat(unit.name, val, past);\n return applyFormat(past ? \"past\" : \"future\", str, past);\n }\n function applyFormat(name, val, isPast) {\n const formatter = messages[name];\n if (typeof formatter === \"function\")\n return formatter(val, isPast);\n return formatter.replace(\"{0}\", val.toString());\n }\n if (absDiff < 6e4 && !showSecond)\n return messages.justNow;\n if (typeof max === \"number\" && absDiff > max)\n return fullDateFormatter(new Date(from));\n if (typeof max === \"string\") {\n const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n if (unitMax && absDiff > unitMax)\n return fullDateFormatter(new Date(from));\n }\n for (const [idx, unit] of units.entries()) {\n const val = getValue(diff, unit);\n if (val <= 0 && units[idx - 1])\n return format(diff, units[idx - 1]);\n if (absDiff < unit.max)\n return format(diff, unit);\n }\n return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n const { start } = useTimeoutFn(loop, interval, { immediate });\n const isActive = shallowRef(false);\n async function loop() {\n if (!isActive.value)\n return;\n await fn();\n start();\n }\n function resume() {\n if (!isActive.value) {\n isActive.value = true;\n if (immediateCallback)\n fn();\n start();\n }\n }\n function pause() {\n isActive.value = false;\n }\n if (immediate && isClient)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useTimestamp(options = {}) {\n const {\n controls: exposeControls = false,\n offset = 0,\n immediate = true,\n interval = \"requestAnimationFrame\",\n callback\n } = options;\n const ts = shallowRef(timestamp() + offset);\n const update = () => ts.value = timestamp() + offset;\n const cb = callback ? () => {\n update();\n callback(ts.value);\n } : update;\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n if (exposeControls) {\n return {\n timestamp: ts,\n ...controls\n };\n } else {\n return ts;\n }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n var _a, _b, _c;\n const {\n document = defaultDocument,\n restoreOnUnmount = (t) => t\n } = options;\n const originalTitle = (_a = document == null ? void 0 : document.title) != null ? _a : \"\";\n const title = toRef((_b = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _b : null);\n const isReadonly = !!(newTitle && typeof newTitle === \"function\");\n function format(t) {\n if (!(\"titleTemplate\" in options))\n return t;\n const template = options.titleTemplate || \"%s\";\n return typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n }\n watch(\n title,\n (newValue, oldValue) => {\n if (newValue !== oldValue && document)\n document.title = format(newValue != null ? newValue : \"\");\n },\n { immediate: true }\n );\n if (options.observe && !options.titleTemplate && document && !isReadonly) {\n useMutationObserver(\n (_c = document.head) == null ? void 0 : _c.querySelector(\"title\"),\n () => {\n if (document && document.title !== title.value)\n title.value = format(document.title);\n },\n { childList: true }\n );\n }\n tryOnScopeDispose(() => {\n if (restoreOnUnmount) {\n const restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n if (restoredTitle != null && document)\n document.title = restoredTitle;\n }\n });\n return title;\n}\n\nconst _TransitionPresets = {\n easeInSine: [0.12, 0, 0.39, 0],\n easeOutSine: [0.61, 1, 0.88, 1],\n easeInOutSine: [0.37, 0, 0.63, 1],\n easeInQuad: [0.11, 0, 0.5, 0],\n easeOutQuad: [0.5, 1, 0.89, 1],\n easeInOutQuad: [0.45, 0, 0.55, 1],\n easeInCubic: [0.32, 0, 0.67, 0],\n easeOutCubic: [0.33, 1, 0.68, 1],\n easeInOutCubic: [0.65, 0, 0.35, 1],\n easeInQuart: [0.5, 0, 0.75, 0],\n easeOutQuart: [0.25, 1, 0.5, 1],\n easeInOutQuart: [0.76, 0, 0.24, 1],\n easeInQuint: [0.64, 0, 0.78, 0],\n easeOutQuint: [0.22, 1, 0.36, 1],\n easeInOutQuint: [0.83, 0, 0.17, 1],\n easeInExpo: [0.7, 0, 0.84, 0],\n easeOutExpo: [0.16, 1, 0.3, 1],\n easeInOutExpo: [0.87, 0, 0.13, 1],\n easeInCirc: [0.55, 0, 1, 0.45],\n easeOutCirc: [0, 0.55, 0.45, 1],\n easeInOutCirc: [0.85, 0, 0.15, 1],\n easeInBack: [0.36, 0, 0.66, -0.56],\n easeOutBack: [0.34, 1.56, 0.64, 1],\n easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n const b = (a1, a2) => 3 * a2 - 6 * a1;\n const c = (a1) => 3 * a1;\n const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n const getTforX = (x) => {\n let aGuessT = x;\n for (let i = 0; i < 4; ++i) {\n const currentSlope = getSlope(aGuessT, p0, p2);\n if (currentSlope === 0)\n return aGuessT;\n const currentX = calcBezier(aGuessT, p0, p2) - x;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n };\n return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n return a + alpha * (b - a);\n}\nfunction toVec(t) {\n return (typeof t === \"number\" ? [t] : t) || [];\n}\nfunction executeTransition(source, from, to, options = {}) {\n var _a, _b;\n const fromVal = toValue(from);\n const toVal = toValue(to);\n const v1 = toVec(fromVal);\n const v2 = toVec(toVal);\n const duration = (_a = toValue(options.duration)) != null ? _a : 1e3;\n const startedAt = Date.now();\n const endAt = Date.now() + duration;\n const trans = typeof options.transition === \"function\" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity;\n const ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n return new Promise((resolve) => {\n source.value = fromVal;\n const tick = () => {\n var _a2;\n if ((_a2 = options.abort) == null ? void 0 : _a2.call(options)) {\n resolve();\n return;\n }\n const now = Date.now();\n const alpha = ease((now - startedAt) / duration);\n const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha));\n if (Array.isArray(source.value))\n source.value = arr.map((n, i) => {\n var _a3, _b2;\n return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha);\n });\n else if (typeof source.value === \"number\")\n source.value = arr[0];\n if (now < endAt) {\n requestAnimationFrame(tick);\n } else {\n source.value = toVal;\n resolve();\n }\n };\n tick();\n });\n}\nfunction useTransition(source, options = {}) {\n let currentId = 0;\n const sourceVal = () => {\n const v = toValue(source);\n return typeof v === \"number\" ? v : v.map(toValue);\n };\n const outputRef = ref(sourceVal());\n watch(sourceVal, async (to) => {\n var _a, _b;\n if (toValue(options.disabled))\n return;\n const id = ++currentId;\n if (options.delay)\n await promiseTimeout(toValue(options.delay));\n if (id !== currentId)\n return;\n const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to);\n (_a = options.onStarted) == null ? void 0 : _a.call(options);\n await executeTransition(outputRef, outputRef.value, toVal, {\n ...options,\n abort: () => {\n var _a2;\n return id !== currentId || ((_a2 = options.abort) == null ? void 0 : _a2.call(options));\n }\n });\n (_b = options.onFinished) == null ? void 0 : _b.call(options);\n }, { deep: true });\n watch(() => toValue(options.disabled), (disabled) => {\n if (disabled) {\n currentId++;\n outputRef.value = sourceVal();\n }\n });\n tryOnScopeDispose(() => {\n currentId++;\n });\n return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n const {\n initialValue = {},\n removeNullishValues = true,\n removeFalsyValues = false,\n write: enableWrite = true,\n writeMode = \"replace\",\n window = defaultWindow\n } = options;\n if (!window)\n return reactive(initialValue);\n const state = reactive({});\n function getRawParams() {\n if (mode === \"history\") {\n return window.location.search || \"\";\n } else if (mode === \"hash\") {\n const hash = window.location.hash || \"\";\n const index = hash.indexOf(\"?\");\n return index > 0 ? hash.slice(index) : \"\";\n } else {\n return (window.location.hash || \"\").replace(/^#/, \"\");\n }\n }\n function constructQuery(params) {\n const stringified = params.toString();\n if (mode === \"history\")\n return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n if (mode === \"hash-params\")\n return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n const hash = window.location.hash || \"#\";\n const index = hash.indexOf(\"?\");\n if (index > 0)\n return `${window.location.search || \"\"}${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n return `${window.location.search || \"\"}${hash}${stringified ? `?${stringified}` : \"\"}`;\n }\n function read() {\n return new URLSearchParams(getRawParams());\n }\n function updateState(params) {\n const unusedKeys = new Set(Object.keys(state));\n for (const key of params.keys()) {\n const paramsForKey = params.getAll(key);\n state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n unusedKeys.delete(key);\n }\n Array.from(unusedKeys).forEach((key) => delete state[key]);\n }\n const { pause, resume } = pausableWatch(\n state,\n () => {\n const params = new URLSearchParams(\"\");\n Object.keys(state).forEach((key) => {\n const mapEntry = state[key];\n if (Array.isArray(mapEntry))\n mapEntry.forEach((value) => params.append(key, value));\n else if (removeNullishValues && mapEntry == null)\n params.delete(key);\n else if (removeFalsyValues && !mapEntry)\n params.delete(key);\n else\n params.set(key, mapEntry);\n });\n write(params, false);\n },\n { deep: true }\n );\n function write(params, shouldUpdate) {\n pause();\n if (shouldUpdate)\n updateState(params);\n if (writeMode === \"replace\") {\n window.history.replaceState(\n window.history.state,\n window.document.title,\n window.location.pathname + constructQuery(params)\n );\n } else {\n window.history.pushState(\n window.history.state,\n window.document.title,\n window.location.pathname + constructQuery(params)\n );\n }\n resume();\n }\n function onChanged() {\n if (!enableWrite)\n return;\n write(read(), true);\n }\n const listenerOptions = { passive: true };\n useEventListener(window, \"popstate\", onChanged, listenerOptions);\n if (mode !== \"history\")\n useEventListener(window, \"hashchange\", onChanged, listenerOptions);\n const initial = read();\n if (initial.keys().next().value)\n updateState(initial);\n else\n Object.assign(state, initialValue);\n return state;\n}\n\nfunction useUserMedia(options = {}) {\n var _a, _b;\n const enabled = shallowRef((_a = options.enabled) != null ? _a : false);\n const autoSwitch = shallowRef((_b = options.autoSwitch) != null ? _b : true);\n const constraints = ref(options.constraints);\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n });\n const stream = shallowRef();\n function getDeviceOptions(type) {\n switch (type) {\n case \"video\": {\n if (constraints.value)\n return constraints.value.video || false;\n break;\n }\n case \"audio\": {\n if (constraints.value)\n return constraints.value.audio || false;\n break;\n }\n }\n }\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getUserMedia({\n video: getDeviceOptions(\"video\"),\n audio: getDeviceOptions(\"audio\")\n });\n return stream.value;\n }\n function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n async function restart() {\n _stop();\n return await start();\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else _stop();\n },\n { immediate: true }\n );\n watch(\n constraints,\n () => {\n if (autoSwitch.value && stream.value)\n restart();\n },\n { immediate: true }\n );\n tryOnScopeDispose(() => {\n stop();\n });\n return {\n isSupported,\n stream,\n start,\n stop,\n restart,\n constraints,\n enabled,\n autoSwitch\n };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n var _a, _b, _c;\n const {\n clone = false,\n passive = false,\n eventName,\n deep = false,\n defaultValue,\n shouldEmit\n } = options;\n const vm = getCurrentInstance();\n const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n let event = eventName;\n if (!key) {\n key = \"modelValue\";\n }\n event = event || `update:${key.toString()}`;\n const cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n const triggerEmit = (value) => {\n if (shouldEmit) {\n if (shouldEmit(value))\n _emit(event, value);\n } else {\n _emit(event, value);\n }\n };\n if (passive) {\n const initialValue = getValue();\n const proxy = ref(initialValue);\n let isUpdating = false;\n watch(\n () => props[key],\n (v) => {\n if (!isUpdating) {\n isUpdating = true;\n proxy.value = cloneFn(v);\n nextTick(() => isUpdating = false);\n }\n }\n );\n watch(\n proxy,\n (v) => {\n if (!isUpdating && (v !== props[key] || deep))\n triggerEmit(v);\n },\n { deep }\n );\n return proxy;\n } else {\n return computed({\n get() {\n return getValue();\n },\n set(value) {\n triggerEmit(value);\n }\n });\n }\n}\n\nfunction useVModels(props, emit, options = {}) {\n const ret = {};\n for (const key in props) {\n ret[key] = useVModel(\n props,\n key,\n emit,\n options\n );\n }\n return ret;\n}\n\nfunction useVibrate(options) {\n const {\n pattern = [],\n interval = 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n const patternRef = toRef(pattern);\n let intervalControls;\n const vibrate = (pattern2 = patternRef.value) => {\n if (isSupported.value)\n navigator.vibrate(pattern2);\n };\n const stop = () => {\n if (isSupported.value)\n navigator.vibrate(0);\n intervalControls == null ? void 0 : intervalControls.pause();\n };\n if (interval > 0) {\n intervalControls = useIntervalFn(\n vibrate,\n interval,\n {\n immediate: false,\n immediateCallback: false\n }\n );\n }\n return {\n isSupported,\n pattern,\n intervalControls,\n vibrate,\n stop\n };\n}\n\nfunction useVirtualList(list, options) {\n const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n return {\n list: currentList,\n scrollTo,\n containerProps: {\n ref: containerRef,\n onScroll: () => {\n calculateRange();\n },\n style: containerStyle\n },\n wrapperProps\n };\n}\nfunction useVirtualListResources(list) {\n const containerRef = shallowRef(null);\n const size = useElementSize(containerRef);\n const currentList = ref([]);\n const source = shallowRef(list);\n const state = ref({ start: 0, end: 10 });\n return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n return (containerSize) => {\n if (typeof itemSize === \"number\")\n return Math.ceil(containerSize / itemSize);\n const { start = 0 } = state.value;\n let sum = 0;\n let capacity = 0;\n for (let i = start; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n capacity = i;\n if (sum > containerSize)\n break;\n }\n return capacity - start;\n };\n}\nfunction createGetOffset(source, itemSize) {\n return (scrollDirection) => {\n if (typeof itemSize === \"number\")\n return Math.floor(scrollDirection / itemSize) + 1;\n let sum = 0;\n let offset = 0;\n for (let i = 0; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n if (sum >= scrollDirection) {\n offset = i;\n break;\n }\n }\n return offset + 1;\n };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n return () => {\n const element = containerRef.value;\n if (element) {\n const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n const from = offset - overscan;\n const to = offset + viewCapacity + overscan;\n state.value = {\n start: from < 0 ? 0 : from,\n end: to > source.value.length ? source.value.length : to\n };\n currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n data: ele,\n index: index + state.value.start\n }));\n }\n };\n}\nfunction createGetDistance(itemSize, source) {\n return (index) => {\n if (typeof itemSize === \"number\") {\n const size2 = index * itemSize;\n return size2;\n }\n const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n return size;\n };\n}\nfunction useWatchForSizes(size, list, containerRef, calculateRange) {\n watch([size.width, size.height, list, containerRef], () => {\n calculateRange();\n });\n}\nfunction createComputedTotalSize(itemSize, source) {\n return computed(() => {\n if (typeof itemSize === \"number\")\n return source.value.length * itemSize;\n return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n });\n}\nconst scrollToDictionaryForElementScrollKey = {\n horizontal: \"scrollLeft\",\n vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n return (index) => {\n if (containerRef.value) {\n containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n calculateRange();\n }\n };\n}\nfunction useHorizontalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowX: \"auto\" };\n const { itemWidth, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n const getOffset = createGetOffset(source, itemWidth);\n const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceLeft = createGetDistance(itemWidth, source);\n const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n const totalWidth = createComputedTotalSize(itemWidth, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n height: \"100%\",\n width: `${totalWidth.value - offsetLeft.value}px`,\n marginLeft: `${offsetLeft.value}px`,\n display: \"flex\"\n }\n };\n });\n return {\n scrollTo,\n calculateRange,\n wrapperProps,\n containerStyle,\n currentList,\n containerRef\n };\n}\nfunction useVerticalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowY: \"auto\" };\n const { itemHeight, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n const getOffset = createGetOffset(source, itemHeight);\n const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceTop = createGetDistance(itemHeight, source);\n const offsetTop = computed(() => getDistanceTop(state.value.start));\n const totalHeight = createComputedTotalSize(itemHeight, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n width: \"100%\",\n height: `${totalHeight.value - offsetTop.value}px`,\n marginTop: `${offsetTop.value}px`\n }\n };\n });\n return {\n calculateRange,\n scrollTo,\n containerStyle,\n wrapperProps,\n currentList,\n containerRef\n };\n}\n\nfunction useWakeLock(options = {}) {\n const {\n navigator = defaultNavigator,\n document = defaultDocument\n } = options;\n const requestedType = shallowRef(false);\n const sentinel = shallowRef(null);\n const documentVisibility = useDocumentVisibility({ document });\n const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n const isActive = computed(() => !!sentinel.value && documentVisibility.value === \"visible\");\n if (isSupported.value) {\n useEventListener(sentinel, \"release\", () => {\n var _a, _b;\n requestedType.value = (_b = (_a = sentinel.value) == null ? void 0 : _a.type) != null ? _b : false;\n }, { passive: true });\n whenever(\n () => documentVisibility.value === \"visible\" && (document == null ? void 0 : document.visibilityState) === \"visible\" && requestedType.value,\n (type) => {\n requestedType.value = false;\n forceRequest(type);\n }\n );\n }\n async function forceRequest(type) {\n var _a;\n await ((_a = sentinel.value) == null ? void 0 : _a.release());\n sentinel.value = isSupported.value ? await navigator.wakeLock.request(type) : null;\n }\n async function request(type) {\n if (documentVisibility.value === \"visible\")\n await forceRequest(type);\n else\n requestedType.value = type;\n }\n async function release() {\n requestedType.value = false;\n const s = sentinel.value;\n sentinel.value = null;\n await (s == null ? void 0 : s.release());\n }\n return {\n sentinel,\n isSupported,\n isActive,\n request,\n forceRequest,\n release\n };\n}\n\nfunction useWebNotification(options = {}) {\n const {\n window = defaultWindow,\n requestPermissions: _requestForPermissions = true\n } = options;\n const defaultWebNotificationOptions = options;\n const isSupported = useSupported(() => {\n if (!window || !(\"Notification\" in window))\n return false;\n if (Notification.permission === \"granted\")\n return true;\n try {\n const notification2 = new Notification(\"\");\n notification2.onshow = () => {\n notification2.close();\n };\n } catch (e) {\n if (e.name === \"TypeError\")\n return false;\n }\n return true;\n });\n const permissionGranted = shallowRef(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n const notification = ref(null);\n const ensurePermissions = async () => {\n if (!isSupported.value)\n return;\n if (!permissionGranted.value && Notification.permission !== \"denied\") {\n const result = await Notification.requestPermission();\n if (result === \"granted\")\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n };\n const { on: onClick, trigger: clickTrigger } = createEventHook();\n const { on: onShow, trigger: showTrigger } = createEventHook();\n const { on: onError, trigger: errorTrigger } = createEventHook();\n const { on: onClose, trigger: closeTrigger } = createEventHook();\n const show = async (overrides) => {\n if (!isSupported.value || !permissionGranted.value)\n return;\n const options2 = Object.assign({}, defaultWebNotificationOptions, overrides);\n notification.value = new Notification(options2.title || \"\", options2);\n notification.value.onclick = clickTrigger;\n notification.value.onshow = showTrigger;\n notification.value.onerror = errorTrigger;\n notification.value.onclose = closeTrigger;\n return notification.value;\n };\n const close = () => {\n if (notification.value)\n notification.value.close();\n notification.value = null;\n };\n if (_requestForPermissions)\n tryOnMounted(ensurePermissions);\n tryOnScopeDispose(close);\n if (isSupported.value && window) {\n const document = window.document;\n useEventListener(document, \"visibilitychange\", (e) => {\n e.preventDefault();\n if (document.visibilityState === \"visible\") {\n close();\n }\n });\n }\n return {\n isSupported,\n notification,\n ensurePermissions,\n permissionGranted,\n show,\n close,\n onClick,\n onShow,\n onError,\n onClose\n };\n}\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useWebSocket(url, options = {}) {\n const {\n onConnected,\n onDisconnected,\n onError,\n onMessage,\n immediate = true,\n autoConnect = true,\n autoClose = true,\n protocols = []\n } = options;\n const data = ref(null);\n const status = shallowRef(\"CLOSED\");\n const wsRef = ref();\n const urlRef = toRef(url);\n let heartbeatPause;\n let heartbeatResume;\n let explicitlyClosed = false;\n let retried = 0;\n let bufferedData = [];\n let retryTimeout;\n let pongTimeoutWait;\n const _sendBuffer = () => {\n if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n for (const buffer of bufferedData)\n wsRef.value.send(buffer);\n bufferedData = [];\n }\n };\n const resetRetry = () => {\n if (retryTimeout != null) {\n clearTimeout(retryTimeout);\n retryTimeout = void 0;\n }\n };\n const resetHeartbeat = () => {\n clearTimeout(pongTimeoutWait);\n pongTimeoutWait = void 0;\n };\n const close = (code = 1e3, reason) => {\n resetRetry();\n if (!isClient && !isWorker || !wsRef.value)\n return;\n explicitlyClosed = true;\n resetHeartbeat();\n heartbeatPause == null ? void 0 : heartbeatPause();\n wsRef.value.close(code, reason);\n wsRef.value = void 0;\n };\n const send = (data2, useBuffer = true) => {\n if (!wsRef.value || status.value !== \"OPEN\") {\n if (useBuffer)\n bufferedData.push(data2);\n return false;\n }\n _sendBuffer();\n wsRef.value.send(data2);\n return true;\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const ws = new WebSocket(urlRef.value, protocols);\n wsRef.value = ws;\n status.value = \"CONNECTING\";\n ws.onopen = () => {\n status.value = \"OPEN\";\n retried = 0;\n onConnected == null ? void 0 : onConnected(ws);\n heartbeatResume == null ? void 0 : heartbeatResume();\n _sendBuffer();\n };\n ws.onclose = (ev) => {\n status.value = \"CLOSED\";\n resetHeartbeat();\n heartbeatPause == null ? void 0 : heartbeatPause();\n onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n if (!explicitlyClosed && options.autoReconnect && (wsRef.value == null || ws === wsRef.value)) {\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions(options.autoReconnect);\n const checkRetires = typeof retries === \"function\" ? retries : () => typeof retries === \"number\" && (retries < 0 || retried < retries);\n if (checkRetires(retried)) {\n retried += 1;\n retryTimeout = setTimeout(_init, delay);\n } else {\n onFailed == null ? void 0 : onFailed();\n }\n }\n };\n ws.onerror = (e) => {\n onError == null ? void 0 : onError(ws, e);\n };\n ws.onmessage = (e) => {\n if (options.heartbeat) {\n resetHeartbeat();\n const {\n message = DEFAULT_PING_MESSAGE,\n responseMessage = message\n } = resolveNestedOptions(options.heartbeat);\n if (e.data === toValue(responseMessage))\n return;\n }\n data.value = e.data;\n onMessage == null ? void 0 : onMessage(ws, e);\n };\n };\n if (options.heartbeat) {\n const {\n message = DEFAULT_PING_MESSAGE,\n interval = 1e3,\n pongTimeout = 1e3\n } = resolveNestedOptions(options.heartbeat);\n const { pause, resume } = useIntervalFn(\n () => {\n send(toValue(message), false);\n if (pongTimeoutWait != null)\n return;\n pongTimeoutWait = setTimeout(() => {\n close();\n explicitlyClosed = false;\n }, pongTimeout);\n },\n interval,\n { immediate: false }\n );\n heartbeatPause = pause;\n heartbeatResume = resume;\n }\n if (autoClose) {\n if (isClient)\n useEventListener(\"beforeunload\", () => close(), { passive: true });\n tryOnScopeDispose(close);\n }\n const open = () => {\n if (!isClient && !isWorker)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n open();\n if (autoConnect)\n watch(urlRef, open);\n return {\n data,\n status,\n close,\n send,\n open,\n ws: wsRef\n };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n const {\n window = defaultWindow\n } = options != null ? options : {};\n const data = ref(null);\n const worker = shallowRef();\n const post = (...args) => {\n if (!worker.value)\n return;\n worker.value.postMessage(...args);\n };\n const terminate = function terminate2() {\n if (!worker.value)\n return;\n worker.value.terminate();\n };\n if (window) {\n if (typeof arg0 === \"string\")\n worker.value = new Worker(arg0, workerOptions);\n else if (typeof arg0 === \"function\")\n worker.value = arg0();\n else\n worker.value = arg0;\n worker.value.onmessage = (e) => {\n data.value = e.data;\n };\n tryOnScopeDispose(() => {\n if (worker.value)\n worker.value.terminate();\n });\n }\n return {\n data,\n post,\n terminate,\n worker\n };\n}\n\nfunction depsParser(deps, localDeps) {\n if (deps.length === 0 && localDeps.length === 0)\n return \"\";\n const depsString = deps.map((dep) => `'${dep}'`).toString();\n const depsFunctionString = localDeps.filter((dep) => typeof dep === \"function\").map((fn) => {\n const str = fn.toString();\n if (str.trim().startsWith(\"function\")) {\n return str;\n } else {\n const name = fn.name;\n return `const ${name} = ${str}`;\n }\n }).join(\";\");\n const importString = `importScripts(${depsString});`;\n return `${depsString.trim() === \"\" ? \"\" : importString} ${depsFunctionString}`;\n}\n\nfunction jobRunner(userFunc) {\n return (e) => {\n const userFuncArgs = e.data[0];\n return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n postMessage([\"SUCCESS\", result]);\n }).catch((error) => {\n postMessage([\"ERROR\", error]);\n });\n };\n}\n\nfunction createWorkerBlobUrl(fn, deps, localDeps) {\n const blobCode = `${depsParser(deps, localDeps)}; onmessage=(${jobRunner})(${fn})`;\n const blob = new Blob([blobCode], { type: \"text/javascript\" });\n const url = URL.createObjectURL(blob);\n return url;\n}\n\nfunction useWebWorkerFn(fn, options = {}) {\n const {\n dependencies = [],\n localDependencies = [],\n timeout,\n window = defaultWindow\n } = options;\n const worker = ref();\n const workerStatus = shallowRef(\"PENDING\");\n const promise = ref({});\n const timeoutId = shallowRef();\n const workerTerminate = (status = \"PENDING\") => {\n if (worker.value && worker.value._url && window) {\n worker.value.terminate();\n URL.revokeObjectURL(worker.value._url);\n promise.value = {};\n worker.value = void 0;\n window.clearTimeout(timeoutId.value);\n workerStatus.value = status;\n }\n };\n workerTerminate();\n tryOnScopeDispose(workerTerminate);\n const generateWorker = () => {\n const blobUrl = createWorkerBlobUrl(fn, dependencies, localDependencies);\n const newWorker = new Worker(blobUrl);\n newWorker._url = blobUrl;\n newWorker.onmessage = (e) => {\n const { resolve = () => {\n }, reject = () => {\n } } = promise.value;\n const [status, result] = e.data;\n switch (status) {\n case \"SUCCESS\":\n resolve(result);\n workerTerminate(status);\n break;\n default:\n reject(result);\n workerTerminate(\"ERROR\");\n break;\n }\n };\n newWorker.onerror = (e) => {\n const { reject = () => {\n } } = promise.value;\n e.preventDefault();\n reject(e);\n workerTerminate(\"ERROR\");\n };\n if (timeout) {\n timeoutId.value = setTimeout(\n () => workerTerminate(\"TIMEOUT_EXPIRED\"),\n timeout\n );\n }\n return newWorker;\n };\n const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n var _a;\n promise.value = {\n resolve,\n reject\n };\n (_a = worker.value) == null ? void 0 : _a.postMessage([[...fnArgs]]);\n workerStatus.value = \"RUNNING\";\n });\n const workerFn = (...fnArgs) => {\n if (workerStatus.value === \"RUNNING\") {\n console.error(\n \"[useWebWorkerFn] You can only run one instance of the worker at a time.\"\n );\n return Promise.reject();\n }\n worker.value = generateWorker();\n return callWorker(...fnArgs);\n };\n return {\n workerFn,\n workerStatus,\n workerTerminate\n };\n}\n\nfunction useWindowFocus(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return shallowRef(false);\n const focused = shallowRef(window.document.hasFocus());\n const listenerOptions = { passive: true };\n useEventListener(window, \"blur\", () => {\n focused.value = false;\n }, listenerOptions);\n useEventListener(window, \"focus\", () => {\n focused.value = true;\n }, listenerOptions);\n return focused;\n}\n\nfunction useWindowScroll(options = {}) {\n const { window = defaultWindow, ...rest } = options;\n return useScroll(window, rest);\n}\n\nfunction useWindowSize(options = {}) {\n const {\n window = defaultWindow,\n initialWidth = Number.POSITIVE_INFINITY,\n initialHeight = Number.POSITIVE_INFINITY,\n listenOrientation = true,\n includeScrollbar = true,\n type = \"inner\"\n } = options;\n const width = shallowRef(initialWidth);\n const height = shallowRef(initialHeight);\n const update = () => {\n if (window) {\n if (type === \"outer\") {\n width.value = window.outerWidth;\n height.value = window.outerHeight;\n } else if (type === \"visual\" && window.visualViewport) {\n const { width: visualViewportWidth, height: visualViewportHeight, scale } = window.visualViewport;\n width.value = Math.round(visualViewportWidth * scale);\n height.value = Math.round(visualViewportHeight * scale);\n } else if (includeScrollbar) {\n width.value = window.innerWidth;\n height.value = window.innerHeight;\n } else {\n width.value = window.document.documentElement.clientWidth;\n height.value = window.document.documentElement.clientHeight;\n }\n }\n };\n update();\n tryOnMounted(update);\n const listenerOptions = { passive: true };\n useEventListener(\"resize\", update, listenerOptions);\n if (window && type === \"visual\" && window.visualViewport) {\n useEventListener(window.visualViewport, \"resize\", update, listenerOptions);\n }\n if (listenOrientation) {\n const matches = useMediaQuery(\"(orientation: portrait)\");\n watch(matches, () => update());\n }\n return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsElement, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onElementRemoval, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, provideSSRWidth, setSSRHandler, templateRef, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCountdown, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePreferredReducedTransparency, usePrevious, useRafFn, useRefHistory, useResizeObserver, useSSRWidth, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n"], + "mappings": "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", + "names": ["get", "set", "ref", "keys", "invoke", "toRef", "toRefs", "toValue", "window", "document", "timestamp", "navigator", "events", "getValue", "ref", "defaults", "toRef", "set", "onUpdated", "preventDefault", "toRefs", "now", "keys", "get", "isReadonly"] +} diff --git a/packages/tempo/.vitepress/cache/deps/chunk-XNJYLMDR.js b/packages/tempo/.vitepress/cache/deps/chunk-XNJYLMDR.js new file mode 100644 index 00000000..2d5ab4d0 --- /dev/null +++ b/packages/tempo/.vitepress/cache/deps/chunk-XNJYLMDR.js @@ -0,0 +1,12987 @@ +// ../../node_modules/@vue/shared/dist/shared.esm-bundler.js +function makeMap(str) { + const map2 = /* @__PURE__ */ Object.create(null); + for (const key of str.split(",")) map2[key] = 1; + return (val) => val in map2; +} +var EMPTY_OBJ = true ? Object.freeze({}) : {}; +var EMPTY_ARR = true ? Object.freeze([]) : []; +var NOOP = () => { +}; +var NO = () => false; +var isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter +(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97); +var isModelListener = (key) => key.startsWith("onUpdate:"); +var extend = Object.assign; +var remove = (arr, el) => { + const i = arr.indexOf(el); + if (i > -1) { + arr.splice(i, 1); + } +}; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var hasOwn = (val, key) => hasOwnProperty.call(val, key); +var isArray = Array.isArray; +var isMap = (val) => toTypeString(val) === "[object Map]"; +var isSet = (val) => toTypeString(val) === "[object Set]"; +var isDate = (val) => toTypeString(val) === "[object Date]"; +var isRegExp = (val) => toTypeString(val) === "[object RegExp]"; +var isFunction = (val) => typeof val === "function"; +var isString = (val) => typeof val === "string"; +var isSymbol = (val) => typeof val === "symbol"; +var isObject = (val) => val !== null && typeof val === "object"; +var isPromise = (val) => { + return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch); +}; +var objectToString = Object.prototype.toString; +var toTypeString = (value) => objectToString.call(value); +var toRawType = (value) => { + return toTypeString(value).slice(8, -1); +}; +var isPlainObject = (val) => toTypeString(val) === "[object Object]"; +var isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key; +var isReservedProp = makeMap( + // the leading comma is intentional so empty string "" is also included + ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted" +); +var isBuiltInDirective = makeMap( + "bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo" +); +var cacheStringFunction = (fn) => { + const cache = /* @__PURE__ */ Object.create(null); + return (str) => { + const hit = cache[str]; + return hit || (cache[str] = fn(str)); + }; +}; +var camelizeRE = /-\w/g; +var camelize = cacheStringFunction( + (str) => { + return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase()); + } +); +var hyphenateRE = /\B([A-Z])/g; +var hyphenate = cacheStringFunction( + (str) => str.replace(hyphenateRE, "-$1").toLowerCase() +); +var capitalize = cacheStringFunction((str) => { + return str.charAt(0).toUpperCase() + str.slice(1); +}); +var toHandlerKey = cacheStringFunction( + (str) => { + const s = str ? `on${capitalize(str)}` : ``; + return s; + } +); +var hasChanged = (value, oldValue) => !Object.is(value, oldValue); +var invokeArrayFns = (fns, ...arg) => { + for (let i = 0; i < fns.length; i++) { + fns[i](...arg); + } +}; +var def = (obj, key, value, writable = false) => { + Object.defineProperty(obj, key, { + configurable: true, + enumerable: false, + writable, + value + }); +}; +var looseToNumber = (val) => { + const n = parseFloat(val); + return isNaN(n) ? val : n; +}; +var toNumber = (val) => { + const n = isString(val) ? Number(val) : NaN; + return isNaN(n) ? val : n; +}; +var _globalThis; +var getGlobalThis = () => { + return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {}); +}; +var GLOBALS_ALLOWED = "Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol"; +var isGloballyAllowed = makeMap(GLOBALS_ALLOWED); +function normalizeStyle(value) { + if (isArray(value)) { + const res = {}; + for (let i = 0; i < value.length; i++) { + const item = value[i]; + const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item); + if (normalized) { + for (const key in normalized) { + res[key] = normalized[key]; + } + } + } + return res; + } else if (isString(value) || isObject(value)) { + return value; + } +} +var listDelimiterRE = /;(?![^(]*\))/g; +var propertyDelimiterRE = /:([^]+)/; +var styleCommentRE = /\/\*[^]*?\*\//g; +function parseStringStyle(cssText) { + const ret = {}; + cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => { + if (item) { + const tmp = item.split(propertyDelimiterRE); + tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); + } + }); + return ret; +} +function stringifyStyle(styles) { + if (!styles) return ""; + if (isString(styles)) return styles; + let ret = ""; + for (const key in styles) { + const value = styles[key]; + if (isString(value) || typeof value === "number") { + const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key); + ret += `${normalizedKey}:${value};`; + } + } + return ret; +} +function normalizeClass(value) { + let res = ""; + if (isString(value)) { + res = value; + } else if (isArray(value)) { + for (let i = 0; i < value.length; i++) { + const normalized = normalizeClass(value[i]); + if (normalized) { + res += normalized + " "; + } + } + } else if (isObject(value)) { + for (const name in value) { + if (value[name]) { + res += name + " "; + } + } + } + return res.trim(); +} +function normalizeProps(props) { + if (!props) return null; + let { class: klass, style } = props; + if (klass && !isString(klass)) { + props.class = normalizeClass(klass); + } + if (style) { + props.style = normalizeStyle(style); + } + return props; +} +var HTML_TAGS = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot"; +var SVG_TAGS = "svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view"; +var MATH_TAGS = "annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics"; +var VOID_TAGS = "area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr"; +var isHTMLTag = makeMap(HTML_TAGS); +var isSVGTag = makeMap(SVG_TAGS); +var isMathMLTag = makeMap(MATH_TAGS); +var isVoidTag = makeMap(VOID_TAGS); +var specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`; +var isSpecialBooleanAttr = makeMap(specialBooleanAttrs); +var isBooleanAttr = makeMap( + specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected` +); +function includeBooleanAttr(value) { + return !!value || value === ""; +} +var isKnownHtmlAttr = makeMap( + `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap` +); +var isKnownSvgAttr = makeMap( + `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan` +); +var isKnownMathMLAttr = makeMap( + `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns` +); +function isRenderableAttrValue(value) { + if (value == null) { + return false; + } + const type = typeof value; + return type === "string" || type === "number" || type === "boolean"; +} +var cssVarNameEscapeSymbolsRE = /[ !"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g; +function getEscapedCssVarName(key, doubleEscape) { + return key.replace( + cssVarNameEscapeSymbolsRE, + (s) => doubleEscape ? s === '"' ? '\\\\\\"' : `\\\\${s}` : `\\${s}` + ); +} +function looseCompareArrays(a, b) { + if (a.length !== b.length) return false; + let equal = true; + for (let i = 0; equal && i < a.length; i++) { + equal = looseEqual(a[i], b[i]); + } + return equal; +} +function looseEqual(a, b) { + if (a === b) return true; + let aValidType = isDate(a); + let bValidType = isDate(b); + if (aValidType || bValidType) { + return aValidType && bValidType ? a.getTime() === b.getTime() : false; + } + aValidType = isSymbol(a); + bValidType = isSymbol(b); + if (aValidType || bValidType) { + return a === b; + } + aValidType = isArray(a); + bValidType = isArray(b); + if (aValidType || bValidType) { + return aValidType && bValidType ? looseCompareArrays(a, b) : false; + } + aValidType = isObject(a); + bValidType = isObject(b); + if (aValidType || bValidType) { + if (!aValidType || !bValidType) { + return false; + } + const aKeysCount = Object.keys(a).length; + const bKeysCount = Object.keys(b).length; + if (aKeysCount !== bKeysCount) { + return false; + } + for (const key in a) { + const aHasKey = a.hasOwnProperty(key); + const bHasKey = b.hasOwnProperty(key); + if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) { + return false; + } + } + } + return String(a) === String(b); +} +function looseIndexOf(arr, val) { + return arr.findIndex((item) => looseEqual(item, val)); +} +var isRef = (val) => { + return !!(val && val["__v_isRef"] === true); +}; +var toDisplayString = (val) => { + return isString(val) ? val : val == null ? "" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val); +}; +var replacer = (_key, val) => { + if (isRef(val)) { + return replacer(_key, val.value); + } else if (isMap(val)) { + return { + [`Map(${val.size})`]: [...val.entries()].reduce( + (entries, [key, val2], i) => { + entries[stringifySymbol(key, i) + " =>"] = val2; + return entries; + }, + {} + ) + }; + } else if (isSet(val)) { + return { + [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v)) + }; + } else if (isSymbol(val)) { + return stringifySymbol(val); + } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) { + return String(val); + } + return val; +}; +var stringifySymbol = (v, i = "") => { + var _a; + return ( + // Symbol.description in es2019+ so we need to cast here to pass + // the lib: es2016 check + isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v + ); +}; +function normalizeCssVarValue(value) { + if (value == null) { + return "initial"; + } + if (typeof value === "string") { + return value === "" ? " " : value; + } + if (typeof value !== "number" || !Number.isFinite(value)) { + if (true) { + console.warn( + "[Vue warn] Invalid value used for CSS binding. Expected a string or a finite number but received:", + value + ); + } + } + return String(value); +} + +// ../../node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js +function warn(msg, ...args) { + console.warn(`[Vue warn] ${msg}`, ...args); +} +var activeEffectScope; +var EffectScope = class { + // TODO isolatedDeclarations "__v_skip" + constructor(detached = false) { + this.detached = detached; + this._active = true; + this._on = 0; + this.effects = []; + this.cleanups = []; + this._isPaused = false; + this.__v_skip = true; + this.parent = activeEffectScope; + if (!detached && activeEffectScope) { + this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push( + this + ) - 1; + } + } + get active() { + return this._active; + } + pause() { + if (this._active) { + this._isPaused = true; + let i, l; + if (this.scopes) { + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].pause(); + } + } + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].pause(); + } + } + } + /** + * Resumes the effect scope, including all child scopes and effects. + */ + resume() { + if (this._active) { + if (this._isPaused) { + this._isPaused = false; + let i, l; + if (this.scopes) { + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].resume(); + } + } + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].resume(); + } + } + } + } + run(fn) { + if (this._active) { + const currentEffectScope = activeEffectScope; + try { + activeEffectScope = this; + return fn(); + } finally { + activeEffectScope = currentEffectScope; + } + } else if (true) { + warn(`cannot run an inactive effect scope.`); + } + } + /** + * This should only be called on non-detached scopes + * @internal + */ + on() { + if (++this._on === 1) { + this.prevScope = activeEffectScope; + activeEffectScope = this; + } + } + /** + * This should only be called on non-detached scopes + * @internal + */ + off() { + if (this._on > 0 && --this._on === 0) { + activeEffectScope = this.prevScope; + this.prevScope = void 0; + } + } + stop(fromParent) { + if (this._active) { + this._active = false; + let i, l; + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].stop(); + } + this.effects.length = 0; + for (i = 0, l = this.cleanups.length; i < l; i++) { + this.cleanups[i](); + } + this.cleanups.length = 0; + if (this.scopes) { + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].stop(true); + } + this.scopes.length = 0; + } + if (!this.detached && this.parent && !fromParent) { + const last = this.parent.scopes.pop(); + if (last && last !== this) { + this.parent.scopes[this.index] = last; + last.index = this.index; + } + } + this.parent = void 0; + } + } +}; +function effectScope(detached) { + return new EffectScope(detached); +} +function getCurrentScope() { + return activeEffectScope; +} +function onScopeDispose(fn, failSilently = false) { + if (activeEffectScope) { + activeEffectScope.cleanups.push(fn); + } else if (!failSilently) { + warn( + `onScopeDispose() is called when there is no active effect scope to be associated with.` + ); + } +} +var activeSub; +var pausedQueueEffects = /* @__PURE__ */ new WeakSet(); +var ReactiveEffect = class { + constructor(fn) { + this.fn = fn; + this.deps = void 0; + this.depsTail = void 0; + this.flags = 1 | 4; + this.next = void 0; + this.cleanup = void 0; + this.scheduler = void 0; + if (activeEffectScope && activeEffectScope.active) { + activeEffectScope.effects.push(this); + } + } + pause() { + this.flags |= 64; + } + resume() { + if (this.flags & 64) { + this.flags &= -65; + if (pausedQueueEffects.has(this)) { + pausedQueueEffects.delete(this); + this.trigger(); + } + } + } + /** + * @internal + */ + notify() { + if (this.flags & 2 && !(this.flags & 32)) { + return; + } + if (!(this.flags & 8)) { + batch(this); + } + } + run() { + if (!(this.flags & 1)) { + return this.fn(); + } + this.flags |= 2; + cleanupEffect(this); + prepareDeps(this); + const prevEffect = activeSub; + const prevShouldTrack = shouldTrack; + activeSub = this; + shouldTrack = true; + try { + return this.fn(); + } finally { + if (activeSub !== this) { + warn( + "Active effect was not restored correctly - this is likely a Vue internal bug." + ); + } + cleanupDeps(this); + activeSub = prevEffect; + shouldTrack = prevShouldTrack; + this.flags &= -3; + } + } + stop() { + if (this.flags & 1) { + for (let link = this.deps; link; link = link.nextDep) { + removeSub(link); + } + this.deps = this.depsTail = void 0; + cleanupEffect(this); + this.onStop && this.onStop(); + this.flags &= -2; + } + } + trigger() { + if (this.flags & 64) { + pausedQueueEffects.add(this); + } else if (this.scheduler) { + this.scheduler(); + } else { + this.runIfDirty(); + } + } + /** + * @internal + */ + runIfDirty() { + if (isDirty(this)) { + this.run(); + } + } + get dirty() { + return isDirty(this); + } +}; +var batchDepth = 0; +var batchedSub; +var batchedComputed; +function batch(sub, isComputed = false) { + sub.flags |= 8; + if (isComputed) { + sub.next = batchedComputed; + batchedComputed = sub; + return; + } + sub.next = batchedSub; + batchedSub = sub; +} +function startBatch() { + batchDepth++; +} +function endBatch() { + if (--batchDepth > 0) { + return; + } + if (batchedComputed) { + let e = batchedComputed; + batchedComputed = void 0; + while (e) { + const next = e.next; + e.next = void 0; + e.flags &= -9; + e = next; + } + } + let error; + while (batchedSub) { + let e = batchedSub; + batchedSub = void 0; + while (e) { + const next = e.next; + e.next = void 0; + e.flags &= -9; + if (e.flags & 1) { + try { + ; + e.trigger(); + } catch (err) { + if (!error) error = err; + } + } + e = next; + } + } + if (error) throw error; +} +function prepareDeps(sub) { + for (let link = sub.deps; link; link = link.nextDep) { + link.version = -1; + link.prevActiveLink = link.dep.activeLink; + link.dep.activeLink = link; + } +} +function cleanupDeps(sub) { + let head; + let tail = sub.depsTail; + let link = tail; + while (link) { + const prev = link.prevDep; + if (link.version === -1) { + if (link === tail) tail = prev; + removeSub(link); + removeDep(link); + } else { + head = link; + } + link.dep.activeLink = link.prevActiveLink; + link.prevActiveLink = void 0; + link = prev; + } + sub.deps = head; + sub.depsTail = tail; +} +function isDirty(sub) { + for (let link = sub.deps; link; link = link.nextDep) { + if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) { + return true; + } + } + if (sub._dirty) { + return true; + } + return false; +} +function refreshComputed(computed3) { + if (computed3.flags & 4 && !(computed3.flags & 16)) { + return; + } + computed3.flags &= -17; + if (computed3.globalVersion === globalVersion) { + return; + } + computed3.globalVersion = globalVersion; + if (!computed3.isSSR && computed3.flags & 128 && (!computed3.deps && !computed3._dirty || !isDirty(computed3))) { + return; + } + computed3.flags |= 2; + const dep = computed3.dep; + const prevSub = activeSub; + const prevShouldTrack = shouldTrack; + activeSub = computed3; + shouldTrack = true; + try { + prepareDeps(computed3); + const value = computed3.fn(computed3._value); + if (dep.version === 0 || hasChanged(value, computed3._value)) { + computed3.flags |= 128; + computed3._value = value; + dep.version++; + } + } catch (err) { + dep.version++; + throw err; + } finally { + activeSub = prevSub; + shouldTrack = prevShouldTrack; + cleanupDeps(computed3); + computed3.flags &= -3; + } +} +function removeSub(link, soft = false) { + const { dep, prevSub, nextSub } = link; + if (prevSub) { + prevSub.nextSub = nextSub; + link.prevSub = void 0; + } + if (nextSub) { + nextSub.prevSub = prevSub; + link.nextSub = void 0; + } + if (dep.subsHead === link) { + dep.subsHead = nextSub; + } + if (dep.subs === link) { + dep.subs = prevSub; + if (!prevSub && dep.computed) { + dep.computed.flags &= -5; + for (let l = dep.computed.deps; l; l = l.nextDep) { + removeSub(l, true); + } + } + } + if (!soft && !--dep.sc && dep.map) { + dep.map.delete(dep.key); + } +} +function removeDep(link) { + const { prevDep, nextDep } = link; + if (prevDep) { + prevDep.nextDep = nextDep; + link.prevDep = void 0; + } + if (nextDep) { + nextDep.prevDep = prevDep; + link.nextDep = void 0; + } +} +function effect(fn, options) { + if (fn.effect instanceof ReactiveEffect) { + fn = fn.effect.fn; + } + const e = new ReactiveEffect(fn); + if (options) { + extend(e, options); + } + try { + e.run(); + } catch (err) { + e.stop(); + throw err; + } + const runner = e.run.bind(e); + runner.effect = e; + return runner; +} +function stop(runner) { + runner.effect.stop(); +} +var shouldTrack = true; +var trackStack = []; +function pauseTracking() { + trackStack.push(shouldTrack); + shouldTrack = false; +} +function resetTracking() { + const last = trackStack.pop(); + shouldTrack = last === void 0 ? true : last; +} +function cleanupEffect(e) { + const { cleanup } = e; + e.cleanup = void 0; + if (cleanup) { + const prevSub = activeSub; + activeSub = void 0; + try { + cleanup(); + } finally { + activeSub = prevSub; + } + } +} +var globalVersion = 0; +var Link = class { + constructor(sub, dep) { + this.sub = sub; + this.dep = dep; + this.version = dep.version; + this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0; + } +}; +var Dep = class { + // TODO isolatedDeclarations "__v_skip" + constructor(computed3) { + this.computed = computed3; + this.version = 0; + this.activeLink = void 0; + this.subs = void 0; + this.map = void 0; + this.key = void 0; + this.sc = 0; + this.__v_skip = true; + if (true) { + this.subsHead = void 0; + } + } + track(debugInfo) { + if (!activeSub || !shouldTrack || activeSub === this.computed) { + return; + } + let link = this.activeLink; + if (link === void 0 || link.sub !== activeSub) { + link = this.activeLink = new Link(activeSub, this); + if (!activeSub.deps) { + activeSub.deps = activeSub.depsTail = link; + } else { + link.prevDep = activeSub.depsTail; + activeSub.depsTail.nextDep = link; + activeSub.depsTail = link; + } + addSub(link); + } else if (link.version === -1) { + link.version = this.version; + if (link.nextDep) { + const next = link.nextDep; + next.prevDep = link.prevDep; + if (link.prevDep) { + link.prevDep.nextDep = next; + } + link.prevDep = activeSub.depsTail; + link.nextDep = void 0; + activeSub.depsTail.nextDep = link; + activeSub.depsTail = link; + if (activeSub.deps === link) { + activeSub.deps = next; + } + } + } + if (activeSub.onTrack) { + activeSub.onTrack( + extend( + { + effect: activeSub + }, + debugInfo + ) + ); + } + return link; + } + trigger(debugInfo) { + this.version++; + globalVersion++; + this.notify(debugInfo); + } + notify(debugInfo) { + startBatch(); + try { + if (true) { + for (let head = this.subsHead; head; head = head.nextSub) { + if (head.sub.onTrigger && !(head.sub.flags & 8)) { + head.sub.onTrigger( + extend( + { + effect: head.sub + }, + debugInfo + ) + ); + } + } + } + for (let link = this.subs; link; link = link.prevSub) { + if (link.sub.notify()) { + ; + link.sub.dep.notify(); + } + } + } finally { + endBatch(); + } + } +}; +function addSub(link) { + link.dep.sc++; + if (link.sub.flags & 4) { + const computed3 = link.dep.computed; + if (computed3 && !link.dep.subs) { + computed3.flags |= 4 | 16; + for (let l = computed3.deps; l; l = l.nextDep) { + addSub(l); + } + } + const currentTail = link.dep.subs; + if (currentTail !== link) { + link.prevSub = currentTail; + if (currentTail) currentTail.nextSub = link; + } + if (link.dep.subsHead === void 0) { + link.dep.subsHead = link; + } + link.dep.subs = link; + } +} +var targetMap = /* @__PURE__ */ new WeakMap(); +var ITERATE_KEY = Symbol( + true ? "Object iterate" : "" +); +var MAP_KEY_ITERATE_KEY = Symbol( + true ? "Map keys iterate" : "" +); +var ARRAY_ITERATE_KEY = Symbol( + true ? "Array iterate" : "" +); +function track(target, type, key) { + if (shouldTrack && activeSub) { + let depsMap = targetMap.get(target); + if (!depsMap) { + targetMap.set(target, depsMap = /* @__PURE__ */ new Map()); + } + let dep = depsMap.get(key); + if (!dep) { + depsMap.set(key, dep = new Dep()); + dep.map = depsMap; + dep.key = key; + } + if (true) { + dep.track({ + target, + type, + key + }); + } else { + dep.track(); + } + } +} +function trigger(target, type, key, newValue, oldValue, oldTarget) { + const depsMap = targetMap.get(target); + if (!depsMap) { + globalVersion++; + return; + } + const run = (dep) => { + if (dep) { + if (true) { + dep.trigger({ + target, + type, + key, + newValue, + oldValue, + oldTarget + }); + } else { + dep.trigger(); + } + } + }; + startBatch(); + if (type === "clear") { + depsMap.forEach(run); + } else { + const targetIsArray = isArray(target); + const isArrayIndex = targetIsArray && isIntegerKey(key); + if (targetIsArray && key === "length") { + const newLength = Number(newValue); + depsMap.forEach((dep, key2) => { + if (key2 === "length" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) { + run(dep); + } + }); + } else { + if (key !== void 0 || depsMap.has(void 0)) { + run(depsMap.get(key)); + } + if (isArrayIndex) { + run(depsMap.get(ARRAY_ITERATE_KEY)); + } + switch (type) { + case "add": + if (!targetIsArray) { + run(depsMap.get(ITERATE_KEY)); + if (isMap(target)) { + run(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } else if (isArrayIndex) { + run(depsMap.get("length")); + } + break; + case "delete": + if (!targetIsArray) { + run(depsMap.get(ITERATE_KEY)); + if (isMap(target)) { + run(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } + break; + case "set": + if (isMap(target)) { + run(depsMap.get(ITERATE_KEY)); + } + break; + } + } + } + endBatch(); +} +function getDepFromReactive(object, key) { + const depMap = targetMap.get(object); + return depMap && depMap.get(key); +} +function reactiveReadArray(array) { + const raw = toRaw(array); + if (raw === array) return raw; + track(raw, "iterate", ARRAY_ITERATE_KEY); + return isShallow(array) ? raw : raw.map(toReactive); +} +function shallowReadArray(arr) { + track(arr = toRaw(arr), "iterate", ARRAY_ITERATE_KEY); + return arr; +} +function toWrapped(target, item) { + if (isReadonly(target)) { + return isReactive(target) ? toReadonly(toReactive(item)) : toReadonly(item); + } + return toReactive(item); +} +var arrayInstrumentations = { + __proto__: null, + [Symbol.iterator]() { + return iterator(this, Symbol.iterator, (item) => toWrapped(this, item)); + }, + concat(...args) { + return reactiveReadArray(this).concat( + ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x) + ); + }, + entries() { + return iterator(this, "entries", (value) => { + value[1] = toWrapped(this, value[1]); + return value; + }); + }, + every(fn, thisArg) { + return apply(this, "every", fn, thisArg, void 0, arguments); + }, + filter(fn, thisArg) { + return apply( + this, + "filter", + fn, + thisArg, + (v) => v.map((item) => toWrapped(this, item)), + arguments + ); + }, + find(fn, thisArg) { + return apply( + this, + "find", + fn, + thisArg, + (item) => toWrapped(this, item), + arguments + ); + }, + findIndex(fn, thisArg) { + return apply(this, "findIndex", fn, thisArg, void 0, arguments); + }, + findLast(fn, thisArg) { + return apply( + this, + "findLast", + fn, + thisArg, + (item) => toWrapped(this, item), + arguments + ); + }, + findLastIndex(fn, thisArg) { + return apply(this, "findLastIndex", fn, thisArg, void 0, arguments); + }, + // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement + forEach(fn, thisArg) { + return apply(this, "forEach", fn, thisArg, void 0, arguments); + }, + includes(...args) { + return searchProxy(this, "includes", args); + }, + indexOf(...args) { + return searchProxy(this, "indexOf", args); + }, + join(separator) { + return reactiveReadArray(this).join(separator); + }, + // keys() iterator only reads `length`, no optimization required + lastIndexOf(...args) { + return searchProxy(this, "lastIndexOf", args); + }, + map(fn, thisArg) { + return apply(this, "map", fn, thisArg, void 0, arguments); + }, + pop() { + return noTracking(this, "pop"); + }, + push(...args) { + return noTracking(this, "push", args); + }, + reduce(fn, ...args) { + return reduce(this, "reduce", fn, args); + }, + reduceRight(fn, ...args) { + return reduce(this, "reduceRight", fn, args); + }, + shift() { + return noTracking(this, "shift"); + }, + // slice could use ARRAY_ITERATE but also seems to beg for range tracking + some(fn, thisArg) { + return apply(this, "some", fn, thisArg, void 0, arguments); + }, + splice(...args) { + return noTracking(this, "splice", args); + }, + toReversed() { + return reactiveReadArray(this).toReversed(); + }, + toSorted(comparer) { + return reactiveReadArray(this).toSorted(comparer); + }, + toSpliced(...args) { + return reactiveReadArray(this).toSpliced(...args); + }, + unshift(...args) { + return noTracking(this, "unshift", args); + }, + values() { + return iterator(this, "values", (item) => toWrapped(this, item)); + } +}; +function iterator(self2, method, wrapValue) { + const arr = shallowReadArray(self2); + const iter = arr[method](); + if (arr !== self2 && !isShallow(self2)) { + iter._next = iter.next; + iter.next = () => { + const result = iter._next(); + if (!result.done) { + result.value = wrapValue(result.value); + } + return result; + }; + } + return iter; +} +var arrayProto = Array.prototype; +function apply(self2, method, fn, thisArg, wrappedRetFn, args) { + const arr = shallowReadArray(self2); + const needsWrap = arr !== self2 && !isShallow(self2); + const methodFn = arr[method]; + if (methodFn !== arrayProto[method]) { + const result2 = methodFn.apply(self2, args); + return needsWrap ? toReactive(result2) : result2; + } + let wrappedFn = fn; + if (arr !== self2) { + if (needsWrap) { + wrappedFn = function(item, index) { + return fn.call(this, toWrapped(self2, item), index, self2); + }; + } else if (fn.length > 2) { + wrappedFn = function(item, index) { + return fn.call(this, item, index, self2); + }; + } + } + const result = methodFn.call(arr, wrappedFn, thisArg); + return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result; +} +function reduce(self2, method, fn, args) { + const arr = shallowReadArray(self2); + const needsWrap = arr !== self2 && !isShallow(self2); + let wrappedFn = fn; + let wrapInitialAccumulator = false; + if (arr !== self2) { + if (needsWrap) { + wrapInitialAccumulator = args.length === 0; + wrappedFn = function(acc, item, index) { + if (wrapInitialAccumulator) { + wrapInitialAccumulator = false; + acc = toWrapped(self2, acc); + } + return fn.call(this, acc, toWrapped(self2, item), index, self2); + }; + } else if (fn.length > 3) { + wrappedFn = function(acc, item, index) { + return fn.call(this, acc, item, index, self2); + }; + } + } + const result = arr[method](wrappedFn, ...args); + return wrapInitialAccumulator ? toWrapped(self2, result) : result; +} +function searchProxy(self2, method, args) { + const arr = toRaw(self2); + track(arr, "iterate", ARRAY_ITERATE_KEY); + const res = arr[method](...args); + if ((res === -1 || res === false) && isProxy(args[0])) { + args[0] = toRaw(args[0]); + return arr[method](...args); + } + return res; +} +function noTracking(self2, method, args = []) { + pauseTracking(); + startBatch(); + const res = toRaw(self2)[method].apply(self2, args); + endBatch(); + resetTracking(); + return res; +} +var isNonTrackableKeys = makeMap(`__proto__,__v_isRef,__isVue`); +var builtInSymbols = new Set( + Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol) +); +function hasOwnProperty2(key) { + if (!isSymbol(key)) key = String(key); + const obj = toRaw(this); + track(obj, "has", key); + return obj.hasOwnProperty(key); +} +var BaseReactiveHandler = class { + constructor(_isReadonly = false, _isShallow = false) { + this._isReadonly = _isReadonly; + this._isShallow = _isShallow; + } + get(target, key, receiver) { + if (key === "__v_skip") return target["__v_skip"]; + const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow; + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_isShallow") { + return isShallow2; + } else if (key === "__v_raw") { + if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype + // this means the receiver is a user proxy of the reactive proxy + Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) { + return target; + } + return; + } + const targetIsArray = isArray(target); + if (!isReadonly2) { + let fn; + if (targetIsArray && (fn = arrayInstrumentations[key])) { + return fn; + } + if (key === "hasOwnProperty") { + return hasOwnProperty2; + } + } + const res = Reflect.get( + target, + key, + // if this is a proxy wrapping a ref, return methods using the raw ref + // as receiver so that we don't have to call `toRaw` on the ref in all + // its class methods + isRef2(target) ? target : receiver + ); + if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { + return res; + } + if (!isReadonly2) { + track(target, "get", key); + } + if (isShallow2) { + return res; + } + if (isRef2(res)) { + const value = targetIsArray && isIntegerKey(key) ? res : res.value; + return isReadonly2 && isObject(value) ? readonly(value) : value; + } + if (isObject(res)) { + return isReadonly2 ? readonly(res) : reactive(res); + } + return res; + } +}; +var MutableReactiveHandler = class extends BaseReactiveHandler { + constructor(isShallow2 = false) { + super(false, isShallow2); + } + set(target, key, value, receiver) { + let oldValue = target[key]; + const isArrayWithIntegerKey = isArray(target) && isIntegerKey(key); + if (!this._isShallow) { + const isOldValueReadonly = isReadonly(oldValue); + if (!isShallow(value) && !isReadonly(value)) { + oldValue = toRaw(oldValue); + value = toRaw(value); + } + if (!isArrayWithIntegerKey && isRef2(oldValue) && !isRef2(value)) { + if (isOldValueReadonly) { + if (true) { + warn( + `Set operation on key "${String(key)}" failed: target is readonly.`, + target[key] + ); + } + return true; + } else { + oldValue.value = value; + return true; + } + } + } + const hadKey = isArrayWithIntegerKey ? Number(key) < target.length : hasOwn(target, key); + const result = Reflect.set( + target, + key, + value, + isRef2(target) ? target : receiver + ); + if (target === toRaw(receiver)) { + if (!hadKey) { + trigger(target, "add", key, value); + } else if (hasChanged(value, oldValue)) { + trigger(target, "set", key, value, oldValue); + } + } + return result; + } + deleteProperty(target, key) { + const hadKey = hasOwn(target, key); + const oldValue = target[key]; + const result = Reflect.deleteProperty(target, key); + if (result && hadKey) { + trigger(target, "delete", key, void 0, oldValue); + } + return result; + } + has(target, key) { + const result = Reflect.has(target, key); + if (!isSymbol(key) || !builtInSymbols.has(key)) { + track(target, "has", key); + } + return result; + } + ownKeys(target) { + track( + target, + "iterate", + isArray(target) ? "length" : ITERATE_KEY + ); + return Reflect.ownKeys(target); + } +}; +var ReadonlyReactiveHandler = class extends BaseReactiveHandler { + constructor(isShallow2 = false) { + super(true, isShallow2); + } + set(target, key) { + if (true) { + warn( + `Set operation on key "${String(key)}" failed: target is readonly.`, + target + ); + } + return true; + } + deleteProperty(target, key) { + if (true) { + warn( + `Delete operation on key "${String(key)}" failed: target is readonly.`, + target + ); + } + return true; + } +}; +var mutableHandlers = new MutableReactiveHandler(); +var readonlyHandlers = new ReadonlyReactiveHandler(); +var shallowReactiveHandlers = new MutableReactiveHandler(true); +var shallowReadonlyHandlers = new ReadonlyReactiveHandler(true); +var toShallow = (value) => value; +var getProto = (v) => Reflect.getPrototypeOf(v); +function createIterableMethod(method, isReadonly2, isShallow2) { + return function(...args) { + const target = this["__v_raw"]; + const rawTarget = toRaw(target); + const targetIsMap = isMap(rawTarget); + const isPair = method === "entries" || method === Symbol.iterator && targetIsMap; + const isKeyOnly = method === "keys" && targetIsMap; + const innerIterator = target[method](...args); + const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive; + !isReadonly2 && track( + rawTarget, + "iterate", + isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY + ); + return extend( + // inheriting all iterator properties + Object.create(innerIterator), + { + // iterator protocol + next() { + const { value, done } = innerIterator.next(); + return done ? { value, done } : { + value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), + done + }; + } + } + ); + }; +} +function createReadonlyMethod(type) { + return function(...args) { + if (true) { + const key = args[0] ? `on key "${args[0]}" ` : ``; + warn( + `${capitalize(type)} operation ${key}failed: target is readonly.`, + toRaw(this) + ); + } + return type === "delete" ? false : type === "clear" ? void 0 : this; + }; +} +function createInstrumentations(readonly2, shallow) { + const instrumentations = { + get(key) { + const target = this["__v_raw"]; + const rawTarget = toRaw(target); + const rawKey = toRaw(key); + if (!readonly2) { + if (hasChanged(key, rawKey)) { + track(rawTarget, "get", key); + } + track(rawTarget, "get", rawKey); + } + const { has } = getProto(rawTarget); + const wrap = shallow ? toShallow : readonly2 ? toReadonly : toReactive; + if (has.call(rawTarget, key)) { + return wrap(target.get(key)); + } else if (has.call(rawTarget, rawKey)) { + return wrap(target.get(rawKey)); + } else if (target !== rawTarget) { + target.get(key); + } + }, + get size() { + const target = this["__v_raw"]; + !readonly2 && track(toRaw(target), "iterate", ITERATE_KEY); + return target.size; + }, + has(key) { + const target = this["__v_raw"]; + const rawTarget = toRaw(target); + const rawKey = toRaw(key); + if (!readonly2) { + if (hasChanged(key, rawKey)) { + track(rawTarget, "has", key); + } + track(rawTarget, "has", rawKey); + } + return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey); + }, + forEach(callback, thisArg) { + const observed = this; + const target = observed["__v_raw"]; + const rawTarget = toRaw(target); + const wrap = shallow ? toShallow : readonly2 ? toReadonly : toReactive; + !readonly2 && track(rawTarget, "iterate", ITERATE_KEY); + return target.forEach((value, key) => { + return callback.call(thisArg, wrap(value), wrap(key), observed); + }); + } + }; + extend( + instrumentations, + readonly2 ? { + add: createReadonlyMethod("add"), + set: createReadonlyMethod("set"), + delete: createReadonlyMethod("delete"), + clear: createReadonlyMethod("clear") + } : { + add(value) { + const target = toRaw(this); + const proto = getProto(target); + const rawValue = toRaw(value); + const valueToAdd = !shallow && !isShallow(value) && !isReadonly(value) ? rawValue : value; + const hadKey = proto.has.call(target, valueToAdd) || hasChanged(value, valueToAdd) && proto.has.call(target, value) || hasChanged(rawValue, valueToAdd) && proto.has.call(target, rawValue); + if (!hadKey) { + target.add(valueToAdd); + trigger(target, "add", valueToAdd, valueToAdd); + } + return this; + }, + set(key, value) { + if (!shallow && !isShallow(value) && !isReadonly(value)) { + value = toRaw(value); + } + const target = toRaw(this); + const { has, get } = getProto(target); + let hadKey = has.call(target, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has.call(target, key); + } else if (true) { + checkIdentityKeys(target, has, key); + } + const oldValue = get.call(target, key); + target.set(key, value); + if (!hadKey) { + trigger(target, "add", key, value); + } else if (hasChanged(value, oldValue)) { + trigger(target, "set", key, value, oldValue); + } + return this; + }, + delete(key) { + const target = toRaw(this); + const { has, get } = getProto(target); + let hadKey = has.call(target, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has.call(target, key); + } else if (true) { + checkIdentityKeys(target, has, key); + } + const oldValue = get ? get.call(target, key) : void 0; + const result = target.delete(key); + if (hadKey) { + trigger(target, "delete", key, void 0, oldValue); + } + return result; + }, + clear() { + const target = toRaw(this); + const hadItems = target.size !== 0; + const oldTarget = true ? isMap(target) ? new Map(target) : new Set(target) : void 0; + const result = target.clear(); + if (hadItems) { + trigger( + target, + "clear", + void 0, + void 0, + oldTarget + ); + } + return result; + } + } + ); + const iteratorMethods = [ + "keys", + "values", + "entries", + Symbol.iterator + ]; + iteratorMethods.forEach((method) => { + instrumentations[method] = createIterableMethod(method, readonly2, shallow); + }); + return instrumentations; +} +function createInstrumentationGetter(isReadonly2, shallow) { + const instrumentations = createInstrumentations(isReadonly2, shallow); + return (target, key, receiver) => { + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_raw") { + return target; + } + return Reflect.get( + hasOwn(instrumentations, key) && key in target ? instrumentations : target, + key, + receiver + ); + }; +} +var mutableCollectionHandlers = { + get: createInstrumentationGetter(false, false) +}; +var shallowCollectionHandlers = { + get: createInstrumentationGetter(false, true) +}; +var readonlyCollectionHandlers = { + get: createInstrumentationGetter(true, false) +}; +var shallowReadonlyCollectionHandlers = { + get: createInstrumentationGetter(true, true) +}; +function checkIdentityKeys(target, has, key) { + const rawKey = toRaw(key); + if (rawKey !== key && has.call(target, rawKey)) { + const type = toRawType(target); + warn( + `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.` + ); + } +} +var reactiveMap = /* @__PURE__ */ new WeakMap(); +var shallowReactiveMap = /* @__PURE__ */ new WeakMap(); +var readonlyMap = /* @__PURE__ */ new WeakMap(); +var shallowReadonlyMap = /* @__PURE__ */ new WeakMap(); +function targetTypeMap(rawType) { + switch (rawType) { + case "Object": + case "Array": + return 1; + case "Map": + case "Set": + case "WeakMap": + case "WeakSet": + return 2; + default: + return 0; + } +} +function getTargetType(value) { + return value["__v_skip"] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value)); +} +function reactive(target) { + if (isReadonly(target)) { + return target; + } + return createReactiveObject( + target, + false, + mutableHandlers, + mutableCollectionHandlers, + reactiveMap + ); +} +function shallowReactive(target) { + return createReactiveObject( + target, + false, + shallowReactiveHandlers, + shallowCollectionHandlers, + shallowReactiveMap + ); +} +function readonly(target) { + return createReactiveObject( + target, + true, + readonlyHandlers, + readonlyCollectionHandlers, + readonlyMap + ); +} +function shallowReadonly(target) { + return createReactiveObject( + target, + true, + shallowReadonlyHandlers, + shallowReadonlyCollectionHandlers, + shallowReadonlyMap + ); +} +function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { + if (!isObject(target)) { + if (true) { + warn( + `value cannot be made ${isReadonly2 ? "readonly" : "reactive"}: ${String( + target + )}` + ); + } + return target; + } + if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) { + return target; + } + const targetType = getTargetType(target); + if (targetType === 0) { + return target; + } + const existingProxy = proxyMap.get(target); + if (existingProxy) { + return existingProxy; + } + const proxy = new Proxy( + target, + targetType === 2 ? collectionHandlers : baseHandlers + ); + proxyMap.set(target, proxy); + return proxy; +} +function isReactive(value) { + if (isReadonly(value)) { + return isReactive(value["__v_raw"]); + } + return !!(value && value["__v_isReactive"]); +} +function isReadonly(value) { + return !!(value && value["__v_isReadonly"]); +} +function isShallow(value) { + return !!(value && value["__v_isShallow"]); +} +function isProxy(value) { + return value ? !!value["__v_raw"] : false; +} +function toRaw(observed) { + const raw = observed && observed["__v_raw"]; + return raw ? toRaw(raw) : observed; +} +function markRaw(value) { + if (!hasOwn(value, "__v_skip") && Object.isExtensible(value)) { + def(value, "__v_skip", true); + } + return value; +} +var toReactive = (value) => isObject(value) ? reactive(value) : value; +var toReadonly = (value) => isObject(value) ? readonly(value) : value; +function isRef2(r) { + return r ? r["__v_isRef"] === true : false; +} +function ref(value) { + return createRef(value, false); +} +function shallowRef(value) { + return createRef(value, true); +} +function createRef(rawValue, shallow) { + if (isRef2(rawValue)) { + return rawValue; + } + return new RefImpl(rawValue, shallow); +} +var RefImpl = class { + constructor(value, isShallow2) { + this.dep = new Dep(); + this["__v_isRef"] = true; + this["__v_isShallow"] = false; + this._rawValue = isShallow2 ? value : toRaw(value); + this._value = isShallow2 ? value : toReactive(value); + this["__v_isShallow"] = isShallow2; + } + get value() { + if (true) { + this.dep.track({ + target: this, + type: "get", + key: "value" + }); + } else { + this.dep.track(); + } + return this._value; + } + set value(newValue) { + const oldValue = this._rawValue; + const useDirectValue = this["__v_isShallow"] || isShallow(newValue) || isReadonly(newValue); + newValue = useDirectValue ? newValue : toRaw(newValue); + if (hasChanged(newValue, oldValue)) { + this._rawValue = newValue; + this._value = useDirectValue ? newValue : toReactive(newValue); + if (true) { + this.dep.trigger({ + target: this, + type: "set", + key: "value", + newValue, + oldValue + }); + } else { + this.dep.trigger(); + } + } + } +}; +function triggerRef(ref2) { + if (ref2.dep) { + if (true) { + ref2.dep.trigger({ + target: ref2, + type: "set", + key: "value", + newValue: ref2._value + }); + } else { + ref2.dep.trigger(); + } + } +} +function unref(ref2) { + return isRef2(ref2) ? ref2.value : ref2; +} +function toValue(source) { + return isFunction(source) ? source() : unref(source); +} +var shallowUnwrapHandlers = { + get: (target, key, receiver) => key === "__v_raw" ? target : unref(Reflect.get(target, key, receiver)), + set: (target, key, value, receiver) => { + const oldValue = target[key]; + if (isRef2(oldValue) && !isRef2(value)) { + oldValue.value = value; + return true; + } else { + return Reflect.set(target, key, value, receiver); + } + } +}; +function proxyRefs(objectWithRefs) { + return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); +} +var CustomRefImpl = class { + constructor(factory) { + this["__v_isRef"] = true; + this._value = void 0; + const dep = this.dep = new Dep(); + const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep)); + this._get = get; + this._set = set; + } + get value() { + return this._value = this._get(); + } + set value(newVal) { + this._set(newVal); + } +}; +function customRef(factory) { + return new CustomRefImpl(factory); +} +function toRefs(object) { + if (!isProxy(object)) { + warn(`toRefs() expects a reactive object but received a plain one.`); + } + const ret = isArray(object) ? new Array(object.length) : {}; + for (const key in object) { + ret[key] = propertyToRef(object, key); + } + return ret; +} +var ObjectRefImpl = class { + constructor(_object, key, _defaultValue) { + this._object = _object; + this._defaultValue = _defaultValue; + this["__v_isRef"] = true; + this._value = void 0; + this._key = isSymbol(key) ? key : String(key); + this._raw = toRaw(_object); + let shallow = true; + let obj = _object; + if (!isArray(_object) || isSymbol(this._key) || !isIntegerKey(this._key)) { + do { + shallow = !isProxy(obj) || isShallow(obj); + } while (shallow && (obj = obj["__v_raw"])); + } + this._shallow = shallow; + } + get value() { + let val = this._object[this._key]; + if (this._shallow) { + val = unref(val); + } + return this._value = val === void 0 ? this._defaultValue : val; + } + set value(newVal) { + if (this._shallow && isRef2(this._raw[this._key])) { + const nestedRef = this._object[this._key]; + if (isRef2(nestedRef)) { + nestedRef.value = newVal; + return; + } + } + this._object[this._key] = newVal; + } + get dep() { + return getDepFromReactive(this._raw, this._key); + } +}; +var GetterRefImpl = class { + constructor(_getter) { + this._getter = _getter; + this["__v_isRef"] = true; + this["__v_isReadonly"] = true; + this._value = void 0; + } + get value() { + return this._value = this._getter(); + } +}; +function toRef(source, key, defaultValue) { + if (isRef2(source)) { + return source; + } else if (isFunction(source)) { + return new GetterRefImpl(source); + } else if (isObject(source) && arguments.length > 1) { + return propertyToRef(source, key, defaultValue); + } else { + return ref(source); + } +} +function propertyToRef(source, key, defaultValue) { + return new ObjectRefImpl(source, key, defaultValue); +} +var ComputedRefImpl = class { + constructor(fn, setter, isSSR) { + this.fn = fn; + this.setter = setter; + this._value = void 0; + this.dep = new Dep(this); + this.__v_isRef = true; + this.deps = void 0; + this.depsTail = void 0; + this.flags = 16; + this.globalVersion = globalVersion - 1; + this.next = void 0; + this.effect = this; + this["__v_isReadonly"] = !setter; + this.isSSR = isSSR; + } + /** + * @internal + */ + notify() { + this.flags |= 16; + if (!(this.flags & 8) && // avoid infinite self recursion + activeSub !== this) { + batch(this, true); + return true; + } else if (true) ; + } + get value() { + const link = true ? this.dep.track({ + target: this, + type: "get", + key: "value" + }) : this.dep.track(); + refreshComputed(this); + if (link) { + link.version = this.dep.version; + } + return this._value; + } + set value(newValue) { + if (this.setter) { + this.setter(newValue); + } else if (true) { + warn("Write operation failed: computed value is readonly"); + } + } +}; +function computed(getterOrOptions, debugOptions, isSSR = false) { + let getter; + let setter; + if (isFunction(getterOrOptions)) { + getter = getterOrOptions; + } else { + getter = getterOrOptions.get; + setter = getterOrOptions.set; + } + const cRef = new ComputedRefImpl(getter, setter, isSSR); + if (debugOptions && !isSSR) { + cRef.onTrack = debugOptions.onTrack; + cRef.onTrigger = debugOptions.onTrigger; + } + return cRef; +} +var TrackOpTypes = { + "GET": "get", + "HAS": "has", + "ITERATE": "iterate" +}; +var TriggerOpTypes = { + "SET": "set", + "ADD": "add", + "DELETE": "delete", + "CLEAR": "clear" +}; +var INITIAL_WATCHER_VALUE = {}; +var cleanupMap = /* @__PURE__ */ new WeakMap(); +var activeWatcher = void 0; +function getCurrentWatcher() { + return activeWatcher; +} +function onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) { + if (owner) { + let cleanups = cleanupMap.get(owner); + if (!cleanups) cleanupMap.set(owner, cleanups = []); + cleanups.push(cleanupFn); + } else if (!failSilently) { + warn( + `onWatcherCleanup() was called when there was no active watcher to associate with.` + ); + } +} +function watch(source, cb, options = EMPTY_OBJ) { + const { immediate, deep, once, scheduler, augmentJob, call } = options; + const warnInvalidSource = (s) => { + (options.onWarn || warn)( + `Invalid watch source: `, + s, + `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.` + ); + }; + const reactiveGetter = (source2) => { + if (deep) return source2; + if (isShallow(source2) || deep === false || deep === 0) + return traverse(source2, 1); + return traverse(source2); + }; + let effect2; + let getter; + let cleanup; + let boundCleanup; + let forceTrigger = false; + let isMultiSource = false; + if (isRef2(source)) { + getter = () => source.value; + forceTrigger = isShallow(source); + } else if (isReactive(source)) { + getter = () => reactiveGetter(source); + forceTrigger = true; + } else if (isArray(source)) { + isMultiSource = true; + forceTrigger = source.some((s) => isReactive(s) || isShallow(s)); + getter = () => source.map((s) => { + if (isRef2(s)) { + return s.value; + } else if (isReactive(s)) { + return reactiveGetter(s); + } else if (isFunction(s)) { + return call ? call(s, 2) : s(); + } else { + warnInvalidSource(s); + } + }); + } else if (isFunction(source)) { + if (cb) { + getter = call ? () => call(source, 2) : source; + } else { + getter = () => { + if (cleanup) { + pauseTracking(); + try { + cleanup(); + } finally { + resetTracking(); + } + } + const currentEffect = activeWatcher; + activeWatcher = effect2; + try { + return call ? call(source, 3, [boundCleanup]) : source(boundCleanup); + } finally { + activeWatcher = currentEffect; + } + }; + } + } else { + getter = NOOP; + warnInvalidSource(source); + } + if (cb && deep) { + const baseGetter = getter; + const depth = deep === true ? Infinity : deep; + getter = () => traverse(baseGetter(), depth); + } + const scope = getCurrentScope(); + const watchHandle = () => { + effect2.stop(); + if (scope && scope.active) { + remove(scope.effects, effect2); + } + }; + if (once && cb) { + const _cb = cb; + cb = (...args) => { + _cb(...args); + watchHandle(); + }; + } + let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE; + const job = (immediateFirstRun) => { + if (!(effect2.flags & 1) || !effect2.dirty && !immediateFirstRun) { + return; + } + if (cb) { + const newValue = effect2.run(); + if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) { + if (cleanup) { + cleanup(); + } + const currentWatcher = activeWatcher; + activeWatcher = effect2; + try { + const args = [ + newValue, + // pass undefined as the old value when it's changed for the first time + oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue, + boundCleanup + ]; + oldValue = newValue; + call ? call(cb, 3, args) : ( + // @ts-expect-error + cb(...args) + ); + } finally { + activeWatcher = currentWatcher; + } + } + } else { + effect2.run(); + } + }; + if (augmentJob) { + augmentJob(job); + } + effect2 = new ReactiveEffect(getter); + effect2.scheduler = scheduler ? () => scheduler(job, false) : job; + boundCleanup = (fn) => onWatcherCleanup(fn, false, effect2); + cleanup = effect2.onStop = () => { + const cleanups = cleanupMap.get(effect2); + if (cleanups) { + if (call) { + call(cleanups, 4); + } else { + for (const cleanup2 of cleanups) cleanup2(); + } + cleanupMap.delete(effect2); + } + }; + if (true) { + effect2.onTrack = options.onTrack; + effect2.onTrigger = options.onTrigger; + } + if (cb) { + if (immediate) { + job(true); + } else { + oldValue = effect2.run(); + } + } else if (scheduler) { + scheduler(job.bind(null, true), true); + } else { + effect2.run(); + } + watchHandle.pause = effect2.pause.bind(effect2); + watchHandle.resume = effect2.resume.bind(effect2); + watchHandle.stop = watchHandle; + return watchHandle; +} +function traverse(value, depth = Infinity, seen) { + if (depth <= 0 || !isObject(value) || value["__v_skip"]) { + return value; + } + seen = seen || /* @__PURE__ */ new Map(); + if ((seen.get(value) || 0) >= depth) { + return value; + } + seen.set(value, depth); + depth--; + if (isRef2(value)) { + traverse(value.value, depth, seen); + } else if (isArray(value)) { + for (let i = 0; i < value.length; i++) { + traverse(value[i], depth, seen); + } + } else if (isSet(value) || isMap(value)) { + value.forEach((v) => { + traverse(v, depth, seen); + }); + } else if (isPlainObject(value)) { + for (const key in value) { + traverse(value[key], depth, seen); + } + for (const key of Object.getOwnPropertySymbols(value)) { + if (Object.prototype.propertyIsEnumerable.call(value, key)) { + traverse(value[key], depth, seen); + } + } + } + return value; +} + +// ../../node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js +var stack = []; +function pushWarningContext(vnode) { + stack.push(vnode); +} +function popWarningContext() { + stack.pop(); +} +var isWarning = false; +function warn$1(msg, ...args) { + if (isWarning) return; + isWarning = true; + pauseTracking(); + const instance = stack.length ? stack[stack.length - 1].component : null; + const appWarnHandler = instance && instance.appContext.config.warnHandler; + const trace = getComponentTrace(); + if (appWarnHandler) { + callWithErrorHandling( + appWarnHandler, + instance, + 11, + [ + // eslint-disable-next-line no-restricted-syntax + msg + args.map((a) => { + var _a, _b; + return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a); + }).join(""), + instance && instance.proxy, + trace.map( + ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>` + ).join("\n"), + trace + ] + ); + } else { + const warnArgs = [`[Vue warn]: ${msg}`, ...args]; + if (trace.length && // avoid spamming console during tests + true) { + warnArgs.push(` +`, ...formatTrace(trace)); + } + console.warn(...warnArgs); + } + resetTracking(); + isWarning = false; +} +function getComponentTrace() { + let currentVNode = stack[stack.length - 1]; + if (!currentVNode) { + return []; + } + const normalizedStack = []; + while (currentVNode) { + const last = normalizedStack[0]; + if (last && last.vnode === currentVNode) { + last.recurseCount++; + } else { + normalizedStack.push({ + vnode: currentVNode, + recurseCount: 0 + }); + } + const parentInstance = currentVNode.component && currentVNode.component.parent; + currentVNode = parentInstance && parentInstance.vnode; + } + return normalizedStack; +} +function formatTrace(trace) { + const logs = []; + trace.forEach((entry, i) => { + logs.push(...i === 0 ? [] : [` +`], ...formatTraceEntry(entry)); + }); + return logs; +} +function formatTraceEntry({ vnode, recurseCount }) { + const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``; + const isRoot = vnode.component ? vnode.component.parent == null : false; + const open = ` at <${formatComponentName( + vnode.component, + vnode.type, + isRoot + )}`; + const close = `>` + postfix; + return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close]; +} +function formatProps(props) { + const res = []; + const keys = Object.keys(props); + keys.slice(0, 3).forEach((key) => { + res.push(...formatProp(key, props[key])); + }); + if (keys.length > 3) { + res.push(` ...`); + } + return res; +} +function formatProp(key, value, raw) { + if (isString(value)) { + value = JSON.stringify(value); + return raw ? value : [`${key}=${value}`]; + } else if (typeof value === "number" || typeof value === "boolean" || value == null) { + return raw ? value : [`${key}=${value}`]; + } else if (isRef2(value)) { + value = formatProp(key, toRaw(value.value), true); + return raw ? value : [`${key}=Ref<`, value, `>`]; + } else if (isFunction(value)) { + return [`${key}=fn${value.name ? `<${value.name}>` : ``}`]; + } else { + value = toRaw(value); + return raw ? value : [`${key}=`, value]; + } +} +function assertNumber(val, type) { + if (false) return; + if (val === void 0) { + return; + } else if (typeof val !== "number") { + warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`); + } else if (isNaN(val)) { + warn$1(`${type} is NaN - the duration expression might be incorrect.`); + } +} +var ErrorCodes = { + "SETUP_FUNCTION": 0, + "0": "SETUP_FUNCTION", + "RENDER_FUNCTION": 1, + "1": "RENDER_FUNCTION", + "NATIVE_EVENT_HANDLER": 5, + "5": "NATIVE_EVENT_HANDLER", + "COMPONENT_EVENT_HANDLER": 6, + "6": "COMPONENT_EVENT_HANDLER", + "VNODE_HOOK": 7, + "7": "VNODE_HOOK", + "DIRECTIVE_HOOK": 8, + "8": "DIRECTIVE_HOOK", + "TRANSITION_HOOK": 9, + "9": "TRANSITION_HOOK", + "APP_ERROR_HANDLER": 10, + "10": "APP_ERROR_HANDLER", + "APP_WARN_HANDLER": 11, + "11": "APP_WARN_HANDLER", + "FUNCTION_REF": 12, + "12": "FUNCTION_REF", + "ASYNC_COMPONENT_LOADER": 13, + "13": "ASYNC_COMPONENT_LOADER", + "SCHEDULER": 14, + "14": "SCHEDULER", + "COMPONENT_UPDATE": 15, + "15": "COMPONENT_UPDATE", + "APP_UNMOUNT_CLEANUP": 16, + "16": "APP_UNMOUNT_CLEANUP" +}; +var ErrorTypeStrings$1 = { + ["sp"]: "serverPrefetch hook", + ["bc"]: "beforeCreate hook", + ["c"]: "created hook", + ["bm"]: "beforeMount hook", + ["m"]: "mounted hook", + ["bu"]: "beforeUpdate hook", + ["u"]: "updated", + ["bum"]: "beforeUnmount hook", + ["um"]: "unmounted hook", + ["a"]: "activated hook", + ["da"]: "deactivated hook", + ["ec"]: "errorCaptured hook", + ["rtc"]: "renderTracked hook", + ["rtg"]: "renderTriggered hook", + [0]: "setup function", + [1]: "render function", + [2]: "watcher getter", + [3]: "watcher callback", + [4]: "watcher cleanup function", + [5]: "native event handler", + [6]: "component event handler", + [7]: "vnode hook", + [8]: "directive hook", + [9]: "transition hook", + [10]: "app errorHandler", + [11]: "app warnHandler", + [12]: "ref function", + [13]: "async component loader", + [14]: "scheduler flush", + [15]: "component update", + [16]: "app unmount cleanup function" +}; +function callWithErrorHandling(fn, instance, type, args) { + try { + return args ? fn(...args) : fn(); + } catch (err) { + handleError(err, instance, type); + } +} +function callWithAsyncErrorHandling(fn, instance, type, args) { + if (isFunction(fn)) { + const res = callWithErrorHandling(fn, instance, type, args); + if (res && isPromise(res)) { + res.catch((err) => { + handleError(err, instance, type); + }); + } + return res; + } + if (isArray(fn)) { + const values = []; + for (let i = 0; i < fn.length; i++) { + values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)); + } + return values; + } else if (true) { + warn$1( + `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}` + ); + } +} +function handleError(err, instance, type, throwInDev = true) { + const contextVNode = instance ? instance.vnode : null; + const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ; + if (instance) { + let cur = instance.parent; + const exposedInstance = instance.proxy; + const errorInfo = true ? ErrorTypeStrings$1[type] : `https://vuejs.org/error-reference/#runtime-${type}`; + while (cur) { + const errorCapturedHooks = cur.ec; + if (errorCapturedHooks) { + for (let i = 0; i < errorCapturedHooks.length; i++) { + if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) { + return; + } + } + } + cur = cur.parent; + } + if (errorHandler) { + pauseTracking(); + callWithErrorHandling(errorHandler, null, 10, [ + err, + exposedInstance, + errorInfo + ]); + resetTracking(); + return; + } + } + logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction); +} +function logError(err, type, contextVNode, throwInDev = true, throwInProd = false) { + if (true) { + const info = ErrorTypeStrings$1[type]; + if (contextVNode) { + pushWarningContext(contextVNode); + } + warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`); + if (contextVNode) { + popWarningContext(); + } + if (throwInDev) { + throw err; + } else { + console.error(err); + } + } else if (throwInProd) { + throw err; + } else { + console.error(err); + } +} +var queue = []; +var flushIndex = -1; +var pendingPostFlushCbs = []; +var activePostFlushCbs = null; +var postFlushIndex = 0; +var resolvedPromise = Promise.resolve(); +var currentFlushPromise = null; +var RECURSION_LIMIT = 100; +function nextTick(fn) { + const p2 = currentFlushPromise || resolvedPromise; + return fn ? p2.then(this ? fn.bind(this) : fn) : p2; +} +function findInsertionIndex(id) { + let start = flushIndex + 1; + let end = queue.length; + while (start < end) { + const middle = start + end >>> 1; + const middleJob = queue[middle]; + const middleJobId = getId(middleJob); + if (middleJobId < id || middleJobId === id && middleJob.flags & 2) { + start = middle + 1; + } else { + end = middle; + } + } + return start; +} +function queueJob(job) { + if (!(job.flags & 1)) { + const jobId = getId(job); + const lastJob = queue[queue.length - 1]; + if (!lastJob || // fast path when the job id is larger than the tail + !(job.flags & 2) && jobId >= getId(lastJob)) { + queue.push(job); + } else { + queue.splice(findInsertionIndex(jobId), 0, job); + } + job.flags |= 1; + queueFlush(); + } +} +function queueFlush() { + if (!currentFlushPromise) { + currentFlushPromise = resolvedPromise.then(flushJobs); + } +} +function queuePostFlushCb(cb) { + if (!isArray(cb)) { + if (activePostFlushCbs && cb.id === -1) { + activePostFlushCbs.splice(postFlushIndex + 1, 0, cb); + } else if (!(cb.flags & 1)) { + pendingPostFlushCbs.push(cb); + cb.flags |= 1; + } + } else { + pendingPostFlushCbs.push(...cb); + } + queueFlush(); +} +function flushPreFlushCbs(instance, seen, i = flushIndex + 1) { + if (true) { + seen = seen || /* @__PURE__ */ new Map(); + } + for (; i < queue.length; i++) { + const cb = queue[i]; + if (cb && cb.flags & 2) { + if (instance && cb.id !== instance.uid) { + continue; + } + if (checkRecursiveUpdates(seen, cb)) { + continue; + } + queue.splice(i, 1); + i--; + if (cb.flags & 4) { + cb.flags &= -2; + } + cb(); + if (!(cb.flags & 4)) { + cb.flags &= -2; + } + } + } +} +function flushPostFlushCbs(seen) { + if (pendingPostFlushCbs.length) { + const deduped = [...new Set(pendingPostFlushCbs)].sort( + (a, b) => getId(a) - getId(b) + ); + pendingPostFlushCbs.length = 0; + if (activePostFlushCbs) { + activePostFlushCbs.push(...deduped); + return; + } + activePostFlushCbs = deduped; + if (true) { + seen = seen || /* @__PURE__ */ new Map(); + } + for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) { + const cb = activePostFlushCbs[postFlushIndex]; + if (checkRecursiveUpdates(seen, cb)) { + continue; + } + if (cb.flags & 4) { + cb.flags &= -2; + } + if (!(cb.flags & 8)) cb(); + cb.flags &= -2; + } + activePostFlushCbs = null; + postFlushIndex = 0; + } +} +var getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id; +function flushJobs(seen) { + if (true) { + seen = seen || /* @__PURE__ */ new Map(); + } + const check = true ? (job) => checkRecursiveUpdates(seen, job) : NOOP; + try { + for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { + const job = queue[flushIndex]; + if (job && !(job.flags & 8)) { + if (check(job)) { + continue; + } + if (job.flags & 4) { + job.flags &= ~1; + } + callWithErrorHandling( + job, + job.i, + job.i ? 15 : 14 + ); + if (!(job.flags & 4)) { + job.flags &= ~1; + } + } + } + } finally { + for (; flushIndex < queue.length; flushIndex++) { + const job = queue[flushIndex]; + if (job) { + job.flags &= -2; + } + } + flushIndex = -1; + queue.length = 0; + flushPostFlushCbs(seen); + currentFlushPromise = null; + if (queue.length || pendingPostFlushCbs.length) { + flushJobs(seen); + } + } +} +function checkRecursiveUpdates(seen, fn) { + const count = seen.get(fn) || 0; + if (count > RECURSION_LIMIT) { + const instance = fn.i; + const componentName = instance && getComponentName(instance.type); + handleError( + `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`, + null, + 10 + ); + return true; + } + seen.set(fn, count + 1); + return false; +} +var isHmrUpdating = false; +var setHmrUpdating = (v) => { + try { + return isHmrUpdating; + } finally { + isHmrUpdating = v; + } +}; +var hmrDirtyComponents = /* @__PURE__ */ new Map(); +if (true) { + getGlobalThis().__VUE_HMR_RUNTIME__ = { + createRecord: tryWrap(createRecord), + rerender: tryWrap(rerender), + reload: tryWrap(reload) + }; +} +var map = /* @__PURE__ */ new Map(); +function registerHMR(instance) { + const id = instance.type.__hmrId; + let record = map.get(id); + if (!record) { + createRecord(id, instance.type); + record = map.get(id); + } + record.instances.add(instance); +} +function unregisterHMR(instance) { + map.get(instance.type.__hmrId).instances.delete(instance); +} +function createRecord(id, initialDef) { + if (map.has(id)) { + return false; + } + map.set(id, { + initialDef: normalizeClassComponent(initialDef), + instances: /* @__PURE__ */ new Set() + }); + return true; +} +function normalizeClassComponent(component) { + return isClassComponent(component) ? component.__vccOpts : component; +} +function rerender(id, newRender) { + const record = map.get(id); + if (!record) { + return; + } + record.initialDef.render = newRender; + [...record.instances].forEach((instance) => { + if (newRender) { + instance.render = newRender; + normalizeClassComponent(instance.type).render = newRender; + } + instance.renderCache = []; + isHmrUpdating = true; + if (!(instance.job.flags & 8)) { + instance.update(); + } + isHmrUpdating = false; + }); +} +function reload(id, newComp) { + const record = map.get(id); + if (!record) return; + newComp = normalizeClassComponent(newComp); + updateComponentDef(record.initialDef, newComp); + const instances = [...record.instances]; + for (let i = 0; i < instances.length; i++) { + const instance = instances[i]; + const oldComp = normalizeClassComponent(instance.type); + let dirtyInstances = hmrDirtyComponents.get(oldComp); + if (!dirtyInstances) { + if (oldComp !== record.initialDef) { + updateComponentDef(oldComp, newComp); + } + hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set()); + } + dirtyInstances.add(instance); + instance.appContext.propsCache.delete(instance.type); + instance.appContext.emitsCache.delete(instance.type); + instance.appContext.optionsCache.delete(instance.type); + if (instance.ceReload) { + dirtyInstances.add(instance); + instance.ceReload(newComp.styles); + dirtyInstances.delete(instance); + } else if (instance.parent) { + queueJob(() => { + if (!(instance.job.flags & 8)) { + isHmrUpdating = true; + instance.parent.update(); + isHmrUpdating = false; + dirtyInstances.delete(instance); + } + }); + } else if (instance.appContext.reload) { + instance.appContext.reload(); + } else if (typeof window !== "undefined") { + window.location.reload(); + } else { + console.warn( + "[HMR] Root or manually mounted instance modified. Full reload required." + ); + } + if (instance.root.ce && instance !== instance.root) { + instance.root.ce._removeChildStyle(oldComp); + } + } + queuePostFlushCb(() => { + hmrDirtyComponents.clear(); + }); +} +function updateComponentDef(oldComp, newComp) { + extend(oldComp, newComp); + for (const key in oldComp) { + if (key !== "__file" && !(key in newComp)) { + delete oldComp[key]; + } + } +} +function tryWrap(fn) { + return (id, arg) => { + try { + return fn(id, arg); + } catch (e) { + console.error(e); + console.warn( + `[HMR] Something went wrong during Vue component hot-reload. Full reload required.` + ); + } + }; +} +var devtools$1; +var buffer = []; +var devtoolsNotInstalled = false; +function emit$1(event, ...args) { + if (devtools$1) { + devtools$1.emit(event, ...args); + } else if (!devtoolsNotInstalled) { + buffer.push({ event, args }); + } +} +function setDevtoolsHook$1(hook, target) { + var _a, _b; + devtools$1 = hook; + if (devtools$1) { + devtools$1.enabled = true; + buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args)); + buffer = []; + } else if ( + // handle late devtools injection - only do this if we are in an actual + // browser environment to avoid the timer handle stalling test runner exit + // (#4815) + typeof window !== "undefined" && // some envs mock window but not fully + window.HTMLElement && // also exclude jsdom + // eslint-disable-next-line no-restricted-syntax + !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes("jsdom")) + ) { + const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []; + replay.push((newHook) => { + setDevtoolsHook$1(newHook, target); + }); + setTimeout(() => { + if (!devtools$1) { + target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null; + devtoolsNotInstalled = true; + buffer = []; + } + }, 3e3); + } else { + devtoolsNotInstalled = true; + buffer = []; + } +} +function devtoolsInitApp(app, version2) { + emit$1("app:init", app, version2, { + Fragment, + Text, + Comment, + Static + }); +} +function devtoolsUnmountApp(app) { + emit$1("app:unmount", app); +} +var devtoolsComponentAdded = createDevtoolsComponentHook( + "component:added" + /* COMPONENT_ADDED */ +); +var devtoolsComponentUpdated = createDevtoolsComponentHook( + "component:updated" + /* COMPONENT_UPDATED */ +); +var _devtoolsComponentRemoved = createDevtoolsComponentHook( + "component:removed" + /* COMPONENT_REMOVED */ +); +var devtoolsComponentRemoved = (component) => { + if (devtools$1 && typeof devtools$1.cleanupBuffer === "function" && // remove the component if it wasn't buffered + !devtools$1.cleanupBuffer(component)) { + _devtoolsComponentRemoved(component); + } +}; +function createDevtoolsComponentHook(hook) { + return (component) => { + emit$1( + hook, + component.appContext.app, + component.uid, + component.parent ? component.parent.uid : void 0, + component + ); + }; +} +var devtoolsPerfStart = createDevtoolsPerformanceHook( + "perf:start" + /* PERFORMANCE_START */ +); +var devtoolsPerfEnd = createDevtoolsPerformanceHook( + "perf:end" + /* PERFORMANCE_END */ +); +function createDevtoolsPerformanceHook(hook) { + return (component, type, time) => { + emit$1(hook, component.appContext.app, component.uid, component, type, time); + }; +} +function devtoolsComponentEmit(component, event, params) { + emit$1( + "component:emit", + component.appContext.app, + component, + event, + params + ); +} +var currentRenderingInstance = null; +var currentScopeId = null; +function setCurrentRenderingInstance(instance) { + const prev = currentRenderingInstance; + currentRenderingInstance = instance; + currentScopeId = instance && instance.type.__scopeId || null; + return prev; +} +function pushScopeId(id) { + currentScopeId = id; +} +function popScopeId() { + currentScopeId = null; +} +var withScopeId = (_id) => withCtx; +function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) { + if (!ctx) return fn; + if (fn._n) { + return fn; + } + const renderFnWithContext = (...args) => { + if (renderFnWithContext._d) { + setBlockTracking(-1); + } + const prevInstance = setCurrentRenderingInstance(ctx); + let res; + try { + res = fn(...args); + } finally { + setCurrentRenderingInstance(prevInstance); + if (renderFnWithContext._d) { + setBlockTracking(1); + } + } + if (true) { + devtoolsComponentUpdated(ctx); + } + return res; + }; + renderFnWithContext._n = true; + renderFnWithContext._c = true; + renderFnWithContext._d = true; + return renderFnWithContext; +} +function validateDirectiveName(name) { + if (isBuiltInDirective(name)) { + warn$1("Do not use built-in directive ids as custom directive id: " + name); + } +} +function withDirectives(vnode, directives) { + if (currentRenderingInstance === null) { + warn$1(`withDirectives can only be used inside render functions.`); + return vnode; + } + const instance = getComponentPublicInstance(currentRenderingInstance); + const bindings = vnode.dirs || (vnode.dirs = []); + for (let i = 0; i < directives.length; i++) { + let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i]; + if (dir) { + if (isFunction(dir)) { + dir = { + mounted: dir, + updated: dir + }; + } + if (dir.deep) { + traverse(value); + } + bindings.push({ + dir, + instance, + value, + oldValue: void 0, + arg, + modifiers + }); + } + } + return vnode; +} +function invokeDirectiveHook(vnode, prevVNode, instance, name) { + const bindings = vnode.dirs; + const oldBindings = prevVNode && prevVNode.dirs; + for (let i = 0; i < bindings.length; i++) { + const binding = bindings[i]; + if (oldBindings) { + binding.oldValue = oldBindings[i].value; + } + let hook = binding.dir[name]; + if (hook) { + pauseTracking(); + callWithAsyncErrorHandling(hook, instance, 8, [ + vnode.el, + binding, + vnode, + prevVNode + ]); + resetTracking(); + } + } +} +function provide(key, value) { + if (true) { + if (!currentInstance || currentInstance.isMounted) { + warn$1(`provide() can only be used inside setup().`); + } + } + if (currentInstance) { + let provides = currentInstance.provides; + const parentProvides = currentInstance.parent && currentInstance.parent.provides; + if (parentProvides === provides) { + provides = currentInstance.provides = Object.create(parentProvides); + } + provides[key] = value; + } +} +function inject(key, defaultValue, treatDefaultAsFactory = false) { + const instance = getCurrentInstance(); + if (instance || currentApp) { + let provides = currentApp ? currentApp._context.provides : instance ? instance.parent == null || instance.ce ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : void 0; + if (provides && key in provides) { + return provides[key]; + } else if (arguments.length > 1) { + return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue; + } else if (true) { + warn$1(`injection "${String(key)}" not found.`); + } + } else if (true) { + warn$1(`inject() can only be used inside setup() or functional components.`); + } +} +function hasInjectionContext() { + return !!(getCurrentInstance() || currentApp); +} +var ssrContextKey = Symbol.for("v-scx"); +var useSSRContext = () => { + { + const ctx = inject(ssrContextKey); + if (!ctx) { + warn$1( + `Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build.` + ); + } + return ctx; + } +}; +function watchEffect(effect2, options) { + return doWatch(effect2, null, options); +} +function watchPostEffect(effect2, options) { + return doWatch( + effect2, + null, + true ? extend({}, options, { flush: "post" }) : { flush: "post" } + ); +} +function watchSyncEffect(effect2, options) { + return doWatch( + effect2, + null, + true ? extend({}, options, { flush: "sync" }) : { flush: "sync" } + ); +} +function watch2(source, cb, options) { + if (!isFunction(cb)) { + warn$1( + `\`watch(fn, options?)\` signature has been moved to a separate API. Use \`watchEffect(fn, options?)\` instead. \`watch\` now only supports \`watch(source, cb, options?) signature.` + ); + } + return doWatch(source, cb, options); +} +function doWatch(source, cb, options = EMPTY_OBJ) { + const { immediate, deep, flush, once } = options; + if (!cb) { + if (immediate !== void 0) { + warn$1( + `watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.` + ); + } + if (deep !== void 0) { + warn$1( + `watch() "deep" option is only respected when using the watch(source, callback, options?) signature.` + ); + } + if (once !== void 0) { + warn$1( + `watch() "once" option is only respected when using the watch(source, callback, options?) signature.` + ); + } + } + const baseWatchOptions = extend({}, options); + if (true) baseWatchOptions.onWarn = warn$1; + const runsImmediately = cb && immediate || !cb && flush !== "post"; + let ssrCleanup; + if (isInSSRComponentSetup) { + if (flush === "sync") { + const ctx = useSSRContext(); + ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []); + } else if (!runsImmediately) { + const watchStopHandle = () => { + }; + watchStopHandle.stop = NOOP; + watchStopHandle.resume = NOOP; + watchStopHandle.pause = NOOP; + return watchStopHandle; + } + } + const instance = currentInstance; + baseWatchOptions.call = (fn, type, args) => callWithAsyncErrorHandling(fn, instance, type, args); + let isPre = false; + if (flush === "post") { + baseWatchOptions.scheduler = (job) => { + queuePostRenderEffect(job, instance && instance.suspense); + }; + } else if (flush !== "sync") { + isPre = true; + baseWatchOptions.scheduler = (job, isFirstRun) => { + if (isFirstRun) { + job(); + } else { + queueJob(job); + } + }; + } + baseWatchOptions.augmentJob = (job) => { + if (cb) { + job.flags |= 4; + } + if (isPre) { + job.flags |= 2; + if (instance) { + job.id = instance.uid; + job.i = instance; + } + } + }; + const watchHandle = watch(source, cb, baseWatchOptions); + if (isInSSRComponentSetup) { + if (ssrCleanup) { + ssrCleanup.push(watchHandle); + } else if (runsImmediately) { + watchHandle(); + } + } + return watchHandle; +} +function instanceWatch(source, value, options) { + const publicThis = this.proxy; + const getter = isString(source) ? source.includes(".") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis); + let cb; + if (isFunction(value)) { + cb = value; + } else { + cb = value.handler; + options = value; + } + const reset = setCurrentInstance(this); + const res = doWatch(getter, cb.bind(publicThis), options); + reset(); + return res; +} +function createPathGetter(ctx, path) { + const segments = path.split("."); + return () => { + let cur = ctx; + for (let i = 0; i < segments.length && cur; i++) { + cur = cur[segments[i]]; + } + return cur; + }; +} +var pendingMounts = /* @__PURE__ */ new WeakMap(); +var TeleportEndKey = Symbol("_vte"); +var isTeleport = (type) => type.__isTeleport; +var isTeleportDisabled = (props) => props && (props.disabled || props.disabled === ""); +var isTeleportDeferred = (props) => props && (props.defer || props.defer === ""); +var isTargetSVG = (target) => typeof SVGElement !== "undefined" && target instanceof SVGElement; +var isTargetMathML = (target) => typeof MathMLElement === "function" && target instanceof MathMLElement; +var resolveTarget = (props, select) => { + const targetSelector = props && props.to; + if (isString(targetSelector)) { + if (!select) { + warn$1( + `Current renderer does not support string target for Teleports. (missing querySelector renderer option)` + ); + return null; + } else { + const target = select(targetSelector); + if (!target && !isTeleportDisabled(props)) { + warn$1( + `Failed to locate Teleport target with selector "${targetSelector}". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.` + ); + } + return target; + } + } else { + if (!targetSelector && !isTeleportDisabled(props)) { + warn$1(`Invalid Teleport target: ${targetSelector}`); + } + return targetSelector; + } +}; +var TeleportImpl = { + name: "Teleport", + __isTeleport: true, + process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) { + const { + mc: mountChildren, + pc: patchChildren, + pbc: patchBlockChildren, + o: { insert, querySelector, createText, createComment } + } = internals; + const disabled = isTeleportDisabled(n2.props); + let { dynamicChildren } = n2; + if (isHmrUpdating) { + optimized = false; + dynamicChildren = null; + } + const mount = (vnode, container2, anchor2) => { + if (vnode.shapeFlag & 16) { + mountChildren( + vnode.children, + container2, + anchor2, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + optimized + ); + } + }; + const mountToTarget = (vnode = n2) => { + const disabled2 = isTeleportDisabled(vnode.props); + const target = vnode.target = resolveTarget(vnode.props, querySelector); + const targetAnchor = prepareAnchor(target, vnode, createText, insert); + if (target) { + if (namespace !== "svg" && isTargetSVG(target)) { + namespace = "svg"; + } else if (namespace !== "mathml" && isTargetMathML(target)) { + namespace = "mathml"; + } + if (parentComponent && parentComponent.isCE) { + (parentComponent.ce._teleportTargets || (parentComponent.ce._teleportTargets = /* @__PURE__ */ new Set())).add(target); + } + if (!disabled2) { + mount(vnode, target, targetAnchor); + updateCssVars(vnode, false); + } + } else if (!disabled2) { + warn$1("Invalid Teleport target on mount:", target, `(${typeof target})`); + } + }; + const queuePendingMount = (vnode) => { + const mountJob = () => { + if (pendingMounts.get(vnode) !== mountJob) return; + pendingMounts.delete(vnode); + if (isTeleportDisabled(vnode.props)) { + mount(vnode, container, vnode.anchor); + updateCssVars(vnode, true); + } + mountToTarget(vnode); + }; + pendingMounts.set(vnode, mountJob); + queuePostRenderEffect(mountJob, parentSuspense); + }; + if (n1 == null) { + const placeholder = n2.el = true ? createComment("teleport start") : createText(""); + const mainAnchor = n2.anchor = true ? createComment("teleport end") : createText(""); + insert(placeholder, container, anchor); + insert(mainAnchor, container, anchor); + if (isTeleportDeferred(n2.props) || parentSuspense && parentSuspense.pendingBranch) { + queuePendingMount(n2); + return; + } + if (disabled) { + mount(n2, container, mainAnchor); + updateCssVars(n2, true); + } + mountToTarget(); + } else { + n2.el = n1.el; + const mainAnchor = n2.anchor = n1.anchor; + const pendingMount = pendingMounts.get(n1); + if (pendingMount) { + pendingMount.flags |= 8; + pendingMounts.delete(n1); + queuePendingMount(n2); + return; + } + n2.targetStart = n1.targetStart; + const target = n2.target = n1.target; + const targetAnchor = n2.targetAnchor = n1.targetAnchor; + const wasDisabled = isTeleportDisabled(n1.props); + const currentContainer = wasDisabled ? container : target; + const currentAnchor = wasDisabled ? mainAnchor : targetAnchor; + if (namespace === "svg" || isTargetSVG(target)) { + namespace = "svg"; + } else if (namespace === "mathml" || isTargetMathML(target)) { + namespace = "mathml"; + } + if (dynamicChildren) { + patchBlockChildren( + n1.dynamicChildren, + dynamicChildren, + currentContainer, + parentComponent, + parentSuspense, + namespace, + slotScopeIds + ); + traverseStaticChildren(n1, n2, false); + } else if (!optimized) { + patchChildren( + n1, + n2, + currentContainer, + currentAnchor, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + false + ); + } + if (disabled) { + if (!wasDisabled) { + moveTeleport( + n2, + container, + mainAnchor, + internals, + 1 + ); + } else { + if (n2.props && n1.props && n2.props.to !== n1.props.to) { + n2.props.to = n1.props.to; + } + } + } else { + if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) { + const nextTarget = n2.target = resolveTarget( + n2.props, + querySelector + ); + if (nextTarget) { + moveTeleport( + n2, + nextTarget, + null, + internals, + 0 + ); + } else if (true) { + warn$1( + "Invalid Teleport target on update:", + target, + `(${typeof target})` + ); + } + } else if (wasDisabled) { + moveTeleport( + n2, + target, + targetAnchor, + internals, + 1 + ); + } + } + updateCssVars(n2, disabled); + } + }, + remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) { + const { + shapeFlag, + children, + anchor, + targetStart, + targetAnchor, + target, + props + } = vnode; + let shouldRemove = doRemove || !isTeleportDisabled(props); + const pendingMount = pendingMounts.get(vnode); + if (pendingMount) { + pendingMount.flags |= 8; + pendingMounts.delete(vnode); + shouldRemove = false; + } + if (target) { + hostRemove(targetStart); + hostRemove(targetAnchor); + } + doRemove && hostRemove(anchor); + if (shapeFlag & 16) { + for (let i = 0; i < children.length; i++) { + const child = children[i]; + unmount( + child, + parentComponent, + parentSuspense, + shouldRemove, + !!child.dynamicChildren + ); + } + } + }, + move: moveTeleport, + hydrate: hydrateTeleport +}; +function moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) { + if (moveType === 0) { + insert(vnode.targetAnchor, container, parentAnchor); + } + const { el, anchor, shapeFlag, children, props } = vnode; + const isReorder = moveType === 2; + if (isReorder) { + insert(el, container, parentAnchor); + } + if (!isReorder || isTeleportDisabled(props)) { + if (shapeFlag & 16) { + for (let i = 0; i < children.length; i++) { + move( + children[i], + container, + parentAnchor, + 2 + ); + } + } + } + if (isReorder) { + insert(anchor, container, parentAnchor); + } +} +function hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, { + o: { nextSibling, parentNode, querySelector, insert, createText } +}, hydrateChildren) { + function hydrateAnchor(target2, targetNode) { + let targetAnchor = targetNode; + while (targetAnchor) { + if (targetAnchor && targetAnchor.nodeType === 8) { + if (targetAnchor.data === "teleport start anchor") { + vnode.targetStart = targetAnchor; + } else if (targetAnchor.data === "teleport anchor") { + vnode.targetAnchor = targetAnchor; + target2._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor); + break; + } + } + targetAnchor = nextSibling(targetAnchor); + } + } + function hydrateDisabledTeleport(node2, vnode2) { + vnode2.anchor = hydrateChildren( + nextSibling(node2), + vnode2, + parentNode(node2), + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + } + const target = vnode.target = resolveTarget( + vnode.props, + querySelector + ); + const disabled = isTeleportDisabled(vnode.props); + if (target) { + const targetNode = target._lpa || target.firstChild; + if (vnode.shapeFlag & 16) { + if (disabled) { + hydrateDisabledTeleport(node, vnode); + hydrateAnchor(target, targetNode); + if (!vnode.targetAnchor) { + prepareAnchor( + target, + vnode, + createText, + insert, + // if target is the same as the main view, insert anchors before current node + // to avoid hydrating mismatch + parentNode(node) === target ? node : null + ); + } + } else { + vnode.anchor = nextSibling(node); + hydrateAnchor(target, targetNode); + if (!vnode.targetAnchor) { + prepareAnchor(target, vnode, createText, insert); + } + hydrateChildren( + targetNode && nextSibling(targetNode), + vnode, + target, + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + } + } + updateCssVars(vnode, disabled); + } else if (disabled) { + if (vnode.shapeFlag & 16) { + hydrateDisabledTeleport(node, vnode); + vnode.targetStart = node; + vnode.targetAnchor = nextSibling(node); + } + } + return vnode.anchor && nextSibling(vnode.anchor); +} +var Teleport = TeleportImpl; +function updateCssVars(vnode, isDisabled) { + const ctx = vnode.ctx; + if (ctx && ctx.ut) { + let node, anchor; + if (isDisabled) { + node = vnode.el; + anchor = vnode.anchor; + } else { + node = vnode.targetStart; + anchor = vnode.targetAnchor; + } + while (node && node !== anchor) { + if (node.nodeType === 1) node.setAttribute("data-v-owner", ctx.uid); + node = node.nextSibling; + } + ctx.ut(); + } +} +function prepareAnchor(target, vnode, createText, insert, anchor = null) { + const targetStart = vnode.targetStart = createText(""); + const targetAnchor = vnode.targetAnchor = createText(""); + targetStart[TeleportEndKey] = targetAnchor; + if (target) { + insert(targetStart, target, anchor); + insert(targetAnchor, target, anchor); + } + return targetAnchor; +} +var leaveCbKey = Symbol("_leaveCb"); +var enterCbKey = Symbol("_enterCb"); +function useTransitionState() { + const state = { + isMounted: false, + isLeaving: false, + isUnmounting: false, + leavingVNodes: /* @__PURE__ */ new Map() + }; + onMounted(() => { + state.isMounted = true; + }); + onBeforeUnmount(() => { + state.isUnmounting = true; + }); + return state; +} +var TransitionHookValidator = [Function, Array]; +var BaseTransitionPropsValidators = { + mode: String, + appear: Boolean, + persisted: Boolean, + // enter + onBeforeEnter: TransitionHookValidator, + onEnter: TransitionHookValidator, + onAfterEnter: TransitionHookValidator, + onEnterCancelled: TransitionHookValidator, + // leave + onBeforeLeave: TransitionHookValidator, + onLeave: TransitionHookValidator, + onAfterLeave: TransitionHookValidator, + onLeaveCancelled: TransitionHookValidator, + // appear + onBeforeAppear: TransitionHookValidator, + onAppear: TransitionHookValidator, + onAfterAppear: TransitionHookValidator, + onAppearCancelled: TransitionHookValidator +}; +var recursiveGetSubtree = (instance) => { + const subTree = instance.subTree; + return subTree.component ? recursiveGetSubtree(subTree.component) : subTree; +}; +var BaseTransitionImpl = { + name: `BaseTransition`, + props: BaseTransitionPropsValidators, + setup(props, { slots }) { + const instance = getCurrentInstance(); + const state = useTransitionState(); + return () => { + const children = slots.default && getTransitionRawChildren(slots.default(), true); + if (!children || !children.length) { + return; + } + const child = findNonCommentChild(children); + const rawProps = toRaw(props); + const { mode } = rawProps; + if (mode && mode !== "in-out" && mode !== "out-in" && mode !== "default") { + warn$1(`invalid mode: ${mode}`); + } + if (state.isLeaving) { + return emptyPlaceholder(child); + } + const innerChild = getInnerChild$1(child); + if (!innerChild) { + return emptyPlaceholder(child); + } + let enterHooks = resolveTransitionHooks( + innerChild, + rawProps, + state, + instance, + // #11061, ensure enterHooks is fresh after clone + (hooks) => enterHooks = hooks + ); + if (innerChild.type !== Comment) { + setTransitionHooks(innerChild, enterHooks); + } + let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree); + if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(oldInnerChild, innerChild) && recursiveGetSubtree(instance).type !== Comment) { + let leavingHooks = resolveTransitionHooks( + oldInnerChild, + rawProps, + state, + instance + ); + setTransitionHooks(oldInnerChild, leavingHooks); + if (mode === "out-in" && innerChild.type !== Comment) { + state.isLeaving = true; + leavingHooks.afterLeave = () => { + state.isLeaving = false; + if (!(instance.job.flags & 8)) { + instance.update(); + } + delete leavingHooks.afterLeave; + oldInnerChild = void 0; + }; + return emptyPlaceholder(child); + } else if (mode === "in-out" && innerChild.type !== Comment) { + leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => { + const leavingVNodesCache = getLeavingNodesForType( + state, + oldInnerChild + ); + leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild; + el[leaveCbKey] = () => { + earlyRemove(); + el[leaveCbKey] = void 0; + delete enterHooks.delayedLeave; + oldInnerChild = void 0; + }; + enterHooks.delayedLeave = () => { + delayedLeave(); + delete enterHooks.delayedLeave; + oldInnerChild = void 0; + }; + }; + } else { + oldInnerChild = void 0; + } + } else if (oldInnerChild) { + oldInnerChild = void 0; + } + return child; + }; + } +}; +function findNonCommentChild(children) { + let child = children[0]; + if (children.length > 1) { + let hasFound = false; + for (const c of children) { + if (c.type !== Comment) { + if (hasFound) { + warn$1( + " can only be used on a single element or component. Use for lists." + ); + break; + } + child = c; + hasFound = true; + if (false) break; + } + } + } + return child; +} +var BaseTransition = BaseTransitionImpl; +function getLeavingNodesForType(state, vnode) { + const { leavingVNodes } = state; + let leavingVNodesCache = leavingVNodes.get(vnode.type); + if (!leavingVNodesCache) { + leavingVNodesCache = /* @__PURE__ */ Object.create(null); + leavingVNodes.set(vnode.type, leavingVNodesCache); + } + return leavingVNodesCache; +} +function resolveTransitionHooks(vnode, props, state, instance, postClone) { + const { + appear, + mode, + persisted = false, + onBeforeEnter, + onEnter, + onAfterEnter, + onEnterCancelled, + onBeforeLeave, + onLeave, + onAfterLeave, + onLeaveCancelled, + onBeforeAppear, + onAppear, + onAfterAppear, + onAppearCancelled + } = props; + const key = String(vnode.key); + const leavingVNodesCache = getLeavingNodesForType(state, vnode); + const callHook3 = (hook, args) => { + hook && callWithAsyncErrorHandling( + hook, + instance, + 9, + args + ); + }; + const callAsyncHook = (hook, args) => { + const done = args[1]; + callHook3(hook, args); + if (isArray(hook)) { + if (hook.every((hook2) => hook2.length <= 1)) done(); + } else if (hook.length <= 1) { + done(); + } + }; + const hooks = { + mode, + persisted, + beforeEnter(el) { + let hook = onBeforeEnter; + if (!state.isMounted) { + if (appear) { + hook = onBeforeAppear || onBeforeEnter; + } else { + return; + } + } + if (el[leaveCbKey]) { + el[leaveCbKey]( + true + /* cancelled */ + ); + } + const leavingVNode = leavingVNodesCache[key]; + if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) { + leavingVNode.el[leaveCbKey](); + } + callHook3(hook, [el]); + }, + enter(el) { + if (!isHmrUpdating && leavingVNodesCache[key] === vnode) return; + let hook = onEnter; + let afterHook = onAfterEnter; + let cancelHook = onEnterCancelled; + if (!state.isMounted) { + if (appear) { + hook = onAppear || onEnter; + afterHook = onAfterAppear || onAfterEnter; + cancelHook = onAppearCancelled || onEnterCancelled; + } else { + return; + } + } + let called = false; + el[enterCbKey] = (cancelled) => { + if (called) return; + called = true; + if (cancelled) { + callHook3(cancelHook, [el]); + } else { + callHook3(afterHook, [el]); + } + if (hooks.delayedLeave) { + hooks.delayedLeave(); + } + el[enterCbKey] = void 0; + }; + const done = el[enterCbKey].bind(null, false); + if (hook) { + callAsyncHook(hook, [el, done]); + } else { + done(); + } + }, + leave(el, remove2) { + const key2 = String(vnode.key); + if (el[enterCbKey]) { + el[enterCbKey]( + true + /* cancelled */ + ); + } + if (state.isUnmounting) { + return remove2(); + } + callHook3(onBeforeLeave, [el]); + let called = false; + el[leaveCbKey] = (cancelled) => { + if (called) return; + called = true; + remove2(); + if (cancelled) { + callHook3(onLeaveCancelled, [el]); + } else { + callHook3(onAfterLeave, [el]); + } + el[leaveCbKey] = void 0; + if (leavingVNodesCache[key2] === vnode) { + delete leavingVNodesCache[key2]; + } + }; + const done = el[leaveCbKey].bind(null, false); + leavingVNodesCache[key2] = vnode; + if (onLeave) { + callAsyncHook(onLeave, [el, done]); + } else { + done(); + } + }, + clone(vnode2) { + const hooks2 = resolveTransitionHooks( + vnode2, + props, + state, + instance, + postClone + ); + if (postClone) postClone(hooks2); + return hooks2; + } + }; + return hooks; +} +function emptyPlaceholder(vnode) { + if (isKeepAlive(vnode)) { + vnode = cloneVNode(vnode); + vnode.children = null; + return vnode; + } +} +function getInnerChild$1(vnode) { + if (!isKeepAlive(vnode)) { + if (isTeleport(vnode.type) && vnode.children) { + return findNonCommentChild(vnode.children); + } + return vnode; + } + if (vnode.component) { + return vnode.component.subTree; + } + const { shapeFlag, children } = vnode; + if (children) { + if (shapeFlag & 16) { + return children[0]; + } + if (shapeFlag & 32 && isFunction(children.default)) { + return children.default(); + } + } +} +function setTransitionHooks(vnode, hooks) { + if (vnode.shapeFlag & 6 && vnode.component) { + vnode.transition = hooks; + setTransitionHooks(vnode.component.subTree, hooks); + } else if (vnode.shapeFlag & 128) { + vnode.ssContent.transition = hooks.clone(vnode.ssContent); + vnode.ssFallback.transition = hooks.clone(vnode.ssFallback); + } else { + vnode.transition = hooks; + } +} +function getTransitionRawChildren(children, keepComment = false, parentKey) { + let ret = []; + let keyedFragmentCount = 0; + for (let i = 0; i < children.length; i++) { + let child = children[i]; + const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i); + if (child.type === Fragment) { + if (child.patchFlag & 128) keyedFragmentCount++; + ret = ret.concat( + getTransitionRawChildren(child.children, keepComment, key) + ); + } else if (keepComment || child.type !== Comment) { + ret.push(key != null ? cloneVNode(child, { key }) : child); + } + } + if (keyedFragmentCount > 1) { + for (let i = 0; i < ret.length; i++) { + ret[i].patchFlag = -2; + } + } + return ret; +} +function defineComponent(options, extraOptions) { + return isFunction(options) ? ( + // #8236: extend call and options.name access are considered side-effects + // by Rollup, so we have to wrap it in a pure-annotated IIFE. + (() => extend({ name: options.name }, extraOptions, { setup: options }))() + ) : options; +} +function useId() { + const i = getCurrentInstance(); + if (i) { + return (i.appContext.config.idPrefix || "v") + "-" + i.ids[0] + i.ids[1]++; + } else if (true) { + warn$1( + `useId() is called when there is no active component instance to be associated with.` + ); + } + return ""; +} +function markAsyncBoundary(instance) { + instance.ids = [instance.ids[0] + instance.ids[2]++ + "-", 0, 0]; +} +var knownTemplateRefs = /* @__PURE__ */ new WeakSet(); +function useTemplateRef(key) { + const i = getCurrentInstance(); + const r = shallowRef(null); + if (i) { + const refs = i.refs === EMPTY_OBJ ? i.refs = {} : i.refs; + if (isTemplateRefKey(refs, key)) { + warn$1(`useTemplateRef('${key}') already exists.`); + } else { + Object.defineProperty(refs, key, { + enumerable: true, + get: () => r.value, + set: (val) => r.value = val + }); + } + } else if (true) { + warn$1( + `useTemplateRef() is called when there is no active component instance to be associated with.` + ); + } + const ret = true ? readonly(r) : r; + if (true) { + knownTemplateRefs.add(ret); + } + return ret; +} +function isTemplateRefKey(refs, key) { + let desc; + return !!((desc = Object.getOwnPropertyDescriptor(refs, key)) && !desc.configurable); +} +var pendingSetRefMap = /* @__PURE__ */ new WeakMap(); +function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) { + if (isArray(rawRef)) { + rawRef.forEach( + (r, i) => setRef( + r, + oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef), + parentSuspense, + vnode, + isUnmount + ) + ); + return; + } + if (isAsyncWrapper(vnode) && !isUnmount) { + if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) { + setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree); + } + return; + } + const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el; + const value = isUnmount ? null : refValue; + const { i: owner, r: ref2 } = rawRef; + if (!owner) { + warn$1( + `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.` + ); + return; + } + const oldRef = oldRawRef && oldRawRef.r; + const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs; + const setupState = owner.setupState; + const rawSetupState = toRaw(setupState); + const canSetSetupRef = setupState === EMPTY_OBJ ? NO : (key) => { + if (true) { + if (hasOwn(rawSetupState, key) && !isRef2(rawSetupState[key])) { + warn$1( + `Template ref "${key}" used on a non-ref value. It will not work in the production build.` + ); + } + if (knownTemplateRefs.has(rawSetupState[key])) { + return false; + } + } + if (isTemplateRefKey(refs, key)) { + return false; + } + return hasOwn(rawSetupState, key); + }; + const canSetRef = (ref22, key) => { + if (knownTemplateRefs.has(ref22)) { + return false; + } + if (key && isTemplateRefKey(refs, key)) { + return false; + } + return true; + }; + if (oldRef != null && oldRef !== ref2) { + invalidatePendingSetRef(oldRawRef); + if (isString(oldRef)) { + refs[oldRef] = null; + if (canSetSetupRef(oldRef)) { + setupState[oldRef] = null; + } + } else if (isRef2(oldRef)) { + const oldRawRefAtom = oldRawRef; + if (canSetRef(oldRef, oldRawRefAtom.k)) { + oldRef.value = null; + } + if (oldRawRefAtom.k) refs[oldRawRefAtom.k] = null; + } + } + if (isFunction(ref2)) { + callWithErrorHandling(ref2, owner, 12, [value, refs]); + } else { + const _isString = isString(ref2); + const _isRef = isRef2(ref2); + if (_isString || _isRef) { + const doSet = () => { + if (rawRef.f) { + const existing = _isString ? canSetSetupRef(ref2) ? setupState[ref2] : refs[ref2] : canSetRef(ref2) || !rawRef.k ? ref2.value : refs[rawRef.k]; + if (isUnmount) { + isArray(existing) && remove(existing, refValue); + } else { + if (!isArray(existing)) { + if (_isString) { + refs[ref2] = [refValue]; + if (canSetSetupRef(ref2)) { + setupState[ref2] = refs[ref2]; + } + } else { + const newVal = [refValue]; + if (canSetRef(ref2, rawRef.k)) { + ref2.value = newVal; + } + if (rawRef.k) refs[rawRef.k] = newVal; + } + } else if (!existing.includes(refValue)) { + existing.push(refValue); + } + } + } else if (_isString) { + refs[ref2] = value; + if (canSetSetupRef(ref2)) { + setupState[ref2] = value; + } + } else if (_isRef) { + if (canSetRef(ref2, rawRef.k)) { + ref2.value = value; + } + if (rawRef.k) refs[rawRef.k] = value; + } else if (true) { + warn$1("Invalid template ref type:", ref2, `(${typeof ref2})`); + } + }; + if (value) { + const job = () => { + doSet(); + pendingSetRefMap.delete(rawRef); + }; + job.id = -1; + pendingSetRefMap.set(rawRef, job); + queuePostRenderEffect(job, parentSuspense); + } else { + invalidatePendingSetRef(rawRef); + doSet(); + } + } else if (true) { + warn$1("Invalid template ref type:", ref2, `(${typeof ref2})`); + } + } +} +function invalidatePendingSetRef(rawRef) { + const pendingSetRef = pendingSetRefMap.get(rawRef); + if (pendingSetRef) { + pendingSetRef.flags |= 8; + pendingSetRefMap.delete(rawRef); + } +} +var hasLoggedMismatchError = false; +var logMismatchError = () => { + if (hasLoggedMismatchError) { + return; + } + console.error("Hydration completed but contains mismatches."); + hasLoggedMismatchError = true; +}; +var isSVGContainer = (container) => container.namespaceURI.includes("svg") && container.tagName !== "foreignObject"; +var isMathMLContainer = (container) => container.namespaceURI.includes("MathML"); +var getContainerType = (container) => { + if (container.nodeType !== 1) return void 0; + if (isSVGContainer(container)) return "svg"; + if (isMathMLContainer(container)) return "mathml"; + return void 0; +}; +var isComment = (node) => node.nodeType === 8; +function createHydrationFunctions(rendererInternals) { + const { + mt: mountComponent, + p: patch, + o: { + patchProp: patchProp2, + createText, + nextSibling, + parentNode, + remove: remove2, + insert, + createComment + } + } = rendererInternals; + const hydrate2 = (vnode, container) => { + if (!container.hasChildNodes()) { + warn$1( + `Attempting to hydrate existing markup but container is empty. Performing full mount instead.` + ); + patch(null, vnode, container); + flushPostFlushCbs(); + container._vnode = vnode; + return; + } + hydrateNode(container.firstChild, vnode, null, null, null); + flushPostFlushCbs(); + container._vnode = vnode; + }; + const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => { + optimized = optimized || !!vnode.dynamicChildren; + const isFragmentStart = isComment(node) && node.data === "["; + const onMismatch = () => handleMismatch( + node, + vnode, + parentComponent, + parentSuspense, + slotScopeIds, + isFragmentStart + ); + const { type, ref: ref2, shapeFlag, patchFlag } = vnode; + let domType = node.nodeType; + vnode.el = node; + if (true) { + def(node, "__vnode", vnode, true); + def(node, "__vueParentComponent", parentComponent, true); + } + if (patchFlag === -2) { + optimized = false; + vnode.dynamicChildren = null; + } + let nextNode = null; + switch (type) { + case Text: + if (domType !== 3) { + if (vnode.children === "") { + insert(vnode.el = createText(""), parentNode(node), node); + nextNode = node; + } else { + nextNode = onMismatch(); + } + } else { + if (node.data !== vnode.children) { + warn$1( + `Hydration text mismatch in`, + node.parentNode, + ` + - rendered on server: ${JSON.stringify( + node.data + )} + - expected on client: ${JSON.stringify(vnode.children)}` + ); + logMismatchError(); + node.data = vnode.children; + } + nextNode = nextSibling(node); + } + break; + case Comment: + if (isTemplateNode(node)) { + nextNode = nextSibling(node); + replaceNode( + vnode.el = node.content.firstChild, + node, + parentComponent + ); + } else if (domType !== 8 || isFragmentStart) { + nextNode = onMismatch(); + } else { + nextNode = nextSibling(node); + } + break; + case Static: + if (isFragmentStart) { + node = nextSibling(node); + domType = node.nodeType; + } + if (domType === 1 || domType === 3) { + nextNode = node; + const needToAdoptContent = !vnode.children.length; + for (let i = 0; i < vnode.staticCount; i++) { + if (needToAdoptContent) + vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data; + if (i === vnode.staticCount - 1) { + vnode.anchor = nextNode; + } + nextNode = nextSibling(nextNode); + } + return isFragmentStart ? nextSibling(nextNode) : nextNode; + } else { + onMismatch(); + } + break; + case Fragment: + if (!isFragmentStart) { + nextNode = onMismatch(); + } else { + nextNode = hydrateFragment( + node, + vnode, + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + } + break; + default: + if (shapeFlag & 1) { + if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) { + nextNode = onMismatch(); + } else { + nextNode = hydrateElement( + node, + vnode, + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + } + } else if (shapeFlag & 6) { + vnode.slotScopeIds = slotScopeIds; + const container = parentNode(node); + if (isFragmentStart) { + nextNode = locateClosingAnchor(node); + } else if (isComment(node) && node.data === "teleport start") { + nextNode = locateClosingAnchor(node, node.data, "teleport end"); + } else { + nextNode = nextSibling(node); + } + mountComponent( + vnode, + container, + null, + parentComponent, + parentSuspense, + getContainerType(container), + optimized + ); + if (isAsyncWrapper(vnode) && !vnode.type.__asyncResolved) { + let subTree; + if (isFragmentStart) { + subTree = createVNode(Fragment); + subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild; + } else { + subTree = node.nodeType === 3 ? createTextVNode("") : createVNode("div"); + } + subTree.el = node; + vnode.component.subTree = subTree; + } + } else if (shapeFlag & 64) { + if (domType !== 8) { + nextNode = onMismatch(); + } else { + nextNode = vnode.type.hydrate( + node, + vnode, + parentComponent, + parentSuspense, + slotScopeIds, + optimized, + rendererInternals, + hydrateChildren + ); + } + } else if (shapeFlag & 128) { + nextNode = vnode.type.hydrate( + node, + vnode, + parentComponent, + parentSuspense, + getContainerType(parentNode(node)), + slotScopeIds, + optimized, + rendererInternals, + hydrateNode + ); + } else if (true) { + warn$1("Invalid HostVNode type:", type, `(${typeof type})`); + } + } + if (ref2 != null) { + setRef(ref2, null, parentSuspense, vnode); + } + return nextNode; + }; + const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => { + optimized = optimized || !!vnode.dynamicChildren; + const { type, props, patchFlag, shapeFlag, dirs, transition } = vnode; + const forcePatch = type === "input" || type === "option"; + if (true) { + if (dirs) { + invokeDirectiveHook(vnode, null, parentComponent, "created"); + } + let needCallTransitionHooks = false; + if (isTemplateNode(el)) { + needCallTransitionHooks = needTransition( + null, + // no need check parentSuspense in hydration + transition + ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear; + const content = el.content.firstChild; + if (needCallTransitionHooks) { + const cls = content.getAttribute("class"); + if (cls) content.$cls = cls; + transition.beforeEnter(content); + } + replaceNode(content, el, parentComponent); + vnode.el = el = content; + } + if (shapeFlag & 16 && // skip if element has innerHTML / textContent + !(props && (props.innerHTML || props.textContent))) { + let next = hydrateChildren( + el.firstChild, + vnode, + el, + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + let hasWarned2 = false; + while (next) { + if (!isMismatchAllowed( + el, + 1 + /* CHILDREN */ + )) { + if (!hasWarned2) { + warn$1( + `Hydration children mismatch on`, + el, + ` +Server rendered element contains more child nodes than client vdom.` + ); + hasWarned2 = true; + } + logMismatchError(); + } + const cur = next; + next = next.nextSibling; + remove2(cur); + } + } else if (shapeFlag & 8) { + let clientText = vnode.children; + if (clientText[0] === "\n" && (el.tagName === "PRE" || el.tagName === "TEXTAREA")) { + clientText = clientText.slice(1); + } + const { textContent } = el; + if (textContent !== clientText && // innerHTML normalize \r\n or \r into a single \n in the DOM + textContent !== clientText.replace(/\r\n|\r/g, "\n")) { + if (!isMismatchAllowed( + el, + 0 + /* TEXT */ + )) { + warn$1( + `Hydration text content mismatch on`, + el, + ` + - rendered on server: ${textContent} + - expected on client: ${clientText}` + ); + logMismatchError(); + } + el.textContent = vnode.children; + } + } + if (props) { + if (true) { + const isCustomElement = el.tagName.includes("-"); + for (const key in props) { + if (// #11189 skip if this node has directives that have created hooks + // as it could have mutated the DOM in any possible way + !(dirs && dirs.some((d) => d.dir.created)) && propHasMismatch(el, key, props[key], vnode, parentComponent)) { + logMismatchError(); + } + if (forcePatch && (key.endsWith("value") || key === "indeterminate") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers + key[0] === "." || isCustomElement && !isReservedProp(key)) { + patchProp2(el, key, null, props[key], void 0, parentComponent); + } + } + } else if (props.onClick) { + patchProp2( + el, + "onClick", + null, + props.onClick, + void 0, + parentComponent + ); + } else if (patchFlag & 4 && isReactive(props.style)) { + for (const key in props.style) props.style[key]; + } + } + let vnodeHooks; + if (vnodeHooks = props && props.onVnodeBeforeMount) { + invokeVNodeHook(vnodeHooks, parentComponent, vnode); + } + if (dirs) { + invokeDirectiveHook(vnode, null, parentComponent, "beforeMount"); + } + if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) { + queueEffectWithSuspense(() => { + vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode); + needCallTransitionHooks && transition.enter(el); + dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted"); + }, parentSuspense); + } + } + return el.nextSibling; + }; + const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => { + optimized = optimized || !!parentVNode.dynamicChildren; + const children = parentVNode.children; + const l = children.length; + let hasWarned2 = false; + for (let i = 0; i < l; i++) { + const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]); + const isText = vnode.type === Text; + if (node) { + if (isText && !optimized) { + if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) { + insert( + createText( + node.data.slice(vnode.children.length) + ), + container, + nextSibling(node) + ); + node.data = vnode.children; + } + } + node = hydrateNode( + node, + vnode, + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + } else if (isText && !vnode.children) { + insert(vnode.el = createText(""), container); + } else { + if (!isMismatchAllowed( + container, + 1 + /* CHILDREN */ + )) { + if (!hasWarned2) { + warn$1( + `Hydration children mismatch on`, + container, + ` +Server rendered element contains fewer child nodes than client vdom.` + ); + hasWarned2 = true; + } + logMismatchError(); + } + patch( + null, + vnode, + container, + null, + parentComponent, + parentSuspense, + getContainerType(container), + slotScopeIds + ); + } + } + return node; + }; + const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => { + const { slotScopeIds: fragmentSlotScopeIds } = vnode; + if (fragmentSlotScopeIds) { + slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds; + } + const container = parentNode(node); + const next = hydrateChildren( + nextSibling(node), + vnode, + container, + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + if (next && isComment(next) && next.data === "]") { + return nextSibling(vnode.anchor = next); + } else { + logMismatchError(); + insert(vnode.anchor = createComment(`]`), container, next); + return next; + } + }; + const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => { + if (!isMismatchAllowed( + node.parentElement, + 1 + /* CHILDREN */ + )) { + warn$1( + `Hydration node mismatch: +- rendered on server:`, + node, + node.nodeType === 3 ? `(text)` : isComment(node) && node.data === "[" ? `(start of fragment)` : ``, + ` +- expected on client:`, + vnode.type + ); + logMismatchError(); + } + vnode.el = null; + if (isFragment) { + const end = locateClosingAnchor(node); + while (true) { + const next2 = nextSibling(node); + if (next2 && next2 !== end) { + remove2(next2); + } else { + break; + } + } + } + const next = nextSibling(node); + const container = parentNode(node); + remove2(node); + patch( + null, + vnode, + container, + next, + parentComponent, + parentSuspense, + getContainerType(container), + slotScopeIds + ); + if (parentComponent) { + parentComponent.vnode.el = vnode.el; + updateHOCHostEl(parentComponent, vnode.el); + } + return next; + }; + const locateClosingAnchor = (node, open = "[", close = "]") => { + let match = 0; + while (node) { + node = nextSibling(node); + if (node && isComment(node)) { + if (node.data === open) match++; + if (node.data === close) { + if (match === 0) { + return nextSibling(node); + } else { + match--; + } + } + } + } + return node; + }; + const replaceNode = (newNode, oldNode, parentComponent) => { + const parentNode2 = oldNode.parentNode; + if (parentNode2) { + parentNode2.replaceChild(newNode, oldNode); + } + let parent = parentComponent; + while (parent) { + if (parent.vnode.el === oldNode) { + parent.vnode.el = parent.subTree.el = newNode; + } + parent = parent.parent; + } + }; + const isTemplateNode = (node) => { + return node.nodeType === 1 && node.tagName === "TEMPLATE"; + }; + return [hydrate2, hydrateNode]; +} +function propHasMismatch(el, key, clientValue, vnode, instance) { + let mismatchType; + let mismatchKey; + let actual; + let expected; + if (key === "class") { + if (el.$cls) { + actual = el.$cls; + delete el.$cls; + } else { + actual = el.getAttribute("class"); + } + expected = normalizeClass(clientValue); + if (!isSetEqual(toClassSet(actual || ""), toClassSet(expected))) { + mismatchType = 2; + mismatchKey = `class`; + } + } else if (key === "style") { + actual = el.getAttribute("style") || ""; + expected = isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue)); + const actualMap = toStyleMap(actual); + const expectedMap = toStyleMap(expected); + if (vnode.dirs) { + for (const { dir, value } of vnode.dirs) { + if (dir.name === "show" && !value) { + expectedMap.set("display", "none"); + } + } + } + if (instance) { + resolveCssVars(instance, vnode, expectedMap); + } + if (!isMapEqual(actualMap, expectedMap)) { + mismatchType = 3; + mismatchKey = "style"; + } + } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) { + if (isBooleanAttr(key)) { + actual = el.hasAttribute(key); + expected = includeBooleanAttr(clientValue); + } else if (clientValue == null) { + actual = el.hasAttribute(key); + expected = false; + } else { + if (el.hasAttribute(key)) { + actual = el.getAttribute(key); + } else if (key === "value" && el.tagName === "TEXTAREA") { + actual = el.value; + } else { + actual = false; + } + expected = isRenderableAttrValue(clientValue) ? String(clientValue) : false; + } + if (actual !== expected) { + mismatchType = 4; + mismatchKey = key; + } + } + if (mismatchType != null && !isMismatchAllowed(el, mismatchType)) { + const format = (v) => v === false ? `(not rendered)` : `${mismatchKey}="${v}"`; + const preSegment = `Hydration ${MismatchTypeString[mismatchType]} mismatch on`; + const postSegment = ` + - rendered on server: ${format(actual)} + - expected on client: ${format(expected)} + Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead. + You should fix the source of the mismatch.`; + { + warn$1(preSegment, el, postSegment); + } + return true; + } + return false; +} +function toClassSet(str) { + return new Set(str.trim().split(/\s+/)); +} +function isSetEqual(a, b) { + if (a.size !== b.size) { + return false; + } + for (const s of a) { + if (!b.has(s)) { + return false; + } + } + return true; +} +function toStyleMap(str) { + const styleMap = /* @__PURE__ */ new Map(); + for (const item of str.split(";")) { + let [key, value] = item.split(":"); + key = key.trim(); + value = value && value.trim(); + if (key && value) { + styleMap.set(key, value); + } + } + return styleMap; +} +function isMapEqual(a, b) { + if (a.size !== b.size) { + return false; + } + for (const [key, value] of a) { + if (value !== b.get(key)) { + return false; + } + } + return true; +} +function resolveCssVars(instance, vnode, expectedMap) { + const root = instance.subTree; + if (instance.getCssVars && (vnode === root || root && root.type === Fragment && root.children.includes(vnode))) { + const cssVars = instance.getCssVars(); + for (const key in cssVars) { + const value = normalizeCssVarValue(cssVars[key]); + expectedMap.set(`--${getEscapedCssVarName(key, false)}`, value); + } + } + if (vnode === root && instance.parent) { + resolveCssVars(instance.parent, instance.vnode, expectedMap); + } +} +var allowMismatchAttr = "data-allow-mismatch"; +var MismatchTypeString = { + [ + 0 + /* TEXT */ + ]: "text", + [ + 1 + /* CHILDREN */ + ]: "children", + [ + 2 + /* CLASS */ + ]: "class", + [ + 3 + /* STYLE */ + ]: "style", + [ + 4 + /* ATTRIBUTE */ + ]: "attribute" +}; +function isMismatchAllowed(el, allowedType) { + if (allowedType === 0 || allowedType === 1) { + while (el && !el.hasAttribute(allowMismatchAttr)) { + el = el.parentElement; + } + } + const allowedAttr = el && el.getAttribute(allowMismatchAttr); + if (allowedAttr == null) { + return false; + } else if (allowedAttr === "") { + return true; + } else { + const list = allowedAttr.split(","); + if (allowedType === 0 && list.includes("children")) { + return true; + } + return list.includes(MismatchTypeString[allowedType]); + } +} +var requestIdleCallback = getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1)); +var cancelIdleCallback = getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id)); +var hydrateOnIdle = (timeout = 1e4) => (hydrate2) => { + const id = requestIdleCallback(hydrate2, { timeout }); + return () => cancelIdleCallback(id); +}; +function elementIsVisibleInViewport(el) { + const { top, left, bottom, right } = el.getBoundingClientRect(); + const { innerHeight, innerWidth } = window; + return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth); +} +var hydrateOnVisible = (opts) => (hydrate2, forEach) => { + const ob = new IntersectionObserver((entries) => { + for (const e of entries) { + if (!e.isIntersecting) continue; + ob.disconnect(); + hydrate2(); + break; + } + }, opts); + forEach((el) => { + if (!(el instanceof Element)) return; + if (elementIsVisibleInViewport(el)) { + hydrate2(); + ob.disconnect(); + return false; + } + ob.observe(el); + }); + return () => ob.disconnect(); +}; +var hydrateOnMediaQuery = (query) => (hydrate2) => { + if (query) { + const mql = matchMedia(query); + if (mql.matches) { + hydrate2(); + } else { + mql.addEventListener("change", hydrate2, { once: true }); + return () => mql.removeEventListener("change", hydrate2); + } + } +}; +var hydrateOnInteraction = (interactions = []) => (hydrate2, forEach) => { + if (isString(interactions)) interactions = [interactions]; + let hasHydrated = false; + const doHydrate = (e) => { + if (!hasHydrated) { + hasHydrated = true; + teardown(); + hydrate2(); + e.target.dispatchEvent(new e.constructor(e.type, e)); + } + }; + const teardown = () => { + forEach((el) => { + for (const i of interactions) { + el.removeEventListener(i, doHydrate); + } + }); + }; + forEach((el) => { + for (const i of interactions) { + el.addEventListener(i, doHydrate, { once: true }); + } + }); + return teardown; +}; +function forEachElement(node, cb) { + if (isComment(node) && node.data === "[") { + let depth = 1; + let next = node.nextSibling; + while (next) { + if (next.nodeType === 1) { + const result = cb(next); + if (result === false) { + break; + } + } else if (isComment(next)) { + if (next.data === "]") { + if (--depth === 0) break; + } else if (next.data === "[") { + depth++; + } + } + next = next.nextSibling; + } + } else { + cb(node); + } +} +var isAsyncWrapper = (i) => !!i.type.__asyncLoader; +function defineAsyncComponent(source) { + if (isFunction(source)) { + source = { loader: source }; + } + const { + loader, + loadingComponent, + errorComponent, + delay = 200, + hydrate: hydrateStrategy, + timeout, + // undefined = never times out + suspensible = true, + onError: userOnError + } = source; + let pendingRequest = null; + let resolvedComp; + let retries = 0; + const retry = () => { + retries++; + pendingRequest = null; + return load(); + }; + const load = () => { + let thisRequest; + return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => { + err = err instanceof Error ? err : new Error(String(err)); + if (userOnError) { + return new Promise((resolve2, reject) => { + const userRetry = () => resolve2(retry()); + const userFail = () => reject(err); + userOnError(err, userRetry, userFail, retries + 1); + }); + } else { + throw err; + } + }).then((comp) => { + if (thisRequest !== pendingRequest && pendingRequest) { + return pendingRequest; + } + if (!comp) { + warn$1( + `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.` + ); + } + if (comp && (comp.__esModule || comp[Symbol.toStringTag] === "Module")) { + comp = comp.default; + } + if (comp && !isObject(comp) && !isFunction(comp)) { + throw new Error(`Invalid async component load result: ${comp}`); + } + resolvedComp = comp; + return comp; + })); + }; + return defineComponent({ + name: "AsyncComponentWrapper", + __asyncLoader: load, + __asyncHydrate(el, instance, hydrate2) { + let patched = false; + (instance.bu || (instance.bu = [])).push(() => patched = true); + const performHydrate = () => { + if (patched) { + if (true) { + warn$1( + `Skipping lazy hydration for component '${getComponentName(resolvedComp) || resolvedComp.__file}': it was updated before lazy hydration performed.` + ); + } + return; + } + hydrate2(); + }; + const doHydrate = hydrateStrategy ? () => { + const teardown = hydrateStrategy( + performHydrate, + (cb) => forEachElement(el, cb) + ); + if (teardown) { + (instance.bum || (instance.bum = [])).push(teardown); + } + } : performHydrate; + if (resolvedComp) { + doHydrate(); + } else { + load().then(() => !instance.isUnmounted && doHydrate()); + } + }, + get __asyncResolved() { + return resolvedComp; + }, + setup() { + const instance = currentInstance; + markAsyncBoundary(instance); + if (resolvedComp) { + return () => createInnerComp(resolvedComp, instance); + } + const onError = (err) => { + pendingRequest = null; + handleError( + err, + instance, + 13, + !errorComponent + ); + }; + if (suspensible && instance.suspense || isInSSRComponentSetup) { + return load().then((comp) => { + return () => createInnerComp(comp, instance); + }).catch((err) => { + onError(err); + return () => errorComponent ? createVNode(errorComponent, { + error: err + }) : null; + }); + } + const loaded = ref(false); + const error = ref(); + const delayed = ref(!!delay); + if (delay) { + setTimeout(() => { + delayed.value = false; + }, delay); + } + if (timeout != null) { + setTimeout(() => { + if (!loaded.value && !error.value) { + const err = new Error( + `Async component timed out after ${timeout}ms.` + ); + onError(err); + error.value = err; + } + }, timeout); + } + load().then(() => { + loaded.value = true; + if (instance.parent && isKeepAlive(instance.parent.vnode)) { + instance.parent.update(); + } + }).catch((err) => { + onError(err); + error.value = err; + }); + return () => { + if (loaded.value && resolvedComp) { + return createInnerComp(resolvedComp, instance); + } else if (error.value && errorComponent) { + return createVNode(errorComponent, { + error: error.value + }); + } else if (loadingComponent && !delayed.value) { + return createInnerComp( + loadingComponent, + instance + ); + } + }; + } + }); +} +function createInnerComp(comp, parent) { + const { ref: ref2, props, children, ce } = parent.vnode; + const vnode = createVNode(comp, props, children); + vnode.ref = ref2; + vnode.ce = ce; + delete parent.vnode.ce; + return vnode; +} +var isKeepAlive = (vnode) => vnode.type.__isKeepAlive; +var KeepAliveImpl = { + name: `KeepAlive`, + // Marker for special handling inside the renderer. We are not using a === + // check directly on KeepAlive in the renderer, because importing it directly + // would prevent it from being tree-shaken. + __isKeepAlive: true, + props: { + include: [String, RegExp, Array], + exclude: [String, RegExp, Array], + max: [String, Number] + }, + setup(props, { slots }) { + const instance = getCurrentInstance(); + const sharedContext = instance.ctx; + if (!sharedContext.renderer) { + return () => { + const children = slots.default && slots.default(); + return children && children.length === 1 ? children[0] : children; + }; + } + const cache = /* @__PURE__ */ new Map(); + const keys = /* @__PURE__ */ new Set(); + let current = null; + if (true) { + instance.__v_cache = cache; + } + const parentSuspense = instance.suspense; + const { + renderer: { + p: patch, + m: move, + um: _unmount, + o: { createElement } + } + } = sharedContext; + const storageContainer = createElement("div"); + sharedContext.activate = (vnode, container, anchor, namespace, optimized) => { + const instance2 = vnode.component; + move(vnode, container, anchor, 0, parentSuspense); + patch( + instance2.vnode, + vnode, + container, + anchor, + instance2, + parentSuspense, + namespace, + vnode.slotScopeIds, + optimized + ); + queuePostRenderEffect(() => { + instance2.isDeactivated = false; + if (instance2.a) { + invokeArrayFns(instance2.a); + } + const vnodeHook = vnode.props && vnode.props.onVnodeMounted; + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode); + } + }, parentSuspense); + if (true) { + devtoolsComponentAdded(instance2); + } + }; + sharedContext.deactivate = (vnode) => { + const instance2 = vnode.component; + invalidateMount(instance2.m); + invalidateMount(instance2.a); + move(vnode, storageContainer, null, 1, parentSuspense); + queuePostRenderEffect(() => { + if (instance2.da) { + invokeArrayFns(instance2.da); + } + const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted; + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode); + } + instance2.isDeactivated = true; + }, parentSuspense); + if (true) { + devtoolsComponentAdded(instance2); + } + if (true) { + instance2.__keepAliveStorageContainer = storageContainer; + } + }; + function unmount(vnode) { + resetShapeFlag(vnode); + _unmount(vnode, instance, parentSuspense, true); + } + function pruneCache(filter) { + cache.forEach((vnode, key) => { + const name = getComponentName( + isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : vnode.type + ); + if (name && !filter(name)) { + pruneCacheEntry(key); + } + }); + } + function pruneCacheEntry(key) { + const cached = cache.get(key); + if (cached && (!current || !isSameVNodeType(cached, current))) { + unmount(cached); + } else if (current) { + resetShapeFlag(current); + } + cache.delete(key); + keys.delete(key); + } + watch2( + () => [props.include, props.exclude], + ([include, exclude]) => { + include && pruneCache((name) => matches(include, name)); + exclude && pruneCache((name) => !matches(exclude, name)); + }, + // prune post-render after `current` has been updated + { flush: "post", deep: true } + ); + let pendingCacheKey = null; + const cacheSubtree = () => { + if (pendingCacheKey != null) { + if (isSuspense(instance.subTree.type)) { + queuePostRenderEffect(() => { + cache.set(pendingCacheKey, getInnerChild(instance.subTree)); + }, instance.subTree.suspense); + } else { + cache.set(pendingCacheKey, getInnerChild(instance.subTree)); + } + } + }; + onMounted(cacheSubtree); + onUpdated(cacheSubtree); + onBeforeUnmount(() => { + cache.forEach((cached) => { + const { subTree, suspense } = instance; + const vnode = getInnerChild(subTree); + if (cached.type === vnode.type && cached.key === vnode.key) { + resetShapeFlag(vnode); + const da = vnode.component.da; + da && queuePostRenderEffect(da, suspense); + return; + } + unmount(cached); + }); + }); + return () => { + pendingCacheKey = null; + if (!slots.default) { + return current = null; + } + const children = slots.default(); + const rawVNode = children[0]; + if (children.length > 1) { + if (true) { + warn$1(`KeepAlive should contain exactly one component child.`); + } + current = null; + return children; + } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) { + current = null; + return rawVNode; + } + let vnode = getInnerChild(rawVNode); + if (vnode.type === Comment) { + current = null; + return vnode; + } + const comp = vnode.type; + const name = getComponentName( + isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp + ); + const { include, exclude, max } = props; + if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) { + vnode.shapeFlag &= -257; + current = vnode; + return rawVNode; + } + const key = vnode.key == null ? comp : vnode.key; + const cachedVNode = cache.get(key); + if (vnode.el) { + vnode = cloneVNode(vnode); + if (rawVNode.shapeFlag & 128) { + rawVNode.ssContent = vnode; + } + } + pendingCacheKey = key; + if (cachedVNode) { + vnode.el = cachedVNode.el; + vnode.component = cachedVNode.component; + if (vnode.transition) { + setTransitionHooks(vnode, vnode.transition); + } + vnode.shapeFlag |= 512; + keys.delete(key); + keys.add(key); + } else { + keys.add(key); + if (max && keys.size > parseInt(max, 10)) { + pruneCacheEntry(keys.values().next().value); + } + } + vnode.shapeFlag |= 256; + current = vnode; + return isSuspense(rawVNode.type) ? rawVNode : vnode; + }; + } +}; +var KeepAlive = KeepAliveImpl; +function matches(pattern, name) { + if (isArray(pattern)) { + return pattern.some((p2) => matches(p2, name)); + } else if (isString(pattern)) { + return pattern.split(",").includes(name); + } else if (isRegExp(pattern)) { + pattern.lastIndex = 0; + return pattern.test(name); + } + return false; +} +function onActivated(hook, target) { + registerKeepAliveHook(hook, "a", target); +} +function onDeactivated(hook, target) { + registerKeepAliveHook(hook, "da", target); +} +function registerKeepAliveHook(hook, type, target = currentInstance) { + const wrappedHook = hook.__wdc || (hook.__wdc = () => { + let current = target; + while (current) { + if (current.isDeactivated) { + return; + } + current = current.parent; + } + return hook(); + }); + injectHook(type, wrappedHook, target); + if (target) { + let current = target.parent; + while (current && current.parent) { + if (isKeepAlive(current.parent.vnode)) { + injectToKeepAliveRoot(wrappedHook, type, target, current); + } + current = current.parent; + } + } +} +function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) { + const injected = injectHook( + type, + hook, + keepAliveRoot, + true + /* prepend */ + ); + onUnmounted(() => { + remove(keepAliveRoot[type], injected); + }, target); +} +function resetShapeFlag(vnode) { + vnode.shapeFlag &= -257; + vnode.shapeFlag &= -513; +} +function getInnerChild(vnode) { + return vnode.shapeFlag & 128 ? vnode.ssContent : vnode; +} +function injectHook(type, hook, target = currentInstance, prepend = false) { + if (target) { + const hooks = target[type] || (target[type] = []); + const wrappedHook = hook.__weh || (hook.__weh = (...args) => { + pauseTracking(); + const reset = setCurrentInstance(target); + const res = callWithAsyncErrorHandling(hook, target, type, args); + reset(); + resetTracking(); + return res; + }); + if (prepend) { + hooks.unshift(wrappedHook); + } else { + hooks.push(wrappedHook); + } + return wrappedHook; + } else if (true) { + const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, "")); + warn$1( + `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` + ); + } +} +var createHook = (lifecycle) => (hook, target = currentInstance) => { + if (!isInSSRComponentSetup || lifecycle === "sp") { + injectHook(lifecycle, (...args) => hook(...args), target); + } +}; +var onBeforeMount = createHook("bm"); +var onMounted = createHook("m"); +var onBeforeUpdate = createHook( + "bu" +); +var onUpdated = createHook("u"); +var onBeforeUnmount = createHook( + "bum" +); +var onUnmounted = createHook("um"); +var onServerPrefetch = createHook( + "sp" +); +var onRenderTriggered = createHook("rtg"); +var onRenderTracked = createHook("rtc"); +function onErrorCaptured(hook, target = currentInstance) { + injectHook("ec", hook, target); +} +var COMPONENTS = "components"; +var DIRECTIVES = "directives"; +function resolveComponent(name, maybeSelfReference) { + return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name; +} +var NULL_DYNAMIC_COMPONENT = Symbol.for("v-ndc"); +function resolveDynamicComponent(component) { + if (isString(component)) { + return resolveAsset(COMPONENTS, component, false) || component; + } else { + return component || NULL_DYNAMIC_COMPONENT; + } +} +function resolveDirective(name) { + return resolveAsset(DIRECTIVES, name); +} +function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) { + const instance = currentRenderingInstance || currentInstance; + if (instance) { + const Component = instance.type; + if (type === COMPONENTS) { + const selfName = getComponentName( + Component, + false + ); + if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) { + return Component; + } + } + const res = ( + // local registration + // check instance[type] first which is resolved for options API + resolve(instance[type] || Component[type], name) || // global registration + resolve(instance.appContext[type], name) + ); + if (!res && maybeSelfReference) { + return Component; + } + if (warnMissing && !res) { + const extra = type === COMPONENTS ? ` +If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``; + warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`); + } + return res; + } else if (true) { + warn$1( + `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().` + ); + } +} +function resolve(registry, name) { + return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]); +} +function renderList(source, renderItem, cache, index) { + let ret; + const cached = cache && cache[index]; + const sourceIsArray = isArray(source); + if (sourceIsArray || isString(source)) { + const sourceIsReactiveArray = sourceIsArray && isReactive(source); + let needsWrap = false; + let isReadonlySource = false; + if (sourceIsReactiveArray) { + needsWrap = !isShallow(source); + isReadonlySource = isReadonly(source); + source = shallowReadArray(source); + } + ret = new Array(source.length); + for (let i = 0, l = source.length; i < l; i++) { + ret[i] = renderItem( + needsWrap ? isReadonlySource ? toReadonly(toReactive(source[i])) : toReactive(source[i]) : source[i], + i, + void 0, + cached && cached[i] + ); + } + } else if (typeof source === "number") { + if (!Number.isInteger(source) || source < 0) { + warn$1( + `The v-for range expects a positive integer value but got ${source}.` + ); + ret = []; + } else { + ret = new Array(source); + for (let i = 0; i < source; i++) { + ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]); + } + } + } else if (isObject(source)) { + if (source[Symbol.iterator]) { + ret = Array.from( + source, + (item, i) => renderItem(item, i, void 0, cached && cached[i]) + ); + } else { + const keys = Object.keys(source); + ret = new Array(keys.length); + for (let i = 0, l = keys.length; i < l; i++) { + const key = keys[i]; + ret[i] = renderItem(source[key], key, i, cached && cached[i]); + } + } + } else { + ret = []; + } + if (cache) { + cache[index] = ret; + } + return ret; +} +function createSlots(slots, dynamicSlots) { + for (let i = 0; i < dynamicSlots.length; i++) { + const slot = dynamicSlots[i]; + if (isArray(slot)) { + for (let j = 0; j < slot.length; j++) { + slots[slot[j].name] = slot[j].fn; + } + } else if (slot) { + slots[slot.name] = slot.key ? (...args) => { + const res = slot.fn(...args); + if (res) res.key = slot.key; + return res; + } : slot.fn; + } + } + return slots; +} +function renderSlot(slots, name, props = {}, fallback, noSlotted) { + if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) { + const hasProps = Object.keys(props).length > 0; + if (name !== "default") props.name = name; + return openBlock(), createBlock( + Fragment, + null, + [createVNode("slot", props, fallback && fallback())], + hasProps ? -2 : 64 + ); + } + let slot = slots[name]; + if (slot && slot.length > 1) { + warn$1( + `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.` + ); + slot = () => []; + } + if (slot && slot._c) { + slot._d = false; + } + openBlock(); + const validSlotContent = slot && ensureValidVNode(slot(props)); + const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch + // key attached in the `createSlots` helper, respect that + validSlotContent && validSlotContent.key; + const rendered = createBlock( + Fragment, + { + key: (slotKey && !isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content + (!validSlotContent && fallback ? "_fb" : "") + }, + validSlotContent || (fallback ? fallback() : []), + validSlotContent && slots._ === 1 ? 64 : -2 + ); + if (!noSlotted && rendered.scopeId) { + rendered.slotScopeIds = [rendered.scopeId + "-s"]; + } + if (slot && slot._c) { + slot._d = true; + } + return rendered; +} +function ensureValidVNode(vnodes) { + return vnodes.some((child) => { + if (!isVNode(child)) return true; + if (child.type === Comment) return false; + if (child.type === Fragment && !ensureValidVNode(child.children)) + return false; + return true; + }) ? vnodes : null; +} +function toHandlers(obj, preserveCaseIfNecessary) { + const ret = {}; + if (!isObject(obj)) { + warn$1(`v-on with no argument expects an object value.`); + return ret; + } + for (const key in obj) { + ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key]; + } + return ret; +} +var getPublicInstance = (i) => { + if (!i) return null; + if (isStatefulComponent(i)) return getComponentPublicInstance(i); + return getPublicInstance(i.parent); +}; +var publicPropertiesMap = ( + // Move PURE marker to new line to workaround compiler discarding it + // due to type annotation + extend(/* @__PURE__ */ Object.create(null), { + $: (i) => i, + $el: (i) => i.vnode.el, + $data: (i) => i.data, + $props: (i) => true ? shallowReadonly(i.props) : i.props, + $attrs: (i) => true ? shallowReadonly(i.attrs) : i.attrs, + $slots: (i) => true ? shallowReadonly(i.slots) : i.slots, + $refs: (i) => true ? shallowReadonly(i.refs) : i.refs, + $parent: (i) => getPublicInstance(i.parent), + $root: (i) => getPublicInstance(i.root), + $host: (i) => i.ce, + $emit: (i) => i.emit, + $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type, + $forceUpdate: (i) => i.f || (i.f = () => { + queueJob(i.update); + }), + $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)), + $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP + }) +); +var isReservedPrefix = (key) => key === "_" || key === "$"; +var hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key); +var PublicInstanceProxyHandlers = { + get({ _: instance }, key) { + if (key === "__v_skip") { + return true; + } + const { ctx, setupState, data, props, accessCache, type, appContext } = instance; + if (key === "__isVue") { + return true; + } + if (key[0] !== "$") { + const n = accessCache[key]; + if (n !== void 0) { + switch (n) { + case 1: + return setupState[key]; + case 2: + return data[key]; + case 4: + return ctx[key]; + case 3: + return props[key]; + } + } else if (hasSetupBinding(setupState, key)) { + accessCache[key] = 1; + return setupState[key]; + } else if (__VUE_OPTIONS_API__ && data !== EMPTY_OBJ && hasOwn(data, key)) { + accessCache[key] = 2; + return data[key]; + } else if (hasOwn(props, key)) { + accessCache[key] = 3; + return props[key]; + } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { + accessCache[key] = 4; + return ctx[key]; + } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) { + accessCache[key] = 0; + } + } + const publicGetter = publicPropertiesMap[key]; + let cssModule, globalProperties; + if (publicGetter) { + if (key === "$attrs") { + track(instance.attrs, "get", ""); + markAttrsAccessed(); + } else if (key === "$slots") { + track(instance, "get", key); + } + return publicGetter(instance); + } else if ( + // css module (injected by vue-loader) + (cssModule = type.__cssModules) && (cssModule = cssModule[key]) + ) { + return cssModule; + } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { + accessCache[key] = 4; + return ctx[key]; + } else if ( + // global properties + globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key) + ) { + { + return globalProperties[key]; + } + } else if (currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading + // to infinite warning loop + key.indexOf("__v") !== 0)) { + if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) { + warn$1( + `Property ${JSON.stringify( + key + )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.` + ); + } else if (instance === currentRenderingInstance) { + warn$1( + `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.` + ); + } + } + }, + set({ _: instance }, key, value) { + const { data, setupState, ctx } = instance; + if (hasSetupBinding(setupState, key)) { + setupState[key] = value; + return true; + } else if (setupState.__isScriptSetup && hasOwn(setupState, key)) { + warn$1(`Cannot mutate ``` -### 📦 Browser (Script Tag) +### 📦 in the Browser (Script Tag) For environments without `importmap` support or simple prototypes, use the bundled version: ```html @@ -101,12 +109,7 @@ For environments without `importmap` support or simple prototypes, use the bundl console.log(t.toString()); ``` -___ - -
- - 🛠️ Quick Start - +## 🛠️ Quick Start ```javascript import { Tempo } from '@magmacomputing/tempo'; @@ -124,68 +127,8 @@ const startOfMonth = now.set({ start: 'month' }); console.log(now.format('{dd} {mmm} {yyyy}')); // using custom format with tokens: "24 Jan 2026" console.log(now.fmt.date); // using pre-built formats: "2026-01-24" ``` -___ -
-
- - 📚 Documentation - - -
- - ✨ New in v2.1.2 - - -Tempo v2.1.2 is a major milestone, delivering a more reactive architecture and rock-solid stability. - -- **Modular Architecture**: Tempo is now split into `core` and optional plugin/modules, allowing you to include only what you need. -- **Improved Logging**: Internal logging uses context-aware Symbols for better decoupling. -- **Static API**: `Tempo.duration()` static method for convenient duration creation. - -- **Side Effect Registration**: Plugins now support automatic registration. While the full package includes all modules by default, Core users can activate features simply by importing the corresponding module (e.g., `@magmacomputing/tempo/ticker`). -- **100% Reliability**: The engine passes all regression tests, ensuring complete stability across parsing, calculation, and formatting routines. -- **Unified Term Logic**: Terms (like Quarters and Seasons) are now fully integrated. Use `#` in `set()` to jump to boundaries, and `{#term}` in `format()` to embed semantic labels (e.g. "Second Quarter") directly into strings. -- **Relational Term Math**: A category-first feature. Shift dates by semantic "steps" with `.add({ '#quarter': 1 })`. Tempo preserves your relative duration within the term, jumping across gaps and handling overflows with mathematical precision. -- **Fluent Immutable Boundaries**: Term ranges now return fully functional, frozen `Tempo` instances for `start` and `end`, allowing for seamless chaining like `t.term.qtr.start.format('{dd} {mmm}')`. -- **Ticker Reliability**: Fully stabilized the Ticker subsystem by resolving async generator hangs and synchronizing pulse counts ($N$ pulses for `limit: N`), guaranteeing 100% predictable reactive streams. -- **Parsing Engine Optimization**: Re-engineered pattern generation for $O(1)$ instance creation and improved support for custom layout literals in local/one-off parsers. -- **Enhanced Parsing**: Significant refinements to the natural language engine for even more intuitive relative-date handling. -## ⚠️ Migrating from v1.x - -Tempo v2.1.2 continues the architectural improvements started in v2.0: - -- **Modular Architecture**: Use optional modules for `duration` and `format` to keep your bundle lean. -- **Automatic Registration**: Built-ins self-register on import (just import the module). -___ -
-
- - 📚 Detailed technical guides - - -- [Vision & Value Proposition](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/vision.md) -- [Tempo vs. Native Temporal](./doc/tempo-vs-temporal.md) ([v2.1.2](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/tempo-vs-temporal.md)) -- [Tempo vs. The Competition](./doc/comparison.md) ([v2.1.2](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/comparison.md)) -- [Tempo Modularity](./doc/tempo.modularity.md) ([v2.1.2](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/tempo.modularity.md)) -- [Tempo API Reference](./doc/tempo.api.md) ([v2.1.2](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/tempo.api.md)) -- [Tempo Class Documentation](./doc/Tempo.md) ([v2.1.2](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/Tempo.md)) -- [Tempo Term Shorthand](./doc/tempo.shorthand.md) ([v2.1.2](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/tempo.shorthand.md)) -- [Plugin System](./doc/tempo.plugin.md) ([v2.1.2](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/tempo.plugin.md)) -- [Configuration Guide](./doc/tempo.config.md) ([v2.1.2](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/tempo.config.md)) -- [Architecture & Internal Protection](./doc/architecture.md) ([v2.1.2](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/architecture.md)) -- [Commercial Support](./doc/commercial.md) ([v2.1.2](https://github.com/magmacomputing/magma/blob/v2.1.2/packages/tempo/doc/commercial.md)) -___ -
-
- -
- -💖 Support the Project - - -If you find **Tempo** useful and want to support its development, please consider sponsoring us on GitHub! Your support helps keep the project active and premium. - -[![GitHub Sponsors](https://img.shields.io/badge/Sponsor-%E2%9D%A4-pink?style=for-the-badge&logo=github-sponsors)](https://github.com/sponsors/magmacomputing) + Looking for the full API reference? Check out the **[Tempo API Guide](./doc/tempo.api.md)**. + ## 💬 Contact & Support @@ -224,4 +167,3 @@ How are we doing? Let us know with a simple reaction! ## ⚖️ License Distributed under the MIT License. See `LICENSE` for more information. -
diff --git a/packages/tempo/demo/1-esm-importmap.html b/packages/tempo/demo/1-esm-importmap.html new file mode 100644 index 00000000..f81958fa --- /dev/null +++ b/packages/tempo/demo/1-esm-importmap.html @@ -0,0 +1,67 @@ + + + + + + Demo 1: ESM + Import Map + + + + +

⏳ Demo 2: Granular ESM (Multi-file)

+
+ STATUS +
Loading...
+
+ RESULT +

+    
+ + + + + + + \ No newline at end of file diff --git a/packages/tempo/demo/2-global-bundle.html b/packages/tempo/demo/2-global-bundle.html new file mode 100644 index 00000000..8cf9e327 --- /dev/null +++ b/packages/tempo/demo/2-global-bundle.html @@ -0,0 +1,61 @@ + + + + + + Demo 2: Global Bundle + + + + +

⏳ Demo 2: Global Bundle

+
+ STATUS +
Loading...
+
+ RESULT +

+    
+ + + + + + + + \ No newline at end of file diff --git a/packages/tempo/demo/3-modular-granular.html b/packages/tempo/demo/3-modular-granular.html new file mode 100644 index 00000000..e555e1b8 --- /dev/null +++ b/packages/tempo/demo/3-modular-granular.html @@ -0,0 +1,49 @@ + + + + + Demo 3: Modular (Granular) + + + +

⏳ Demo 3: Modular (Granular)

+
+ STATUS +
Loading...
+
+ RESULT +

+    
+ + + + + + diff --git a/packages/tempo/demo/4-error-no-plugin.html b/packages/tempo/demo/4-error-no-plugin.html new file mode 100644 index 00000000..0816d272 --- /dev/null +++ b/packages/tempo/demo/4-error-no-plugin.html @@ -0,0 +1,48 @@ + + + + + Demo 4: Expected Error (No Plugin) + + + +

⏳ Demo 4: Expected Error (No Plugin)

+
+ STATUS +
Testing for expected error...
+
+ CAPTURED ERROR MESSAGE +
Waiting for error...
+
+ + + + + + diff --git a/packages/tempo/demo/index.html b/packages/tempo/demo/index.html new file mode 100644 index 00000000..14582d0f --- /dev/null +++ b/packages/tempo/demo/index.html @@ -0,0 +1,131 @@ + + + + + + Tempo v2.1.2 | Verification Dashboard + + + + + +
+
+

⏳ Tempo v2.1.2

+

Official Verification Dashboard & Implementation Reference

+
+ ✓ Build: Passing + ✓ Polyfill: External + ✓ ESM: Granular + ✓ Bundle: IIFE Named +
+
+ +
+ +
+
+ Scenario 1: ESM + Import Maps + View Full Page ↗ +
+ +
+ + +
+
+ Scenario 2: Global IIFE Bundle + View Full Page ↗ +
+ +
+ + +
+
+ Scenario 3: Modular (Granular) + View Full Page ↗ +
+ +
+ + +
+
+ Scenario 4: Graceful Failure + View Full Page ↗ +
+ +
+
+ +
+ © 2026 Magma Computing Solutions. Verified for Production Deployment. +
+
+ + diff --git a/packages/tempo/doc/Tempo.md b/packages/tempo/doc/Tempo.md index e5435707..35f9f88b 100644 --- a/packages/tempo/doc/Tempo.md +++ b/packages/tempo/doc/Tempo.md @@ -65,13 +65,13 @@ npm install @magmacomputing/tempo --- -## ✨ What's New in v2.0.1 (Stabilized) -The **v2.0.1** release focus is on internal hardening, security, and developer ergonomics: +## ✨ What's New in v2.1.2 (Stabilized) +The **v2.1.2** release represents the stabilization of the modular architecture and the introduction of advanced relational math: -- **Parsing Engine Stabilization**: Re-engineered pattern generation for $O(1)$ instance creation and fixed a bug where local layout literals were being destroyed during state synchronization. -- **Registry Security (Soft Freeze)**: Core registries (`TIMEZONE`, `NUMBER`, `FORMAT`) are now protected by a proxy-based "Soft Freeze" layer. They are read-only for public consumers while remaining extensible via the primary public API **`Tempo.extend({ timeZones, formats, ... })`**. -- **Ticker & Registry Hardening**: Fully synchronized `pulse()` and `next()` logic to ensure consistent pulse counts ($N$ pulses for `limit: N`); resolved async generator hangs and cold-start scheduling issues, ensuring 100% reliability for long-running reactive streams. -- **Project Structure Refactoring**: Internal tooling moved from `#tempo/bin` to `#tempo/scripts` for better ESM/TS integration. +- **Modular Architecture**: Tempo is now split into **Core** (lite) and **Full** (batteries-included) versions. Features like Tickers and Durations are now side-effectable plugins. +- **Relational Math**: Shifting by terms (e.g., `.add({ '#quarter': 1 })`) now uses **Cycle Preservation**, maintaining your relative offset within semantic cycles. +- **Scan-and-Consume Guard**: A high-performance internal matching engine that enables $O(1)$ instantiation even with dozens of active terminology plugins. +- **Logify & Symbol Internalization**: Internal diagnostics and lifecycle hooks are now protected by context-aware Symbols, preventing state leakage and ensuring monorepo compatibility. --- diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/README.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/README.md new file mode 100644 index 00000000..0501d669 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/README.md @@ -0,0 +1,22 @@ +[**@magmacomputing/tempo**](../../../README.md) + +*** + +## Interfaces + +- [BaseOptions](interfaces/BaseOptions.md) +- [Config](interfaces/Config.md) +- [Discovery](interfaces/Discovery.md) +- [Parse](interfaces/Parse.md) +- [PluginContainer](interfaces/PluginContainer.md) +- [State](interfaces/State.md) + +## Type Aliases + +- [Match](type-aliases/Match.md) +- [MatchExtend](type-aliases/MatchExtend.md) +- [OptionsKeep](type-aliases/OptionsKeep.md) +- [PatternOption](type-aliases/PatternOption.md) +- [PatternOptionArray](type-aliases/PatternOptionArray.md) +- [Registry](type-aliases/Registry.md) +- [TimeStamp](type-aliases/TimeStamp.md) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/BaseOptions.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/BaseOptions.md new file mode 100644 index 00000000..d34856fa --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/BaseOptions.md @@ -0,0 +1,241 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.type.ts:155](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L155) + +the Options object found in a config-module, or passed to a call to Tempo.init({}) or 'new Tempo({})' + +## Extended by + +- [`BaseOptions`](../../Tempo/interfaces/BaseOptions.md) + +## Properties + +### calendar + +> **calendar**: `CalendarLike` + +Defined in: [tempo.type.ts:162](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L162) + +Temporal calendar + +*** + +### catch + +> **catch**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:159](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L159) + +catch or throw Errors + +*** + +### debug + +> **debug**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:158](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L158) + +additional console.log for tracking + +*** + +### discovery + +> **discovery**: `string` \| `symbol` + +Defined in: [tempo.type.ts:157](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L157) + +globalThis Discovery Symbol + +*** + +### event + +> **event**: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> + +Defined in: [tempo.type.ts:174](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L174) + +custom date aliases (events). + +*** + +### formats + +> **formats**: `Property`\<`any`\> + +Defined in: [tempo.type.ts:176](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L176) + +custom format strings to merge in the FORMAT enum + +*** + +### layout + +> **layout**: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +Defined in: [tempo.type.ts:173](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L173) + +patterns to help parse value + +*** + +### locale + +> **locale**: `string` + +Defined in: [tempo.type.ts:163](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L163) + +locale (e.g. en-AU) + +*** + +### mdyLayouts + +> **mdyLayouts**: [`Pair`](../../../../type-aliases/Pair.md)[] + +Defined in: [tempo.type.ts:171](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L171) + +swap parse-order of layouts + +*** + +### mdyLocales + +> **mdyLocales**: `string` \| `string`[] + +Defined in: [tempo.type.ts:170](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L170) + +locale-names that prefer 'mm-dd-yy' date order + +*** + +### mode? + +> `optional` **mode?**: `"auto"` \| `"strict"` \| `"defer"` + +Defined in: [tempo.type.ts:169](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L169) + +initialization strategy ('auto'|'strict'|'defer') + +*** + +### period + +> **period**: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +Defined in: [tempo.type.ts:175](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L175) + +custom time aliases (periods). + +*** + +### pivot + +> **pivot**: `number` + +Defined in: [tempo.type.ts:164](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L164) + +pivot year for two-digit years + +*** + +### plugins + +> **plugins**: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] + +Defined in: [tempo.type.ts:177](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L177) + +plugins to be automatically extended + +*** + +### rtfFormat? + +> `optional` **rtfFormat?**: `RelativeTimeFormat` + +Defined in: [tempo.type.ts:166](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L166) + +Pre-configured relative time formatter + +*** + +### rtfStyle? + +> `optional` **rtfStyle?**: `RelativeTimeFormatStyle` + +Defined in: [tempo.type.ts:167](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L167) + +Default style for relative time ('long' | 'short' | 'narrow') + +*** + +### silent + +> **silent**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:160](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L160) + +suppress console output during catch + +*** + +### snippet + +> **snippet**: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> + +Defined in: [tempo.type.ts:172](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L172) + +date-time snippets to help compose a Layout + +*** + +### sphere + +> **sphere**: `"north"` \| `"south"` \| `"east"` \| `"west"` \| `undefined` + +Defined in: [tempo.type.ts:165](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L165) + +hemisphere for term.qtr or term.szn + +*** + +### store + +> **store**: `string` + +Defined in: [tempo.type.ts:156](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L156) + +localStorage key + +*** + +### timeStamp? + +> `optional` **timeStamp?**: [`TimeStamp`](../type-aliases/TimeStamp.md) + +Defined in: [tempo.type.ts:168](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L168) + +Precision to measure timestamps (ms | us) + +*** + +### timeZone + +> **timeZone**: `TimeZoneLike` + +Defined in: [tempo.type.ts:161](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L161) + +Temporal timeZone + +*** + +### value + +> **value**: [`DateTime`](../../../../type-aliases/DateTime.md) + +Defined in: [tempo.type.ts:178](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L178) + +supplied value to parse diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Config.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Config.md new file mode 100644 index 00000000..6ecf9b3d --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Config.md @@ -0,0 +1,233 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.type.ts:230](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L230) + +Instance configuration derived from supply, storage, and discovery. + +## Extends + +- `Required`\<`Omit`\<[`OptionsKeep`](../type-aliases/OptionsKeep.md), `"formats"`\>\> + +## Indexable + +> \[`key`: `string`\]: `any` + +index-signature + +## Properties + +### calendar + +> **calendar**: `CalendarLike` + +Defined in: [tempo.type.ts:162](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L162) + +Temporal calendar + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`calendar`](../../Tempo/interfaces/BaseOptions.md#calendar) + +*** + +### catch + +> **catch**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:159](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L159) + +catch or throw Errors + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`catch`](../../Tempo/interfaces/BaseOptions.md#catch) + +*** + +### debug + +> **debug**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:158](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L158) + +additional console.log for tracking + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`debug`](../../Tempo/interfaces/BaseOptions.md#debug) + +*** + +### discovery + +> **discovery**: `string` \| `symbol` + +Defined in: [tempo.type.ts:157](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L157) + +globalThis Discovery Symbol + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`discovery`](../../Tempo/interfaces/BaseOptions.md#discovery) + +*** + +### formats + +> **formats**: `EnumifyType` + +Defined in: [tempo.type.ts:232](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L232) + +pre-configured format strings + +*** + +### locale + +> **locale**: `string` + +Defined in: [tempo.type.ts:163](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L163) + +locale (e.g. en-AU) + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`locale`](../../Tempo/interfaces/BaseOptions.md#locale) + +*** + +### mode + +> **mode**: `"auto"` \| `"strict"` \| `"defer"` + +Defined in: [tempo.type.ts:169](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L169) + +initialization strategy ('auto'|'strict'|'defer') + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`mode`](../../Tempo/interfaces/BaseOptions.md#mode) + +*** + +### plugins + +> **plugins**: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] + +Defined in: [tempo.type.ts:177](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L177) + +plugins to be automatically extended + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`plugins`](../../Tempo/interfaces/BaseOptions.md#plugins) + +*** + +### rtfFormat + +> **rtfFormat**: `RelativeTimeFormat` + +Defined in: [tempo.type.ts:166](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L166) + +Pre-configured relative time formatter + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`rtfFormat`](../../Tempo/interfaces/BaseOptions.md#rtfformat) + +*** + +### rtfStyle + +> **rtfStyle**: `RelativeTimeFormatStyle` + +Defined in: [tempo.type.ts:167](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L167) + +Default style for relative time ('long' | 'short' | 'narrow') + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`rtfStyle`](../../Tempo/interfaces/BaseOptions.md#rtfstyle) + +*** + +### scope + +> **scope**: `"global"` \| `"local"` + +Defined in: [tempo.type.ts:231](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L231) + +configuration (global | local) + +*** + +### silent + +> **silent**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:160](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L160) + +suppress console output during catch + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`silent`](../../Tempo/interfaces/BaseOptions.md#silent) + +*** + +### sphere + +> **sphere**: `"north"` \| `"south"` \| `"east"` \| `"west"` \| `undefined` + +Defined in: [tempo.type.ts:165](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L165) + +hemisphere for term.qtr or term.szn + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`sphere`](../../Tempo/interfaces/BaseOptions.md#sphere) + +*** + +### store + +> **store**: `string` + +Defined in: [tempo.type.ts:156](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L156) + +localStorage key + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`store`](../../Tempo/interfaces/BaseOptions.md#store) + +*** + +### timeStamp + +> **timeStamp**: [`TimeStamp`](../type-aliases/TimeStamp.md) + +Defined in: [tempo.type.ts:168](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L168) + +Precision to measure timestamps (ms | us) + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`timeStamp`](../../Tempo/interfaces/BaseOptions.md#timestamp) + +*** + +### timeZone + +> **timeZone**: `TimeZoneLike` + +Defined in: [tempo.type.ts:161](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L161) + +Temporal timeZone + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`timeZone`](../../Tempo/interfaces/BaseOptions.md#timezone) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Discovery.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Discovery.md new file mode 100644 index 00000000..2c1dcc0c --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Discovery.md @@ -0,0 +1,233 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.type.ts:237](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L237) + +structured configuration for Global Discovery via Symbol.for('$Tempo') + +## Properties + +### formats? + +> `optional` **formats?**: `Property`\<`any`\> + +Defined in: [tempo.type.ts:241](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L241) + +custom format strings to merge in the FORMAT dictionary + +*** + +### numbers? + +> `optional` **numbers?**: `Record`\<`string`, `number`\> + +Defined in: [tempo.type.ts:240](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L240) + +aliases to merge in the Number-Word dictionary + +*** + +### options? + +> `optional` **options?**: \{\[`key`: `string`\]: `any`; `calendar?`: `CalendarLike`; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\>; `formats?`: `Property`\<`any`\>; `layout?`: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../../../../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>; `pivot?`: `number`; `plugins?`: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: `RelativeTimeFormatStyle`; `silent?`: `boolean`; `snippet?`: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../type-aliases/TimeStamp.md); `timeZone?`: `TimeZoneLike`; `value?`: [`DateTime`](../../../../type-aliases/DateTime.md); \} \| (() => `object`) + +Defined in: [tempo.type.ts:238](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L238) + +pre-defined config options for Tempo.#global + +#### Union Members + +##### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: `CalendarLike`; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\>; `formats?`: `Property`\<`any`\>; `layout?`: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../../../../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>; `pivot?`: `number`; `plugins?`: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: `RelativeTimeFormatStyle`; `silent?`: `boolean`; `snippet?`: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../type-aliases/TimeStamp.md); `timeZone?`: `TimeZoneLike`; `value?`: [`DateTime`](../../../../type-aliases/DateTime.md); \} + +##### Index Signature + +\[`key`: `string`\]: `any` + +##### calendar? + +> `optional` **calendar?**: `CalendarLike` + +Temporal calendar + +##### catch? + +> `optional` **catch?**: `boolean` + +catch or throw Errors + +##### debug? + +> `optional` **debug?**: `boolean` + +additional console.log for tracking + +##### discovery? + +> `optional` **discovery?**: `string` \| `symbol` + +globalThis Discovery Symbol + +##### event? + +> `optional` **event?**: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> + +custom date aliases (events). + +##### formats? + +> `optional` **formats?**: `Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +##### layout? + +> `optional` **layout?**: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +##### locale? + +> `optional` **locale?**: `string` + +locale (e.g. en-AU) + +##### mdyLayouts? + +> `optional` **mdyLayouts?**: [`Pair`](../../../../type-aliases/Pair.md)[] + +swap parse-order of layouts + +##### mdyLocales? + +> `optional` **mdyLocales?**: `string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +##### mode? + +> `optional` **mode?**: `"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +##### period? + +> `optional` **period?**: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +##### pivot? + +> `optional` **pivot?**: `number` + +pivot year for two-digit years + +##### plugins? + +> `optional` **plugins?**: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] + +plugins to be automatically extended + +##### rtfFormat? + +> `optional` **rtfFormat?**: `RelativeTimeFormat` + +Pre-configured relative time formatter + +##### rtfStyle? + +> `optional` **rtfStyle?**: `RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +##### silent? + +> `optional` **silent?**: `boolean` + +suppress console output during catch + +##### snippet? + +> `optional` **snippet?**: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +##### sphere? + +> `optional` **sphere?**: `"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +##### store? + +> `optional` **store?**: `string` + +localStorage key + +##### timeStamp? + +> `optional` **timeStamp?**: [`TimeStamp`](../type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +##### timeZone? + +> `optional` **timeZone?**: `TimeZoneLike` + +Temporal timeZone + +##### value? + +> `optional` **value?**: [`DateTime`](../../../../type-aliases/DateTime.md) + +supplied value to parse + +*** + +##### Function + +() => `object` + +*** + +### plugins? + +> `optional` **plugins?**: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] + +Defined in: [tempo.type.ts:243](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L243) + +plugins to be automatically extended via Tempo.extend() + +*** + +### term? + +> `optional` **term?**: [`TermPlugin`](../../../../interfaces/TermPlugin.md) \| [`TermPlugin`](../../../../interfaces/TermPlugin.md)[] + +Defined in: [tempo.type.ts:242](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L242) + +term plugins to be registered via Tempo.addTerm() + +*** + +### ~~terms?~~ + +> `optional` **terms?**: [`TermPlugin`](../../../../interfaces/TermPlugin.md) \| [`TermPlugin`](../../../../interfaces/TermPlugin.md)[] + +Defined in: [tempo.type.ts:244](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L244) + +#### Deprecated + +use term instead + +*** + +### timeZones? + +> `optional` **timeZones?**: `Record`\<`string`, `string`\> + +Defined in: [tempo.type.ts:239](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L239) + +aliases to merge in the TimeZone dictionary diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Parse.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Parse.md new file mode 100644 index 00000000..30583dea --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Parse.md @@ -0,0 +1,145 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.type.ts:198](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L198) + +Debugging results of a parse operation. See `doc/tempo.api.md`. + +## Properties + +### event + +> **event**: `Extend` + +Defined in: [tempo.type.ts:206](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L206) + +configured Events + +*** + +### isAnchored? + +> `optional` **isAnchored?**: `boolean` + +Defined in: [tempo.type.ts:210](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L210) + +was this a nested/anchored parse? + +*** + +### isMonthDay? + +> `optional` **isMonthDay?**: `boolean` + +Defined in: [tempo.type.ts:201](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L201) + +is a timeZone that prefers 'mmddyyyy' date order + +*** + +### layout + +> **layout**: `Extend` + +Defined in: [tempo.type.ts:204](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L204) + +Tempo layout strings + +*** + +### mdyLayouts + +> **mdyLayouts**: [`Pair`](../../../../type-aliases/Pair.md)[] + +Defined in: [tempo.type.ts:200](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L200) + +Layout names that are switched to mdy + +*** + +### mdyLocales + +> **mdyLocales**: `object`[] + +Defined in: [tempo.type.ts:199](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L199) + +Locales which prefer 'mm-dd-yyyy' date-order + +#### locale + +> **locale**: `string` + +#### timeZones + +> **timeZones**: `string`[] + +*** + +### mode + +> **mode**: `"auto"` \| `"strict"` \| `"defer"` + +Defined in: [tempo.type.ts:211](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L211) + +initialization strategy ('auto'|'strict'|'defer') + +*** + +### pattern + +> **pattern**: [`Registry`](../type-aliases/Registry.md) + +Defined in: [tempo.type.ts:205](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L205) + +Map of regex-patterns to match input-string + +*** + +### period + +> **period**: `Extend` + +Defined in: [tempo.type.ts:207](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L207) + +configured Periods + +*** + +### pivot + +> **pivot**: `number` + +Defined in: [tempo.type.ts:208](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L208) + +pivot year for two-digit years + +*** + +### result + +> **result**: [`Match`](../type-aliases/Match.md)[] + +Defined in: [tempo.type.ts:209](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L209) + +parsing match result + +*** + +### snippet + +> **snippet**: `Extend` + +Defined in: [tempo.type.ts:203](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L203) + +Tempo snippets to aid in parsing + +*** + +### token + +> **token**: `Extend` + +Defined in: [tempo.type.ts:202](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L202) + +Symbol registry diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/PluginContainer.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/PluginContainer.md new file mode 100644 index 00000000..9ced2017 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/PluginContainer.md @@ -0,0 +1,57 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.type.ts:187](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L187) + +internal metadata for a plugin to track installation + +## Extends + +- [`Plugin`](../../../../interfaces/Plugin.md) + +## Properties + +### install + +> **install**: (`this`, `t`) => `void` + +Defined in: [plugin/plugin.type.ts:29](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L29) + +#### Parameters + +##### this + +[`Tempo`](../../../../classes/Tempo.md) + +##### t + +*typeof* [`Tempo`](../../Tempo/README.md) + +#### Returns + +`void` + +#### Inherited from + +[`Plugin`](../../../../interfaces/Plugin.md).[`install`](../../../../interfaces/Plugin.md#install) + +*** + +### installed? + +> `optional` **installed?**: `boolean` + +Defined in: [tempo.type.ts:188](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L188) + +*** + +### name + +> **name**: `string` + +Defined in: [plugin/plugin.type.ts:28](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L28) + +#### Inherited from + +[`Plugin`](../../../../interfaces/Plugin.md).[`name`](../../../../interfaces/Plugin.md#name) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/State.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/State.md new file mode 100644 index 00000000..2973244f --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/State.md @@ -0,0 +1,27 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.type.ts:192](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L192) + +the encapsulated state of a Tempo instance + +## Properties + +### config + +> **config**: [`Config`](Config.md) + +Defined in: [tempo.type.ts:193](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L193) + +current defaults for all Tempo instances + +*** + +### parse + +> **parse**: [`Parse`](Parse.md) + +Defined in: [tempo.type.ts:194](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L194) + +parsing rules diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Match.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Match.md new file mode 100644 index 00000000..fcb2a3a4 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Match.md @@ -0,0 +1,27 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Match** = `object` & `TypeValue`\<`any`\> \| [`MatchExtend`](MatchExtend.md) + +Defined in: [tempo.type.ts:220](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L220) + +## Type Declaration + +### groups? + +> `optional` **groups?**: [`Groups`](../../../../type-aliases/Groups.md) + +groups from the pattern match + +### isAnchored? + +> `optional` **isAnchored?**: `boolean` + +was this a nested/anchored parse? + +### match? + +> `optional` **match?**: `string` + +pattern which matched the input diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/MatchExtend.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/MatchExtend.md new file mode 100644 index 00000000..89cbeaae --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/MatchExtend.md @@ -0,0 +1,25 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **MatchExtend** = `object` + +Defined in: [tempo.type.ts:219](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L219) + +debug a Tempo instantiation + +## Properties + +### type + +> **type**: `"Event"` \| `"Period"` + +Defined in: [tempo.type.ts:219](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L219) + +*** + +### value + +> **value**: `string` \| `number` \| `Function` + +Defined in: [tempo.type.ts:219](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L219) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/OptionsKeep.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/OptionsKeep.md new file mode 100644 index 00000000..aa6764d8 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/OptionsKeep.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **OptionsKeep** = `Omit`\<[`BaseOptions`](../interfaces/BaseOptions.md), `"mdyLocales"` \| `"mdyLayouts"` \| `"pivot"` \| `"snippet"` \| `"layout"` \| `"event"` \| `"period"` \| `"value"`\> + +Defined in: [tempo.type.ts:227](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L227) + +drop the parse-only Options diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md new file mode 100644 index 00000000..8514e45b --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md @@ -0,0 +1,13 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **PatternOption**\<`T`\> = `T` \| `Record`\<`string` \| `symbol`, `T`\> \| [`PatternOptionArray`](PatternOptionArray.md)\<`T`\> + +Defined in: [tempo.type.ts:152](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L152) + +## Type Parameters + +### T + +`T` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOptionArray.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOptionArray.md new file mode 100644 index 00000000..19e5b7d1 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOptionArray.md @@ -0,0 +1,13 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **PatternOptionArray**\<`T`\> = [`PatternOption`](PatternOption.md)\<`T`\>[] + +Defined in: [tempo.type.ts:151](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L151) + +## Type Parameters + +### T + +`T` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Registry.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Registry.md new file mode 100644 index 00000000..74d7de95 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Registry.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Registry** = `Map`\<`symbol`, `RegExp`\> + +Defined in: [tempo.type.ts:150](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L150) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md new file mode 100644 index 00000000..46b43dec --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **TimeStamp** = `"ss"` \| `"ms"` \| `"us"` \| `"ns"` + +Defined in: [tempo.type.ts:184](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L184) + +high-precision precision to measure timestamps (ms | us) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/README.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/README.md new file mode 100644 index 00000000..1a55515f --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/README.md @@ -0,0 +1,209 @@ +[**@magmacomputing/tempo**](../../../README.md) + +*** + +## Interfaces + +- [BaseOptions](interfaces/BaseOptions.md) +- [Params](interfaces/Params.md) + +## Type Aliases + +- [Add](type-aliases/Add.md) +- [COMPASS](type-aliases/COMPASS.md) +- [DateTime](type-aliases/DateTime.md) +- [Duration](type-aliases/Duration.md) +- [DURATION](type-aliases/DURATION-1.md) +- [DURATIONS](type-aliases/DURATIONS.md) +- [Element](type-aliases/Element.md) +- [ELEMENT](type-aliases/ELEMENT-1.md) +- [Extension](type-aliases/Extension.md) +- [Format](type-aliases/Format.md) +- [FormatRegistry](type-aliases/FormatRegistry.md) +- [Formats](type-aliases/Formats.md) +- [FormatType](type-aliases/FormatType.md) +- [Groups](type-aliases/Groups.md) +- [hh](type-aliases/hh.md) +- [Logic](type-aliases/Logic.md) +- [mi](type-aliases/mi.md) +- [mm](type-aliases/mm.md) +- [Modifier](type-aliases/Modifier.md) +- [Module](type-aliases/Module.md) +- [Month](type-aliases/Month.md) +- [MONTH](type-aliases/MONTH-1.md) +- [MONTHS](type-aliases/MONTHS.md) +- [ms](type-aliases/ms.md) +- [Mutate](type-aliases/Mutate.md) +- [ns](type-aliases/ns.md) +- [Options](type-aliases/Options.md) +- [OwnFormat](type-aliases/OwnFormat.md) +- [Pair](type-aliases/Pair.md) +- [Pattern](type-aliases/Pattern.md) +- [PatternOption](type-aliases/PatternOption.md) +- [PatternOptionArray](type-aliases/PatternOptionArray.md) +- [Plugin](type-aliases/Plugin.md) +- [Relative](type-aliases/Relative.md) +- [SEASON](type-aliases/SEASON.md) +- [Set](type-aliases/Set.md) +- [ss](type-aliases/ss.md) +- [TermPlugin](type-aliases/TermPlugin.md) +- [Terms](type-aliases/Terms.md) +- [Unit](type-aliases/Unit.md) +- [Until](type-aliases/Until.md) +- [us](type-aliases/us.md) +- [Weekday](type-aliases/Weekday.md) +- [WEEKDAY](type-aliases/WEEKDAY-1.md) +- [WEEKDAYS](type-aliases/WEEKDAYS.md) +- [ww](type-aliases/ww.md) + +## Variables + +- [tickers](variables/tickers.md) + +## Functions + +- [ticker](functions/ticker.md) + +## Accessors + +### COMPASS + +#### Get Signature + +> **get** **COMPASS**(): `EnumifyType`\<\{ `East`: `"east"`; `North`: `"north"`; `South`: `"south"`; `West`: `"west"`; \}\> + +Defined in: [tempo.class.ts:80](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L80) + +Compass cardinal points + +##### Returns + +`EnumifyType`\<\{ `East`: `"east"`; `North`: `"north"`; `South`: `"south"`; `West`: `"west"`; \}\> + +*** + +### DURATION + +#### Get Signature + +> **get** **DURATION**(): `EnumifyType`\<\{ `day`: `86400`; `hour`: `3600`; `microsecond`: `0.000001`; `millisecond`: `0.001`; `minute`: `60`; `month`: `2628000`; `nanosecond`: `1e-9`; `second`: `1`; `week`: `604800`; `year`: `31536000`; \}\> + +Defined in: [tempo.class.ts:76](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L76) + +Time durations as seconds (singular) + +##### Returns + +`EnumifyType`\<\{ `day`: `86400`; `hour`: `3600`; `microsecond`: `0.000001`; `millisecond`: `0.001`; `minute`: `60`; `month`: `2628000`; `nanosecond`: `1e-9`; `second`: `1`; `week`: `604800`; `year`: `31536000`; \}\> + +*** + +### DURATIONS + +#### Get Signature + +> **get** **DURATIONS**(): `EnumifyType`\<\{ `days`: `86400000`; `hours`: `3600000`; `microseconds`: `0.001`; `milliseconds`: `1`; `minutes`: `60000`; `months`: `2628000000`; `nanoseconds`: `0.000001`; `seconds`: `1000`; `weeks`: `604800000`; `years`: `31536000000`; \}\> + +Defined in: [tempo.class.ts:77](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L77) + +Time durations as milliseconds (plural) + +##### Returns + +`EnumifyType`\<\{ `days`: `86400000`; `hours`: `3600000`; `microseconds`: `0.001`; `milliseconds`: `1`; `minutes`: `60000`; `months`: `2628000000`; `nanoseconds`: `0.000001`; `seconds`: `1000`; `weeks`: `604800000`; `years`: `31536000000`; \}\> + +*** + +### ELEMENT + +#### Get Signature + +> **get** **ELEMENT**(): `EnumifyType`\<\{ `dd`: `"day"`; `hh`: `"hour"`; `mi`: `"minute"`; `mm`: `"month"`; `ms`: `"millisecond"`; `ns`: `"nanosecond"`; `ss`: `"second"`; `us`: `"microsecond"`; `ww`: `"week"`; `yy`: `"year"`; \}\> + +Defined in: [tempo.class.ts:82](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L82) + +Tempo to Temporal DateTime Units map + +##### Returns + +`EnumifyType`\<\{ `dd`: `"day"`; `hh`: `"hour"`; `mi`: `"minute"`; `mm`: `"month"`; `ms`: `"millisecond"`; `ns`: `"nanosecond"`; `ss`: `"second"`; `us`: `"microsecond"`; `ww`: `"week"`; `yy`: `"year"`; \}\> + +*** + +### MONTH + +#### Get Signature + +> **get** **MONTH**(): `EnumifyType`\<`Index`\\> + +Defined in: [tempo.class.ts:74](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L74) + +Month names (short-form) + +##### Returns + +`EnumifyType`\<`Index`\\> + +*** + +### MONTHS + +#### Get Signature + +> **get** **MONTHS**(): `EnumifyType`\<`Index`\\> + +Defined in: [tempo.class.ts:75](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L75) + +Month names (long-form) + +##### Returns + +`EnumifyType`\<`Index`\\> + +*** + +### SEASON + +#### Get Signature + +> **get** **SEASON**(): `EnumifyType`\<\{ `Autumn`: `"autumn"`; `Spring`: `"spring"`; `Summer`: `"summer"`; `Winter`: `"winter"`; \}\> + +Defined in: [tempo.class.ts:79](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L79) + +Quarterly Seasons + +##### Returns + +`EnumifyType`\<\{ `Autumn`: `"autumn"`; `Spring`: `"spring"`; `Summer`: `"summer"`; `Winter`: `"winter"`; \}\> + +*** + +### WEEKDAY + +#### Get Signature + +> **get** **WEEKDAY**(): `EnumifyType`\<`Index`\\> + +Defined in: [tempo.class.ts:72](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L72) + +Weekday names (short-form) + +##### Returns + +`EnumifyType`\<`Index`\\> + +*** + +### WEEKDAYS + +#### Get Signature + +> **get** **WEEKDAYS**(): `EnumifyType`\<`Index`\\> + +Defined in: [tempo.class.ts:73](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L73) + +Weekday names (long-form) + +##### Returns + +`EnumifyType`\<`Index`\\> diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/functions/ticker.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/functions/ticker.md new file mode 100644 index 00000000..9091bcfb --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/functions/ticker.md @@ -0,0 +1,111 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +## Call Signature + +> **ticker**(`interval?`): `Instance` + +Defined in: [plugin/extend/extend.ticker.ts:16](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L16) + +### Parameters + +#### interval? + +`Interval` + +### Returns + +`Instance` + +## Call Signature + +> **ticker**(`options`): `Instance` + +Defined in: [plugin/extend/extend.ticker.ts:17](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L17) + +### Parameters + +#### options + +`Options` + +### Returns + +`Instance` + +## Call Signature + +> **ticker**(`callback`): `Instance` + +Defined in: [plugin/extend/extend.ticker.ts:18](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L18) + +### Parameters + +#### callback + +`Callback` + +### Returns + +`Instance` + +## Call Signature + +> **ticker**(`interval`, `callback`): `Instance` + +Defined in: [plugin/extend/extend.ticker.ts:19](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L19) + +### Parameters + +#### interval + +`Interval` + +#### callback + +`Callback` + +### Returns + +`Instance` + +## Call Signature + +> **ticker**(`options`, `callback`): `Instance` + +Defined in: [plugin/extend/extend.ticker.ts:20](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L20) + +### Parameters + +#### options + +`Options` + +#### callback + +`Callback` + +### Returns + +`Instance` + +## Call Signature + +> **ticker**(`options`, `extraOptions`): `Instance` + +Defined in: [plugin/extend/extend.ticker.ts:21](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L21) + +### Parameters + +#### options + +`Options` + +#### extraOptions + +`Options` + +### Returns + +`Instance` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/BaseOptions.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/BaseOptions.md new file mode 100644 index 00000000..c89bab50 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/BaseOptions.md @@ -0,0 +1,333 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.class.ts:1836](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1836) + +the Options object found in a config-module, or passed to a call to Tempo.init({}) or 'new Tempo({})' + +## Extends + +- [`BaseOptions`](../../Internal/interfaces/BaseOptions.md) + +## Properties + +### calendar + +> **calendar**: `CalendarLike` + +Defined in: [tempo.type.ts:162](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L162) + +Temporal calendar + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`calendar`](../../Internal/interfaces/BaseOptions.md#calendar) + +*** + +### catch + +> **catch**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:159](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L159) + +catch or throw Errors + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`catch`](../../Internal/interfaces/BaseOptions.md#catch) + +*** + +### debug + +> **debug**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:158](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L158) + +additional console.log for tracking + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`debug`](../../Internal/interfaces/BaseOptions.md#debug) + +*** + +### discovery + +> **discovery**: `string` \| `symbol` + +Defined in: [tempo.type.ts:157](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L157) + +globalThis Discovery Symbol + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`discovery`](../../Internal/interfaces/BaseOptions.md#discovery) + +*** + +### event + +> **event**: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> + +Defined in: [tempo.type.ts:174](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L174) + +custom date aliases (events). + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`event`](../../Internal/interfaces/BaseOptions.md#event) + +*** + +### formats + +> **formats**: `Property`\<`any`\> + +Defined in: [tempo.type.ts:176](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L176) + +custom format strings to merge in the FORMAT enum + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`formats`](../../Internal/interfaces/BaseOptions.md#formats) + +*** + +### layout + +> **layout**: [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +Defined in: [tempo.type.ts:173](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L173) + +patterns to help parse value + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`layout`](../../Internal/interfaces/BaseOptions.md#layout) + +*** + +### locale + +> **locale**: `string` + +Defined in: [tempo.type.ts:163](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L163) + +locale (e.g. en-AU) + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`locale`](../../Internal/interfaces/BaseOptions.md#locale) + +*** + +### mdyLayouts + +> **mdyLayouts**: [`Pair`](../../../../type-aliases/Pair.md)[] + +Defined in: [tempo.type.ts:171](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L171) + +swap parse-order of layouts + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`mdyLayouts`](../../Internal/interfaces/BaseOptions.md#mdylayouts) + +*** + +### mdyLocales + +> **mdyLocales**: `string` \| `string`[] + +Defined in: [tempo.type.ts:170](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L170) + +locale-names that prefer 'mm-dd-yy' date order + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`mdyLocales`](../../Internal/interfaces/BaseOptions.md#mdylocales) + +*** + +### mode? + +> `optional` **mode?**: `"auto"` \| `"strict"` \| `"defer"` + +Defined in: [tempo.type.ts:169](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L169) + +initialization strategy ('auto'|'strict'|'defer') + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`mode`](../../Internal/interfaces/BaseOptions.md#mode) + +*** + +### period + +> **period**: [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +Defined in: [tempo.type.ts:175](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L175) + +custom time aliases (periods). + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`period`](../../Internal/interfaces/BaseOptions.md#period) + +*** + +### pivot + +> **pivot**: `number` + +Defined in: [tempo.type.ts:164](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L164) + +pivot year for two-digit years + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`pivot`](../../Internal/interfaces/BaseOptions.md#pivot) + +*** + +### plugins + +> **plugins**: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] + +Defined in: [tempo.type.ts:177](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L177) + +plugins to be automatically extended + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`plugins`](../../Internal/interfaces/BaseOptions.md#plugins) + +*** + +### rtfFormat? + +> `optional` **rtfFormat?**: `RelativeTimeFormat` + +Defined in: [tempo.type.ts:166](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L166) + +Pre-configured relative time formatter + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`rtfFormat`](../../Internal/interfaces/BaseOptions.md#rtfformat) + +*** + +### rtfStyle? + +> `optional` **rtfStyle?**: `RelativeTimeFormatStyle` + +Defined in: [tempo.type.ts:167](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L167) + +Default style for relative time ('long' | 'short' | 'narrow') + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`rtfStyle`](../../Internal/interfaces/BaseOptions.md#rtfstyle) + +*** + +### silent + +> **silent**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:160](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L160) + +suppress console output during catch + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`silent`](../../Internal/interfaces/BaseOptions.md#silent) + +*** + +### snippet + +> **snippet**: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> + +Defined in: [tempo.type.ts:172](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L172) + +date-time snippets to help compose a Layout + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`snippet`](../../Internal/interfaces/BaseOptions.md#snippet) + +*** + +### sphere + +> **sphere**: `"north"` \| `"south"` \| `"east"` \| `"west"` \| `undefined` + +Defined in: [tempo.type.ts:165](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L165) + +hemisphere for term.qtr or term.szn + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`sphere`](../../Internal/interfaces/BaseOptions.md#sphere) + +*** + +### store + +> **store**: `string` + +Defined in: [tempo.type.ts:156](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L156) + +localStorage key + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`store`](../../Internal/interfaces/BaseOptions.md#store) + +*** + +### timeStamp? + +> `optional` **timeStamp?**: [`TimeStamp`](../../Internal/type-aliases/TimeStamp.md) + +Defined in: [tempo.type.ts:168](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L168) + +Precision to measure timestamps (ms | us) + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`timeStamp`](../../Internal/interfaces/BaseOptions.md#timestamp) + +*** + +### timeZone + +> **timeZone**: `TimeZoneLike` + +Defined in: [tempo.type.ts:161](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L161) + +Temporal timeZone + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`timeZone`](../../Internal/interfaces/BaseOptions.md#timezone) + +*** + +### value + +> **value**: [`DateTime`](../../../../type-aliases/DateTime.md) + +Defined in: [tempo.type.ts:178](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L178) + +supplied value to parse + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`value`](../../Internal/interfaces/BaseOptions.md#value) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/Params.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/Params.md new file mode 100644 index 00000000..7d6ec789 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/Params.md @@ -0,0 +1,329 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.class.ts:1887](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1887) + +Type for consistency in expected arguments for helper functions + +## Extends + +- [`Params`](../../../../interfaces/Params.md)\<`T`\> + +## Type Parameters + +### T + +`T` + +## Call Signature + +> **Params**(`tempo?`, `options?`): `T` + +Defined in: [tempo.class.ts:1887](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1887) + +Type for consistency in expected arguments for helper functions + +### Parameters + +#### tempo? + +[`DateTime`](../../../../type-aliases/DateTime.md) + +#### options? + +##### calendar? + +`CalendarLike` + +Temporal calendar + +##### catch? + +`boolean` + +catch or throw Errors + +##### debug? + +`boolean` + +additional console.log for tracking + +##### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +##### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> + +custom date aliases (events). + +##### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +##### layout? + +[`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +##### locale? + +`string` + +locale (e.g. en-AU) + +##### mdyLayouts? + +[`Pair`](../../../../type-aliases/Pair.md)[] + +swap parse-order of layouts + +##### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +##### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +##### period? + +[`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +##### pivot? + +`number` + +pivot year for two-digit years + +##### plugins? + +[`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] + +plugins to be automatically extended + +##### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +##### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +##### silent? + +`boolean` + +suppress console output during catch + +##### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +##### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +##### store? + +`string` + +localStorage key + +##### timeStamp? + +[`TimeStamp`](../../Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +##### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +##### value? + +[`DateTime`](../../../../type-aliases/DateTime.md) + +supplied value to parse + +### Returns + +`T` + +## Call Signature + +> **Params**(`options`): `T` + +Defined in: [tempo.class.ts:1887](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1887) + +Type for consistency in expected arguments for helper functions + +### Parameters + +#### options + +##### calendar? + +`CalendarLike` + +Temporal calendar + +##### catch? + +`boolean` + +catch or throw Errors + +##### debug? + +`boolean` + +additional console.log for tracking + +##### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +##### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> + +custom date aliases (events). + +##### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +##### layout? + +[`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +##### locale? + +`string` + +locale (e.g. en-AU) + +##### mdyLayouts? + +[`Pair`](../../../../type-aliases/Pair.md)[] + +swap parse-order of layouts + +##### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +##### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +##### period? + +[`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +##### pivot? + +`number` + +pivot year for two-digit years + +##### plugins? + +[`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] + +plugins to be automatically extended + +##### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +##### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +##### silent? + +`boolean` + +suppress console output during catch + +##### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +##### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +##### store? + +`string` + +localStorage key + +##### timeStamp? + +[`TimeStamp`](../../Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +##### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +##### value? + +[`DateTime`](../../../../type-aliases/DateTime.md) + +supplied value to parse + +### Returns + +`T` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Add.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Add.md new file mode 100644 index 00000000..2b45e943 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Add.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Add** = [`Add`](../../../../type-aliases/Add.md) + +Defined in: [tempo.class.ts:1849](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1849) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/COMPASS.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/COMPASS.md new file mode 100644 index 00000000..03acc8b0 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/COMPASS.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **COMPASS** = `t.COMPASS` + +Defined in: [tempo.class.ts:80](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L80) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATION-1.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATION-1.md new file mode 100644 index 00000000..590faa82 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATION-1.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **DURATION** = `t.DURATION` + +Defined in: [tempo.class.ts:76](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L76) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATIONS.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATIONS.md new file mode 100644 index 00000000..da1c5a0d --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATIONS.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **DURATIONS** = `t.DURATIONS` + +Defined in: [tempo.class.ts:77](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L77) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DateTime.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DateTime.md new file mode 100644 index 00000000..833443c2 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DateTime.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **DateTime** = [`DateTime`](../../../../type-aliases/DateTime.md) + +Defined in: [tempo.class.ts:1827](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1827) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Duration.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Duration.md new file mode 100644 index 00000000..ee353130 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Duration.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Duration** = [`Duration`](../../../../type-aliases/Duration.md) + +Defined in: [tempo.class.ts:1871](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1871) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ELEMENT-1.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ELEMENT-1.md new file mode 100644 index 00000000..5a407693 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ELEMENT-1.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **ELEMENT** = `t.ELEMENT` + +Defined in: [tempo.class.ts:82](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L82) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Element.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Element.md new file mode 100644 index 00000000..252804f3 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Element.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Element** = [`Element`](../../../../type-aliases/Element.md) + +Defined in: [tempo.class.ts:1885](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1885) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Extension.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Extension.md new file mode 100644 index 00000000..d2bf9caa --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Extension.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Extension** = [`Extension`](../../../../interfaces/Extension.md) + +Defined in: [tempo.class.ts:1842](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1842) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Format.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Format.md new file mode 100644 index 00000000..cc4bae98 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Format.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Format** = [`Format`](../../../../type-aliases/Format.md) + +Defined in: [tempo.class.ts:1853](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1853) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatRegistry.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatRegistry.md new file mode 100644 index 00000000..dc9f1e0c --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatRegistry.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **FormatRegistry** = [`FormatRegistry`](../../../../type-aliases/FormatRegistry.md) + +Defined in: [tempo.class.ts:1854](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1854) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatType.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatType.md new file mode 100644 index 00000000..1f5d0f77 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatType.md @@ -0,0 +1,13 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **FormatType**\<`K`\> = [`FormatType`](../../../../type-aliases/FormatType.md)\<`K`\> + +Defined in: [tempo.class.ts:1855](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1855) + +## Type Parameters + +### K + +`K` *extends* `PropertyKey` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Formats.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Formats.md new file mode 100644 index 00000000..cdd40c6d --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Formats.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Formats** = [`Formats`](../../../../type-aliases/Formats.md) + +Defined in: [tempo.class.ts:1852](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1852) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Groups.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Groups.md new file mode 100644 index 00000000..d6be9e53 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Groups.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Groups** = [`Groups`](../../../../type-aliases/Groups.md) + +Defined in: [tempo.class.ts:1831](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1831) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Logic.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Logic.md new file mode 100644 index 00000000..ba90c374 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Logic.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Logic** = [`Logic`](../../../../type-aliases/Logic.md) + +Defined in: [tempo.class.ts:1829](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1829) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTH-1.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTH-1.md new file mode 100644 index 00000000..400071c6 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTH-1.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **MONTH** = `t.MONTH` + +Defined in: [tempo.class.ts:74](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L74) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTHS.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTHS.md new file mode 100644 index 00000000..531b984c --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTHS.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **MONTHS** = `t.MONTHS` + +Defined in: [tempo.class.ts:75](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L75) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Modifier.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Modifier.md new file mode 100644 index 00000000..93241bd8 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Modifier.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Modifier** = [`Modifier`](../../../../type-aliases/Modifier.md) + +Defined in: [tempo.class.ts:1859](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1859) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Module.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Module.md new file mode 100644 index 00000000..cd8740a2 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Module.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Module** = [`Module`](../../../../interfaces/Module.md) + +Defined in: [tempo.class.ts:1841](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1841) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Month.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Month.md new file mode 100644 index 00000000..d1ff6e17 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Month.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Month** = [`Month`](../../../../type-aliases/Month.md) + +Defined in: [tempo.class.ts:1884](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1884) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Mutate.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Mutate.md new file mode 100644 index 00000000..719ca738 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Mutate.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Mutate** = [`Mutate`](../../../../type-aliases/Mutate.md) + +Defined in: [tempo.class.ts:1847](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1847) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Options.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Options.md new file mode 100644 index 00000000..0ac79253 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Options.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Options** = [`Options`](../../../../type-aliases/Options.md) + +Defined in: [tempo.class.ts:1837](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1837) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/OwnFormat.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/OwnFormat.md new file mode 100644 index 00000000..431356cc --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/OwnFormat.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **OwnFormat** = [`OwnFormat`](../../../../type-aliases/OwnFormat.md) + +Defined in: [tempo.class.ts:1851](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1851) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pair.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pair.md new file mode 100644 index 00000000..91afb29a --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pair.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Pair** = [`Pair`](../../../../type-aliases/Pair.md) + +Defined in: [tempo.class.ts:1830](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1830) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pattern.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pattern.md new file mode 100644 index 00000000..ba7992e6 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pattern.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Pattern** = [`Pattern`](../../../../type-aliases/Pattern.md) + +Defined in: [tempo.class.ts:1828](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1828) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOption.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOption.md new file mode 100644 index 00000000..4444fe41 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOption.md @@ -0,0 +1,13 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **PatternOption**\<`T`\> = [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<`T`\> + +Defined in: [tempo.class.ts:1834](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1834) + +## Type Parameters + +### T + +`T` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOptionArray.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOptionArray.md new file mode 100644 index 00000000..b32a8fa8 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOptionArray.md @@ -0,0 +1,13 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **PatternOptionArray**\<`T`\> = [`PatternOptionArray`](../../Internal/type-aliases/PatternOptionArray.md)\<`T`\> + +Defined in: [tempo.class.ts:1833](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1833) + +## Type Parameters + +### T + +`T` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Plugin.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Plugin.md new file mode 100644 index 00000000..7e3fa99f --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Plugin.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Plugin** = [`Plugin`](../../../../interfaces/Plugin.md) + +Defined in: [tempo.class.ts:1840](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1840) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Relative.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Relative.md new file mode 100644 index 00000000..9fa3f6a2 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Relative.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Relative** = [`Relative`](../../../../type-aliases/Relative.md) + +Defined in: [tempo.class.ts:1860](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1860) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/SEASON.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/SEASON.md new file mode 100644 index 00000000..7d31ad1b --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/SEASON.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **SEASON** = `t.SEASON` + +Defined in: [tempo.class.ts:79](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L79) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Set.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Set.md new file mode 100644 index 00000000..0f3a9eb9 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Set.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Set** = [`Set`](../../../../type-aliases/Set.md) + +Defined in: [tempo.class.ts:1848](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1848) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/TermPlugin.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/TermPlugin.md new file mode 100644 index 00000000..19a41c82 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/TermPlugin.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **TermPlugin** = [`TermPlugin`](../../../../interfaces/TermPlugin.md) + +Defined in: [tempo.class.ts:1839](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1839) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Terms.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Terms.md new file mode 100644 index 00000000..90451a2c --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Terms.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Terms** = [`Terms`](../../../../type-aliases/Terms.md) + +Defined in: [tempo.class.ts:1857](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1857) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Unit.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Unit.md new file mode 100644 index 00000000..a28dc4e4 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Unit.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Unit** = [`Unit`](../../../../type-aliases/Unit.md) + +Defined in: [tempo.class.ts:1845](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1845) + +Configuration to use for #until() and #since() argument diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Until.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Until.md new file mode 100644 index 00000000..89b5ccdf --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Until.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Until** = [`Until`](../../../../type-aliases/Until.md) + +Defined in: [tempo.class.ts:1846](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1846) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAY-1.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAY-1.md new file mode 100644 index 00000000..192d4571 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAY-1.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **WEEKDAY** = `t.WEEKDAY` + +Defined in: [tempo.class.ts:72](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L72) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAYS.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAYS.md new file mode 100644 index 00000000..d9dd9afa --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAYS.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **WEEKDAYS** = `t.WEEKDAYS` + +Defined in: [tempo.class.ts:73](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L73) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Weekday.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Weekday.md new file mode 100644 index 00000000..ae79e9c3 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Weekday.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Weekday** = [`Weekday`](../../../../type-aliases/Weekday.md) + +Defined in: [tempo.class.ts:1883](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1883) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/hh.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/hh.md new file mode 100644 index 00000000..146f29d4 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/hh.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **hh** = [`hh`](../../../../type-aliases/hh.md) + +Defined in: [tempo.class.ts:1863](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1863) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mi.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mi.md new file mode 100644 index 00000000..e762855e --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mi.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **mi** = [`mi`](../../../../type-aliases/mi.md) + +Defined in: [tempo.class.ts:1864](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1864) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mm.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mm.md new file mode 100644 index 00000000..b728cd1e --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mm.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **mm** = [`mm`](../../../../type-aliases/mm.md) + +Defined in: [tempo.class.ts:1862](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1862) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ms.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ms.md new file mode 100644 index 00000000..e9e71eda --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ms.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **ms** = [`ms`](../../../../type-aliases/ms.md) + +Defined in: [tempo.class.ts:1866](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1866) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ns.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ns.md new file mode 100644 index 00000000..7cef821c --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ns.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **ns** = [`ns`](../../../../type-aliases/ns.md) + +Defined in: [tempo.class.ts:1868](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1868) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ss.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ss.md new file mode 100644 index 00000000..4c98a624 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ss.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **ss** = [`ss`](../../../../type-aliases/ss.md) + +Defined in: [tempo.class.ts:1865](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1865) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/us.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/us.md new file mode 100644 index 00000000..dc75d6d0 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/us.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **us** = [`us`](../../../../type-aliases/us.md) + +Defined in: [tempo.class.ts:1867](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1867) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ww.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ww.md new file mode 100644 index 00000000..0125d3e7 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ww.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **ww** = [`ww`](../../../../type-aliases/ww.md) + +Defined in: [tempo.class.ts:1869](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1869) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/variables/tickers.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/variables/tickers.md new file mode 100644 index 00000000..ea19e6c3 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/variables/tickers.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> `const` **tickers**: `Ticker.Snapshot`[] + +Defined in: [plugin/extend/extend.ticker.ts:15](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L15) diff --git a/packages/tempo/doc/api/README.md b/packages/tempo/doc/api/README.md new file mode 100644 index 00000000..d51e9331 --- /dev/null +++ b/packages/tempo/doc/api/README.md @@ -0,0 +1,106 @@ +**@magmacomputing/tempo** + +*** + +## Namespaces + +- [Internal](@magmacomputing/namespaces/Internal/README.md) +- [Tempo](@magmacomputing/namespaces/Tempo/README.md) + +## Classes + +- [Tempo](classes/Tempo.md) + +## Interfaces + +- [Extension](interfaces/Extension.md) +- [Module](interfaces/Module.md) +- [Params](interfaces/Params.md) +- [Plugin](interfaces/Plugin.md) +- [TermPlugin](interfaces/TermPlugin.md) + +## Type Aliases + +- [Add](type-aliases/Add.md) +- [AddUnits](type-aliases/AddUnits.md) +- [BaseDuration](type-aliases/BaseDuration.md) +- [COMPASS](type-aliases/COMPASS.md) +- [DateTime](type-aliases/DateTime.md) +- [DateTimeUnit](type-aliases/DateTimeUnit.md) +- [Duration](type-aliases/Duration.md) +- [DURATION](type-aliases/DURATION-1.md) +- [DURATIONS](type-aliases/DURATIONS.md) +- [Element](type-aliases/Element.md) +- [ELEMENT](type-aliases/ELEMENT-1.md) +- [FlexibleDuration](type-aliases/FlexibleDuration.md) +- [Format](type-aliases/Format.md) +- [FORMAT](type-aliases/FORMAT-1.md) +- [FormatRegistry](type-aliases/FormatRegistry.md) +- [Formats](type-aliases/Formats.md) +- [FormatType](type-aliases/FormatType.md) +- [Groups](type-aliases/Groups.md) +- [hh](type-aliases/hh.md) +- [Logic](type-aliases/Logic.md) +- [mi](type-aliases/mi.md) +- [mm](type-aliases/mm.md) +- [Mode](type-aliases/Mode.md) +- [MODE](type-aliases/MODE-1.md) +- [Modifier](type-aliases/Modifier.md) +- [Month](type-aliases/Month.md) +- [MONTH](type-aliases/MONTH-1.md) +- [MONTHS](type-aliases/MONTHS.md) +- [ms](type-aliases/ms.md) +- [Mutate](type-aliases/Mutate.md) +- [MUTATION](type-aliases/MUTATION.md) +- [ns](type-aliases/ns.md) +- [Number](type-aliases/Number.md) +- [NumericPattern](type-aliases/NumericPattern.md) +- [Options](type-aliases/Options.md) +- [OwnFormat](type-aliases/OwnFormat.md) +- [Pair](type-aliases/Pair.md) +- [Pattern](type-aliases/Pattern.md) +- [Range](type-aliases/Range.md) +- [Relative](type-aliases/Relative.md) +- [ResolvedRange](type-aliases/ResolvedRange.md) +- [SEASON](type-aliases/SEASON.md) +- [Set](type-aliases/Set.md) +- [SetFields](type-aliases/SetFields.md) +- [ss](type-aliases/ss.md) +- [TermOffset](type-aliases/TermOffset.md) +- [Terms](type-aliases/Terms.md) +- [TIMEZONE](type-aliases/TIMEZONE.md) +- [Unit](type-aliases/Unit.md) +- [Units](type-aliases/Units.md) +- [Until](type-aliases/Until.md) +- [us](type-aliases/us.md) +- [Weekday](type-aliases/Weekday.md) +- [WEEKDAY](type-aliases/WEEKDAY-1.md) +- [WEEKDAYS](type-aliases/WEEKDAYS.md) +- [ww](type-aliases/ww.md) +- [ZONED\_DATE\_TIME](type-aliases/ZONED_DATE_TIME.md) + +## Variables + +- [COMPASS](variables/COMPASS.md) +- [DISCOVERY](variables/DISCOVERY.md) +- [DURATION](variables/DURATION.md) +- [DURATIONS](variables/DURATIONS.md) +- [ELEMENT](variables/ELEMENT.md) +- [enums](variables/enums.md) +- [fmtTempo](variables/fmtTempo.md) +- [FORMAT](variables/FORMAT.md) +- [getStamp](variables/getStamp.md) +- [getTempo](variables/getTempo.md) +- [LIMIT](variables/LIMIT.md) +- [MODE](variables/MODE.md) +- [MONTH](variables/MONTH.md) +- [MONTHS](variables/MONTHS.md) +- [MUTATION](variables/MUTATION.md) +- [NUMBER](variables/NUMBER.md) +- [OPTION](variables/OPTION.md) +- [PARSE](variables/PARSE.md) +- [SEASON](variables/SEASON.md) +- [TIMEZONE](variables/TIMEZONE.md) +- [WEEKDAY](variables/WEEKDAY.md) +- [WEEKDAYS](variables/WEEKDAYS.md) +- [ZONED\_DATE\_TIME](variables/ZONED_DATE_TIME.md) diff --git a/packages/tempo/doc/api/classes/Tempo.md b/packages/tempo/doc/api/classes/Tempo.md new file mode 100644 index 00000000..868ef4ac --- /dev/null +++ b/packages/tempo/doc/api/classes/Tempo.md @@ -0,0 +1,4693 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +Defined in: [tempo.class.ts:71](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L71) + +# Tempo +A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects. +Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API. + +## Indexable + +> \[`key`: `symbol`\]: `string` \| `boolean` \| ((`hint?`) => `string` \| `number` \| `bigint`) \| (() => `ArrayIterator`\<`EntryOf`\<`any`\>\>) \| (() => `object`) + +## Constructors + +### Constructor + +> **new Tempo**(`options?`): `Tempo` + +Defined in: [tempo.class.ts:1035](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1035) + +Instantiates a new `Tempo` object with configuration only. + +#### Parameters + +##### options? + +Configuration options for this specific instance. + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +#### Returns + +`Tempo` + +### Constructor + +> **new Tempo**(`tempo`, `options?`): `Tempo` + +Defined in: [tempo.class.ts:1042](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1042) + +Instantiates a new `Tempo` object with a value. + +#### Parameters + +##### tempo + +[`DateTime`](../type-aliases/DateTime.md) + +The date-time value to parse. + +##### options? + +Configuration options for this specific instance. + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +#### Returns + +`Tempo` + +## Accessors + +### \[toStringTag\] + +#### Get Signature + +> **get** **\[toStringTag\]**(): `string` + +Defined in: [tempo.class.ts:1024](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1024) + +##### Returns + +`string` + +*** + +### cal + +#### Get Signature + +> **get** **cal**(): `string` + +Defined in: [tempo.class.ts:1217](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1217) + +Temporal Calendar ID (e.g., 'iso8601' | 'gregory') + +##### Returns + +`string` + +*** + +### config + +#### Get Signature + +> **get** **config**(): [`Config`](../@magmacomputing/namespaces/Internal/interfaces/Config.md) + +Defined in: [tempo.class.ts:1258](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1258) + +current Tempo configuration + +##### Returns + +[`Config`](../@magmacomputing/namespaces/Internal/interfaces/Config.md) + +*** + +### day + +#### Get Signature + +> **get** **day**(): `number` + +Defined in: [tempo.class.ts:1208](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1208) + +Day of the month (alias for `dd`) + +##### Returns + +`number` + +*** + +### dd + +#### Get Signature + +> **get** **dd**(): `number` + +Defined in: [tempo.class.ts:1207](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1207) + +Day of the month (1-31) + +##### Returns + +`number` + +*** + +### dow + +#### Get Signature + +> **get** **dow**(): `0` \| `1` \| `2` \| `3` \| `4` \| `5` \| `6` \| `7` + +Defined in: [tempo.class.ts:1223](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1223) + +ISO weekday number: Mon=1, Sun=7 + +##### Returns + +`0` \| `1` \| `2` \| `3` \| `4` \| `5` \| `6` \| `7` + +*** + +### epoch + +#### Get Signature + +> **get** **epoch**(): `SecureObject`\<\{ `ms`: `number`; `ns`: `bigint`; `ss`: `number`; `us`: `number`; \}\> + +Defined in: [tempo.class.ts:1288](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1288) + +units since epoch + +##### Returns + +`SecureObject`\<\{ `ms`: `number`; `ns`: `bigint`; `ss`: `number`; `us`: `number`; \}\> + +*** + +### ff + +#### Get Signature + +> **get** **ff**(): `number` + +Defined in: [tempo.class.ts:1215](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1215) + +Fractional seconds (e.g., 0.123456789) + +##### Returns + +`number` + +*** + +### fmt + +#### Get Signature + +> **get** **fmt**(): `any` + +Defined in: [tempo.class.ts:1287](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1287) + +Formatted results for all pre-defined format codes + +##### Returns + +`any` + +*** + +### hh + +#### Get Signature + +> **get** **hh**(): [`hh`](../type-aliases/hh.md) + +Defined in: [tempo.class.ts:1209](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1209) + +Hour of the day (0-23) + +##### Returns + +[`hh`](../type-aliases/hh.md) + +*** + +### isValid + +#### Get Signature + +> **get** **isValid**(): `boolean` + +Defined in: [tempo.class.ts:1226](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1226) + +`true` if the underlying date-time is valid. + +##### Returns + +`boolean` + +*** + +### mi + +#### Get Signature + +> **get** **mi**(): [`mi`](../type-aliases/mi.md) + +Defined in: [tempo.class.ts:1210](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1210) + +Minutes of the hour (0-59) + +##### Returns + +[`mi`](../type-aliases/mi.md) + +*** + +### mm + +#### Get Signature + +> **get** **mm**(): [`mm`](../type-aliases/mm.md) + +Defined in: [tempo.class.ts:1205](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1205) + +Month number: Jan=1, Dec=12 + +##### Returns + +[`mm`](../type-aliases/mm.md) + +*** + +### mmm + +#### Get Signature + +> **get** **mmm**(): `"All"` \| `"Jan"` \| `"Feb"` \| `"Mar"` \| `"Apr"` \| `"May"` \| `"Jun"` \| `"Jul"` \| `"Aug"` \| `"Sep"` \| `"Oct"` \| `"Nov"` \| `"Dec"` + +Defined in: [tempo.class.ts:1219](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1219) + +Short month name (e.g., 'Jan') + +##### Returns + +`"All"` \| `"Jan"` \| `"Feb"` \| `"Mar"` \| `"Apr"` \| `"May"` \| `"Jun"` \| `"Jul"` \| `"Aug"` \| `"Sep"` \| `"Oct"` \| `"Nov"` \| `"Dec"` + +*** + +### mon + +#### Get Signature + +> **get** **mon**(): `"May"` \| `"Every"` \| `"January"` \| `"February"` \| `"March"` \| `"April"` \| `"June"` \| `"July"` \| `"August"` \| `"September"` \| `"October"` \| `"November"` \| `"December"` + +Defined in: [tempo.class.ts:1220](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1220) + +Full month name (e.g., 'January') + +##### Returns + +`"May"` \| `"Every"` \| `"January"` \| `"February"` \| `"March"` \| `"April"` \| `"June"` \| `"July"` \| `"August"` \| `"September"` \| `"October"` \| `"November"` \| `"December"` + +*** + +### ms + +#### Get Signature + +> **get** **ms**(): [`ms`](../type-aliases/ms.md) + +Defined in: [tempo.class.ts:1212](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1212) + +Milliseconds of the second (0-999) + +##### Returns + +[`ms`](../type-aliases/ms.md) + +*** + +### nano + +#### Get Signature + +> **get** **nano**(): `bigint` + +Defined in: [tempo.class.ts:1224](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1224) + +Nanoseconds since Unix epoch (BigInt) + +##### Returns + +`bigint` + +*** + +### ns + +#### Get Signature + +> **get** **ns**(): [`ns`](../type-aliases/ns.md) + +Defined in: [tempo.class.ts:1214](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1214) + +Nanoseconds of the microsecond (0-999) + +##### Returns + +[`ns`](../type-aliases/ns.md) + +*** + +### parse + +#### Get Signature + +> **get** **parse**(): [`Parse`](../@magmacomputing/namespaces/Internal/interfaces/Parse.md) + +Defined in: [tempo.class.ts:1281](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1281) + +Instance-specific parse rules (merged with global) + +##### Returns + +[`Parse`](../@magmacomputing/namespaces/Internal/interfaces/Parse.md) + +*** + +### ranges + +#### Get Signature + +> **get** **ranges**(): `Record`\<`string`, `string`\> + +Defined in: [tempo.class.ts:1245](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1245) + +current range key for every registered term + +##### Returns + +`Record`\<`string`, `string`\> + +*** + +### ss + +#### Get Signature + +> **get** **ss**(): [`ss`](../type-aliases/ss.md) + +Defined in: [tempo.class.ts:1211](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1211) + +Seconds of the minute (0-59) + +##### Returns + +[`ss`](../type-aliases/ss.md) + +*** + +### term + +#### Get Signature + +> **get** **term**(): `any` + +Defined in: [tempo.class.ts:1286](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1286) + +Object containing results from all term plugins + +##### Returns + +`any` + +*** + +### terms + +#### Get Signature + +> **get** **terms**(): `Record`\<`string`, `string`[]\> + +Defined in: [tempo.class.ts:1232](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1232) + +list of registered terms and their available range keys + +##### Returns + +`Record`\<`string`, `string`[]\> + +*** + +### ts + +#### Get Signature + +> **get** **ts**(): `number` \| `bigint` + +Defined in: [tempo.class.ts:1218](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1218) + +Unix timestamp (defaults to milliseconds) + +##### Returns + +`number` \| `bigint` + +*** + +### tz + +#### Get Signature + +> **get** **tz**(): `string` + +Defined in: [tempo.class.ts:1216](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1216) + +IANA Time Zone ID (e.g., 'Australia/Sydney') + +##### Returns + +`string` + +*** + +### us + +#### Get Signature + +> **get** **us**(): [`us`](../type-aliases/us.md) + +Defined in: [tempo.class.ts:1213](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1213) + +Microseconds of the millisecond (0-999) + +##### Returns + +[`us`](../type-aliases/us.md) + +*** + +### wkd + +#### Get Signature + +> **get** **wkd**(): `"Everyday"` \| `"Monday"` \| `"Tuesday"` \| `"Wednesday"` \| `"Thursday"` \| `"Friday"` \| `"Saturday"` \| `"Sunday"` + +Defined in: [tempo.class.ts:1222](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1222) + +Full weekday name (e.g., 'Monday') + +##### Returns + +`"Everyday"` \| `"Monday"` \| `"Tuesday"` \| `"Wednesday"` \| `"Thursday"` \| `"Friday"` \| `"Saturday"` \| `"Sunday"` + +*** + +### ww + +#### Get Signature + +> **get** **ww**(): [`ww`](../type-aliases/ww.md) + +Defined in: [tempo.class.ts:1206](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1206) + +ISO week number of the year + +##### Returns + +[`ww`](../type-aliases/ww.md) + +*** + +### www + +#### Get Signature + +> **get** **www**(): `"All"` \| `"Mon"` \| `"Tue"` \| `"Wed"` \| `"Thu"` \| `"Fri"` \| `"Sat"` \| `"Sun"` + +Defined in: [tempo.class.ts:1221](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1221) + +Short weekday name (e.g., 'Mon') + +##### Returns + +`"All"` \| `"Mon"` \| `"Tue"` \| `"Wed"` \| `"Thu"` \| `"Fri"` \| `"Sat"` \| `"Sun"` + +*** + +### yw + +#### Get Signature + +> **get** **yw**(): `number` \| `undefined` + +Defined in: [tempo.class.ts:1204](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1204) + +4-digit ISO week-numbering year + +##### Returns + +`number` \| `undefined` + +*** + +### yy + +#### Get Signature + +> **get** **yy**(): `number` + +Defined in: [tempo.class.ts:1203](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1203) + +4-digit year (e.g., 2024) + +##### Returns + +`number` + +*** + +### config + +#### Get Signature + +> **get** `static` **config**(): `any` + +Defined in: [tempo.class.ts:860](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L860) + +global Tempo configuration + +##### Returns + +`any` + +*** + +### default + +#### Get Signature + +> **get** `static` **default**(): `Readonly`\<\{ `calendar?`: `string` \| `SecureObject`\<`ZonedDateTime`\> \| `SecureObject`\<`PlainDate`\> \| `SecureObject`\<`PlainDateTime`\> \| `SecureObject`\<`PlainMonthDay`\> \| `SecureObject`\<`PlainYearMonth`\>; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: [`Logic`](../type-aliases/Logic.md) \| `SecureObject`\<`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\>\> \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Logic`](../type-aliases/Logic.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>\>; `formats?`: `SecureObject`\<`Property`\<`any`\>\>; `layout?`: [`Pattern`](../type-aliases/Pattern.md) \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureObject`\<`Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>\>; `locale?`: `string`; `mdyLayouts?`: `SecureArray`\<[`Pair`](../type-aliases/Pair.md)\>; `mdyLocales?`: `string` \| `SecureArray`\<`string`\>; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`Logic`](../type-aliases/Logic.md) \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Logic`](../type-aliases/Logic.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>\> \| `SecureObject`\<`Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>\>; `pivot?`: `number`; `plugins?`: `SecureObject`\<[`Plugin`](../interfaces/Plugin.md)\> \| `SecureArray`\<[`Plugin`](../interfaces/Plugin.md)\>; `rtfFormat?`: `SecureObject`\<`RelativeTimeFormat`\>; `rtfStyle?`: `RelativeTimeFormatStyle`; `scope`: `"default"`; `silent?`: `boolean`; `snippet?`: [`Pattern`](../type-aliases/Pattern.md) \| `SecureObject`\<`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\>\> \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md); `timeZone`: `string` \| `SecureObject`\<`ZonedDateTime`\>; `value?`: `string` \| `number` \| `bigint` \| `Date` \| `SecureObject`\<`ZonedDateTime`\> \| `SecureObject`\<`PlainDate`\> \| `SecureObject`\<`PlainDateTime`\> \| `SecureObject`\<`Tempo`\> \| `SecureObject`\<`Instant`\> \| `SecureObject`\<`PlainTime`\> \| `SecureObject`\<`Duration`\> \| `SecureObject`\<`ZonedDateTimeLikeObject`\> \| `null`; \}\> + +Defined in: [tempo.class.ts:923](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L923) + +Tempo initial default settings + +##### Returns + +`Readonly`\<\{ `calendar?`: `string` \| `SecureObject`\<`ZonedDateTime`\> \| `SecureObject`\<`PlainDate`\> \| `SecureObject`\<`PlainDateTime`\> \| `SecureObject`\<`PlainMonthDay`\> \| `SecureObject`\<`PlainYearMonth`\>; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: [`Logic`](../type-aliases/Logic.md) \| `SecureObject`\<`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\>\> \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Logic`](../type-aliases/Logic.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>\>; `formats?`: `SecureObject`\<`Property`\<`any`\>\>; `layout?`: [`Pattern`](../type-aliases/Pattern.md) \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureObject`\<`Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>\>; `locale?`: `string`; `mdyLayouts?`: `SecureArray`\<[`Pair`](../type-aliases/Pair.md)\>; `mdyLocales?`: `string` \| `SecureArray`\<`string`\>; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`Logic`](../type-aliases/Logic.md) \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Logic`](../type-aliases/Logic.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>\> \| `SecureObject`\<`Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>\>; `pivot?`: `number`; `plugins?`: `SecureObject`\<[`Plugin`](../interfaces/Plugin.md)\> \| `SecureArray`\<[`Plugin`](../interfaces/Plugin.md)\>; `rtfFormat?`: `SecureObject`\<`RelativeTimeFormat`\>; `rtfStyle?`: `RelativeTimeFormatStyle`; `scope`: `"default"`; `silent?`: `boolean`; `snippet?`: [`Pattern`](../type-aliases/Pattern.md) \| `SecureObject`\<`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\>\> \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md); `timeZone`: `string` \| `SecureObject`\<`ZonedDateTime`\>; `value?`: `string` \| `number` \| `bigint` \| `Date` \| `SecureObject`\<`ZonedDateTime`\> \| `SecureObject`\<`PlainDate`\> \| `SecureObject`\<`PlainDateTime`\> \| `SecureObject`\<`Tempo`\> \| `SecureObject`\<`Instant`\> \| `SecureObject`\<`PlainTime`\> \| `SecureObject`\<`Duration`\> \| `SecureObject`\<`ZonedDateTimeLikeObject`\> \| `null`; \}\> + +*** + +### discovery + +#### Get Signature + +> **get** `static` **discovery**(): `any` + +Defined in: [tempo.class.ts:876](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L876) + +global discovery configuration + +##### Returns + +`any` + +*** + +### FORMAT + +#### Get Signature + +> **get** `static` **FORMAT**(): `EnumifyType`\<\{ `date`: `"{yyyy}-{mm}-{dd}"`; `dayDate`: `"{dd}-{mmm}-{yyyy}"`; `dayMonth`: `"{dd}-{mmm}"`; `dayTime`: `"{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}"`; `display`: `"{www}, {dd} {mmm} {yyyy}"`; `logStamp`: `"{yyyy}{mm}{dd}T{hhmiss}.{ff}"`; `sortTime`: `"{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}"`; `time`: `"{hh}:{mi}:{ss}"`; `weekDate`: `"{www}, {yyyy}-{mmm}-{dd}"`; `weekStamp`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}"`; `weekTime`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"`; `yearMonth`: `"{yyyy}{mm}"`; `yearMonthDay`: `"{yyyy}{mm}{dd}"`; `yearWeek`: `"{yw}{ww}"`; \}\> + +Defined in: [tempo.class.ts:83](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L83) + +Pre-configured format {name -> string} pairs + +##### Returns + +`EnumifyType`\<\{ `date`: `"{yyyy}-{mm}-{dd}"`; `dayDate`: `"{dd}-{mmm}-{yyyy}"`; `dayMonth`: `"{dd}-{mmm}"`; `dayTime`: `"{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}"`; `display`: `"{www}, {dd} {mmm} {yyyy}"`; `logStamp`: `"{yyyy}{mm}{dd}T{hhmiss}.{ff}"`; `sortTime`: `"{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}"`; `time`: `"{hh}:{mi}:{ss}"`; `weekDate`: `"{www}, {yyyy}-{mmm}-{dd}"`; `weekStamp`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}"`; `weekTime`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"`; `yearMonth`: `"{yyyy}{mm}"`; `yearMonthDay`: `"{yyyy}{mm}{dd}"`; `yearWeek`: `"{yw}{ww}"`; \}\> + +*** + +### formats + +#### Get Signature + +> **get** `static` **formats**(): `any` + +Defined in: [tempo.class.ts:912](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L912) + +static Tempo.formats (registry) + +##### Returns + +`any` + +*** + +### instant + +#### Get Signature + +> **get** `static` **instant**(): `Instant` + +Defined in: [tempo.class.ts:895](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L895) + +get the current system Instant + +##### Returns + +`Instant` + +*** + +### LIMIT + +#### Get Signature + +> **get** `static` **LIMIT**(): `object` + +Defined in: [tempo.class.ts:87](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L87) + +some useful Dates + +##### Returns + +###### maxTempo + +###### Get Signature + +> **get** **maxTempo**(): `bigint` + +Tempo(31-Dec-9999.23:59:59).ns + +###### Returns + +`bigint` + +###### minTempo + +###### Get Signature + +> **get** **minTempo**(): `bigint` + +Tempo(01-Jan-1000.00:00:00).ns + +###### Returns + +`bigint` + +*** + +### MODE + +#### Get Signature + +> **get** `static` **MODE**(): `EnumifyType`\<\{ `Auto`: `"auto"`; `Defer`: `"defer"`; `Strict`: `"strict"`; \}\> + +Defined in: [tempo.class.ts:86](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L86) + +initialization strategies + +##### Returns + +`EnumifyType`\<\{ `Auto`: `"auto"`; `Defer`: `"defer"`; `Strict`: `"strict"`; \}\> + +*** + +### NUMBER + +#### Get Signature + +> **get** `static` **NUMBER**(): `EnumifyType`\<\{ `eight`: `8`; `five`: `5`; `four`: `4`; `nine`: `9`; `one`: `1`; `seven`: `7`; `six`: `6`; `ten`: `10`; `three`: `3`; `two`: `2`; `zero`: `0`; \}\> + +Defined in: [tempo.class.ts:84](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L84) + +Number names (0-10) + +##### Returns + +`EnumifyType`\<\{ `eight`: `8`; `five`: `5`; `four`: `4`; `nine`: `9`; `one`: `1`; `seven`: `7`; `six`: `6`; `ten`: `10`; `three`: `3`; `two`: `2`; `zero`: `0`; \}\> + +*** + +### options + +#### Get Signature + +> **get** `static` **options**(): `any` + +Defined in: [tempo.class.ts:882](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L882) + +##### Returns + +`any` + +*** + +### parse + +#### Get Signature + +> **get** `static` **parse**(): [`Parse`](../@magmacomputing/namespaces/Internal/interfaces/Parse.md) + +Defined in: [tempo.class.ts:930](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L930) + +configuration governing the static 'rules' used when parsing t.DateTime argument + +##### Returns + +[`Parse`](../@magmacomputing/namespaces/Internal/interfaces/Parse.md) + +*** + +### properties + +#### Get Signature + +> **get** `static` **properties**(): `SecureArray`\<`string`\> + +Defined in: [tempo.class.ts:917](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L917) + +static Tempo properties getter + +##### Returns + +`SecureArray`\<`string`\> + +*** + +### terms + +#### Get Signature + +> **get** `static` **terms**(): `SecureArray`\<`Omit`\<[`TermPlugin`](../interfaces/TermPlugin.md), `"define"` \| `"resolve"`\>\> & `Record`\<`string`, `Omit`\<[`TermPlugin`](../interfaces/TermPlugin.md), `"define"` \| `"resolve"`\>\> + +Defined in: [tempo.class.ts:898](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L898) + +static Tempo.terms (registry) + +##### Returns + +`SecureArray`\<`Omit`\<[`TermPlugin`](../interfaces/TermPlugin.md), `"define"` \| `"resolve"`\>\> & `Record`\<`string`, `Omit`\<[`TermPlugin`](../interfaces/TermPlugin.md), `"define"` \| `"resolve"`\>\> + +*** + +### TIMEZONE + +#### Get Signature + +> **get** `static` **TIMEZONE**(): `object` + +Defined in: [tempo.class.ts:85](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L85) + +TimeZone aliases + +##### Returns + +`object` + +###### acst + +> `readonly` **acst**: `"Australia/Adelaide"` = `'Australia/Adelaide'` + +###### aest + +> `readonly` **aest**: `"Australia/Sydney"` = `'Australia/Sydney'` + +###### awst + +> `readonly` **awst**: `"Australia/Perth"` = `'Australia/Perth'` + +###### cet + +> `readonly` **cet**: `"Europe/Paris"` = `'Europe/Paris'` + +###### cst + +> `readonly` **cst**: `"America/Chicago"` = `'America/Chicago'` + +###### eet + +> `readonly` **eet**: `"Europe/Helsinki"` = `'Europe/Helsinki'` + +###### est + +> `readonly` **est**: `"America/New_York"` = `'America/New_York'` + +###### gmt + +> `readonly` **gmt**: `"Europe/London"` = `'Europe/London'` + +###### ist + +> `readonly` **ist**: `"Asia/Kolkata"` = `'Asia/Kolkata'` + +###### jst + +> `readonly` **jst**: `"Asia/Tokyo"` = `'Asia/Tokyo'` + +###### mst + +> `readonly` **mst**: `"America/Denver"` = `'America/Denver'` + +###### npt + +> `readonly` **npt**: `"Asia/Kathmandu"` = `'Asia/Kathmandu'` + +###### nzt + +> `readonly` **nzt**: `"Pacific/Auckland"` = `'Pacific/Auckland'` + +###### pst + +> `readonly` **pst**: `"America/Los_Angeles"` = `'America/Los_Angeles'` + +###### utc + +> `readonly` **utc**: `"UTC"` = `'UTC'` + +## Methods + +### \[iterator\]() + +> **\[iterator\]**(): `ArrayIterator`\<`EntryOf`\<`any`\>\> + +Defined in: [tempo.class.ts:1020](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1020) + +iterate over instance formats + +#### Returns + +`ArrayIterator`\<`EntryOf`\<`any`\>\> + +*** + +### \[toPrimitive\]() + +> **\[toPrimitive\]**(`hint?`): `string` \| `number` \| `bigint` + +Defined in: [tempo.class.ts:1011](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1011) + +allow for auto-convert of Tempo to BigInt, Number or String + +#### Parameters + +##### hint? + +`"string"` \| `"number"` \| `"default"` + +#### Returns + +`string` \| `number` \| `bigint` + +*** + +### add() + +> **add**(`tempo?`, `options?`): `Tempo` + +Defined in: [tempo.class.ts:1321](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1321) + +returns a new `Tempo` with specific duration added. + +#### Parameters + +##### tempo? + +[`Add`](../type-aliases/Add.md) + +##### options? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +#### Returns + +`Tempo` + +*** + +### clone() + +> **clone**(): `Tempo` + +Defined in: [tempo.class.ts:1323](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1323) + +returns a clone of the current `Tempo` instance. + +#### Returns + +`Tempo` + +*** + +### format() + +#### Call Signature + +> **format**\<`K`\>(`fmt`): `any` + +Defined in: [tempo.class.ts:1305](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1305) + +##### Type Parameters + +###### K + +`K` *extends* `Format` + +##### Parameters + +###### fmt + +`K` + +##### Returns + +`any` + +#### Call Signature + +> **format**(`fmt`): `any` + +Defined in: [plugin/module/module.format.ts:12](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.format.ts#L12) + +applies a format to the instance. + +##### Parameters + +###### fmt + +`any` + +##### Returns + +`any` + +*** + +### set() + +> **set**(`tempo?`, `options?`): `Tempo` + +Defined in: [tempo.class.ts:1322](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1322) + +returns a new `Tempo` with specific offsets. + +#### Parameters + +##### tempo? + +[`Set`](../type-aliases/Set.md) + +##### options? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +#### Returns + +`Tempo` + +*** + +### since() + +#### Call Signature + +> **since**(...`args`): `any` + +Defined in: [tempo.class.ts:1316](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1316) + +time elapsed since another date-time + +##### Parameters + +###### args + +...`any`[] + +##### Returns + +`any` + +#### Call Signature + +> **since**(`until`, `opts?`): `string` + +Defined in: [plugin/module/module.duration.ts:18](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L18) + +time elapsed since (with unit) + +##### Parameters + +###### until + +[`Until`](../type-aliases/Until.md) + +###### opts? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +`string` + +#### Call Signature + +> **since**(`dateTimeOrOpts`, `until`): `string` + +Defined in: [plugin/module/module.duration.ts:19](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L19) + +time elapsed since another date-time (with unit) + +##### Parameters + +###### dateTimeOrOpts + +[`DateTime`](../type-aliases/DateTime.md) \| \{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +[`DateTime`](../type-aliases/DateTime.md) + +*** + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +CalendarLike \| undefined + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +RelativeTimeFormatStyle \| undefined + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +TimeStamp \| undefined + +Precision to measure timestamps (ms | us) + +###### timeZone? + +TimeZoneLike \| undefined + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +###### until + +[`Until`](../type-aliases/Until.md) + +##### Returns + +`string` + +#### Call Signature + +> **since**(`dateTimeOrOpts?`, `opts?`): `string` + +Defined in: [plugin/module/module.duration.ts:20](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L20) + +time elapsed since another date-time (w'out unit) + +##### Parameters + +###### dateTimeOrOpts? + +[`DateTime`](../type-aliases/DateTime.md) \| \{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +[`DateTime`](../type-aliases/DateTime.md) + +*** + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +CalendarLike \| undefined + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +RelativeTimeFormatStyle \| undefined + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +TimeStamp \| undefined + +Precision to measure timestamps (ms | us) + +###### timeZone? + +TimeZoneLike \| undefined + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +###### opts? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +`string` + +#### Call Signature + +> **since**(`optsOrDate?`, `optsOrUntil?`): `string` + +Defined in: [plugin/module/module.duration.ts:21](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L21) + +time elapsed since another date-time + +##### Parameters + +###### optsOrDate? + +`any` + +###### optsOrUntil? + +`any` + +##### Returns + +`string` + +*** + +### toDate() + +> **toDate**(): `Date` + +Defined in: [tempo.class.ts:1341](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1341) + +the date-time as a standard `Date` object. + +#### Returns + +`Date` + +*** + +### toDateTime() + +> **toDateTime**(): `ZonedDateTime` + +Defined in: [tempo.class.ts:1326](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1326) + +returns the underlying Temporal.ZonedDateTime + +#### Returns + +`ZonedDateTime` + +*** + +### toInstant() + +> **toInstant**(): `Instant` + +Defined in: [tempo.class.ts:1338](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1338) + +returns the underlying Temporal.Instant + +#### Returns + +`Instant` + +*** + +### toJSON() + +> **toJSON**(): `object` + +Defined in: [tempo.class.ts:1350](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1350) + +Custom JSON serialization for `JSON.stringify`. + +#### Returns + +##### calendar + +> **calendar**: `CalendarLike` + +Temporal calendar + +##### catch + +> **catch**: `boolean` \| `undefined` + +catch or throw Errors + +##### debug + +> **debug**: `boolean` \| `undefined` + +additional console.log for tracking + +##### discovery + +> **discovery**: `string` \| `symbol` + +globalThis Discovery Symbol + +##### formats + +> **formats**: `EnumifyType` + +pre-configured format strings + +##### locale + +> **locale**: `string` + +locale (e.g. en-AU) + +##### mode + +> **mode**: `"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +##### plugins + +> **plugins**: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +##### rtfFormat + +> **rtfFormat**: `RelativeTimeFormat` + +Pre-configured relative time formatter + +##### rtfStyle + +> **rtfStyle**: `RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +##### scope + +> **scope**: `"global"` \| `"local"` + +configuration (global | local) + +##### silent + +> **silent**: `boolean` \| `undefined` + +suppress console output during catch + +##### sphere + +> **sphere**: `"north"` \| `"south"` \| `"east"` \| `"west"` \| `undefined` + +hemisphere for term.qtr or term.szn + +##### store + +> **store**: `string` + +localStorage key + +##### timeStamp + +> **timeStamp**: [`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +##### timeZone + +> **timeZone**: `TimeZoneLike` + +Temporal timeZone + +##### value + +> **value**: `string` + +*** + +### toNow() + +> **toNow**(): `ZonedDateTime` + +Defined in: [tempo.class.ts:1340](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1340) + +the current system time localized to this instance. + +#### Returns + +`ZonedDateTime` + +*** + +### toPlainDate() + +> **toPlainDate**(): `PlainDate` + +Defined in: [tempo.class.ts:1335](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1335) + +returns a Temporal.PlainDate representation + +#### Returns + +`PlainDate` + +*** + +### toPlainDateTime() + +> **toPlainDateTime**(): `PlainDateTime` + +Defined in: [tempo.class.ts:1337](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1337) + +returns a Temporal.PlainDateTime representation + +#### Returns + +`PlainDateTime` + +*** + +### toPlainTime() + +> **toPlainTime**(): `PlainTime` + +Defined in: [tempo.class.ts:1336](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1336) + +returns a Temporal.PlainTime representation + +#### Returns + +`PlainTime` + +*** + +### toString() + +> **toString**(): `string` + +Defined in: [tempo.class.ts:1343](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1343) + +ISO8601 string representation of the date-time. + +#### Returns + +`string` + +*** + +### until() + +#### Call Signature + +> **until**(...`args`): `any` + +Defined in: [tempo.class.ts:1311](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1311) + +time duration until another date-time + +##### Parameters + +###### args + +...`any`[] + +##### Returns + +`any` + +#### Call Signature + +> **until**(`dateTimeOrOpts?`, `opts?`): [`Duration`](../type-aliases/Duration.md) + +Defined in: [plugin/module/module.duration.ts:13](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L13) + +time duration until (returns Duration) + +##### Parameters + +###### dateTimeOrOpts? + +[`DateTime`](../type-aliases/DateTime.md) \| \{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +[`DateTime`](../type-aliases/DateTime.md) + +*** + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +CalendarLike \| undefined + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +RelativeTimeFormatStyle \| undefined + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +TimeStamp \| undefined + +Precision to measure timestamps (ms | us) + +###### timeZone? + +TimeZoneLike \| undefined + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +###### opts? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +[`Duration`](../type-aliases/Duration.md) + +#### Call Signature + +> **until**(`unit`, `opts?`): `number` + +Defined in: [plugin/module/module.duration.ts:14](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L14) + +time duration until (with unit, returns number) + +##### Parameters + +###### unit + +[`Unit`](../type-aliases/Unit.md) + +###### opts? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +`number` + +#### Call Signature + +> **until**(`dateTimeOrOpts`, `unit`): `number` + +Defined in: [plugin/module/module.duration.ts:15](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L15) + +time duration until another date-time (with unit ) + +##### Parameters + +###### dateTimeOrOpts + +[`DateTime`](../type-aliases/DateTime.md) \| \{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +[`DateTime`](../type-aliases/DateTime.md) + +*** + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +CalendarLike \| undefined + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +RelativeTimeFormatStyle \| undefined + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +TimeStamp \| undefined + +Precision to measure timestamps (ms | us) + +###### timeZone? + +TimeZoneLike \| undefined + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +###### unit + +[`Unit`](../type-aliases/Unit.md) + +##### Returns + +`number` + +#### Call Signature + +> **until**(`optsOrDate?`, `optsOrUntil?`): `number` \| [`Duration`](../type-aliases/Duration.md) + +Defined in: [plugin/module/module.duration.ts:16](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L16) + +fallback: union of possible returns + +##### Parameters + +###### optsOrDate? + +`string` \| `number` \| `bigint` \| `Tempo` \| `Instant` \| `ZonedDateTime` \| `Date` \| `PlainDate` \| `PlainTime` \| `PlainDateTime` \| `Duration` \| `ZonedDateTimeLikeObject` \| \{\[`key`: `string`\]: `any`; `calendar?`: `CalendarLike`; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>; `formats?`: `Property`\<`any`\>; `layout?`: [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: `RelativeTimeFormatStyle`; `silent?`: `boolean`; `snippet?`: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md); `timeZone?`: `TimeZoneLike`; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} \| `object` & `object` \| `null` + +`string` + +*** + +`number` + +*** + +`bigint` + +*** + +`Tempo` + +*** + +`Instant` + +*** + +`ZonedDateTime` + +*** + +`Date` + +*** + +`PlainDate` + +*** + +`PlainTime` + +*** + +`PlainDateTime` + +*** + +`Duration` + +*** + +`ZonedDateTimeLikeObject` + +*** + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: `CalendarLike`; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>; `formats?`: `Property`\<`any`\>; `layout?`: [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: `RelativeTimeFormatStyle`; `silent?`: `boolean`; `snippet?`: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md); `timeZone?`: `TimeZoneLike`; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +*** + +`object` & `object` + +*** + +`null` + +###### optsOrUntil? + +[`Until`](../type-aliases/Until.md) \| \{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +[`Until`](../type-aliases/Until.md) + +*** + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +CalendarLike \| undefined + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +RelativeTimeFormatStyle \| undefined + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +TimeStamp \| undefined + +Precision to measure timestamps (ms | us) + +###### timeZone? + +TimeZoneLike \| undefined + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +`number` \| [`Duration`](../type-aliases/Duration.md) + +*** + +### \[dispose\]() + +> `static` **\[dispose\]**(): `void` + +Defined in: [tempo.class.ts:949](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L949) + +release global config and reset library to defaults + +#### Returns + +`void` + +*** + +### \[hasInstance\]() + +> `static` **\[hasInstance\]**(`instance`): `boolean` + +Defined in: [tempo.class.ts:953](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L953) + +#### Parameters + +##### instance + +`any` + +#### Returns + +`boolean` + +*** + +### \[iterator\]() + +> `static` **\[iterator\]**(): `ArrayIterator`\<`string`\> + +Defined in: [tempo.class.ts:944](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L944) + +iterate over Tempo properties + +#### Returns + +`ArrayIterator`\<`string`\> + +*** + +### compare() + +> `static` **compare**(`tempo1?`, `tempo2?`): `number` + +Defined in: [tempo.class.ts:853](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L853) + +Compares two `Tempo` instances or date-time values. + +#### Parameters + +##### tempo1? + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} \| [`DateTime`](../type-aliases/DateTime.md) + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +CalendarLike \| undefined + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +RelativeTimeFormatStyle \| undefined + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +TimeStamp \| undefined + +Precision to measure timestamps (ms | us) + +###### timeZone? + +TimeZoneLike \| undefined + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +*** + +[`DateTime`](../type-aliases/DateTime.md) + +##### tempo2? + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} \| [`DateTime`](../type-aliases/DateTime.md) + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +CalendarLike \| undefined + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +RelativeTimeFormatStyle \| undefined + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +TimeStamp \| undefined + +Precision to measure timestamps (ms | us) + +###### timeZone? + +TimeZoneLike \| undefined + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +*** + +[`DateTime`](../type-aliases/DateTime.md) + +#### Returns + +`number` + +*** + +### duration() + +> `static` **duration**(`input`): [`Duration`](../type-aliases/Duration.md) + +Defined in: [tempo.class.ts:775](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L775) + +returns a full Tempo Duration object (EDO) for the given input + +#### Parameters + +##### input + +`any` + +#### Returns + +[`Duration`](../type-aliases/Duration.md) + +*** + +### extend() + +#### Call Signature + +> `static` **extend**(`plugin`, `options?`): *typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +Defined in: [tempo.class.ts:588](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L588) + +Register a plugin or term extension. + +##### Parameters + +###### plugin + +[`Plugin`](../interfaces/Plugin.md) + +A plugin or term extension to register. + +###### options? + +Optional configuration for the plugin. + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +#### Call Signature + +> `static` **extend**(`plugins`, `options?`): *typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +Defined in: [tempo.class.ts:595](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L595) + +Register an array of plugins or term extensions. + +##### Parameters + +###### plugins + +`any`[] + +An array of plugins, terms, or extensions to register. + +###### options? + +Optional configuration for the plugins. + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +#### Call Signature + +> `static` **extend**(...`args`): *typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +Defined in: [tempo.class.ts:601](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L601) + +Register multiple plugins or term extensions. + +##### Parameters + +###### args + +...`any`[] + +A plugin, term, or list of extensions to register. + +##### Returns + +*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +*** + +### from() + +#### Call Signature + +> `static` **from**(`options?`): `Tempo` + +Defined in: [tempo.class.ts:889](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L889) + +Creates a new `Tempo` instance. + +##### Parameters + +###### options? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +`Tempo` + +#### Call Signature + +> `static` **from**(`tempo`, `options?`): `Tempo` + +Defined in: [tempo.class.ts:890](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L890) + +Creates a new `Tempo` instance. + +##### Parameters + +###### tempo + +[`DateTime`](../type-aliases/DateTime.md) + +###### options? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +`Tempo` + +*** + +### init() + +> `static` **init**(`options?`): *typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +Defined in: [tempo.class.ts:704](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L704) + +Reset Tempo to its default, built-in registration state + +#### Parameters + +##### options? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +#### Returns + +*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +*** + +### isTempo() + +> `static` **isTempo**(`instance?`): `instance is Tempo` + +Defined in: [tempo.class.ts:958](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L958) + +check if a supplied variable is a valid Tempo instance + +#### Parameters + +##### instance? + +`any` + +#### Returns + +`instance is Tempo` + +*** + +### now() + +> `static` **now**(): `bigint` + +Defined in: [tempo.class.ts:893](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L893) + +#### Returns + +`bigint` diff --git a/packages/tempo/doc/api/interfaces/Extension.md b/packages/tempo/doc/api/interfaces/Extension.md new file mode 100644 index 00000000..adf81f41 --- /dev/null +++ b/packages/tempo/doc/api/interfaces/Extension.md @@ -0,0 +1,54 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +Defined in: [plugin/plugin.type.ts:44](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L44) + +## Extension +Type for Extension plugins. + +## Extends + +- [`Plugin`](Plugin.md) + +## Indexable + +> \[`key`: `string`\]: `any` + +## Properties + +### install + +> **install**: (`this`, `t`) => `void` + +Defined in: [plugin/plugin.type.ts:29](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L29) + +#### Parameters + +##### this + +[`Tempo`](../classes/Tempo.md) + +##### t + +*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +#### Returns + +`void` + +#### Inherited from + +[`Plugin`](Plugin.md).[`install`](Plugin.md#install) + +*** + +### name + +> **name**: `string` + +Defined in: [plugin/plugin.type.ts:28](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L28) + +#### Inherited from + +[`Plugin`](Plugin.md).[`name`](Plugin.md#name) diff --git a/packages/tempo/doc/api/interfaces/Module.md b/packages/tempo/doc/api/interfaces/Module.md new file mode 100644 index 00000000..65120196 --- /dev/null +++ b/packages/tempo/doc/api/interfaces/Module.md @@ -0,0 +1,54 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +Defined in: [plugin/plugin.type.ts:36](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L36) + +## Module +Type for Module plugins. + +## Extends + +- [`Plugin`](Plugin.md) + +## Indexable + +> \[`key`: `string`\]: `any` + +## Properties + +### install + +> **install**: (`this`, `t`) => `void` + +Defined in: [plugin/plugin.type.ts:29](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L29) + +#### Parameters + +##### this + +[`Tempo`](../classes/Tempo.md) + +##### t + +*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +#### Returns + +`void` + +#### Inherited from + +[`Plugin`](Plugin.md).[`install`](Plugin.md#install) + +*** + +### name + +> **name**: `string` + +Defined in: [plugin/plugin.type.ts:28](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L28) + +#### Inherited from + +[`Plugin`](Plugin.md).[`name`](Plugin.md#name) diff --git a/packages/tempo/doc/api/interfaces/Params.md b/packages/tempo/doc/api/interfaces/Params.md new file mode 100644 index 00000000..00f3be09 --- /dev/null +++ b/packages/tempo/doc/api/interfaces/Params.md @@ -0,0 +1,329 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +Defined in: [tempo.type.ts:144](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L144) + +Type for consistency in expected arguments for helper functions + +## Extended by + +- [`Params`](../@magmacomputing/namespaces/Tempo/interfaces/Params.md) + +## Type Parameters + +### T + +`T` + +## Call Signature + +> **Params**(`tempo?`, `options?`): `T` + +Defined in: [tempo.type.ts:145](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L145) + +Type for consistency in expected arguments for helper functions + +### Parameters + +#### tempo? + +[`DateTime`](../type-aliases/DateTime.md) + +#### options? + +##### calendar? + +`CalendarLike` + +Temporal calendar + +##### catch? + +`boolean` + +catch or throw Errors + +##### debug? + +`boolean` + +additional console.log for tracking + +##### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +##### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +##### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +##### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +##### locale? + +`string` + +locale (e.g. en-AU) + +##### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +##### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +##### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +##### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +##### pivot? + +`number` + +pivot year for two-digit years + +##### plugins? + +[`Plugin`](Plugin.md) \| [`Plugin`](Plugin.md)[] + +plugins to be automatically extended + +##### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +##### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +##### silent? + +`boolean` + +suppress console output during catch + +##### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +##### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +##### store? + +`string` + +localStorage key + +##### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +##### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +##### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +### Returns + +`T` + +## Call Signature + +> **Params**(`options`): `T` + +Defined in: [tempo.type.ts:146](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L146) + +Type for consistency in expected arguments for helper functions + +### Parameters + +#### options + +##### calendar? + +`CalendarLike` + +Temporal calendar + +##### catch? + +`boolean` + +catch or throw Errors + +##### debug? + +`boolean` + +additional console.log for tracking + +##### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +##### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +##### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +##### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +##### locale? + +`string` + +locale (e.g. en-AU) + +##### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +##### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +##### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +##### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +##### pivot? + +`number` + +pivot year for two-digit years + +##### plugins? + +[`Plugin`](Plugin.md) \| [`Plugin`](Plugin.md)[] + +plugins to be automatically extended + +##### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +##### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +##### silent? + +`boolean` + +suppress console output during catch + +##### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +##### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +##### store? + +`string` + +localStorage key + +##### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +##### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +##### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +### Returns + +`T` diff --git a/packages/tempo/doc/api/interfaces/Plugin.md b/packages/tempo/doc/api/interfaces/Plugin.md new file mode 100644 index 00000000..aa68894b --- /dev/null +++ b/packages/tempo/doc/api/interfaces/Plugin.md @@ -0,0 +1,44 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +Defined in: [plugin/plugin.type.ts:27](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L27) + +## Plugin +Interface for general Tempo plugins (Modules/Extensions). + +## Extended by + +- [`PluginContainer`](../@magmacomputing/namespaces/Internal/interfaces/PluginContainer.md) +- [`Module`](Module.md) +- [`Extension`](Extension.md) + +## Properties + +### install + +> **install**: (`this`, `t`) => `void` + +Defined in: [plugin/plugin.type.ts:29](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L29) + +#### Parameters + +##### this + +[`Tempo`](../classes/Tempo.md) + +##### t + +*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +#### Returns + +`void` + +*** + +### name + +> **name**: `string` + +Defined in: [plugin/plugin.type.ts:28](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L28) diff --git a/packages/tempo/doc/api/interfaces/TermPlugin.md b/packages/tempo/doc/api/interfaces/TermPlugin.md new file mode 100644 index 00000000..69b69a30 --- /dev/null +++ b/packages/tempo/doc/api/interfaces/TermPlugin.md @@ -0,0 +1,96 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +Defined in: [plugin/plugin.type.ts:10](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L10) + +## TermPlugin +Interface for term-driven parsing and resolution. + +## Properties + +### define + +> **define**: (`this`, `keyOnly?`, `anchor?`) => `string` \| [`Range`](../type-aliases/Range.md) \| [`Range`](../type-aliases/Range.md)[] \| `undefined` + +Defined in: [plugin/plugin.type.ts:17](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L17) + +#### Parameters + +##### this + +[`Tempo`](../classes/Tempo.md) + +##### keyOnly? + +`boolean` + +##### anchor? + +`any` + +#### Returns + +`string` \| [`Range`](../type-aliases/Range.md) \| [`Range`](../type-aliases/Range.md)[] \| `undefined` + +*** + +### description? + +> `optional` **description?**: `string` + +Defined in: [plugin/plugin.type.ts:13](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L13) + +*** + +### groups? + +> `optional` **groups?**: `any` + +Defined in: [plugin/plugin.type.ts:14](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L14) + +*** + +### key + +> **key**: `string` + +Defined in: [plugin/plugin.type.ts:11](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L11) + +*** + +### ranges? + +> `optional` **ranges?**: `any`[] + +Defined in: [plugin/plugin.type.ts:15](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L15) + +*** + +### resolve? + +> `optional` **resolve?**: (`this`, `anchor?`) => [`Range`](../type-aliases/Range.md)[] + +Defined in: [plugin/plugin.type.ts:16](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L16) + +#### Parameters + +##### this + +[`Tempo`](../classes/Tempo.md) + +##### anchor? + +`any` + +#### Returns + +[`Range`](../type-aliases/Range.md)[] + +*** + +### scope? + +> `optional` **scope?**: `string` + +Defined in: [plugin/plugin.type.ts:12](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L12) diff --git a/packages/tempo/doc/api/type-aliases/Add.md b/packages/tempo/doc/api/type-aliases/Add.md new file mode 100644 index 00000000..a5c5c31c --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Add.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Add** = `Prettify`\<[`AddUnits`](AddUnits.md) & [`TermOffset`](TermOffset.md)\> \| [`DateTime`](DateTime.md) + +Defined in: [tempo.type.ts:92](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L92) diff --git a/packages/tempo/doc/api/type-aliases/AddUnits.md b/packages/tempo/doc/api/type-aliases/AddUnits.md new file mode 100644 index 00000000..ba6d652a --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/AddUnits.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **AddUnits** = `{ [K in Unit]?: number }` + +Defined in: [tempo.type.ts:91](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L91) diff --git a/packages/tempo/doc/api/type-aliases/BaseDuration.md b/packages/tempo/doc/api/type-aliases/BaseDuration.md new file mode 100644 index 00000000..2d9ca364 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/BaseDuration.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **BaseDuration** = `Record`\<[`Units`](Units.md), `number`\> + +Defined in: [tempo.type.ts:60](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L60) diff --git a/packages/tempo/doc/api/type-aliases/COMPASS.md b/packages/tempo/doc/api/type-aliases/COMPASS.md new file mode 100644 index 00000000..7967ac83 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/COMPASS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **COMPASS** = `ValueOf`\<*typeof* [`COMPASS`](../variables/COMPASS.md)\> + +Defined in: [tempo.enum.ts:21](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L21) + +cardinal directions diff --git a/packages/tempo/doc/api/type-aliases/DURATION-1.md b/packages/tempo/doc/api/type-aliases/DURATION-1.md new file mode 100644 index 00000000..72b2677a --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/DURATION-1.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **DURATION** = `KeyOf`\<*typeof* [`DURATION`](../variables/DURATION.md)\> + +Defined in: [tempo.enum.ts:148](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L148) + +number of seconds in a time unit diff --git a/packages/tempo/doc/api/type-aliases/DURATIONS.md b/packages/tempo/doc/api/type-aliases/DURATIONS.md new file mode 100644 index 00000000..a1c01965 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/DURATIONS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **DURATIONS** = `KeyOf`\<*typeof* [`DURATIONS`](../variables/DURATIONS.md)\> + +Defined in: [tempo.enum.ts:152](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L152) + +number of milliseconds in a time unit diff --git a/packages/tempo/doc/api/type-aliases/DateTime.md b/packages/tempo/doc/api/type-aliases/DateTime.md new file mode 100644 index 00000000..b8da1b54 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/DateTime.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **DateTime** = `string` \| `number` \| `bigint` \| `Date` \| [`Tempo`](../classes/Tempo.md) \| `TemporalObject` \| `Temporal.ZonedDateTimeLike` \| `undefined` \| `null` + +Defined in: [tempo.type.ts:38](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L38) + +the value that Tempo will attempt to interpret as a valid ISO date / time diff --git a/packages/tempo/doc/api/type-aliases/DateTimeUnit.md b/packages/tempo/doc/api/type-aliases/DateTimeUnit.md new file mode 100644 index 00000000..6aa25e28 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/DateTimeUnit.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **DateTimeUnit** = `Temporal.DateUnit` \| `Temporal.TimeUnit` + +Defined in: [tempo.type.ts:57](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L57) + +Configuration to use for #until() and #since() argument diff --git a/packages/tempo/doc/api/type-aliases/Duration.md b/packages/tempo/doc/api/type-aliases/Duration.md new file mode 100644 index 00000000..38a74463 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Duration.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Duration** = `NonOptional`\<`Temporal.DurationLikeObject`\> & `Record`\<`"iso"`, `string`\> & `Record`\<`"sign"`, `number`\> & `Record`\<`"blank"`, `boolean`\> & `Record`\<`"unit"`, `string` \| `undefined`\> + +Defined in: [tempo.type.ts:106](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L106) diff --git a/packages/tempo/doc/api/type-aliases/ELEMENT-1.md b/packages/tempo/doc/api/type-aliases/ELEMENT-1.md new file mode 100644 index 00000000..ce9cc0d0 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/ELEMENT-1.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **ELEMENT** = `ValueOf`\<*typeof* [`ELEMENT`](../variables/ELEMENT.md)\> + +Defined in: [tempo.enum.ts:184](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L184) diff --git a/packages/tempo/doc/api/type-aliases/Element.md b/packages/tempo/doc/api/type-aliases/Element.md new file mode 100644 index 00000000..40c370d3 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Element.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Element** = `enums.Element` + +Defined in: [tempo.type.ts:137](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L137) diff --git a/packages/tempo/doc/api/type-aliases/FORMAT-1.md b/packages/tempo/doc/api/type-aliases/FORMAT-1.md new file mode 100644 index 00000000..a8b84c73 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/FORMAT-1.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **FORMAT** = `ValueOf`\<*typeof* [`FORMAT`](../variables/FORMAT.md)\> + +Defined in: [tempo.enum.ts:156](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L156) + +common format aliases diff --git a/packages/tempo/doc/api/type-aliases/FlexibleDuration.md b/packages/tempo/doc/api/type-aliases/FlexibleDuration.md new file mode 100644 index 00000000..5c39b13b --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/FlexibleDuration.md @@ -0,0 +1,23 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **FlexibleDuration** = `{ [K in Units]: Pick & { [P in keyof Omit]?: number } }`\[[`Units`](Units.md)\] + +Defined in: [tempo.type.ts:75](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L75) + +# FlexibleDuration +A distributive mapped type over [Units](Units.md) which requires at least one duration key +from [BaseDuration](BaseDuration.md) (the mapped key K) while making all other BaseDuration +properties optional. + +## Example + +```ts +// Valid: at least one key is present +const a: FlexibleDuration = { hours: 1 }; +const b: FlexibleDuration = { hours: 1, minutes: 30 }; + +// Invalid: empty object (no mandatory key) +const c: FlexibleDuration = {}; +``` diff --git a/packages/tempo/doc/api/type-aliases/Format.md b/packages/tempo/doc/api/type-aliases/Format.md new file mode 100644 index 00000000..017ac84f --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Format.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Format** = `enums.Format` + +Defined in: [tempo.type.ts:115](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L115) + +Union of all known format strings diff --git a/packages/tempo/doc/api/type-aliases/FormatRegistry.md b/packages/tempo/doc/api/type-aliases/FormatRegistry.md new file mode 100644 index 00000000..27fb63e1 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/FormatRegistry.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **FormatRegistry** = `enums.FormatEnum` + +Defined in: [tempo.type.ts:117](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L117) + +Enum registry of format strings diff --git a/packages/tempo/doc/api/type-aliases/FormatType.md b/packages/tempo/doc/api/type-aliases/FormatType.md new file mode 100644 index 00000000..a4ead0f5 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/FormatType.md @@ -0,0 +1,13 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **FormatType**\<`K`\> = `enums.FormatType`\<`K`\> + +Defined in: [tempo.type.ts:118](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L118) + +## Type Parameters + +### K + +`K` *extends* `PropertyKey` diff --git a/packages/tempo/doc/api/type-aliases/Formats.md b/packages/tempo/doc/api/type-aliases/Formats.md new file mode 100644 index 00000000..b495f67f --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Formats.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Formats** = `enums.Formats` + +Defined in: [tempo.type.ts:112](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L112) + +mapping of format names to instance-resolutions (string | number) diff --git a/packages/tempo/doc/api/type-aliases/Groups.md b/packages/tempo/doc/api/type-aliases/Groups.md new file mode 100644 index 00000000..b1cd28cf --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Groups.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Groups** = `Record`\<`string`, `string`\> + +Defined in: [tempo.type.ts:43](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L43) diff --git a/packages/tempo/doc/api/type-aliases/Logic.md b/packages/tempo/doc/api/type-aliases/Logic.md new file mode 100644 index 00000000..d07b1170 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Logic.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Logic** = `string` \| `number` \| `Function` + +Defined in: [tempo.type.ts:41](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L41) diff --git a/packages/tempo/doc/api/type-aliases/MODE-1.md b/packages/tempo/doc/api/type-aliases/MODE-1.md new file mode 100644 index 00000000..8bd4792a --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/MODE-1.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **MODE** = `ValueOf`\<*typeof* [`MODE`](../variables/MODE.md)\> + +Defined in: [tempo.enum.ts:217](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L217) + +initialization strategies diff --git a/packages/tempo/doc/api/type-aliases/MONTH-1.md b/packages/tempo/doc/api/type-aliases/MONTH-1.md new file mode 100644 index 00000000..d0d8dcaf --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/MONTH-1.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **MONTH** = `KeyOf`\<*typeof* [`MONTH`](../variables/MONTH.md)\> + +Defined in: [tempo.enum.ts:129](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L129) + +Gregorian calendar months (short-form) diff --git a/packages/tempo/doc/api/type-aliases/MONTHS.md b/packages/tempo/doc/api/type-aliases/MONTHS.md new file mode 100644 index 00000000..e8750d2e --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/MONTHS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **MONTHS** = `KeyOf`\<*typeof* [`MONTHS`](../variables/MONTHS.md)\> + +Defined in: [tempo.enum.ts:131](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L131) + +Gregorian calendar months (long-form) diff --git a/packages/tempo/doc/api/type-aliases/MUTATION.md b/packages/tempo/doc/api/type-aliases/MUTATION.md new file mode 100644 index 00000000..d3fdfc0a --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/MUTATION.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **MUTATION** = `ValueOf`\<*typeof* [`MUTATION`](../variables/MUTATION.md)\> + +Defined in: [tempo.enum.ts:201](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L201) diff --git a/packages/tempo/doc/api/type-aliases/Mode.md b/packages/tempo/doc/api/type-aliases/Mode.md new file mode 100644 index 00000000..2bdde262 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Mode.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Mode** = [`MODE`](MODE-1.md) + +Defined in: [tempo.type.ts:139](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L139) diff --git a/packages/tempo/doc/api/type-aliases/Modifier.md b/packages/tempo/doc/api/type-aliases/Modifier.md new file mode 100644 index 00000000..5704ff29 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Modifier.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Modifier** = `"="` \| `"-"` \| `"+"` \| `"<"` \| `"<="` \| `"-="` \| `">"` \| `">="` \| `"+="` \| `"this"` \| `"next"` \| `"prev"` \| `"last"` \| `"first"` \| `undefined` + +Defined in: [tempo.type.ts:94](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L94) diff --git a/packages/tempo/doc/api/type-aliases/Month.md b/packages/tempo/doc/api/type-aliases/Month.md new file mode 100644 index 00000000..ea07ab91 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Month.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Month** = `enums.Month` + +Defined in: [tempo.type.ts:136](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L136) diff --git a/packages/tempo/doc/api/type-aliases/Mutate.md b/packages/tempo/doc/api/type-aliases/Mutate.md new file mode 100644 index 00000000..7afee34b --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Mutate.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Mutate** = `"start"` \| `"mid"` \| `"end"` + +Defined in: [tempo.type.ts:80](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L80) diff --git a/packages/tempo/doc/api/type-aliases/Number.md b/packages/tempo/doc/api/type-aliases/Number.md new file mode 100644 index 00000000..35c5e295 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Number.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Number** = `enums.Number` + +Defined in: [tempo.type.ts:138](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L138) diff --git a/packages/tempo/doc/api/type-aliases/NumericPattern.md b/packages/tempo/doc/api/type-aliases/NumericPattern.md new file mode 100644 index 00000000..0f751973 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/NumericPattern.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **NumericPattern** = *typeof* `enums.NumericPattern`\[`number`\] + +Defined in: [tempo.type.ts:140](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L140) diff --git a/packages/tempo/doc/api/type-aliases/Options.md b/packages/tempo/doc/api/type-aliases/Options.md new file mode 100644 index 00000000..d2c1e9f8 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Options.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Options** = `Prettify`\<`{ [K in keyof BaseOptions]?: BaseOptions[K] }` & `Record`\<`string`, `any`\>\> + +Defined in: [tempo.type.ts:45](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L45) diff --git a/packages/tempo/doc/api/type-aliases/OwnFormat.md b/packages/tempo/doc/api/type-aliases/OwnFormat.md new file mode 100644 index 00000000..b9821a48 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/OwnFormat.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **OwnFormat** = `enums.OwnFormat` + +Defined in: [tempo.type.ts:109](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L109) + +pre-configured format strings diff --git a/packages/tempo/doc/api/type-aliases/Pair.md b/packages/tempo/doc/api/type-aliases/Pair.md new file mode 100644 index 00000000..e5a9a621 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Pair.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Pair** = \[`string`, `string`\] + +Defined in: [tempo.type.ts:42](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L42) diff --git a/packages/tempo/doc/api/type-aliases/Pattern.md b/packages/tempo/doc/api/type-aliases/Pattern.md new file mode 100644 index 00000000..2789c1e4 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Pattern.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Pattern** = `string` \| `RegExp` + +Defined in: [tempo.type.ts:40](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L40) diff --git a/packages/tempo/doc/api/type-aliases/Range.md b/packages/tempo/doc/api/type-aliases/Range.md new file mode 100644 index 00000000..fbba4cd9 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Range.md @@ -0,0 +1,10 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Range** = `Prettify`\<`object` & \{ `year`: `number`; \} \| \{ `month`: `number`; \} \| \{ `week`: `number`; \} \| \{ `day`: `number`; \} \| \{ `hour`: `number`; \} \| \{ `minute`: `number`; \} \| \{ `second`: `number`; \} \| \{ `millisecond`: `number`; \} \| \{ `microsecond`: `number`; \} \| \{ `nanosecond`: `number`; \} & `object`\> + +Defined in: [plugin/plugin.type.ts:59](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L59) + +## Range +Discrete time interval within a specific term. diff --git a/packages/tempo/doc/api/type-aliases/Relative.md b/packages/tempo/doc/api/type-aliases/Relative.md new file mode 100644 index 00000000..95c00293 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Relative.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Relative** = `"ago"` \| `"hence"` \| `"prior"` \| `"from now"` + +Defined in: [tempo.type.ts:95](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L95) diff --git a/packages/tempo/doc/api/type-aliases/ResolvedRange.md b/packages/tempo/doc/api/type-aliases/ResolvedRange.md new file mode 100644 index 00000000..17fc7c60 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/ResolvedRange.md @@ -0,0 +1,36 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **ResolvedRange** = [`Range`](Range.md) & `object` + +Defined in: [plugin/plugin.type.ts:90](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L90) + +## ResolvedRange +Range with additional metadata. + +## Type Declaration + +### end + +> **end**: [`Tempo`](../classes/Tempo.md) + +### label? + +> `optional` **label?**: `string` + +### rollover? + +> `optional` **rollover?**: `string` + +### scope? + +> `optional` **scope?**: `string` + +### start + +> **start**: [`Tempo`](../classes/Tempo.md) + +### unit? + +> `optional` **unit?**: `string` diff --git a/packages/tempo/doc/api/type-aliases/SEASON.md b/packages/tempo/doc/api/type-aliases/SEASON.md new file mode 100644 index 00000000..b70e825a --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/SEASON.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **SEASON** = `ValueOf`\<*typeof* [`SEASON`](../variables/SEASON.md)\> + +Defined in: [tempo.enum.ts:12](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L12) + +calendar seasons diff --git a/packages/tempo/doc/api/type-aliases/Set.md b/packages/tempo/doc/api/type-aliases/Set.md new file mode 100644 index 00000000..0bede66d --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Set.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Set** = `Prettify`\<[`SetFields`](SetFields.md) & `object` & [`TermOffset`](TermOffset.md)\> \| [`DateTime`](DateTime.md) + +Defined in: [tempo.type.ts:87](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L87) diff --git a/packages/tempo/doc/api/type-aliases/SetFields.md b/packages/tempo/doc/api/type-aliases/SetFields.md new file mode 100644 index 00000000..2e09f78d --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/SetFields.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **SetFields** = \{ \[K in Mutate\]?: Unit \| \`#$\{string\}\` \} & \{ \[K in "date" \| "time" \| "event" \| "period"\]?: string \} + +Defined in: [tempo.type.ts:82](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L82) diff --git a/packages/tempo/doc/api/type-aliases/TIMEZONE.md b/packages/tempo/doc/api/type-aliases/TIMEZONE.md new file mode 100644 index 00000000..78886a58 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/TIMEZONE.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **TIMEZONE** = `KeyOf`\<*typeof* [`TIMEZONE`](../variables/TIMEZONE.md)\> + +Defined in: [tempo.enum.ts:143](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L143) + +common time-zone aliases diff --git a/packages/tempo/doc/api/type-aliases/TermOffset.md b/packages/tempo/doc/api/type-aliases/TermOffset.md new file mode 100644 index 00000000..d8454561 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/TermOffset.md @@ -0,0 +1,11 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **TermOffset** = `object` + +Defined in: [tempo.type.ts:81](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L81) + +## Index Signature + +\[`K`: `` `#${string}` ``\]: `string` \| `number` diff --git a/packages/tempo/doc/api/type-aliases/Terms.md b/packages/tempo/doc/api/type-aliases/Terms.md new file mode 100644 index 00000000..fc30f5aa --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Terms.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Terms** = `Property`\<`any`\> + +Defined in: [plugin/plugin.type.ts:21](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L21) + +mapping of terms to their resolved values diff --git a/packages/tempo/doc/api/type-aliases/Unit.md b/packages/tempo/doc/api/type-aliases/Unit.md new file mode 100644 index 00000000..063f05d0 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Unit.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Unit** = [`DateTimeUnit`](DateTimeUnit.md) \| `Plural`\<[`DateTimeUnit`](DateTimeUnit.md)\> + +Defined in: [tempo.type.ts:58](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L58) diff --git a/packages/tempo/doc/api/type-aliases/Units.md b/packages/tempo/doc/api/type-aliases/Units.md new file mode 100644 index 00000000..6fba868f --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Units.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Units** = `Temporal.PluralizeUnit`\<[`DateTimeUnit`](DateTimeUnit.md)\> + +Defined in: [tempo.type.ts:59](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L59) diff --git a/packages/tempo/doc/api/type-aliases/Until.md b/packages/tempo/doc/api/type-aliases/Until.md new file mode 100644 index 00000000..f437808e --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Until.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Until** = [`Options`](Options.md) & `object` \| [`Unit`](Unit.md) + +Defined in: [tempo.type.ts:78](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L78) diff --git a/packages/tempo/doc/api/type-aliases/WEEKDAY-1.md b/packages/tempo/doc/api/type-aliases/WEEKDAY-1.md new file mode 100644 index 00000000..84a18d76 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/WEEKDAY-1.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **WEEKDAY** = `KeyOf`\<*typeof* [`WEEKDAY`](../variables/WEEKDAY.md)\> + +Defined in: [tempo.enum.ts:119](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L119) + +Gregorian calendar week-days (short-form) diff --git a/packages/tempo/doc/api/type-aliases/WEEKDAYS.md b/packages/tempo/doc/api/type-aliases/WEEKDAYS.md new file mode 100644 index 00000000..ec01515f --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/WEEKDAYS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **WEEKDAYS** = `KeyOf`\<*typeof* [`WEEKDAYS`](../variables/WEEKDAYS.md)\> + +Defined in: [tempo.enum.ts:121](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L121) + +Gregorian calendar week-days (long-form) diff --git a/packages/tempo/doc/api/type-aliases/Weekday.md b/packages/tempo/doc/api/type-aliases/Weekday.md new file mode 100644 index 00000000..efe26da8 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Weekday.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Weekday** = `enums.Weekday` + +Defined in: [tempo.type.ts:135](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L135) diff --git a/packages/tempo/doc/api/type-aliases/ZONED_DATE_TIME.md b/packages/tempo/doc/api/type-aliases/ZONED_DATE_TIME.md new file mode 100644 index 00000000..23f68ea2 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/ZONED_DATE_TIME.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **ZONED\_DATE\_TIME** = `ValueOf`\<*typeof* [`ZONED_DATE_TIME`](../variables/ZONED_DATE_TIME.md)\> + +Defined in: [tempo.enum.ts:207](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L207) diff --git a/packages/tempo/doc/api/type-aliases/hh.md b/packages/tempo/doc/api/type-aliases/hh.md new file mode 100644 index 00000000..05804041 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/hh.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **hh** = `IntRange`\<`0`, `24`\> + +Defined in: [tempo.type.ts:98](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L98) diff --git a/packages/tempo/doc/api/type-aliases/mi.md b/packages/tempo/doc/api/type-aliases/mi.md new file mode 100644 index 00000000..6ce4bd0e --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/mi.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **mi** = `IntRange`\<`0`, `60`\> + +Defined in: [tempo.type.ts:99](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L99) diff --git a/packages/tempo/doc/api/type-aliases/mm.md b/packages/tempo/doc/api/type-aliases/mm.md new file mode 100644 index 00000000..9540ef9f --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/mm.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **mm** = `IntRange`\<`0`, `12`\> + +Defined in: [tempo.type.ts:97](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L97) diff --git a/packages/tempo/doc/api/type-aliases/ms.md b/packages/tempo/doc/api/type-aliases/ms.md new file mode 100644 index 00000000..a0fb6640 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/ms.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **ms** = `IntRange`\<`0`, `999`\> + +Defined in: [tempo.type.ts:101](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L101) diff --git a/packages/tempo/doc/api/type-aliases/ns.md b/packages/tempo/doc/api/type-aliases/ns.md new file mode 100644 index 00000000..ae88d110 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/ns.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **ns** = `IntRange`\<`0`, `999`\> + +Defined in: [tempo.type.ts:103](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L103) diff --git a/packages/tempo/doc/api/type-aliases/ss.md b/packages/tempo/doc/api/type-aliases/ss.md new file mode 100644 index 00000000..abb57ca0 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/ss.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **ss** = `IntRange`\<`0`, `60`\> + +Defined in: [tempo.type.ts:100](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L100) diff --git a/packages/tempo/doc/api/type-aliases/us.md b/packages/tempo/doc/api/type-aliases/us.md new file mode 100644 index 00000000..7ac493b1 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/us.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **us** = `IntRange`\<`0`, `999`\> + +Defined in: [tempo.type.ts:102](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L102) diff --git a/packages/tempo/doc/api/type-aliases/ww.md b/packages/tempo/doc/api/type-aliases/ww.md new file mode 100644 index 00000000..f2c58716 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/ww.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **ww** = `IntRange`\<`1`, `53`\> + +Defined in: [tempo.type.ts:104](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L104) diff --git a/packages/tempo/doc/api/variables/COMPASS.md b/packages/tempo/doc/api/variables/COMPASS.md new file mode 100644 index 00000000..75c3ff11 --- /dev/null +++ b/packages/tempo/doc/api/variables/COMPASS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **COMPASS**: `EnumifyType`\<\{ `East`: `"east"`; `North`: `"north"`; `South`: `"south"`; `West`: `"west"`; \}\> + +Defined in: [tempo.enum.ts:21](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L21) + +cardinal directions diff --git a/packages/tempo/doc/api/variables/DISCOVERY.md b/packages/tempo/doc/api/variables/DISCOVERY.md new file mode 100644 index 00000000..f674abed --- /dev/null +++ b/packages/tempo/doc/api/variables/DISCOVERY.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **DISCOVERY**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:227](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L227) diff --git a/packages/tempo/doc/api/variables/DURATION.md b/packages/tempo/doc/api/variables/DURATION.md new file mode 100644 index 00000000..46fad38d --- /dev/null +++ b/packages/tempo/doc/api/variables/DURATION.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **DURATION**: `EnumifyType`\<\{ `day`: `86400`; `hour`: `3600`; `microsecond`: `0.000001`; `millisecond`: `0.001`; `minute`: `60`; `month`: `2628000`; `nanosecond`: `1e-9`; `second`: `1`; `week`: `604800`; `year`: `31536000`; \}\> + +Defined in: [tempo.enum.ts:148](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L148) + +number of seconds in a time unit diff --git a/packages/tempo/doc/api/variables/DURATIONS.md b/packages/tempo/doc/api/variables/DURATIONS.md new file mode 100644 index 00000000..4b8238be --- /dev/null +++ b/packages/tempo/doc/api/variables/DURATIONS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **DURATIONS**: `EnumifyType`\<\{ `days`: `86400000`; `hours`: `3600000`; `microseconds`: `0.001`; `milliseconds`: `1`; `minutes`: `60000`; `months`: `2628000000`; `nanoseconds`: `0.000001`; `seconds`: `1000`; `weeks`: `604800000`; `years`: `31536000000`; \}\> + +Defined in: [tempo.enum.ts:152](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L152) + +number of milliseconds in a time unit diff --git a/packages/tempo/doc/api/variables/ELEMENT.md b/packages/tempo/doc/api/variables/ELEMENT.md new file mode 100644 index 00000000..b9150bc6 --- /dev/null +++ b/packages/tempo/doc/api/variables/ELEMENT.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **ELEMENT**: `EnumifyType`\<\{ `dd`: `"day"`; `hh`: `"hour"`; `mi`: `"minute"`; `mm`: `"month"`; `ms`: `"millisecond"`; `ns`: `"nanosecond"`; `ss`: `"second"`; `us`: `"microsecond"`; `ww`: `"week"`; `yy`: `"year"`; \}\> + +Defined in: [tempo.enum.ts:184](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L184) diff --git a/packages/tempo/doc/api/variables/FORMAT.md b/packages/tempo/doc/api/variables/FORMAT.md new file mode 100644 index 00000000..b54823ff --- /dev/null +++ b/packages/tempo/doc/api/variables/FORMAT.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **FORMAT**: `EnumifyType`\<\{ `date`: `"{yyyy}-{mm}-{dd}"`; `dayDate`: `"{dd}-{mmm}-{yyyy}"`; `dayMonth`: `"{dd}-{mmm}"`; `dayTime`: `"{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}"`; `display`: `"{www}, {dd} {mmm} {yyyy}"`; `logStamp`: `"{yyyy}{mm}{dd}T{hhmiss}.{ff}"`; `sortTime`: `"{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}"`; `time`: `"{hh}:{mi}:{ss}"`; `weekDate`: `"{www}, {yyyy}-{mmm}-{dd}"`; `weekStamp`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}"`; `weekTime`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"`; `yearMonth`: `"{yyyy}{mm}"`; `yearMonthDay`: `"{yyyy}{mm}{dd}"`; `yearWeek`: `"{yw}{ww}"`; \}\> + +Defined in: [tempo.enum.ts:156](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L156) + +common format aliases diff --git a/packages/tempo/doc/api/variables/LIMIT.md b/packages/tempo/doc/api/variables/LIMIT.md new file mode 100644 index 00000000..b953527c --- /dev/null +++ b/packages/tempo/doc/api/variables/LIMIT.md @@ -0,0 +1,33 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **LIMIT**: `object` + +Defined in: [tempo.enum.ts:180](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L180) + +## Type Declaration + +### maxTempo + +#### Get Signature + +> **get** **maxTempo**(): `bigint` + +Tempo(31-Dec-9999.23:59:59).ns + +##### Returns + +`bigint` + +### minTempo + +#### Get Signature + +> **get** **minTempo**(): `bigint` + +Tempo(01-Jan-1000.00:00:00).ns + +##### Returns + +`bigint` diff --git a/packages/tempo/doc/api/variables/MODE.md b/packages/tempo/doc/api/variables/MODE.md new file mode 100644 index 00000000..b92c175a --- /dev/null +++ b/packages/tempo/doc/api/variables/MODE.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **MODE**: `EnumifyType`\<\{ `Auto`: `"auto"`; `Defer`: `"defer"`; `Strict`: `"strict"`; \}\> + +Defined in: [tempo.enum.ts:217](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L217) + +initialization strategies diff --git a/packages/tempo/doc/api/variables/MONTH.md b/packages/tempo/doc/api/variables/MONTH.md new file mode 100644 index 00000000..b4452d1c --- /dev/null +++ b/packages/tempo/doc/api/variables/MONTH.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **MONTH**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:129](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L129) + +Gregorian calendar months (short-form) diff --git a/packages/tempo/doc/api/variables/MONTHS.md b/packages/tempo/doc/api/variables/MONTHS.md new file mode 100644 index 00000000..f31a0833 --- /dev/null +++ b/packages/tempo/doc/api/variables/MONTHS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **MONTHS**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:131](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L131) + +Gregorian calendar months (long-form) diff --git a/packages/tempo/doc/api/variables/MUTATION.md b/packages/tempo/doc/api/variables/MUTATION.md new file mode 100644 index 00000000..fd166505 --- /dev/null +++ b/packages/tempo/doc/api/variables/MUTATION.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **MUTATION**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:201](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L201) diff --git a/packages/tempo/doc/api/variables/NUMBER.md b/packages/tempo/doc/api/variables/NUMBER.md new file mode 100644 index 00000000..8230c7c0 --- /dev/null +++ b/packages/tempo/doc/api/variables/NUMBER.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **NUMBER**: `EnumifyType`\<\{ `eight`: `8`; `five`: `5`; `four`: `4`; `nine`: `9`; `one`: `1`; `seven`: `7`; `six`: `6`; `ten`: `10`; `three`: `3`; `two`: `2`; `zero`: `0`; \}\> + +Defined in: [tempo.enum.ts:139](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L139) + +number names (0-10) diff --git a/packages/tempo/doc/api/variables/OPTION.md b/packages/tempo/doc/api/variables/OPTION.md new file mode 100644 index 00000000..b77a41e9 --- /dev/null +++ b/packages/tempo/doc/api/variables/OPTION.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **OPTION**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:213](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L213) diff --git a/packages/tempo/doc/api/variables/PARSE.md b/packages/tempo/doc/api/variables/PARSE.md new file mode 100644 index 00000000..91639321 --- /dev/null +++ b/packages/tempo/doc/api/variables/PARSE.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **PARSE**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:222](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L222) diff --git a/packages/tempo/doc/api/variables/SEASON.md b/packages/tempo/doc/api/variables/SEASON.md new file mode 100644 index 00000000..dae74e2f --- /dev/null +++ b/packages/tempo/doc/api/variables/SEASON.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **SEASON**: `EnumifyType`\<\{ `Autumn`: `"autumn"`; `Spring`: `"spring"`; `Summer`: `"summer"`; `Winter`: `"winter"`; \}\> + +Defined in: [tempo.enum.ts:12](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L12) + +calendar seasons diff --git a/packages/tempo/doc/api/variables/TIMEZONE.md b/packages/tempo/doc/api/variables/TIMEZONE.md new file mode 100644 index 00000000..ce8b1329 --- /dev/null +++ b/packages/tempo/doc/api/variables/TIMEZONE.md @@ -0,0 +1,71 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **TIMEZONE**: `object` + +Defined in: [tempo.enum.ts:143](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L143) + +common time-zone aliases + +## Type Declaration + +### acst + +> `readonly` **acst**: `"Australia/Adelaide"` = `'Australia/Adelaide'` + +### aest + +> `readonly` **aest**: `"Australia/Sydney"` = `'Australia/Sydney'` + +### awst + +> `readonly` **awst**: `"Australia/Perth"` = `'Australia/Perth'` + +### cet + +> `readonly` **cet**: `"Europe/Paris"` = `'Europe/Paris'` + +### cst + +> `readonly` **cst**: `"America/Chicago"` = `'America/Chicago'` + +### eet + +> `readonly` **eet**: `"Europe/Helsinki"` = `'Europe/Helsinki'` + +### est + +> `readonly` **est**: `"America/New_York"` = `'America/New_York'` + +### gmt + +> `readonly` **gmt**: `"Europe/London"` = `'Europe/London'` + +### ist + +> `readonly` **ist**: `"Asia/Kolkata"` = `'Asia/Kolkata'` + +### jst + +> `readonly` **jst**: `"Asia/Tokyo"` = `'Asia/Tokyo'` + +### mst + +> `readonly` **mst**: `"America/Denver"` = `'America/Denver'` + +### npt + +> `readonly` **npt**: `"Asia/Kathmandu"` = `'Asia/Kathmandu'` + +### nzt + +> `readonly` **nzt**: `"Pacific/Auckland"` = `'Pacific/Auckland'` + +### pst + +> `readonly` **pst**: `"America/Los_Angeles"` = `'America/Los_Angeles'` + +### utc + +> `readonly` **utc**: `"UTC"` = `'UTC'` diff --git a/packages/tempo/doc/api/variables/WEEKDAY.md b/packages/tempo/doc/api/variables/WEEKDAY.md new file mode 100644 index 00000000..93d53e2e --- /dev/null +++ b/packages/tempo/doc/api/variables/WEEKDAY.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **WEEKDAY**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:119](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L119) + +Gregorian calendar week-days (short-form) diff --git a/packages/tempo/doc/api/variables/WEEKDAYS.md b/packages/tempo/doc/api/variables/WEEKDAYS.md new file mode 100644 index 00000000..1618aa7e --- /dev/null +++ b/packages/tempo/doc/api/variables/WEEKDAYS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **WEEKDAYS**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:121](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L121) + +Gregorian calendar week-days (long-form) diff --git a/packages/tempo/doc/api/variables/ZONED_DATE_TIME.md b/packages/tempo/doc/api/variables/ZONED_DATE_TIME.md new file mode 100644 index 00000000..f64df3ed --- /dev/null +++ b/packages/tempo/doc/api/variables/ZONED_DATE_TIME.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **ZONED\_DATE\_TIME**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:207](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L207) diff --git a/packages/tempo/doc/api/variables/enums.md b/packages/tempo/doc/api/variables/enums.md new file mode 100644 index 00000000..92c5b9e2 --- /dev/null +++ b/packages/tempo/doc/api/variables/enums.md @@ -0,0 +1,195 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **enums**: `object` + +Defined in: [tempo.enum.ts:237](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L237) + +public-reachable enums + +## Type Declaration + +### COMPASS + +> **COMPASS**: `EnumifyType`\<\{ `East`: `"east"`; `North`: `"north"`; `South`: `"south"`; `West`: `"west"`; \}\> + +cardinal directions + +### DURATION + +> **DURATION**: `EnumifyType`\<\{ `day`: `86400`; `hour`: `3600`; `microsecond`: `0.000001`; `millisecond`: `0.001`; `minute`: `60`; `month`: `2628000`; `nanosecond`: `1e-9`; `second`: `1`; `week`: `604800`; `year`: `31536000`; \}\> + +number of seconds in a time unit + +### DURATIONS + +> **DURATIONS**: `EnumifyType`\<\{ `days`: `86400000`; `hours`: `3600000`; `microseconds`: `0.001`; `milliseconds`: `1`; `minutes`: `60000`; `months`: `2628000000`; `nanoseconds`: `0.000001`; `seconds`: `1000`; `weeks`: `604800000`; `years`: `31536000000`; \}\> + +number of milliseconds in a time unit + +### ELEMENT + +> **ELEMENT**: `EnumifyType`\<\{ `dd`: `"day"`; `hh`: `"hour"`; `mi`: `"minute"`; `mm`: `"month"`; `ms`: `"millisecond"`; `ns`: `"nanosecond"`; `ss`: `"second"`; `us`: `"microsecond"`; `ww`: `"week"`; `yy`: `"year"`; \}\> + +### FORMAT + +> **FORMAT**: `EnumifyType`\<\{ `date`: `"{yyyy}-{mm}-{dd}"`; `dayDate`: `"{dd}-{mmm}-{yyyy}"`; `dayMonth`: `"{dd}-{mmm}"`; `dayTime`: `"{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}"`; `display`: `"{www}, {dd} {mmm} {yyyy}"`; `logStamp`: `"{yyyy}{mm}{dd}T{hhmiss}.{ff}"`; `sortTime`: `"{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}"`; `time`: `"{hh}:{mi}:{ss}"`; `weekDate`: `"{www}, {yyyy}-{mmm}-{dd}"`; `weekStamp`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}"`; `weekTime`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"`; `yearMonth`: `"{yyyy}{mm}"`; `yearMonthDay`: `"{yyyy}{mm}{dd}"`; `yearWeek`: `"{yw}{ww}"`; \}\> + +common format aliases + +### LIMIT + +> **LIMIT**: `object` + +#### LIMIT.maxTempo + +##### Get Signature + +> **get** **maxTempo**(): `bigint` + +Defined in: [tempo.enum.ts:97](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L97) + +Tempo(31-Dec-9999.23:59:59).ns + +###### Returns + +`bigint` + +#### LIMIT.minTempo + +##### Get Signature + +> **get** **minTempo**(): `bigint` + +Defined in: [tempo.enum.ts:98](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L98) + +Tempo(01-Jan-1000.00:00:00).ns + +###### Returns + +`bigint` + +### MODE + +> **MODE**: `EnumifyType`\<\{ `Auto`: `"auto"`; `Defer`: `"defer"`; `Strict`: `"strict"`; \}\> + +initialization strategies + +### MONTH + +> **MONTH**: `EnumifyType`\<`Index`\\> + +Gregorian calendar months (short-form) + +### MONTHS + +> **MONTHS**: `EnumifyType`\<`Index`\\> + +Gregorian calendar months (long-form) + +### MUTATION + +> **MUTATION**: `EnumifyType`\<`Index`\\> + +### NUMBER + +> **NUMBER**: `EnumifyType`\<\{ `eight`: `8`; `five`: `5`; `four`: `4`; `nine`: `9`; `one`: `1`; `seven`: `7`; `six`: `6`; `ten`: `10`; `three`: `3`; `two`: `2`; `zero`: `0`; \}\> + +number names (0-10) + +### OPTION + +> **OPTION**: `EnumifyType`\<`Index`\\> + +### PARSE + +> **PARSE**: `EnumifyType`\<`Index`\\> + +### SEASON + +> **SEASON**: `EnumifyType`\<\{ `Autumn`: `"autumn"`; `Spring`: `"spring"`; `Summer`: `"summer"`; `Winter`: `"winter"`; \}\> + +calendar seasons + +### TIMEZONE + +> **TIMEZONE**: `object` + +common time-zone aliases + +#### TIMEZONE.acst + +> `readonly` **acst**: `"Australia/Adelaide"` = `'Australia/Adelaide'` + +#### TIMEZONE.aest + +> `readonly` **aest**: `"Australia/Sydney"` = `'Australia/Sydney'` + +#### TIMEZONE.awst + +> `readonly` **awst**: `"Australia/Perth"` = `'Australia/Perth'` + +#### TIMEZONE.cet + +> `readonly` **cet**: `"Europe/Paris"` = `'Europe/Paris'` + +#### TIMEZONE.cst + +> `readonly` **cst**: `"America/Chicago"` = `'America/Chicago'` + +#### TIMEZONE.eet + +> `readonly` **eet**: `"Europe/Helsinki"` = `'Europe/Helsinki'` + +#### TIMEZONE.est + +> `readonly` **est**: `"America/New_York"` = `'America/New_York'` + +#### TIMEZONE.gmt + +> `readonly` **gmt**: `"Europe/London"` = `'Europe/London'` + +#### TIMEZONE.ist + +> `readonly` **ist**: `"Asia/Kolkata"` = `'Asia/Kolkata'` + +#### TIMEZONE.jst + +> `readonly` **jst**: `"Asia/Tokyo"` = `'Asia/Tokyo'` + +#### TIMEZONE.mst + +> `readonly` **mst**: `"America/Denver"` = `'America/Denver'` + +#### TIMEZONE.npt + +> `readonly` **npt**: `"Asia/Kathmandu"` = `'Asia/Kathmandu'` + +#### TIMEZONE.nzt + +> `readonly` **nzt**: `"Pacific/Auckland"` = `'Pacific/Auckland'` + +#### TIMEZONE.pst + +> `readonly` **pst**: `"America/Los_Angeles"` = `'America/Los_Angeles'` + +#### TIMEZONE.utc + +> `readonly` **utc**: `"UTC"` = `'UTC'` + +### WEEKDAY + +> **WEEKDAY**: `EnumifyType`\<`Index`\\> + +Gregorian calendar week-days (short-form) + +### WEEKDAYS + +> **WEEKDAYS**: `EnumifyType`\<`Index`\\> + +Gregorian calendar week-days (long-form) + +### ZONED\_DATE\_TIME + +> **ZONED\_DATE\_TIME**: `EnumifyType`\<`Index`\\> diff --git a/packages/tempo/doc/api/variables/fmtTempo.md b/packages/tempo/doc/api/variables/fmtTempo.md new file mode 100644 index 00000000..fd3f12ff --- /dev/null +++ b/packages/tempo/doc/api/variables/fmtTempo.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **fmtTempo**: `Fmt` + +Defined in: [tempo.class.ts:1824](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1824) + +format a Tempo diff --git a/packages/tempo/doc/api/variables/getStamp.md b/packages/tempo/doc/api/variables/getStamp.md new file mode 100644 index 00000000..b0e9e68f --- /dev/null +++ b/packages/tempo/doc/api/variables/getStamp.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **getStamp**: [`Params`](../interfaces/Params.md)\<`number` \| `bigint`\> + +Defined in: [tempo.class.ts:1822](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1822) + +current timestamp (ts) diff --git a/packages/tempo/doc/api/variables/getTempo.md b/packages/tempo/doc/api/variables/getTempo.md new file mode 100644 index 00000000..2c6e74b6 --- /dev/null +++ b/packages/tempo/doc/api/variables/getTempo.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **getTempo**: [`Params`](../interfaces/Params.md)\<[`Tempo`](../classes/Tempo.md)\> + +Defined in: [tempo.class.ts:1823](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1823) + +create new Tempo diff --git a/packages/tempo/doc/architecture.md b/packages/tempo/doc/architecture.md index 89fe373e..f3c3ae54 100644 --- a/packages/tempo/doc/architecture.md +++ b/packages/tempo/doc/architecture.md @@ -5,11 +5,16 @@ Tempo v2.0.1 introduces several industry-leading architectural patterns designed ## 🌐 Shared Global Registry To solve the "Split-Brain" issue inherent in monorepo development (where multiple instances of the same library might be loaded), Tempo utilizes a **Shared Global Registry**. By leveraging `Symbol.for('magmacomputing/library/registry')` on `globalThis`, all versions of the Tempo and Library packages share a unified type-identification engine. This ensures that classes are correctly identified as constructors even when loaded across different module boundaries. +## 🕵️ Decoupled Logging (Logify) +Tempo uses **Logify**, a diagnostic engine that leverages private Symbols to avoid polluting the public console or object state. +- **Context-Aware**: Logs track their discovery path (e.g., "Applied via Global Discovery"). +- **Zero-Footprint**: When `debug: false`, the logging overhead is mathematically eliminated. +- **Symbol-Gated**: Diagnostic metadata is attached via `Symbol.for($Logify)`, making it invisible to standard iteration (`Object.keys`) and serialization (`JSON.stringify`). + ## 🛡️ Hardened Functional Resolution -Tempo implements a "Fail-Safe" execution pattern for functional inputs. The **Hardened Functional Resolution** engine automatically detects and recovers from misidentified types—such as ES6 classes wrapped in defensive Proxies. -- **Defensive Execution**: All plugin and factory invocations are wrapped in recursive `try/catch` blocks. -- **Automatic Recovery**: If a class constructor is accidentally invoked as a function, Tempo catches the `TypeError`, downgrades it to a diagnostic warning, and returns the original constructor to ensure the library remains operational. -- **Deep Identification**: A three-tiered identification strategy (Reference, Tag, and Name matching) ensures "Perfect Identification" of constructors across all module boundaries. +The engine implements a "Fail-Safe" execution pattern for functional inputs, automatically recovering from misidentified types—such as ES6 classes wrapped in defensive Proxies or circular dependency deadlocks. +- **Defensive Execution**: All plugin invocations are wrapped in recursive `try/catch` blocks. +- **Silent Failover**: When combined with `catch: true`, resolution failures return a **Void Instance**, preventing application crashes while providing clear diagnostic symbols for debugging. ## 🏗️ Tempo Architecture: Internal Protection & Performance @@ -97,10 +102,10 @@ Used for: `new Tempo(string | number)` The **Guarded-Lazy** strategy ensures that even with hundreds of custom plugins, the entry point remains nearly instantaneous. In **v2.0.1**, this was refined for 100% matching reliability. ### How it works: -1. **Length-Sorted Terms**: To prevent "partial matching" (e.g., matching `noon` inside `afternoon`), all registered terms are sorted by length (descending) before the Guard regex is built. -2. **Automated Escaping**: All custom terms are escaped to prevent regex injection or character collision. -3. **High-Speed Gatekeeper**: This single-pass $O(1)$ regex acts as the fast-fail gatekeeper. -4. **Auto-Lazy**: Valid inputs that pass the guard automatically switch the instance to `mode: 'defer'` mode, deferring the $O(N)$ full-parse work until the first property access. +1. **Longest-Token Matching**: To prevent partial matching (e.g., matching `qtr` inside `quarter`), the guard uses a "Scan-and-Consume" loop that prioritizes the longest available token. +2. **Unified Wordlist**: The guard automatically ingests all registered Terms, Timezones, Month names, and Custom Events into a single high-speed lookup Set. +3. **High-Speed Gatekeeper**: By avoiding complex backtracking regexes, the gatekeeper provides predictable $O(1)$ performance even as the plugin list grows. +4. **Auto-Lazy**: Valid inputs that pass the guard automatically switch the instance to `mode: 'defer'`, deferring the full $O(N)$ parse work until a property is actually read. ### 📈 Validation & Performance The efficiency of the Master Guard and the success of the Zero-Cost objective have been validated via local benchmarking: @@ -113,6 +118,21 @@ The efficiency of the Master Guard and the success of the Zero-Cost objective ha --- +## 🔄 Internal Lifecycle & Reactive Sync +Tempo maintains system-wide synchronization through a private, Symbol-based hook system. + +### Reactive Registration +When a plugin is imported via a side-effect (`import '@magmacomputing/tempo/ticker'`), it triggers a **`sym.$Register`** hook. +- **Auto-Sync**: The `Tempo` class listens for these hooks and automatically updates its internal registries. +- **Guard Rebuild**: Every time a new term or layout is registered, the **Master Guard** is automatically rebuilt to include the new tokens, ensuring the "Zero-Cost Constructor" always stays up to date. + +### Disposable Engine (`Symbol.dispose`) +The `Tempo` class implements the explicit resource management pattern. +- **Clean Slate**: Calling `Tempo[Symbol.dispose]()` (or using the `using` keyword in a test suite) resets all global registries and configuration to their factory defaults. +- **Isolation**: This is critical for testing environments to prevent state-leaks between test cases. + +--- + ## ⚖️ Summary The Tempo architecture follows the principle of **"Right Tool for the Job"**: - **Shadowing** provides the extreme performance and memory efficiency required for **per-instance computed state**. diff --git a/packages/tempo/doc/lazy-evaluation-pattern.md b/packages/tempo/doc/lazy-evaluation-pattern.md index 3d33c9ef..75a93560 100644 --- a/packages/tempo/doc/lazy-evaluation-pattern.md +++ b/packages/tempo/doc/lazy-evaluation-pattern.md @@ -1,95 +1,69 @@ -# The Immutable Prototype-Shadowing Lazy Evaluation Pattern +# The Immutable Proxy-Delegator Lazy Evaluation Pattern When building complex JavaScript libraries (like date-time utilities), exposing numerous computed properties as getters on an object is common. However, computing them all upfront is expensive, and re-computing them on every access is wasteful. The standard solution is "Lazy Evaluation": evaluate the getter on first access, and then overwrite the getter with the literal value. But what if the base object is strictly **immutable** (via `Object.freeze`)? -This article details a highly optimized $O(1)$ pattern for securely lazy-evaluating properties on immutable objects using prototype shadowing and private fields. +This article details a highly optimized $O(1)$ pattern for securely lazy-evaluating properties on immutable objects using a Proxy-based delegator and private fields. ## The Problem: Mutating Frozen State A traditional lazy evaluation approach destroys and recreates the properties on the parent object. If the parent object is `Object.freeze()`'d for security (preventing API consumers from tampering with state), you cannot simply `Object.defineProperty` to overwrite the getter with a literal value. -To get around freezing, you might try taking all property descriptors, wiping the object, mapping the other getters to a new object, adding the evaluated value, and calling `Object.freeze()` on the new object. +To get around freezing, you might try taking all property descriptors, wiping the object, mapping the other getters to a new object, adding the evaluated value, and calling `Object.freeze()` on the new object. This operation runs in $O(N)$ time every single time *any* getter is accessed. -```javascript -// The O(N) approach - Extremely slow and memory-heavy - -get: function () { - const props = Object.getOwnPropertyDescriptors(this.#term); - this.#term = {}; // wipe - - // Re-assign all N other getters - Object.entries(props).forEach(([prop, desc]) => { - if (prop !== name) Object.defineProperty(this.#term, prop, desc); - }); - - const value = computeExpensiveValue(); - Object.defineProperty(this.#term, name, { value, enumerable: true }); - - return Object.freeze(value); -} -``` +## The Solution: Proxy-Delegator with Memoization -This operation runs in $O(N)$ time (where $N$ is the number of getters on the object) every single time *any* getter is accessed. In a hot loop, building and throwing away objects with dozens of descriptors wrecks memory (GC churn) and severely hits the CPU. - -## The Solution: Prototype Shadowing - -We can achieve lazy evaluation in $O(1)$ time by swapping out `Object.defineProperty` for `Object.create()`. +Tempo achieves lazy evaluation in $O(1)$ time using a **Delegator Proxy** that memoizes results back onto the target object. ```javascript // The O(1) approach - Extremely fast, zero overhead -#setTerm(name, defineFunction) { - Object.defineProperty(this.#term, name, { - configurable: false, - enumerable: false, - get: () => { - const value = defineFunction.call(this); // Evaluate the value - - // Prototype-shadow the getter with a frozen wrapper object - this.#term = Object.freeze(Object.create(this.#term, { - [name]: { - value, - configurable: false, - writable: false, - enumerable: true - } - })); - - return Object.freeze(value); - } - }); +#setLazy(target, name, defineFunction) { + const get = () => { + const value = defineFunction.call(this); // Evaluate the value + + // Memoize the value by defining it as a static property on the target + Object.defineProperty(target, name, { + value, + enumerable: true, + configurable: true, + writable: false + }); + + return value; + }; + + // Define the initial getter + Object.defineProperty(target, name, { get, enumerable: true, configurable: true }); } ``` ### How it Works -1. **Reassignment, not Mutation:** - We freeze the properties of the base object (`this.#term`) upfront. Instead of modifying the frozen object, we build a *new* object that has the literal `value` property, and we set its prototype to the *old* `this.#term`. Then, we point `this.#term` to the new object. Freezing prevents mutation, but it does not prevent variable reassignment. +1. **Proxy Entry Point:** + Tempo uses a single Proxy (the `delegate` helper) to catch the very first access to a property. This Proxy doesn't store state; it just routes the request to the lazy evaluator. 2. **Private Fields Bypass the Freeze:** - If `this.#term` were a public property (`this.term`), freezing the outer class `this` would prevent us from reassigning `this.term`. However, native JS Private Fields (`#term`) don't exist as properties on the object; they are internal engine slots. Thus, `Object.freeze(this)` cannot lock `#term`, allowing us to freely reassign the pointer to the new prototype chain internally while keeping it completely insulated from outside tampering. + The internal containers (`#term`, `#fmt`) are private fields. Native JS Private Fields don't exist as properties on the object; they are internal engine slots. Thus, even if the `Tempo` instance is frozen, we can still update the *internal* state of the container objects. 3. **Innate JS Engine Optimizations:** - When `.quarter` is evaluated next, it creates another object on top: - `[Newest Link (quarter)]` → `[Middle Link (qtr)]` → `[Base Object (un-evaluated getters)]` - - If the user asks for `.yearly` (not yet evaluated), the JS engine traverses the prototype chain transparently. V8 and SpiderMonkey are massively optimized for prototype traversal via Inline Caches. You exchange an `O(N)` property iteration penalty for an `O(K)` prototype lookup (where `K` is the number of evaluated properties), executing in Native C++ at lightning speed. + Once a property (e.g., `.quarter`) is evaluated, it is "baked" into the target object as a standard value property. Subsequent lookups bypass the Proxy and the getter entirely. The JS engine treats it as a raw property access, which is the fastest possible operation in JavaScript. 4. **Zero Over-allocation:** - Unused getters remain safely tucked away on the root object at the bottom of the prototype chain. They cost absolutely nothing in execution time or memory until they are needed. + Unused getters remain as simple function pointers. They cost absolutely nothing in execution time or memory until they are needed. ### Summary -By strategically combining **Private Fields**, **`Object.create()`**, and **Prototype lookups**, we can build securely immutable APIs that lazy-load computed getters with absolute minimal overhead. +By combining **Private Fields**, **Proxies**, and **Property Memoization**, Tempo builds securely immutable APIs that lazy-load computed getters with zero overhead after the initial call. ## 🌈 The Best of All Worlds -As of **v2.0.1**, Tempo maintains **`enumerable: true`** for all properties in its `#term` and `#fmt` containers. This design choice provides a unique trifecta of benefits: +As of **v2.1.2**, Tempo uses a **Proxy-Delegator** that combines the security of immutability with the speed of raw property access: 1. **Lazy by Default**: Properties are only evaluated when accessed, keeping the constructor near-instant. -2. **Targeted Evaluation**: Accessing a single property (e.g., `t.term.quarter`) only evaluates that specific getter. -3. **Transparent Discovery**: Because properties are enumerable, a simple `console.log(t.term)` will trigger the eager evaluation of *all* currently registered terms. +2. **Memoized Evaluation**: Once accessed (e.g., `t.term.quarter`), the result is "baked" into the instance using `Object.defineProperty`. +3. **$O(1)$ Performance**: Every access *after* the first is a direct property lookup—no Proxy traps, no prototype traversal. +4. **Transparent Discovery**: Because properties are enumerable, `console.log(t.term)` or `JSON.stringify` will trigger the evaluation of all registered terms at once, providing a perfect "snapshot" of the instance state. -This transparency is invaluable for debugging, as it allows developers to see the full state of the grammar-engine at a glance. To prevent terminal noise during these "Full Evaluation" events (especially on invalid dates), use the **`silent: true`** configuration option. +To prevent diagnostic noise during these full-evaluation events, initialize Tempo with **`silent: true`**. diff --git a/packages/tempo/doc/migration-guide.md b/packages/tempo/doc/migration-guide.md new file mode 100644 index 00000000..94eb9e15 --- /dev/null +++ b/packages/tempo/doc/migration-guide.md @@ -0,0 +1,47 @@ +# ⚠️ Migrating to Tempo v2.x + +Tempo v2.x introduces architectural improvements and a more modular engine. While we strive for backward compatibility, there are some key changes to consider when upgrading from v1.x. + +## 📦 Modular Architecture +Tempo is now split into a `core` engine and optional modules. + +### If you use the full package: +If you import from `@magmacomputing/tempo`, everything (except Plugin extensions, like .ticker()) is included and works exactly like v1.x. No changes are required. + +### If you want a lean bundle: +You can now import the core engine only: +```javascript +import { Tempo } from '@magmacomputing/tempo/core'; +``` +If you do this, you must manually import the features you need. Built-in features now self-register on import via side-effects. + +## 🔌 Feature Registration +Features like `mutation`, `duration`, `format`, and the `ticker` are now modular. + +### v1.x (Automatic) +In v1.x, all features were always present. + +### v2.x (Opt-in for Core) +If using the Core engine, simply import the module to activate the feature: +```javascript +import '@magmacomputing/tempo/duration'; +import '@magmacomputing/tempo/ticker'; +``` + +## 🗓️ Term Logic Refactor +The way Terms (Quarters, Seasons, Zodiacs, etc.) are handled has been unified. + +- **v1.x:** Some term properties were ad-hoc on the instance. +- **v2.x:** All term logic is centralized under the `.term` property or accessible via the `#` shorthand in `.set()` and `.add()`. + +Example of new syntax: +```javascript +// Snap to start of quarter +t.set({ start: '#quarter' }); + +// Add two quarters while preserving day-of-quarter +t.add({ '#quarter': 2 }); +``` + +## 🧪 Testing and Stability +v2.x has been hardened with a 100% pass rate on our regression suite. If you were relying on undocumented "quirks" or bugs in v1.x parsing, you may find that v2.x is more strict and deterministic. diff --git a/packages/tempo/doc/releases/versions.md b/packages/tempo/doc/releases/versions.md new file mode 100644 index 00000000..5b4d9149 --- /dev/null +++ b/packages/tempo/doc/releases/versions.md @@ -0,0 +1,49 @@ +# 📜 Version History + +Tempo v2.1.2 is a major milestone, delivering a more reactive architecture and rock-solid stability. + +## [v2.1.2] - 2026-04-16 + +### 🏗️ Modular Architecture +Tempo is now split into `core` and optional plugin/modules, allowing you to include only what you need. This reduces bundle size for users who only need the basic engine. + +### 📝 Improved Logging +Internal logging now uses context-aware Symbols. This decouples the logging logic from the core engine, allowing for cleaner diagnostics without performance overhead. + +### ⏱️ Static API +- Added `Tempo.duration()` static method for convenient duration creation without instantiating a full Tempo date object first. + +### 🔌 Side Effect Registration +Plugins now support automatic registration. +- The full `@magmacomputing/tempo` package includes all modules by default. +- Core users (`@magmacomputing/tempo/core`) can activate features simply by importing the corresponding module (e.g., `import '@magmacomputing/tempo/ticker'`). + +### 🛡️ 100% Reliability +The engine passes all regression tests, ensuring complete stability across: +- Parsing complex date strings. +- Calculation and relative math. +- Formatting routines. + +### 🗓️ Unified Term Logic +Terms (like Quarters and Seasons) are now fully integrated: +- Use `#` in `set()` to jump to boundaries (e.g., `t.set({ start: '#quarter' })`). +- Use `{#term}` in `format()` to embed semantic labels (e.g. "Second Quarter") directly into strings (e.g., `t.format('Today is {yyyy}-{mm}-{dd} in the {#quarter}')`. + +### ➗ Relational Term Math +A category-first feature. Shift dates by semantic "steps" with `.add({ '#quarter': 1 })`. Tempo preserves your relative duration within the term, jumping across gaps and handling overflows with mathematical precision. + +### 🔗 Fluent Immutable Boundaries +Term ranges now return fully functional, frozen `Tempo` instances for `start` and `end`. This allows for seamless chaining: +```javascript +t.term.qtr.start.format('{dd} {mmm}') +``` + +### ⚡ Ticker Reliability +Fully stabilized the Ticker subsystem: +- Resolved async generator hangs. +- Synchronized pulse counts ($N$ pulses for `limit: N`), guaranteeing 100% predictable reactive streams. + +### 🚀 Parsing Engine Optimization +- Re-engineered pattern generation for $O(1)$ instance creation. +- Improved support for custom layout literals in local/one-off parsers. +- Significant refinements to the natural language engine for even more intuitive relative-date handling ("next Friday", "two days ago", etc.). diff --git a/packages/tempo/doc/soft_freeze_strategy.md b/packages/tempo/doc/soft_freeze_strategy.md index 142a4d3d..c8406993 100644 --- a/packages/tempo/doc/soft_freeze_strategy.md +++ b/packages/tempo/doc/soft_freeze_strategy.md @@ -79,7 +79,12 @@ export function enumify(list, frozen = true) { To prevent a global discovery object from "trashing" the registry, the library implements a **Safe Merge** rule for all shared states. When merging external data (discovery or plugin): -- New keys are added. -- Existing keys are **preserved**. +- **Additive Only**: New keys are added. +- **Root Protection**: Core building blocks (like `NUMBER['one']` or `FORMAT['iso']`) are protected from being overwritten. -This ensures that while the library is extensible, its fundamental building blocks (like `NUMBER['one']`) remain immutable and secure. +This ensures that while the library is extensible, its fundamental logic remains deterministic and secure across all environments. + +--- + +> [!NOTE] +> **v2.1.2 Update**: The Soft Freeze is now tightly integrated with **Logify**. Internal state updates bypass the Proxy using a private Symbol, allowing the engine to remain "Silent" while performing complex transactional updates during the discovery phase. diff --git a/packages/tempo/doc/tempo.benchmarks.md b/packages/tempo/doc/tempo.benchmarks.md index 4edf7839..5a748f51 100644 --- a/packages/tempo/doc/tempo.benchmarks.md +++ b/packages/tempo/doc/tempo.benchmarks.md @@ -17,11 +17,12 @@ Timings were captured over **1,000 iterations** to measure micro-overhead and co ## 🏗️ Architectural Impact -### 1. Lazy Property Delegation ($O(1)$) +### 1. Proxy-Delegator Delegation ($O(1)$) -By using a [Lazy Proxy](../src/common/proxy.library.ts), the constructor returns instantly without populating the formatting (`fmt`) or term (`term`) objects. These registries are only discovered and shadow-linked on the first property access. +By using a **Proxy-Delegator** pattern, the constructor returns near-instantly without populating the formatting (`fmt`) or term (`term`) objects. These registries are only discovered and memoized on the first property access. - **Gain**: ~65% reduction in instantiation overhead. +- **v2.1.2 Update**: The Scan-and-Consume guard further stabilizes the "Zero-Cost Constructor" by ensuring that even with massive plugin lists, the entry-point remains $O(1)$. ### 2. The Master Guard (Fast-Fail) diff --git a/packages/tempo/doc/tempo.config.md b/packages/tempo/doc/tempo.config.md index cf20f692..68b41fa6 100644 --- a/packages/tempo/doc/tempo.config.md +++ b/packages/tempo/doc/tempo.config.md @@ -7,18 +7,18 @@ Settings are loaded in the following order (where later stages override earlier ones): 1. **Library Defaults**: Sensible out-of-the-box baseline. 2. **Persistent Storage**: Sticky user preferences (which merge into Defaults). -3. **Global Discovery**: Enterprise-level setup discovered via `Symbol.for($Tempo)`. -4. **Implicit/Explicit Initialization**: Baseline configuration via `Tempo.init()`. -5. **Instance Constructor**: Specific overrides for a single `new Tempo()` call. +3. **Global Discovery**: Enterprise-level setup discovered via `Symbol.for('$Tempo')`. +4. **Library Extension**: Dynamic feature registration via `Tempo.extend()`. +5. **Explicit Initialization**: Baseline configuration via `Tempo.init()`. +6. **Instance Constructor**: Specific overrides for a single `new Tempo()` call. --- ## 🔒 Registry Protection (Soft Freeze) -As of **v2.0.1**, Tempo implements a **Soft Freeze** strategy for core registries (`TIMEZONE`, `NUMBER`, `FORMAT`, etc.). - -- **Read-Only Proxy**: Registries are returned as read-only proxies. Any attempt to directly assign to them (e.g., `Tempo.TIMEZONE.myzone = '...' `) will fail or be ignored. -- **Controlled Extension**: To update a registry, you must use the provided extension methods like `Tempo.extend()` or `Tempo.registryUpdate()`. This ensures that internal caches (like the Master Guard regex) are correctly synchronized. +- **Read-Only Proxy**: Core registries (`TIMEZONE`, `FORMAT`, etc.) are returned as read-only proxies. Any attempt to directly assign to them will fail. +- **Controlled Extension**: To update a registry, you must use `Tempo.extend()` or `Tempo.init()`. This ensures internal caches (like the Master Guard regex) are synchronized. +- **Atomic Updates**: Multiple extensions are batched, ensuring that the parsing engine is only rebuilt once per change. This strategy prevents accidental state corruption while maintaining the flexible, extensible nature of the library. @@ -99,10 +99,10 @@ Tempo.init({ | `sphere` | `'north' \| 'south'`| Auto-inferred | Hemisphere for seasonal plugins. | | `rtfFormat` | `Intl.RTF` | `undefined` | Pre-configured relative time formatter. | | `rtfStyle` | `'long' \| 'short' \| 'narrow'` | `'narrow'` | Default style for relative time formatting. | -| `debug` | `boolean` | `false` | Enables internal log tracking. | -| `catch` | `boolean` | `false` | If true, invalid inputs return a Void instance. | -| `mode` | `'auto' \| 'strict' \| 'defer'` | `'auto'` | Controls the hydration strategy and parsing strictness. | -| `silent` | `boolean` | `false` | Suppresses both `console.error` and `console.warn` output. When combined with `catch: true`, expected failures (like invalid date strings) produce no console output. | +| `debug` | `boolean` | `false` | Enables internal log tracking using context-aware Symbols. | +| `catch` | `boolean` | `false` | If true, invalid inputs return a Void instance instead of throwing. | +| `mode` | `'auto' \| 'strict' \| 'defer'` | `'auto'` | Controls the hydration strategy (e.g., `defer` for Zero-Cost creation). | +| `silent` | `boolean` | `false` | Suppresses console output. Combined with `catch: true` for silent failover. | --- diff --git a/packages/tempo/doc/tempo.modularity.md b/packages/tempo/doc/tempo.modularity.md index 6424ef8d..afc15aff 100644 --- a/packages/tempo/doc/tempo.modularity.md +++ b/packages/tempo/doc/tempo.modularity.md @@ -81,11 +81,11 @@ export const MyModule = defineModule((options, TempoClass) => { There is a subtle but important distinction between how features are activated in Core mode: -* **`Tempo.extend(Module)`**: This is **Immediate and Explicit**. It applies the module to the class exactly when the line is executed. This is the safest pattern for most users. -* **`Tempo.init()`**: This is **Reactive Discovery**. It scans the global registry for any plugins that were imported via side effects (e.g., `import '@magmacomputing/tempo/ticker'`) and applies them all at once. +* **`Tempo.extend(Module)`**: This is **Immediate and Explicit**. It applies the module to the class exactly when the line is executed. This is the recommended pattern for modular applications. +* **`Tempo.init()`**: This is **Discovery-Driven**. It scans the global environment for any plugins that were imported via side effects (e.g., `import '@magmacomputing/tempo/ticker'`) and hydrates the engine all at once. > [!CAUTION] -> **The State Refresh**: `Tempo.init()` performs a **full state refresh** for the engine. It resets the global configuration, internal term registries, and formatting maps back to defaults before re-applying all currently registered plugins from the global discovery layer. While it does **not** wipe out manual monkey-patches to the `Tempo` prototype, it *does* clear all previously registered terms and custom formats. To ensure your custom logic is managed correctly within the initialization lifecycle, always use `Tempo.extend()` or encapsulate your changes within a formal plugin. +> **The Initialization Lifecycle**: `Tempo.init()` performs a **full state refresh**. It resets configuration, term registries, and formatting maps to defaults before re-applying all currently discovered plugins. To ensure your custom logic is managed correctly, always use `Tempo.extend()` or encapsulate changes within a formal plugin. -**The Trap**: If you import a side-effect plugin *after* you have already called `Tempo.init()`, the feature will **not** appear on the `Tempo` class. You would need to call `Tempo.init()` again to "refresh" the engine's feature set and pick up the latecomers. +**The Side-Effect Trap**: If you import a side-effect plugin *after* you have already called `Tempo.init()`, the feature will **not** automatically appear on the `Tempo` class. You would need to call `Tempo.init()` again or use `Tempo.extend()` to pick up the latecomers. diff --git a/packages/tempo/doc/tempo.shorthand.md b/packages/tempo/doc/tempo.shorthand.md index bf317f33..317cfc76 100644 --- a/packages/tempo/doc/tempo.shorthand.md +++ b/packages/tempo/doc/tempo.shorthand.md @@ -1,130 +1,103 @@ # Tempo Shorthand Engine -The Tempo Shorthand Engine provides a powerful, namespace-based syntax for resolving complex date/time ranges (Terms) such as fiscal quarters, daily periods, and zodiac signs. It allows you to navigate temporal cycles with high-performance, intuitive expressions. +The Tempo Shorthand Engine (the "Slick" engine) provides a powerful, namespace-based syntax for navigating and manipulating complex date/time cycles (Terms). It allows you to treat high-level concepts like Quarters, Seasons, and Daily Periods as first-class units of measure. -## 1. Syntax Overview +## 1. The Three Modes of Shorthand -Shorthand follows the pattern: `#[namespace].[modifier][repeat][range]` +Shorthand behavior changes depending on whether you provide a **String**, an **Object**, or a **Structural Key**. -- **Namespace**: The registered key of a Term Plugin (e.g., `qtr`, `period`, `zodiac`). -- **Separator**: A literal dot `.` used to trigger range-mode. -- **Modifier**: Optional symbols to control direction and inclusivity (e.g., `>`, `<=`). -- **Repeat**: Optional digit to shift by multiple boundaries (e.g., `>2`). -- **Range (Optional)**: A specific range identifier defined by the plugin (e.g., `q1`, `morning`, `aries`). +### A. Navigation Mode (String Shorthand) +**Used in:** `.set()`, `.add()`, `.until()`, `.since()`, and the Ticker. +**Pattern:** `#[namespace].[modifier][repeat][range]` +**Best for:** Jumping to specific boundaries (e.g., "the start of the next Q1"). -> [!IMPORTANT] -> **Prerequisite**: Shorthand resolution requires the Terms Module to be activated in Core environments (e.g., `Tempo.extend(TermsModule)` or `import '@magmacomputing/tempo/term/standard'`). +```javascript +t.set('#qtr.>q1'); // Snaps to the start of the next available Q1 +t.add('#period.next'); // Jumps to the start of the next defined period +``` -> Shorthand literals are **not** supported in the `Tempo` constructor. They are resolved relative to an existing instance and must be used via instance methods (`.set()`, `.add()`, `.until()`, `.since()`) or the Ticker. +### B. Relational Mode (Object Shorthand) +**Used in:** `.add()` and `.set()`. +**Pattern:** `{ '#namespace': value }` +**Best for:** Shifting by semantic "steps" while preserving your relative position. ---- +```javascript +// Relational Add: Preserves your offset within the cycle +t.add({ '#qtr': 1 }); // If you are 20 days into Q1, you resolve to 20 days into Q2. -## 2. Shorthand Modifiers +// Relational Set: Absolute index alignment +t.set({ '#qtr': 2 }); // Aligns to the start of the 2nd quarter of the current year +``` -The engine supports a variety of modifiers to control how a term is resolved. Modifiers can be combined with optional repeat counts (e.g., `>2`). +### C. Structural Mode (Key Shorthand) +**Used in:** `.set()`. +**Pattern:** `{ start: '#namespace', end: '#namespace' }` +**Best for:** Snapping a date to the precise boundaries of its current term. -| Modifier | Type | Meaning | Example | -| :--- | :--- | :--- | :--- | -| `>` | **Forward Shifter** | Move forward to the next term boundary. | `#qtr.>` | -| `<` | **Backward Shifter** | Move backward to the previous term boundary. | `#qtr.<` | -| `>=` | **Inclusive Forward** | Matches current term or next forward boundary. | `#qtr.>=q1` | -| `<=` | **Inclusive Backward** | Matches current term or previous backward boundary. | `#qtr.<=q1` | -| `+` | **Future Relative** | Offset forward by N instances (default 1). | `#qtr.+2` | -| `-` | **Past Relative** | Offset backward by N instances (default 1). | `#qtr.-1` | -| `next` | **Alias (>)** | Semantically identical to `>`. | `#qtr.next` | -| `prev` | **Alias (<)** | Semantically identical to `<`. | `#qtr.prev` | -| `last` | **Alias (<)** | Semantically identical to `<`. | `#qtr.last` | -| `this` | **Identity** | Resolves the term containing the current point. | `#qtr.this` | -| *none* | **Contextual** | Resolves the nearest instance (absolute). | `#qtr.q1` | +```javascript +t.set({ start: '#qtr' }); // Snaps to the exact start of the current quarter +t.set({ end: '#year' }); // Snaps to the final nanosecond of the current year +``` --- -## 3. Usage & Method Behaviors - -The shorthand resolves differently depending on the method invoked. - -### `.set(shorthand)` - Absolute Alignment -Aligns the instance forward or backward to the matched term boundary. -- `t.set('#zodiac.aries')`: Snaps to the start of the current year's Aries. -- `t.set('#qtr.>q1')`: Snaps to the start of the *next* available Q1. - -### `.add(shorthand)` - Targeted Momentum -Advances the instance relative to its current position. -- **Cycle Shifting**: `t.add('#qtr')` shifts forward by one quarter cycle, preserving the relative duration from cycle start (e.g. 2 months in -> 2 months into next quarter). -- **Multi-Boundary**: `t.add('#qtr.>2')` moves forward exactly two quarter boundaries, preserving the relative cycle offset. -- **Step Shifting**: Providing an object like `t.add({ '#qtr': 1 })` allows shifting by a specific number of "slots" or "steps" within the term's cycle while preserving your relative duration from the start of the term. +## 2. Navigation Modifiers -### `.until(shorthand)` - Duration Forward -Returns a **Duration** representing the time remaining **until** the target is reached. -- `t.until('#qtr.q1', 'days')`: Calculates days until the next Q1. +Modifiers control the direction and inclusivity of the search. -### `.since(shorthand)` - Duration Backward -Returns a **Duration** representing the time elapsed **since** the target was passed. -- `t.since('#period.morning')`: Calculates time elapsed since the start of the current morning. +| Modifier | Meaning | Behavior | +| :--- | :--- | :--- | +| `>` | **Forward (Exclusive)** | Finds the next boundary strictly *after* the current time. | +| `<` | **Backward (Exclusive)** | Finds the previous boundary strictly *before* the current time. | +| `>=` | **Forward (Inclusive)** | Returns the current term if it contains the cursor; otherwise, the next. | +| `<=` | **Backward (Inclusive)** | Returns the current term if it contains the cursor; otherwise, the previous. | +| `+` | **Relative Future** | Alias for `>`. | +| `-` | **Relative Past** | Alias for `<`. | +| `this` | **Identity** | Resolves the term currently containing the cursor. | --- -## 4. Resolution Logic: Proximity vs. Momentum +## 3. Proximity vs. Momentum -The "Slick" engine uses a bifurcated sorting strategy to ensure results are intuitive: +The "Slick" engine uses two different sorting strategies to ensure results feel "natural." -1. **Absolute Terms** (`#namespace.id`): - Uses **Past-Leaning Resolution**. The engine finds the latest matching range whose start date is at or before the current cursor (this favors the current or most recent instance). - -2. **Shifters & Directed Targets** (`#namespace.>id`): - Uses **Chronological Momentum**. - - Modifiers `>` and `<` are **exclusive** (start/end must be strictly after/before cursor). - - Modifiers `>=` and `<=` are **inclusive** (current term is allowed if it contains the cursor). +### Proximity Resolution (Identifiers) +When you use a simple identifier like `#zodiac.aries`, Tempo uses **Past-Leaning Resolution**. It finds the most recent instance of Aries that has already started. If you are *currently* in Aries, it returns the start of the current one. -### Examples - -```typescript -// Assume today is Dec 25th 2024 (Explicitly North Hemisphere, Q4) -const t = new Tempo('2024-12-25', { sphere: 'north' }); - -// ABSOLUTE: Finds latest Q1 at or before Dec 25th (Jan 1st 2024) -t.set('#qtr.q1'); // 2024-01-01 - -// DIRECTED: Finds the next Q1 AFTER current and applies current Q-offset (~85 days) -t.add('#qtr.>q1'); // 2025-03-27 - -// MULTI-SHIFT: Advances two boundary quarters forward and applies current Q-offset -t.add('#qtr.>2'); // 2025-06-25 -``` +### Momentum Resolution (Shifters) +When you use a shifter like `>q1`, Tempo uses **Chronological Momentum**. It ignores where you are now and looks exclusively into the future for the next occurrence. --- -## 5. Advanced Behaviors +## 4. The "Cycle Preservation" Guarantee + +One of Tempo's premium features is its ability to maintain your **relative offset** when shifting across terms. -### Cycle Identity Preservation -The engine is "context-aware" across boundaries. When shifting by term, Tempo maintains the identity of the current state: -- If you are in **Q2 2026** and shift by `+1` Quarter, it resolves to **Q3 2026**. -- If you are in **morning** of Jan 1st and shift by `+1` Period, it resolves to the next registered period (e.g., `midmorning`). +If you are 45% of the way through a **Morning** period and you call `t.add({ '#period': 1 })`, Tempo doesn't just add a fixed number of hours. It: +1. Determines your relative percentage/offset within the current Morning. +2. Finds the boundaries of the *next* registered period (e.g., Afternoon). +3. Calculates the same 45% point within that new period. -### Multi-Day & Multi-Year Resolution -Terms automatically resolve across logical boundaries: -- **Daily Cycles**: (e.g., `#period`) resolve within a 3-day window (`yesterday`, `today`, `tomorrow`) to ensure smooth transit across midnight. -- **Yearly Cycles**: (e.g., `#qtr`, `#zodiac`) resolve within a 3-year window to handle boundary-crossing ranges (like North vs South fiscal years). +This ensures that "shifting by a quarter" or "shifting by a period" feels mathematically correct even when those terms have different durations. --- -## 6. Development Constraints (Range-Keys) +## 5. Development Constraints -When defining ranges in a Terminology Plugin, you must adhere to the **Golden Rules of Range-Keys** to avoid lexer collisions with modifiers. +When building custom Terminology Plugins, you must follow the **Golden Rules of Range-Keys** to ensure the lexer can resolve them: -> [!CAUTION] -> **Reserved Characters**: Range-Keys **MUST NOT** contain any of the following characters: +> [!IMPORTANT] +> **No Reserved Characters**: Range-Keys (e.g., `q1`, `aries`) must not contain: > `> < + = , . ! @ # $ % ^ & * ( ) [ ] { }` -> These characters are reserved for directional shifters and lexer boundaries. > [!WARNING] -> **Numeric Anchoring**: Range-Keys **MUST NOT** start with a digit (0-9). -> For example: `1q` is **INVALID**, use `q1` instead. Leading numbers are reserved for repetition counts. +> **No Leading Numbers**: Range-Keys must not start with a digit. +> `1q` is **Invalid** (Lexer thinks it's a repeat count). Use `q1` instead. --- -## 7. Best Practices +## 6. Best Practices -- **Sphere Locking**: When working with hemisphere-dependent terms (like Quarters), ensure your Tempo instance has an explicit `sphere` config (`north` or `south`) for deterministic results. -- **Error Handling**: Use `{ catch: true }` in your Tempo config if you want to gracefully handle unknown shorthand without throwing. -- **Step Shifting**: Use integer values (e.g. `{ '#qtr': 1 }`) in a **Ticker** to create standard recurring intervals. +- **Explicit Spheres**: Always set `sphere: 'north'` or `'south'` in your config if using seasonal terms. +- **Method Intent**: Use **String shorthand** for "Jumping" to boundaries and **Object shorthand** for "Shifting" relative to your current time. +- **Fail-Safe**: Use `catch: true` in your global config to allow shorthand resolution to fail silently (returning a `void` instance) instead of throwing. diff --git a/packages/tempo/img/hourglass-svgrepo-com.svg b/packages/tempo/img/logo.svg similarity index 100% rename from packages/tempo/img/hourglass-svgrepo-com.svg rename to packages/tempo/img/logo.svg diff --git a/packages/tempo/index.md b/packages/tempo/index.md new file mode 100644 index 00000000..34dbed4c --- /dev/null +++ b/packages/tempo/index.md @@ -0,0 +1,26 @@ +--- +layout: home + +hero: + name: "Tempo" + text: "The Professional Date-Time Library" + tagline: "Fluent, Immutable, and Zero-Cost wrapper for the Temporal API." + image: + src: /logo.svg + alt: Tempo Logo + actions: + - theme: brand + text: Get Started + link: /README + - theme: alt + text: View on GitHub + link: https://github.com/magmacomputing/magma/tree/main/packages/tempo + +features: + - title: "Zero-Cost Constructor" + details: "Lazy evaluation and smart matching ensure instantiation overhead is near-zero, even with massive plugin lists." + - title: "Relational Math" + details: "Shift by semantic terms (Quarters, Seasons, Periods) while preserving your relative cycle offset." + - title: "Hardened & Modular" + details: "Built for resilience in complex monorepos with proxy-protected registries and decoupled diagnostics." +--- diff --git a/packages/tempo/package.json b/packages/tempo/package.json index 15451cb4..69f037dc 100644 --- a/packages/tempo/package.json +++ b/packages/tempo/package.json @@ -155,7 +155,11 @@ "build:resolve": "tsx bin/resolve-types.ts", "clean": "tsc -b --clean && rm -rf dist", "publish": "npm publish --access public", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "docs:api": "typedoc", + "docs:dev": "npm run docs:api && vitepress dev", + "docs:build": "npm run docs:api && vitepress build", + "docs:preview": "vitepress preview" }, "files": [ "doc/", @@ -166,9 +170,12 @@ }, "devDependencies": { "@js-temporal/polyfill": "^0.5.1", - "@magmacomputing/library": "^2.1.2", + "@magmacomputing/library": "workspace:*", "@rollup/plugin-alias": "^6.0.0", - "magic-string": "^0.30.21" + "magic-string": "^0.30.21", + "typedoc": "^0.28.19", + "typedoc-plugin-markdown": "^4.11.0", + "vitepress": "^1.6.4" }, "directories": { "doc": "doc", diff --git a/packages/tempo/plan/release-process.md b/packages/tempo/plan/release-process.md new file mode 100644 index 00000000..0c0597e6 --- /dev/null +++ b/packages/tempo/plan/release-process.md @@ -0,0 +1,60 @@ +# 🚀 Tempo Release Process (v2.1.2+) + +This document outlines the automated release process for the Tempo monorepo using **release-it**. + +## 📋 Prerequisites Checklist + +Before running the release command, ensure the following are met: + +1. **NPM Authentication**: + You must be logged into NPM. Verify with: + ```bash + npm whoami + ``` + If not logged in, run `npm login`. + +2. **GitHub Authentication**: + `release-it` needs to create Tags and GitHub Releases. + - **GitHub Token**: Ensure you have a Personal Access Token (PAT) with `repo` scope. + - **Environment Variable**: Export your token as `GITHUB_TOKEN`: + ```bash + export GITHUB_TOKEN="your_token_here" + ``` + +3. **Clean Git Directory**: + Commit all your changes before running the release. `release-it` will refuse to run with a dirty working directory. + +4. **Main Branch**: + Always perform releases from the `main` branch. + +## 🛠️ How to Publish a New Version + +1. **Stage your Changes**: + Add any notable changes to the `## [Unreleased]` section of the root **`CHANGELOG.md`**. + +2. **Run the Release Command**: + From the monorepo root, run: + ```bash + npm run release + ``` + +3. **Follow the Interactive Prompts**: + `release-it` will ask you to: + - Select the next version (Patch, Minor, Major). + - Review the changelog. + - Confirm the git commit and tag. + - Confirm the NPM publish. + - Confirm the GitHub Release creation. + +## 🔗 Automated Workflow Details + +The `npm run release` command triggers the following automated steps: +- **`npm test`**: Runs the full test suite. +- **Version Bumping**: Bumps the version in the root `package.json` and synchronizes both `@magmacomputing/tempo` and `@magmacomputing/library` packages. +- **`after:bump` Hook**: Automatically builds both packages *after* the version bump to ensure the built artifacts contain the correct version. +- **Changelog Automation**: The `keep-a-changelog` plugin automatically converts the `[Unreleased]` section into a new version block with the current date. +- **Git Operations**: Commits the version bump and changelog update, tags the release (e.g., `v2.1.3`), and pushes to GitHub. +- **NPM & GitHub**: Publishes the packages to NPM and creates a formal release on GitHub. + +--- +*Maintained by Magma Computing. For internal support, contact the project lead.* diff --git a/packages/tempo/public/bundle-demo.html b/packages/tempo/public/bundle-demo.html new file mode 100644 index 00000000..a191a2cb --- /dev/null +++ b/packages/tempo/public/bundle-demo.html @@ -0,0 +1,75 @@ + + + + + + Tempo Bundle Demo + + + + +

Tempo Bundle Demo

+

Loaded via a plain <script> tag (no import-maps, no modules).

+
Running…
+ + + + + + + + \ No newline at end of file diff --git a/packages/tempo/public/logo.svg b/packages/tempo/public/logo.svg new file mode 100644 index 00000000..dc052b0f --- /dev/null +++ b/packages/tempo/public/logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/packages/tempo/rollup.config.js b/packages/tempo/rollup.config.js index ea22bffc..74460d19 100644 --- a/packages/tempo/rollup.config.js +++ b/packages/tempo/rollup.config.js @@ -3,58 +3,61 @@ import resolve from '@rollup/plugin-node-resolve'; import MagicString from 'magic-string'; /** - * Custom logic to route modules based on origin. - * We want Tempo code in the root and internal library code in lib/ + * Rollup Configuration for Tempo + * + * 1. Global IIFE Bundle: Single file for -``` - -### Browser (Script Tag) - -For legacy environments or simple prototypes, use the single-file bundle: - -```html - - -``` - ---- - -## Installation - -```bash -npm install @magmacomputing/tempo -``` - ---- - -## ✨ What's New in v2.1.2 (Stabilized) -The **v2.1.2** release represents the stabilization of the modular architecture and the introduction of advanced relational math: - -- **Modular Architecture**: Tempo is now split into **Core** (lite) and **Full** (batteries-included) versions. Features like Tickers and Durations are now side-effectable plugins. -- **Relational Math**: Shifting by terms (e.g., `.add({ '#quarter': 1 })`) now uses **Cycle Preservation**, maintaining your relative offset within semantic cycles. -- **Scan-and-Consume Guard**: A high-performance internal matching engine that enables $O(1)$ instantiation even with dozens of active terminology plugins. -- **Logify & Symbol Internalization**: Internal diagnostics and lifecycle hooks are now protected by context-aware Symbols, preventing state leakage and ensuring monorepo compatibility. - ---- - -> [!IMPORTANT] -> `Tempo` requires an environment with native `Temporal` support (Modern Runtimes like Node.js 20+, Deno, or Bun). -> If your environment is older, you must provide your own polyfill. - -### Build Target - -Tempo is compiled to **ES2022**. This target supports modern JavaScript features like **Private Class Fields** (`#property`) while maintaining compatibility with the vast majority of modern browsers and server-side runtimes (Node 20+, Deno, Bun). - -### Polyfilling (if required) - -If you need to support older environments, we recommend `@js-temporal/polyfill`: - -```bash -npm install @js-temporal/polyfill -``` - -Then, import it at the very top of your application entry point: - -```typescript -import '@js-temporal/polyfill'; -``` - -### 💻 Server-Side (Node.js, Deno, Bun) - -`Tempo` is a native ESM package. In modern runtimes, simply import the class: - -```typescript -import { Tempo } from '@magmacomputing/tempo'; - -const t = new Tempo('next Friday'); -console.log(t.format('{dd} {mon} {yyyy}')); -``` - - -``` ---- - -## Parsing - -`Tempo`'s strongest feature is its flexible parsing engine. It can interpret: - -- **ISO Strings**: `2024-05-20T10:00:00Z` -- **Short Dates**: `20-May`, `May 20` (locale-aware) -- **Relative Strings**: `next Monday`, `last Friday`, `2 days ago` -- **Numbers/BigInt**: Unix timestamps in milliseconds or nanoseconds -- **Temporal Objects**: `ZonedDateTime`, `PlainDate`, etc. - -### Snippets & Layouts -The parsing engine uses a library of RegEx patterns. -You can extend these patterns a) globally (via `Tempo.init()`) or b) per instance (via options to `new Tempo`. - -`Tempo` also supports **Event** and **Period** aliases. These can be simple strings or functions that return a value to be parsed. When using functions, ensure you use the `function` keyword to maintain proper `this` binding to the `Tempo` instance. - -```typescript -Tempo.extend({ - event: { - 'birthday': '20 May', - 'tomorrow': function () { return this.add({ days: 1 }) }, - } -}); -``` - -- [Layout Patterns Guide](./tempo.layout.md): Details on creating custom parsing patterns and using relative units. -- [Weekday Parsing Guide](./tempo.weekday.md): Deep dive into relative weekday expressions (e.g., "next Monday"). -- [Custom Patterns & Snippets](./tempo.pattern.md): Advanced guide on how Tempo translates layouts into regex. - -### US-Style Dates (Ambiguous Digits) -When parsing dates comprised entirely of digits (e.g., `04012026`), the input can be visually ambiguous: Is it `04-Jan-2026` (Day-Month-Year) or `Apr-01-2026` (Month-Day-Year)? - -Tempo solves this elegantly using **reasonable defaults and TimeZone awareness**: -1. **TimeZone Detection**: - Tempo will (if not provided) infer the timeZone from the runtime environment. - If you do provide a `timeZone` it should be an IANA timezone identifier or an "±hh:mm" offset. - If the timeZone is associated with one of the locales that suggest month-day-year order (which defaults to `en-US`), it assumes the input is US-style (Tempo.parse.mdyLocales) -2. **Prioritized Parsing**: - - If the timeZone favors US-style, Tempo tries the inbuilt **Month-Day-Year (`mdy`)** parsing layout *first*. - - If the timeZone favors the rest of the world, Tempo tries the inbuilt **Day-Month-Year (`dmy`)** parsing layout *first*. -3. **Automatic Fallback**: - If the first layout fails (for example, reading `15012026` as `mdy` fails because there is no 15th month), Tempo will automatically "re-try" using the alternate layout. - -You can configure what timeZone or specific layouts trigger this behavior in the configuration options: -```typescript -const usDate = new Tempo('04012026', { timeZone: 'America/New_York' }); // Parsed as Apr-01-2026 -const ukDate = new Tempo('04012026', { timeZone: 'Europe/London' }); // Parsed as 04-Jan-2026 -``` -*(Note: This logic only applies to **Parsing** digits-only input. **Formatting** US-style output remains dependent on the `{mm}{dd}{yyyy}` layout string you choose to output.)* - ---- - -## Formatting - -Formatting uses a placeholder syntax similar to many template engines: - -| Placeholder | Description | Type | Range | Example | -| :--- | :--- | :--- | :--- | :--- | -| `{yyyy}` | Year | `4-digit` | `0001-9999` | `2024` | -| `{yw}` | ISO Week-numbering Year | `4-digit` | `0001-9999` | `2024` | -| `{yy}` | Year | `2-digit` | `00-99` | `24` | -| `{mm}` | Month | `2-digit` | `01-12` | `05` | -| `{mon}` | Full Month Name | `string` | `January - December` | `June` | -| `{mmm}` | Month Name | `3-char string` | `Jan - Dec` | `Jun` | -| `{dd}` | Day of Month | `2-digit` | `01-31` | `20` | -| `{day}` | Day of Month | `1-2 digit` | `1-31` | `20` | -| `{wkd}` | Full Weekday Name | `string` | `Monday - Sunday` | `Monday` | -| `{www}` | Weekday Name | `3-char string` | `Mon - Sun` | `Mon` | -| `{dow}` | Day of Week (Mon-Sun) | `1-digit` | `1-7` | `1` | -| `{ww}` | Week of Year | `1-2 digit` | `1-53` | `21` | -| `{hh}` | Hour | `1-2 digit` | `0-24` | `14` | -| `{HH}` | Hour (with meridiem) | `1-2 digit` | `1-12` | `02pm` | -| `{mi}` | Minutes | `2-digit` | `00-59` | `05` | -| `{ss}` | Seconds | `2-digit` | `00-59` | `05` | -| `{ms}` | Milliseconds | `3-digit` | `000-999` | `005` | -| `{us}` | Microseconds | `3-digit` | `000-999` | `000` | -| `{ns}` | Nanoseconds | `3-digit` | `000-999` | `000` | -| `{ff}` | Fractional Seconds | `9-digit` | `0-999999999` | `005000000` | -| `{ts}` | Unix Timestamp | `digits` | `n/a` | `1716163200000` | -| `{#term}` | Unified Term Identity | `string` | `n/a` | `{#qtr}` or `{#quarter}` | - -Example: -```typescript -const t = new Tempo(); -t.format('{dd} {mon} {yyyy}'); // "24 January 2026" -``` - -### ISO 8601 Week Dates -*(Note: `{yw}` represents the ISO week year, which may differ from `{yyyy}` at the start or end of a calendar year if the current date belongs to an ISO week from the adjacent year.)* - -Tempo supports the **ISO 8601 Week Date** system, which is commonly used in business and logistics for unambiguous weekly scheduling. - -- **`{ww}`**: Represents the ISO week number (01–53). -- **`{yw}`**: Represents the ISO week-numbering year. - -A week in this system always starts on a **Monday**. Week 01 is defined as the week with the year's first Thursday (or the week containing January 4th). - -To format a standard ISO week date (e.g., `2024-W21`), use both placeholders together: -```typescript -const t = new Tempo('2024-05-20'); -t.format('{yw}-W{ww}'); // "2024-W21" -``` - ---- - -## Manipulation - -`Tempo` instances are **immutable**. Methods like `add` and `set` return a *new* `Tempo` instance. - -### `add(payload, options?)` -Adds a duration (positive or negative) or a date-time payload to the instance. -```typescript -t.add({ days: -1, hours: 2 }); -t.add('tomorrow'); -``` - -### `set(payload, options?)` -Sets the instance to a specific point or relative position. -```typescript -t.set({ hour: 0 }); // Midnight -t.set({ start: 'month' }); // Start of the current month -t.set({ end: '#quarter' }); // End of the current fiscal quarter -``` - -### `until(dateTime, unit?)` -Calculates the duration until another date-time. -```typescript -t.until('2024-12-25', 'days'); // Returns number of days -t.until('2024-12-25'); // Returns Temporal.Duration object, with an 'iso' property (ISO 8601 duration format) -``` - -### `since(dateTime, unit?)` -Calculates the elapsed time since another date-time (returns a human-readable string). -```typescript -t.since('yesterday', 'days'); // "1d ago" -t.add({days:-2}).set({period:'afternoon'}).since(); // Returns ISO 8601 duration format (e.g. 'P1DT20H59M49.290589287S') -``` - -### `compare(t1, t2)` -Static method which can be used to sort Tempo's across different timeZones -```typescript -const t1 = new Tempo('2024-05-20', { timeZone: 'America/New_York' }); -const t2 = new Tempo('2024-05-20', { timeZone: 'Europe/London' }); -[t1,t2].sort(Tempo.compare).forEach(t => console.log('timeZone: ', t.config.timeZone)); -// timeZone: Europe/London -// timeZone: America/New_York -``` -or to compare `Tempo` instances as "before" (-1), "same-as" (0), or "after" (1) -```typescript -const t1 = new Tempo('2024-05-20', { timeZone: 'America/New_York' }); -const t2 = new Tempo('2024-05-20', { timeZone: 'Europe/London' }); -Tempo.compare(t1, t2); // 1, meaning t1 is 'later than' t2 -``` - ---- - -## Plugin System - -Tempo is designed to be lean. Non-core features like the `ticker` or advanced business logic can be added via the plugin system. - -### Extending Tempo -To add a plugin, use the static `extend()` method. - -```typescript -import { Tempo } from '@magmacomputing/tempo/core'; -import { TickerModule } from '@magmacomputing/tempo/ticker'; - -Tempo.extend(TickerModule); -``` - -- [Plugin Development Guide](./tempo.plugin.md): A detailed overview of the `Tempo.extend()` API and best practices for creating custom extensions. - -> [!NOTE] -> **Selective Immobility**: When you extend Tempo, the base methods (like `format`, `add`, `set`) are protected. You can add NEW functionality, but you cannot overwrite the essential behavior of the library. - ---- - -## Ticker (Optional Plugin) - -`Tempo.ticker` creates a reactive stream of `Tempo` instances, making it easy to build clocks or countdowns. -**Note**: This requires the `TickerModule` to be specifically installed first, when using the 'Tempo Core' package. - -```typescript -// Pattern: Async Generator, which emits a new Tempo instance every second -for await (const t of Tempo.ticker()) { - console.log(t.format('{hh}:{mi}:{ss}')); -} -``` - -See the [Tempo Ticker guide](./tempo.ticker.md) for full details and API signatures. - ---- - -## Plugin (Terms) - -`Tempo` can be extended with 'terms' — plugins that calculate complex date ranges. - -### Unified Term Logic (v2.0.0) - -Terms are now fully integrated into the base `set()`, `add()`, `until()` and `format()` methods via the `#` indicator: - -1. **Anchored Mutations**: Jump to the `start`, `mid`, or `end` of any term: - ```typescript - t.set({ start: '#quarter' }); // April 1st (if in Q2) - t.set({ end: '#season' }); // Nov 30th (if in Autumn) - ``` -2. **Identity Placeholders**: Embed term identities into formatting strings: - - `{#qtr}`: Returns the technical key (e.g., `"Q2"`). - - `{#quarter}`: Returns the semantic label (e.g., `"Second Quarter"`), falling back to the key if no label exists. - -3. **Term Traversal (Math)**: Shift the date by semantic "steps" using `#term` units in `.add()`: - ```typescript - t.add({ '#quarter': 1 }); // Move to the same day/time in the NEXT quarter - t.add({ '#season': -1 }); // Move back one season - t.add({ '#morning': 1 }); // Jump across gaps to the next morning period - ``` - *Note: Relational math preserves your relative duration from the start of the term and applies overflow constraints.* - -### Persistent Access -Terms remain accessible via the `t.term` getter for programmatic use. The `start` and `end` boundaries are returned as **fluent, immutable Tempo instances**: -- `t.term.qtr`: Current fiscal calendar quarter object. -- `t.term.szn`: Current meteorological season (North/South hemisphere-aware). -- `t.term.zdc`: Current Western/Chinese astrological sign. - -```typescript -const q = t.term.qtr; -console.log(q.start.format('{dd} {mmm}')); // Fluent formatting directly from the term! -console.log(q.end.since(t, 'days')); // Calculate days remaining in the quarter -``` - -See the [Tempo Terms guide](./tempo.term.md) for full details and plugin development. - ---- - -## Context & Configuration - -Global settings can be configured using [`Tempo.init()`](./tempo.config.md). -This will affect any new Tempo instances created (but not affect any existing instances). - -```typescript -Tempo.init({ - timeZone: 'Europe/London', - locale: 'en-GB' -}); -``` - -### TIMEZONE Aliases -For convenience, `timeZone` configurations accept both strict IANA identifiers (e.g., `Australia/Sydney`) and common abbreviations. -Tempo will automatically translate these abbreviations before passing them to the underlying engine (e.g., `utc` -> `UTC`, `pst` -> `America/Los_Angeles`). - -These are stored in the `Tempo.TIMEZONE` registry, which is protected by **Soft Freeze** but remains extensible via `Tempo.registryUpdate()`. - -See the [Configuration Guide](./tempo.config.md#timezone-registry) for the complete list of default aliases. - -Instances can also be created with specific options: -```typescript -new Tempo('2024-05-20', { timeZone: 'AEST', debug: true }); -``` - ---- - -## Debugging - -Tempo includes a robust debugging mode that tracks internal mutations and parsing decisions. - -See the [Tempo Debugging guide](./tempo.debugging.md) for full details on using the `debug: true` flag and the `tempo.log` getter. - ---- - -## Technical References -- [API Reference](./tempo.api.md) -- [Cookbook](./tempo.cookbook.md) -- [Library Functionality](./tempo.library.md) -- [Architecture & Internal Protection](./architecture.md) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/README.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/README.md deleted file mode 100644 index 0501d669..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/README.md +++ /dev/null @@ -1,22 +0,0 @@ -[**@magmacomputing/tempo**](../../../README.md) - -*** - -## Interfaces - -- [BaseOptions](interfaces/BaseOptions.md) -- [Config](interfaces/Config.md) -- [Discovery](interfaces/Discovery.md) -- [Parse](interfaces/Parse.md) -- [PluginContainer](interfaces/PluginContainer.md) -- [State](interfaces/State.md) - -## Type Aliases - -- [Match](type-aliases/Match.md) -- [MatchExtend](type-aliases/MatchExtend.md) -- [OptionsKeep](type-aliases/OptionsKeep.md) -- [PatternOption](type-aliases/PatternOption.md) -- [PatternOptionArray](type-aliases/PatternOptionArray.md) -- [Registry](type-aliases/Registry.md) -- [TimeStamp](type-aliases/TimeStamp.md) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/BaseOptions.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/BaseOptions.md deleted file mode 100644 index d34856fa..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/BaseOptions.md +++ /dev/null @@ -1,241 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -Defined in: [tempo.type.ts:155](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L155) - -the Options object found in a config-module, or passed to a call to Tempo.init({}) or 'new Tempo({})' - -## Extended by - -- [`BaseOptions`](../../Tempo/interfaces/BaseOptions.md) - -## Properties - -### calendar - -> **calendar**: `CalendarLike` - -Defined in: [tempo.type.ts:162](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L162) - -Temporal calendar - -*** - -### catch - -> **catch**: `boolean` \| `undefined` - -Defined in: [tempo.type.ts:159](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L159) - -catch or throw Errors - -*** - -### debug - -> **debug**: `boolean` \| `undefined` - -Defined in: [tempo.type.ts:158](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L158) - -additional console.log for tracking - -*** - -### discovery - -> **discovery**: `string` \| `symbol` - -Defined in: [tempo.type.ts:157](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L157) - -globalThis Discovery Symbol - -*** - -### event - -> **event**: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> - -Defined in: [tempo.type.ts:174](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L174) - -custom date aliases (events). - -*** - -### formats - -> **formats**: `Property`\<`any`\> - -Defined in: [tempo.type.ts:176](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L176) - -custom format strings to merge in the FORMAT enum - -*** - -### layout - -> **layout**: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -Defined in: [tempo.type.ts:173](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L173) - -patterns to help parse value - -*** - -### locale - -> **locale**: `string` - -Defined in: [tempo.type.ts:163](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L163) - -locale (e.g. en-AU) - -*** - -### mdyLayouts - -> **mdyLayouts**: [`Pair`](../../../../type-aliases/Pair.md)[] - -Defined in: [tempo.type.ts:171](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L171) - -swap parse-order of layouts - -*** - -### mdyLocales - -> **mdyLocales**: `string` \| `string`[] - -Defined in: [tempo.type.ts:170](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L170) - -locale-names that prefer 'mm-dd-yy' date order - -*** - -### mode? - -> `optional` **mode?**: `"auto"` \| `"strict"` \| `"defer"` - -Defined in: [tempo.type.ts:169](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L169) - -initialization strategy ('auto'|'strict'|'defer') - -*** - -### period - -> **period**: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -Defined in: [tempo.type.ts:175](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L175) - -custom time aliases (periods). - -*** - -### pivot - -> **pivot**: `number` - -Defined in: [tempo.type.ts:164](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L164) - -pivot year for two-digit years - -*** - -### plugins - -> **plugins**: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] - -Defined in: [tempo.type.ts:177](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L177) - -plugins to be automatically extended - -*** - -### rtfFormat? - -> `optional` **rtfFormat?**: `RelativeTimeFormat` - -Defined in: [tempo.type.ts:166](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L166) - -Pre-configured relative time formatter - -*** - -### rtfStyle? - -> `optional` **rtfStyle?**: `RelativeTimeFormatStyle` - -Defined in: [tempo.type.ts:167](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L167) - -Default style for relative time ('long' | 'short' | 'narrow') - -*** - -### silent - -> **silent**: `boolean` \| `undefined` - -Defined in: [tempo.type.ts:160](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L160) - -suppress console output during catch - -*** - -### snippet - -> **snippet**: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> - -Defined in: [tempo.type.ts:172](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L172) - -date-time snippets to help compose a Layout - -*** - -### sphere - -> **sphere**: `"north"` \| `"south"` \| `"east"` \| `"west"` \| `undefined` - -Defined in: [tempo.type.ts:165](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L165) - -hemisphere for term.qtr or term.szn - -*** - -### store - -> **store**: `string` - -Defined in: [tempo.type.ts:156](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L156) - -localStorage key - -*** - -### timeStamp? - -> `optional` **timeStamp?**: [`TimeStamp`](../type-aliases/TimeStamp.md) - -Defined in: [tempo.type.ts:168](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L168) - -Precision to measure timestamps (ms | us) - -*** - -### timeZone - -> **timeZone**: `TimeZoneLike` - -Defined in: [tempo.type.ts:161](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L161) - -Temporal timeZone - -*** - -### value - -> **value**: [`DateTime`](../../../../type-aliases/DateTime.md) - -Defined in: [tempo.type.ts:178](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L178) - -supplied value to parse diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Config.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Config.md deleted file mode 100644 index 6ecf9b3d..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Config.md +++ /dev/null @@ -1,233 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -Defined in: [tempo.type.ts:230](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L230) - -Instance configuration derived from supply, storage, and discovery. - -## Extends - -- `Required`\<`Omit`\<[`OptionsKeep`](../type-aliases/OptionsKeep.md), `"formats"`\>\> - -## Indexable - -> \[`key`: `string`\]: `any` - -index-signature - -## Properties - -### calendar - -> **calendar**: `CalendarLike` - -Defined in: [tempo.type.ts:162](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L162) - -Temporal calendar - -#### Inherited from - -[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`calendar`](../../Tempo/interfaces/BaseOptions.md#calendar) - -*** - -### catch - -> **catch**: `boolean` \| `undefined` - -Defined in: [tempo.type.ts:159](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L159) - -catch or throw Errors - -#### Inherited from - -[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`catch`](../../Tempo/interfaces/BaseOptions.md#catch) - -*** - -### debug - -> **debug**: `boolean` \| `undefined` - -Defined in: [tempo.type.ts:158](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L158) - -additional console.log for tracking - -#### Inherited from - -[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`debug`](../../Tempo/interfaces/BaseOptions.md#debug) - -*** - -### discovery - -> **discovery**: `string` \| `symbol` - -Defined in: [tempo.type.ts:157](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L157) - -globalThis Discovery Symbol - -#### Inherited from - -[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`discovery`](../../Tempo/interfaces/BaseOptions.md#discovery) - -*** - -### formats - -> **formats**: `EnumifyType` - -Defined in: [tempo.type.ts:232](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L232) - -pre-configured format strings - -*** - -### locale - -> **locale**: `string` - -Defined in: [tempo.type.ts:163](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L163) - -locale (e.g. en-AU) - -#### Inherited from - -[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`locale`](../../Tempo/interfaces/BaseOptions.md#locale) - -*** - -### mode - -> **mode**: `"auto"` \| `"strict"` \| `"defer"` - -Defined in: [tempo.type.ts:169](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L169) - -initialization strategy ('auto'|'strict'|'defer') - -#### Inherited from - -[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`mode`](../../Tempo/interfaces/BaseOptions.md#mode) - -*** - -### plugins - -> **plugins**: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] - -Defined in: [tempo.type.ts:177](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L177) - -plugins to be automatically extended - -#### Inherited from - -[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`plugins`](../../Tempo/interfaces/BaseOptions.md#plugins) - -*** - -### rtfFormat - -> **rtfFormat**: `RelativeTimeFormat` - -Defined in: [tempo.type.ts:166](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L166) - -Pre-configured relative time formatter - -#### Inherited from - -[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`rtfFormat`](../../Tempo/interfaces/BaseOptions.md#rtfformat) - -*** - -### rtfStyle - -> **rtfStyle**: `RelativeTimeFormatStyle` - -Defined in: [tempo.type.ts:167](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L167) - -Default style for relative time ('long' | 'short' | 'narrow') - -#### Inherited from - -[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`rtfStyle`](../../Tempo/interfaces/BaseOptions.md#rtfstyle) - -*** - -### scope - -> **scope**: `"global"` \| `"local"` - -Defined in: [tempo.type.ts:231](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L231) - -configuration (global | local) - -*** - -### silent - -> **silent**: `boolean` \| `undefined` - -Defined in: [tempo.type.ts:160](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L160) - -suppress console output during catch - -#### Inherited from - -[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`silent`](../../Tempo/interfaces/BaseOptions.md#silent) - -*** - -### sphere - -> **sphere**: `"north"` \| `"south"` \| `"east"` \| `"west"` \| `undefined` - -Defined in: [tempo.type.ts:165](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L165) - -hemisphere for term.qtr or term.szn - -#### Inherited from - -[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`sphere`](../../Tempo/interfaces/BaseOptions.md#sphere) - -*** - -### store - -> **store**: `string` - -Defined in: [tempo.type.ts:156](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L156) - -localStorage key - -#### Inherited from - -[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`store`](../../Tempo/interfaces/BaseOptions.md#store) - -*** - -### timeStamp - -> **timeStamp**: [`TimeStamp`](../type-aliases/TimeStamp.md) - -Defined in: [tempo.type.ts:168](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L168) - -Precision to measure timestamps (ms | us) - -#### Inherited from - -[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`timeStamp`](../../Tempo/interfaces/BaseOptions.md#timestamp) - -*** - -### timeZone - -> **timeZone**: `TimeZoneLike` - -Defined in: [tempo.type.ts:161](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L161) - -Temporal timeZone - -#### Inherited from - -[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`timeZone`](../../Tempo/interfaces/BaseOptions.md#timezone) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Discovery.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Discovery.md deleted file mode 100644 index 2c1dcc0c..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Discovery.md +++ /dev/null @@ -1,233 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -Defined in: [tempo.type.ts:237](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L237) - -structured configuration for Global Discovery via Symbol.for('$Tempo') - -## Properties - -### formats? - -> `optional` **formats?**: `Property`\<`any`\> - -Defined in: [tempo.type.ts:241](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L241) - -custom format strings to merge in the FORMAT dictionary - -*** - -### numbers? - -> `optional` **numbers?**: `Record`\<`string`, `number`\> - -Defined in: [tempo.type.ts:240](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L240) - -aliases to merge in the Number-Word dictionary - -*** - -### options? - -> `optional` **options?**: \{\[`key`: `string`\]: `any`; `calendar?`: `CalendarLike`; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\>; `formats?`: `Property`\<`any`\>; `layout?`: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../../../../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>; `pivot?`: `number`; `plugins?`: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: `RelativeTimeFormatStyle`; `silent?`: `boolean`; `snippet?`: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../type-aliases/TimeStamp.md); `timeZone?`: `TimeZoneLike`; `value?`: [`DateTime`](../../../../type-aliases/DateTime.md); \} \| (() => `object`) - -Defined in: [tempo.type.ts:238](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L238) - -pre-defined config options for Tempo.#global - -#### Union Members - -##### Type Literal - -\{\[`key`: `string`\]: `any`; `calendar?`: `CalendarLike`; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\>; `formats?`: `Property`\<`any`\>; `layout?`: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../../../../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>; `pivot?`: `number`; `plugins?`: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: `RelativeTimeFormatStyle`; `silent?`: `boolean`; `snippet?`: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../type-aliases/TimeStamp.md); `timeZone?`: `TimeZoneLike`; `value?`: [`DateTime`](../../../../type-aliases/DateTime.md); \} - -##### Index Signature - -\[`key`: `string`\]: `any` - -##### calendar? - -> `optional` **calendar?**: `CalendarLike` - -Temporal calendar - -##### catch? - -> `optional` **catch?**: `boolean` - -catch or throw Errors - -##### debug? - -> `optional` **debug?**: `boolean` - -additional console.log for tracking - -##### discovery? - -> `optional` **discovery?**: `string` \| `symbol` - -globalThis Discovery Symbol - -##### event? - -> `optional` **event?**: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> - -custom date aliases (events). - -##### formats? - -> `optional` **formats?**: `Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -##### layout? - -> `optional` **layout?**: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -##### locale? - -> `optional` **locale?**: `string` - -locale (e.g. en-AU) - -##### mdyLayouts? - -> `optional` **mdyLayouts?**: [`Pair`](../../../../type-aliases/Pair.md)[] - -swap parse-order of layouts - -##### mdyLocales? - -> `optional` **mdyLocales?**: `string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -##### mode? - -> `optional` **mode?**: `"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -##### period? - -> `optional` **period?**: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -##### pivot? - -> `optional` **pivot?**: `number` - -pivot year for two-digit years - -##### plugins? - -> `optional` **plugins?**: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] - -plugins to be automatically extended - -##### rtfFormat? - -> `optional` **rtfFormat?**: `RelativeTimeFormat` - -Pre-configured relative time formatter - -##### rtfStyle? - -> `optional` **rtfStyle?**: `RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -##### silent? - -> `optional` **silent?**: `boolean` - -suppress console output during catch - -##### snippet? - -> `optional` **snippet?**: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -##### sphere? - -> `optional` **sphere?**: `"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -##### store? - -> `optional` **store?**: `string` - -localStorage key - -##### timeStamp? - -> `optional` **timeStamp?**: [`TimeStamp`](../type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -##### timeZone? - -> `optional` **timeZone?**: `TimeZoneLike` - -Temporal timeZone - -##### value? - -> `optional` **value?**: [`DateTime`](../../../../type-aliases/DateTime.md) - -supplied value to parse - -*** - -##### Function - -() => `object` - -*** - -### plugins? - -> `optional` **plugins?**: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] - -Defined in: [tempo.type.ts:243](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L243) - -plugins to be automatically extended via Tempo.extend() - -*** - -### term? - -> `optional` **term?**: [`TermPlugin`](../../../../interfaces/TermPlugin.md) \| [`TermPlugin`](../../../../interfaces/TermPlugin.md)[] - -Defined in: [tempo.type.ts:242](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L242) - -term plugins to be registered via Tempo.addTerm() - -*** - -### ~~terms?~~ - -> `optional` **terms?**: [`TermPlugin`](../../../../interfaces/TermPlugin.md) \| [`TermPlugin`](../../../../interfaces/TermPlugin.md)[] - -Defined in: [tempo.type.ts:244](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L244) - -#### Deprecated - -use term instead - -*** - -### timeZones? - -> `optional` **timeZones?**: `Record`\<`string`, `string`\> - -Defined in: [tempo.type.ts:239](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L239) - -aliases to merge in the TimeZone dictionary diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Parse.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Parse.md deleted file mode 100644 index 30583dea..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Parse.md +++ /dev/null @@ -1,145 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -Defined in: [tempo.type.ts:198](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L198) - -Debugging results of a parse operation. See `doc/tempo.api.md`. - -## Properties - -### event - -> **event**: `Extend` - -Defined in: [tempo.type.ts:206](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L206) - -configured Events - -*** - -### isAnchored? - -> `optional` **isAnchored?**: `boolean` - -Defined in: [tempo.type.ts:210](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L210) - -was this a nested/anchored parse? - -*** - -### isMonthDay? - -> `optional` **isMonthDay?**: `boolean` - -Defined in: [tempo.type.ts:201](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L201) - -is a timeZone that prefers 'mmddyyyy' date order - -*** - -### layout - -> **layout**: `Extend` - -Defined in: [tempo.type.ts:204](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L204) - -Tempo layout strings - -*** - -### mdyLayouts - -> **mdyLayouts**: [`Pair`](../../../../type-aliases/Pair.md)[] - -Defined in: [tempo.type.ts:200](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L200) - -Layout names that are switched to mdy - -*** - -### mdyLocales - -> **mdyLocales**: `object`[] - -Defined in: [tempo.type.ts:199](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L199) - -Locales which prefer 'mm-dd-yyyy' date-order - -#### locale - -> **locale**: `string` - -#### timeZones - -> **timeZones**: `string`[] - -*** - -### mode - -> **mode**: `"auto"` \| `"strict"` \| `"defer"` - -Defined in: [tempo.type.ts:211](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L211) - -initialization strategy ('auto'|'strict'|'defer') - -*** - -### pattern - -> **pattern**: [`Registry`](../type-aliases/Registry.md) - -Defined in: [tempo.type.ts:205](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L205) - -Map of regex-patterns to match input-string - -*** - -### period - -> **period**: `Extend` - -Defined in: [tempo.type.ts:207](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L207) - -configured Periods - -*** - -### pivot - -> **pivot**: `number` - -Defined in: [tempo.type.ts:208](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L208) - -pivot year for two-digit years - -*** - -### result - -> **result**: [`Match`](../type-aliases/Match.md)[] - -Defined in: [tempo.type.ts:209](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L209) - -parsing match result - -*** - -### snippet - -> **snippet**: `Extend` - -Defined in: [tempo.type.ts:203](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L203) - -Tempo snippets to aid in parsing - -*** - -### token - -> **token**: `Extend` - -Defined in: [tempo.type.ts:202](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L202) - -Symbol registry diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/PluginContainer.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/PluginContainer.md deleted file mode 100644 index 9ced2017..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/PluginContainer.md +++ /dev/null @@ -1,57 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -Defined in: [tempo.type.ts:187](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L187) - -internal metadata for a plugin to track installation - -## Extends - -- [`Plugin`](../../../../interfaces/Plugin.md) - -## Properties - -### install - -> **install**: (`this`, `t`) => `void` - -Defined in: [plugin/plugin.type.ts:29](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L29) - -#### Parameters - -##### this - -[`Tempo`](../../../../classes/Tempo.md) - -##### t - -*typeof* [`Tempo`](../../Tempo/README.md) - -#### Returns - -`void` - -#### Inherited from - -[`Plugin`](../../../../interfaces/Plugin.md).[`install`](../../../../interfaces/Plugin.md#install) - -*** - -### installed? - -> `optional` **installed?**: `boolean` - -Defined in: [tempo.type.ts:188](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L188) - -*** - -### name - -> **name**: `string` - -Defined in: [plugin/plugin.type.ts:28](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L28) - -#### Inherited from - -[`Plugin`](../../../../interfaces/Plugin.md).[`name`](../../../../interfaces/Plugin.md#name) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/State.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/State.md deleted file mode 100644 index 2973244f..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/State.md +++ /dev/null @@ -1,27 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -Defined in: [tempo.type.ts:192](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L192) - -the encapsulated state of a Tempo instance - -## Properties - -### config - -> **config**: [`Config`](Config.md) - -Defined in: [tempo.type.ts:193](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L193) - -current defaults for all Tempo instances - -*** - -### parse - -> **parse**: [`Parse`](Parse.md) - -Defined in: [tempo.type.ts:194](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L194) - -parsing rules diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Match.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Match.md deleted file mode 100644 index fcb2a3a4..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Match.md +++ /dev/null @@ -1,27 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Match** = `object` & `TypeValue`\<`any`\> \| [`MatchExtend`](MatchExtend.md) - -Defined in: [tempo.type.ts:220](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L220) - -## Type Declaration - -### groups? - -> `optional` **groups?**: [`Groups`](../../../../type-aliases/Groups.md) - -groups from the pattern match - -### isAnchored? - -> `optional` **isAnchored?**: `boolean` - -was this a nested/anchored parse? - -### match? - -> `optional` **match?**: `string` - -pattern which matched the input diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/MatchExtend.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/MatchExtend.md deleted file mode 100644 index 89cbeaae..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/MatchExtend.md +++ /dev/null @@ -1,25 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **MatchExtend** = `object` - -Defined in: [tempo.type.ts:219](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L219) - -debug a Tempo instantiation - -## Properties - -### type - -> **type**: `"Event"` \| `"Period"` - -Defined in: [tempo.type.ts:219](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L219) - -*** - -### value - -> **value**: `string` \| `number` \| `Function` - -Defined in: [tempo.type.ts:219](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L219) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/OptionsKeep.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/OptionsKeep.md deleted file mode 100644 index aa6764d8..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/OptionsKeep.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **OptionsKeep** = `Omit`\<[`BaseOptions`](../interfaces/BaseOptions.md), `"mdyLocales"` \| `"mdyLayouts"` \| `"pivot"` \| `"snippet"` \| `"layout"` \| `"event"` \| `"period"` \| `"value"`\> - -Defined in: [tempo.type.ts:227](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L227) - -drop the parse-only Options diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md deleted file mode 100644 index 8514e45b..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md +++ /dev/null @@ -1,13 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **PatternOption**\<`T`\> = `T` \| `Record`\<`string` \| `symbol`, `T`\> \| [`PatternOptionArray`](PatternOptionArray.md)\<`T`\> - -Defined in: [tempo.type.ts:152](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L152) - -## Type Parameters - -### T - -`T` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOptionArray.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOptionArray.md deleted file mode 100644 index 19e5b7d1..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOptionArray.md +++ /dev/null @@ -1,13 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **PatternOptionArray**\<`T`\> = [`PatternOption`](PatternOption.md)\<`T`\>[] - -Defined in: [tempo.type.ts:151](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L151) - -## Type Parameters - -### T - -`T` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Registry.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Registry.md deleted file mode 100644 index 74d7de95..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Registry.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Registry** = `Map`\<`symbol`, `RegExp`\> - -Defined in: [tempo.type.ts:150](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L150) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md deleted file mode 100644 index 46b43dec..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **TimeStamp** = `"ss"` \| `"ms"` \| `"us"` \| `"ns"` - -Defined in: [tempo.type.ts:184](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L184) - -high-precision precision to measure timestamps (ms | us) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/README.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/README.md deleted file mode 100644 index 1a55515f..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/README.md +++ /dev/null @@ -1,209 +0,0 @@ -[**@magmacomputing/tempo**](../../../README.md) - -*** - -## Interfaces - -- [BaseOptions](interfaces/BaseOptions.md) -- [Params](interfaces/Params.md) - -## Type Aliases - -- [Add](type-aliases/Add.md) -- [COMPASS](type-aliases/COMPASS.md) -- [DateTime](type-aliases/DateTime.md) -- [Duration](type-aliases/Duration.md) -- [DURATION](type-aliases/DURATION-1.md) -- [DURATIONS](type-aliases/DURATIONS.md) -- [Element](type-aliases/Element.md) -- [ELEMENT](type-aliases/ELEMENT-1.md) -- [Extension](type-aliases/Extension.md) -- [Format](type-aliases/Format.md) -- [FormatRegistry](type-aliases/FormatRegistry.md) -- [Formats](type-aliases/Formats.md) -- [FormatType](type-aliases/FormatType.md) -- [Groups](type-aliases/Groups.md) -- [hh](type-aliases/hh.md) -- [Logic](type-aliases/Logic.md) -- [mi](type-aliases/mi.md) -- [mm](type-aliases/mm.md) -- [Modifier](type-aliases/Modifier.md) -- [Module](type-aliases/Module.md) -- [Month](type-aliases/Month.md) -- [MONTH](type-aliases/MONTH-1.md) -- [MONTHS](type-aliases/MONTHS.md) -- [ms](type-aliases/ms.md) -- [Mutate](type-aliases/Mutate.md) -- [ns](type-aliases/ns.md) -- [Options](type-aliases/Options.md) -- [OwnFormat](type-aliases/OwnFormat.md) -- [Pair](type-aliases/Pair.md) -- [Pattern](type-aliases/Pattern.md) -- [PatternOption](type-aliases/PatternOption.md) -- [PatternOptionArray](type-aliases/PatternOptionArray.md) -- [Plugin](type-aliases/Plugin.md) -- [Relative](type-aliases/Relative.md) -- [SEASON](type-aliases/SEASON.md) -- [Set](type-aliases/Set.md) -- [ss](type-aliases/ss.md) -- [TermPlugin](type-aliases/TermPlugin.md) -- [Terms](type-aliases/Terms.md) -- [Unit](type-aliases/Unit.md) -- [Until](type-aliases/Until.md) -- [us](type-aliases/us.md) -- [Weekday](type-aliases/Weekday.md) -- [WEEKDAY](type-aliases/WEEKDAY-1.md) -- [WEEKDAYS](type-aliases/WEEKDAYS.md) -- [ww](type-aliases/ww.md) - -## Variables - -- [tickers](variables/tickers.md) - -## Functions - -- [ticker](functions/ticker.md) - -## Accessors - -### COMPASS - -#### Get Signature - -> **get** **COMPASS**(): `EnumifyType`\<\{ `East`: `"east"`; `North`: `"north"`; `South`: `"south"`; `West`: `"west"`; \}\> - -Defined in: [tempo.class.ts:80](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L80) - -Compass cardinal points - -##### Returns - -`EnumifyType`\<\{ `East`: `"east"`; `North`: `"north"`; `South`: `"south"`; `West`: `"west"`; \}\> - -*** - -### DURATION - -#### Get Signature - -> **get** **DURATION**(): `EnumifyType`\<\{ `day`: `86400`; `hour`: `3600`; `microsecond`: `0.000001`; `millisecond`: `0.001`; `minute`: `60`; `month`: `2628000`; `nanosecond`: `1e-9`; `second`: `1`; `week`: `604800`; `year`: `31536000`; \}\> - -Defined in: [tempo.class.ts:76](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L76) - -Time durations as seconds (singular) - -##### Returns - -`EnumifyType`\<\{ `day`: `86400`; `hour`: `3600`; `microsecond`: `0.000001`; `millisecond`: `0.001`; `minute`: `60`; `month`: `2628000`; `nanosecond`: `1e-9`; `second`: `1`; `week`: `604800`; `year`: `31536000`; \}\> - -*** - -### DURATIONS - -#### Get Signature - -> **get** **DURATIONS**(): `EnumifyType`\<\{ `days`: `86400000`; `hours`: `3600000`; `microseconds`: `0.001`; `milliseconds`: `1`; `minutes`: `60000`; `months`: `2628000000`; `nanoseconds`: `0.000001`; `seconds`: `1000`; `weeks`: `604800000`; `years`: `31536000000`; \}\> - -Defined in: [tempo.class.ts:77](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L77) - -Time durations as milliseconds (plural) - -##### Returns - -`EnumifyType`\<\{ `days`: `86400000`; `hours`: `3600000`; `microseconds`: `0.001`; `milliseconds`: `1`; `minutes`: `60000`; `months`: `2628000000`; `nanoseconds`: `0.000001`; `seconds`: `1000`; `weeks`: `604800000`; `years`: `31536000000`; \}\> - -*** - -### ELEMENT - -#### Get Signature - -> **get** **ELEMENT**(): `EnumifyType`\<\{ `dd`: `"day"`; `hh`: `"hour"`; `mi`: `"minute"`; `mm`: `"month"`; `ms`: `"millisecond"`; `ns`: `"nanosecond"`; `ss`: `"second"`; `us`: `"microsecond"`; `ww`: `"week"`; `yy`: `"year"`; \}\> - -Defined in: [tempo.class.ts:82](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L82) - -Tempo to Temporal DateTime Units map - -##### Returns - -`EnumifyType`\<\{ `dd`: `"day"`; `hh`: `"hour"`; `mi`: `"minute"`; `mm`: `"month"`; `ms`: `"millisecond"`; `ns`: `"nanosecond"`; `ss`: `"second"`; `us`: `"microsecond"`; `ww`: `"week"`; `yy`: `"year"`; \}\> - -*** - -### MONTH - -#### Get Signature - -> **get** **MONTH**(): `EnumifyType`\<`Index`\\> - -Defined in: [tempo.class.ts:74](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L74) - -Month names (short-form) - -##### Returns - -`EnumifyType`\<`Index`\\> - -*** - -### MONTHS - -#### Get Signature - -> **get** **MONTHS**(): `EnumifyType`\<`Index`\\> - -Defined in: [tempo.class.ts:75](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L75) - -Month names (long-form) - -##### Returns - -`EnumifyType`\<`Index`\\> - -*** - -### SEASON - -#### Get Signature - -> **get** **SEASON**(): `EnumifyType`\<\{ `Autumn`: `"autumn"`; `Spring`: `"spring"`; `Summer`: `"summer"`; `Winter`: `"winter"`; \}\> - -Defined in: [tempo.class.ts:79](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L79) - -Quarterly Seasons - -##### Returns - -`EnumifyType`\<\{ `Autumn`: `"autumn"`; `Spring`: `"spring"`; `Summer`: `"summer"`; `Winter`: `"winter"`; \}\> - -*** - -### WEEKDAY - -#### Get Signature - -> **get** **WEEKDAY**(): `EnumifyType`\<`Index`\\> - -Defined in: [tempo.class.ts:72](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L72) - -Weekday names (short-form) - -##### Returns - -`EnumifyType`\<`Index`\\> - -*** - -### WEEKDAYS - -#### Get Signature - -> **get** **WEEKDAYS**(): `EnumifyType`\<`Index`\\> - -Defined in: [tempo.class.ts:73](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L73) - -Weekday names (long-form) - -##### Returns - -`EnumifyType`\<`Index`\\> diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/functions/ticker.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/functions/ticker.md deleted file mode 100644 index 9091bcfb..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/functions/ticker.md +++ /dev/null @@ -1,111 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -## Call Signature - -> **ticker**(`interval?`): `Instance` - -Defined in: [plugin/extend/extend.ticker.ts:16](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L16) - -### Parameters - -#### interval? - -`Interval` - -### Returns - -`Instance` - -## Call Signature - -> **ticker**(`options`): `Instance` - -Defined in: [plugin/extend/extend.ticker.ts:17](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L17) - -### Parameters - -#### options - -`Options` - -### Returns - -`Instance` - -## Call Signature - -> **ticker**(`callback`): `Instance` - -Defined in: [plugin/extend/extend.ticker.ts:18](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L18) - -### Parameters - -#### callback - -`Callback` - -### Returns - -`Instance` - -## Call Signature - -> **ticker**(`interval`, `callback`): `Instance` - -Defined in: [plugin/extend/extend.ticker.ts:19](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L19) - -### Parameters - -#### interval - -`Interval` - -#### callback - -`Callback` - -### Returns - -`Instance` - -## Call Signature - -> **ticker**(`options`, `callback`): `Instance` - -Defined in: [plugin/extend/extend.ticker.ts:20](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L20) - -### Parameters - -#### options - -`Options` - -#### callback - -`Callback` - -### Returns - -`Instance` - -## Call Signature - -> **ticker**(`options`, `extraOptions`): `Instance` - -Defined in: [plugin/extend/extend.ticker.ts:21](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L21) - -### Parameters - -#### options - -`Options` - -#### extraOptions - -`Options` - -### Returns - -`Instance` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/BaseOptions.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/BaseOptions.md deleted file mode 100644 index c89bab50..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/BaseOptions.md +++ /dev/null @@ -1,333 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -Defined in: [tempo.class.ts:1836](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1836) - -the Options object found in a config-module, or passed to a call to Tempo.init({}) or 'new Tempo({})' - -## Extends - -- [`BaseOptions`](../../Internal/interfaces/BaseOptions.md) - -## Properties - -### calendar - -> **calendar**: `CalendarLike` - -Defined in: [tempo.type.ts:162](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L162) - -Temporal calendar - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`calendar`](../../Internal/interfaces/BaseOptions.md#calendar) - -*** - -### catch - -> **catch**: `boolean` \| `undefined` - -Defined in: [tempo.type.ts:159](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L159) - -catch or throw Errors - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`catch`](../../Internal/interfaces/BaseOptions.md#catch) - -*** - -### debug - -> **debug**: `boolean` \| `undefined` - -Defined in: [tempo.type.ts:158](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L158) - -additional console.log for tracking - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`debug`](../../Internal/interfaces/BaseOptions.md#debug) - -*** - -### discovery - -> **discovery**: `string` \| `symbol` - -Defined in: [tempo.type.ts:157](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L157) - -globalThis Discovery Symbol - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`discovery`](../../Internal/interfaces/BaseOptions.md#discovery) - -*** - -### event - -> **event**: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> - -Defined in: [tempo.type.ts:174](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L174) - -custom date aliases (events). - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`event`](../../Internal/interfaces/BaseOptions.md#event) - -*** - -### formats - -> **formats**: `Property`\<`any`\> - -Defined in: [tempo.type.ts:176](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L176) - -custom format strings to merge in the FORMAT enum - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`formats`](../../Internal/interfaces/BaseOptions.md#formats) - -*** - -### layout - -> **layout**: [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -Defined in: [tempo.type.ts:173](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L173) - -patterns to help parse value - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`layout`](../../Internal/interfaces/BaseOptions.md#layout) - -*** - -### locale - -> **locale**: `string` - -Defined in: [tempo.type.ts:163](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L163) - -locale (e.g. en-AU) - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`locale`](../../Internal/interfaces/BaseOptions.md#locale) - -*** - -### mdyLayouts - -> **mdyLayouts**: [`Pair`](../../../../type-aliases/Pair.md)[] - -Defined in: [tempo.type.ts:171](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L171) - -swap parse-order of layouts - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`mdyLayouts`](../../Internal/interfaces/BaseOptions.md#mdylayouts) - -*** - -### mdyLocales - -> **mdyLocales**: `string` \| `string`[] - -Defined in: [tempo.type.ts:170](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L170) - -locale-names that prefer 'mm-dd-yy' date order - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`mdyLocales`](../../Internal/interfaces/BaseOptions.md#mdylocales) - -*** - -### mode? - -> `optional` **mode?**: `"auto"` \| `"strict"` \| `"defer"` - -Defined in: [tempo.type.ts:169](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L169) - -initialization strategy ('auto'|'strict'|'defer') - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`mode`](../../Internal/interfaces/BaseOptions.md#mode) - -*** - -### period - -> **period**: [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -Defined in: [tempo.type.ts:175](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L175) - -custom time aliases (periods). - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`period`](../../Internal/interfaces/BaseOptions.md#period) - -*** - -### pivot - -> **pivot**: `number` - -Defined in: [tempo.type.ts:164](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L164) - -pivot year for two-digit years - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`pivot`](../../Internal/interfaces/BaseOptions.md#pivot) - -*** - -### plugins - -> **plugins**: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] - -Defined in: [tempo.type.ts:177](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L177) - -plugins to be automatically extended - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`plugins`](../../Internal/interfaces/BaseOptions.md#plugins) - -*** - -### rtfFormat? - -> `optional` **rtfFormat?**: `RelativeTimeFormat` - -Defined in: [tempo.type.ts:166](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L166) - -Pre-configured relative time formatter - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`rtfFormat`](../../Internal/interfaces/BaseOptions.md#rtfformat) - -*** - -### rtfStyle? - -> `optional` **rtfStyle?**: `RelativeTimeFormatStyle` - -Defined in: [tempo.type.ts:167](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L167) - -Default style for relative time ('long' | 'short' | 'narrow') - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`rtfStyle`](../../Internal/interfaces/BaseOptions.md#rtfstyle) - -*** - -### silent - -> **silent**: `boolean` \| `undefined` - -Defined in: [tempo.type.ts:160](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L160) - -suppress console output during catch - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`silent`](../../Internal/interfaces/BaseOptions.md#silent) - -*** - -### snippet - -> **snippet**: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> - -Defined in: [tempo.type.ts:172](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L172) - -date-time snippets to help compose a Layout - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`snippet`](../../Internal/interfaces/BaseOptions.md#snippet) - -*** - -### sphere - -> **sphere**: `"north"` \| `"south"` \| `"east"` \| `"west"` \| `undefined` - -Defined in: [tempo.type.ts:165](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L165) - -hemisphere for term.qtr or term.szn - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`sphere`](../../Internal/interfaces/BaseOptions.md#sphere) - -*** - -### store - -> **store**: `string` - -Defined in: [tempo.type.ts:156](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L156) - -localStorage key - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`store`](../../Internal/interfaces/BaseOptions.md#store) - -*** - -### timeStamp? - -> `optional` **timeStamp?**: [`TimeStamp`](../../Internal/type-aliases/TimeStamp.md) - -Defined in: [tempo.type.ts:168](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L168) - -Precision to measure timestamps (ms | us) - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`timeStamp`](../../Internal/interfaces/BaseOptions.md#timestamp) - -*** - -### timeZone - -> **timeZone**: `TimeZoneLike` - -Defined in: [tempo.type.ts:161](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L161) - -Temporal timeZone - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`timeZone`](../../Internal/interfaces/BaseOptions.md#timezone) - -*** - -### value - -> **value**: [`DateTime`](../../../../type-aliases/DateTime.md) - -Defined in: [tempo.type.ts:178](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L178) - -supplied value to parse - -#### Inherited from - -[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`value`](../../Internal/interfaces/BaseOptions.md#value) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/Params.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/Params.md deleted file mode 100644 index 7d6ec789..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/Params.md +++ /dev/null @@ -1,329 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -Defined in: [tempo.class.ts:1887](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1887) - -Type for consistency in expected arguments for helper functions - -## Extends - -- [`Params`](../../../../interfaces/Params.md)\<`T`\> - -## Type Parameters - -### T - -`T` - -## Call Signature - -> **Params**(`tempo?`, `options?`): `T` - -Defined in: [tempo.class.ts:1887](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1887) - -Type for consistency in expected arguments for helper functions - -### Parameters - -#### tempo? - -[`DateTime`](../../../../type-aliases/DateTime.md) - -#### options? - -##### calendar? - -`CalendarLike` - -Temporal calendar - -##### catch? - -`boolean` - -catch or throw Errors - -##### debug? - -`boolean` - -additional console.log for tracking - -##### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -##### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> - -custom date aliases (events). - -##### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -##### layout? - -[`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -##### locale? - -`string` - -locale (e.g. en-AU) - -##### mdyLayouts? - -[`Pair`](../../../../type-aliases/Pair.md)[] - -swap parse-order of layouts - -##### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -##### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -##### period? - -[`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -##### pivot? - -`number` - -pivot year for two-digit years - -##### plugins? - -[`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] - -plugins to be automatically extended - -##### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -##### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -##### silent? - -`boolean` - -suppress console output during catch - -##### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -##### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -##### store? - -`string` - -localStorage key - -##### timeStamp? - -[`TimeStamp`](../../Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -##### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -##### value? - -[`DateTime`](../../../../type-aliases/DateTime.md) - -supplied value to parse - -### Returns - -`T` - -## Call Signature - -> **Params**(`options`): `T` - -Defined in: [tempo.class.ts:1887](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1887) - -Type for consistency in expected arguments for helper functions - -### Parameters - -#### options - -##### calendar? - -`CalendarLike` - -Temporal calendar - -##### catch? - -`boolean` - -catch or throw Errors - -##### debug? - -`boolean` - -additional console.log for tracking - -##### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -##### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> - -custom date aliases (events). - -##### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -##### layout? - -[`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -##### locale? - -`string` - -locale (e.g. en-AU) - -##### mdyLayouts? - -[`Pair`](../../../../type-aliases/Pair.md)[] - -swap parse-order of layouts - -##### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -##### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -##### period? - -[`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -##### pivot? - -`number` - -pivot year for two-digit years - -##### plugins? - -[`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] - -plugins to be automatically extended - -##### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -##### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -##### silent? - -`boolean` - -suppress console output during catch - -##### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -##### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -##### store? - -`string` - -localStorage key - -##### timeStamp? - -[`TimeStamp`](../../Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -##### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -##### value? - -[`DateTime`](../../../../type-aliases/DateTime.md) - -supplied value to parse - -### Returns - -`T` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Add.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Add.md deleted file mode 100644 index 2b45e943..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Add.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Add** = [`Add`](../../../../type-aliases/Add.md) - -Defined in: [tempo.class.ts:1849](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1849) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/COMPASS.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/COMPASS.md deleted file mode 100644 index 03acc8b0..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/COMPASS.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **COMPASS** = `t.COMPASS` - -Defined in: [tempo.class.ts:80](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L80) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATION-1.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATION-1.md deleted file mode 100644 index 590faa82..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATION-1.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **DURATION** = `t.DURATION` - -Defined in: [tempo.class.ts:76](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L76) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATIONS.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATIONS.md deleted file mode 100644 index da1c5a0d..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATIONS.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **DURATIONS** = `t.DURATIONS` - -Defined in: [tempo.class.ts:77](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L77) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DateTime.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DateTime.md deleted file mode 100644 index 833443c2..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DateTime.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **DateTime** = [`DateTime`](../../../../type-aliases/DateTime.md) - -Defined in: [tempo.class.ts:1827](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1827) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Duration.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Duration.md deleted file mode 100644 index ee353130..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Duration.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Duration** = [`Duration`](../../../../type-aliases/Duration.md) - -Defined in: [tempo.class.ts:1871](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1871) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ELEMENT-1.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ELEMENT-1.md deleted file mode 100644 index 5a407693..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ELEMENT-1.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **ELEMENT** = `t.ELEMENT` - -Defined in: [tempo.class.ts:82](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L82) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Element.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Element.md deleted file mode 100644 index 252804f3..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Element.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Element** = [`Element`](../../../../type-aliases/Element.md) - -Defined in: [tempo.class.ts:1885](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1885) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Extension.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Extension.md deleted file mode 100644 index d2bf9caa..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Extension.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Extension** = [`Extension`](../../../../interfaces/Extension.md) - -Defined in: [tempo.class.ts:1842](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1842) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Format.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Format.md deleted file mode 100644 index cc4bae98..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Format.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Format** = [`Format`](../../../../type-aliases/Format.md) - -Defined in: [tempo.class.ts:1853](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1853) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatRegistry.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatRegistry.md deleted file mode 100644 index dc9f1e0c..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatRegistry.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **FormatRegistry** = [`FormatRegistry`](../../../../type-aliases/FormatRegistry.md) - -Defined in: [tempo.class.ts:1854](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1854) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatType.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatType.md deleted file mode 100644 index 1f5d0f77..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatType.md +++ /dev/null @@ -1,13 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **FormatType**\<`K`\> = [`FormatType`](../../../../type-aliases/FormatType.md)\<`K`\> - -Defined in: [tempo.class.ts:1855](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1855) - -## Type Parameters - -### K - -`K` *extends* `PropertyKey` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Formats.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Formats.md deleted file mode 100644 index cdd40c6d..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Formats.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Formats** = [`Formats`](../../../../type-aliases/Formats.md) - -Defined in: [tempo.class.ts:1852](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1852) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Groups.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Groups.md deleted file mode 100644 index d6be9e53..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Groups.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Groups** = [`Groups`](../../../../type-aliases/Groups.md) - -Defined in: [tempo.class.ts:1831](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1831) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Logic.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Logic.md deleted file mode 100644 index ba90c374..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Logic.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Logic** = [`Logic`](../../../../type-aliases/Logic.md) - -Defined in: [tempo.class.ts:1829](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1829) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTH-1.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTH-1.md deleted file mode 100644 index 400071c6..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTH-1.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **MONTH** = `t.MONTH` - -Defined in: [tempo.class.ts:74](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L74) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTHS.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTHS.md deleted file mode 100644 index 531b984c..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTHS.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **MONTHS** = `t.MONTHS` - -Defined in: [tempo.class.ts:75](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L75) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Modifier.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Modifier.md deleted file mode 100644 index 93241bd8..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Modifier.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Modifier** = [`Modifier`](../../../../type-aliases/Modifier.md) - -Defined in: [tempo.class.ts:1859](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1859) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Module.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Module.md deleted file mode 100644 index cd8740a2..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Module.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Module** = [`Module`](../../../../interfaces/Module.md) - -Defined in: [tempo.class.ts:1841](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1841) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Month.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Month.md deleted file mode 100644 index d1ff6e17..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Month.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Month** = [`Month`](../../../../type-aliases/Month.md) - -Defined in: [tempo.class.ts:1884](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1884) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Mutate.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Mutate.md deleted file mode 100644 index 719ca738..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Mutate.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Mutate** = [`Mutate`](../../../../type-aliases/Mutate.md) - -Defined in: [tempo.class.ts:1847](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1847) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Options.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Options.md deleted file mode 100644 index 0ac79253..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Options.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Options** = [`Options`](../../../../type-aliases/Options.md) - -Defined in: [tempo.class.ts:1837](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1837) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/OwnFormat.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/OwnFormat.md deleted file mode 100644 index 431356cc..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/OwnFormat.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **OwnFormat** = [`OwnFormat`](../../../../type-aliases/OwnFormat.md) - -Defined in: [tempo.class.ts:1851](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1851) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pair.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pair.md deleted file mode 100644 index 91afb29a..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pair.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Pair** = [`Pair`](../../../../type-aliases/Pair.md) - -Defined in: [tempo.class.ts:1830](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1830) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pattern.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pattern.md deleted file mode 100644 index ba7992e6..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pattern.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Pattern** = [`Pattern`](../../../../type-aliases/Pattern.md) - -Defined in: [tempo.class.ts:1828](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1828) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOption.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOption.md deleted file mode 100644 index 4444fe41..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOption.md +++ /dev/null @@ -1,13 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **PatternOption**\<`T`\> = [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<`T`\> - -Defined in: [tempo.class.ts:1834](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1834) - -## Type Parameters - -### T - -`T` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOptionArray.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOptionArray.md deleted file mode 100644 index b32a8fa8..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOptionArray.md +++ /dev/null @@ -1,13 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **PatternOptionArray**\<`T`\> = [`PatternOptionArray`](../../Internal/type-aliases/PatternOptionArray.md)\<`T`\> - -Defined in: [tempo.class.ts:1833](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1833) - -## Type Parameters - -### T - -`T` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Plugin.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Plugin.md deleted file mode 100644 index 7e3fa99f..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Plugin.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Plugin** = [`Plugin`](../../../../interfaces/Plugin.md) - -Defined in: [tempo.class.ts:1840](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1840) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Relative.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Relative.md deleted file mode 100644 index 9fa3f6a2..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Relative.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Relative** = [`Relative`](../../../../type-aliases/Relative.md) - -Defined in: [tempo.class.ts:1860](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1860) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/SEASON.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/SEASON.md deleted file mode 100644 index 7d31ad1b..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/SEASON.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **SEASON** = `t.SEASON` - -Defined in: [tempo.class.ts:79](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L79) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Set.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Set.md deleted file mode 100644 index 0f3a9eb9..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Set.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Set** = [`Set`](../../../../type-aliases/Set.md) - -Defined in: [tempo.class.ts:1848](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1848) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/TermPlugin.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/TermPlugin.md deleted file mode 100644 index 19a41c82..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/TermPlugin.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **TermPlugin** = [`TermPlugin`](../../../../interfaces/TermPlugin.md) - -Defined in: [tempo.class.ts:1839](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1839) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Terms.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Terms.md deleted file mode 100644 index 90451a2c..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Terms.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Terms** = [`Terms`](../../../../type-aliases/Terms.md) - -Defined in: [tempo.class.ts:1857](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1857) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Unit.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Unit.md deleted file mode 100644 index a28dc4e4..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Unit.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Unit** = [`Unit`](../../../../type-aliases/Unit.md) - -Defined in: [tempo.class.ts:1845](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1845) - -Configuration to use for #until() and #since() argument diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Until.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Until.md deleted file mode 100644 index 89b5ccdf..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Until.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Until** = [`Until`](../../../../type-aliases/Until.md) - -Defined in: [tempo.class.ts:1846](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1846) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAY-1.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAY-1.md deleted file mode 100644 index 192d4571..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAY-1.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **WEEKDAY** = `t.WEEKDAY` - -Defined in: [tempo.class.ts:72](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L72) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAYS.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAYS.md deleted file mode 100644 index d9dd9afa..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAYS.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **WEEKDAYS** = `t.WEEKDAYS` - -Defined in: [tempo.class.ts:73](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L73) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Weekday.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Weekday.md deleted file mode 100644 index ae79e9c3..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Weekday.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **Weekday** = [`Weekday`](../../../../type-aliases/Weekday.md) - -Defined in: [tempo.class.ts:1883](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1883) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/hh.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/hh.md deleted file mode 100644 index 146f29d4..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/hh.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **hh** = [`hh`](../../../../type-aliases/hh.md) - -Defined in: [tempo.class.ts:1863](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1863) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mi.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mi.md deleted file mode 100644 index e762855e..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mi.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **mi** = [`mi`](../../../../type-aliases/mi.md) - -Defined in: [tempo.class.ts:1864](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1864) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mm.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mm.md deleted file mode 100644 index b728cd1e..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mm.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **mm** = [`mm`](../../../../type-aliases/mm.md) - -Defined in: [tempo.class.ts:1862](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1862) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ms.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ms.md deleted file mode 100644 index e9e71eda..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ms.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **ms** = [`ms`](../../../../type-aliases/ms.md) - -Defined in: [tempo.class.ts:1866](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1866) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ns.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ns.md deleted file mode 100644 index 7cef821c..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ns.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **ns** = [`ns`](../../../../type-aliases/ns.md) - -Defined in: [tempo.class.ts:1868](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1868) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ss.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ss.md deleted file mode 100644 index 4c98a624..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ss.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **ss** = [`ss`](../../../../type-aliases/ss.md) - -Defined in: [tempo.class.ts:1865](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1865) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/us.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/us.md deleted file mode 100644 index dc75d6d0..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/us.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **us** = [`us`](../../../../type-aliases/us.md) - -Defined in: [tempo.class.ts:1867](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1867) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ww.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ww.md deleted file mode 100644 index 0125d3e7..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ww.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> **ww** = [`ww`](../../../../type-aliases/ww.md) - -Defined in: [tempo.class.ts:1869](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1869) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/variables/tickers.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/variables/tickers.md deleted file mode 100644 index ea19e6c3..00000000 --- a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/variables/tickers.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../../../../README.md) - -*** - -> `const` **tickers**: `Ticker.Snapshot`[] - -Defined in: [plugin/extend/extend.ticker.ts:15](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L15) diff --git a/packages/tempo/doc/api/README.md b/packages/tempo/doc/api/README.md deleted file mode 100644 index d51e9331..00000000 --- a/packages/tempo/doc/api/README.md +++ /dev/null @@ -1,106 +0,0 @@ -**@magmacomputing/tempo** - -*** - -## Namespaces - -- [Internal](@magmacomputing/namespaces/Internal/README.md) -- [Tempo](@magmacomputing/namespaces/Tempo/README.md) - -## Classes - -- [Tempo](classes/Tempo.md) - -## Interfaces - -- [Extension](interfaces/Extension.md) -- [Module](interfaces/Module.md) -- [Params](interfaces/Params.md) -- [Plugin](interfaces/Plugin.md) -- [TermPlugin](interfaces/TermPlugin.md) - -## Type Aliases - -- [Add](type-aliases/Add.md) -- [AddUnits](type-aliases/AddUnits.md) -- [BaseDuration](type-aliases/BaseDuration.md) -- [COMPASS](type-aliases/COMPASS.md) -- [DateTime](type-aliases/DateTime.md) -- [DateTimeUnit](type-aliases/DateTimeUnit.md) -- [Duration](type-aliases/Duration.md) -- [DURATION](type-aliases/DURATION-1.md) -- [DURATIONS](type-aliases/DURATIONS.md) -- [Element](type-aliases/Element.md) -- [ELEMENT](type-aliases/ELEMENT-1.md) -- [FlexibleDuration](type-aliases/FlexibleDuration.md) -- [Format](type-aliases/Format.md) -- [FORMAT](type-aliases/FORMAT-1.md) -- [FormatRegistry](type-aliases/FormatRegistry.md) -- [Formats](type-aliases/Formats.md) -- [FormatType](type-aliases/FormatType.md) -- [Groups](type-aliases/Groups.md) -- [hh](type-aliases/hh.md) -- [Logic](type-aliases/Logic.md) -- [mi](type-aliases/mi.md) -- [mm](type-aliases/mm.md) -- [Mode](type-aliases/Mode.md) -- [MODE](type-aliases/MODE-1.md) -- [Modifier](type-aliases/Modifier.md) -- [Month](type-aliases/Month.md) -- [MONTH](type-aliases/MONTH-1.md) -- [MONTHS](type-aliases/MONTHS.md) -- [ms](type-aliases/ms.md) -- [Mutate](type-aliases/Mutate.md) -- [MUTATION](type-aliases/MUTATION.md) -- [ns](type-aliases/ns.md) -- [Number](type-aliases/Number.md) -- [NumericPattern](type-aliases/NumericPattern.md) -- [Options](type-aliases/Options.md) -- [OwnFormat](type-aliases/OwnFormat.md) -- [Pair](type-aliases/Pair.md) -- [Pattern](type-aliases/Pattern.md) -- [Range](type-aliases/Range.md) -- [Relative](type-aliases/Relative.md) -- [ResolvedRange](type-aliases/ResolvedRange.md) -- [SEASON](type-aliases/SEASON.md) -- [Set](type-aliases/Set.md) -- [SetFields](type-aliases/SetFields.md) -- [ss](type-aliases/ss.md) -- [TermOffset](type-aliases/TermOffset.md) -- [Terms](type-aliases/Terms.md) -- [TIMEZONE](type-aliases/TIMEZONE.md) -- [Unit](type-aliases/Unit.md) -- [Units](type-aliases/Units.md) -- [Until](type-aliases/Until.md) -- [us](type-aliases/us.md) -- [Weekday](type-aliases/Weekday.md) -- [WEEKDAY](type-aliases/WEEKDAY-1.md) -- [WEEKDAYS](type-aliases/WEEKDAYS.md) -- [ww](type-aliases/ww.md) -- [ZONED\_DATE\_TIME](type-aliases/ZONED_DATE_TIME.md) - -## Variables - -- [COMPASS](variables/COMPASS.md) -- [DISCOVERY](variables/DISCOVERY.md) -- [DURATION](variables/DURATION.md) -- [DURATIONS](variables/DURATIONS.md) -- [ELEMENT](variables/ELEMENT.md) -- [enums](variables/enums.md) -- [fmtTempo](variables/fmtTempo.md) -- [FORMAT](variables/FORMAT.md) -- [getStamp](variables/getStamp.md) -- [getTempo](variables/getTempo.md) -- [LIMIT](variables/LIMIT.md) -- [MODE](variables/MODE.md) -- [MONTH](variables/MONTH.md) -- [MONTHS](variables/MONTHS.md) -- [MUTATION](variables/MUTATION.md) -- [NUMBER](variables/NUMBER.md) -- [OPTION](variables/OPTION.md) -- [PARSE](variables/PARSE.md) -- [SEASON](variables/SEASON.md) -- [TIMEZONE](variables/TIMEZONE.md) -- [WEEKDAY](variables/WEEKDAY.md) -- [WEEKDAYS](variables/WEEKDAYS.md) -- [ZONED\_DATE\_TIME](variables/ZONED_DATE_TIME.md) diff --git a/packages/tempo/doc/api/classes/Tempo.md b/packages/tempo/doc/api/classes/Tempo.md deleted file mode 100644 index 868ef4ac..00000000 --- a/packages/tempo/doc/api/classes/Tempo.md +++ /dev/null @@ -1,4693 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -Defined in: [tempo.class.ts:71](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L71) - -# Tempo -A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects. -Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API. - -## Indexable - -> \[`key`: `symbol`\]: `string` \| `boolean` \| ((`hint?`) => `string` \| `number` \| `bigint`) \| (() => `ArrayIterator`\<`EntryOf`\<`any`\>\>) \| (() => `object`) - -## Constructors - -### Constructor - -> **new Tempo**(`options?`): `Tempo` - -Defined in: [tempo.class.ts:1035](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1035) - -Instantiates a new `Tempo` object with configuration only. - -#### Parameters - -##### options? - -Configuration options for this specific instance. - -###### calendar? - -`CalendarLike` - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -###### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -#### Returns - -`Tempo` - -### Constructor - -> **new Tempo**(`tempo`, `options?`): `Tempo` - -Defined in: [tempo.class.ts:1042](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1042) - -Instantiates a new `Tempo` object with a value. - -#### Parameters - -##### tempo - -[`DateTime`](../type-aliases/DateTime.md) - -The date-time value to parse. - -##### options? - -Configuration options for this specific instance. - -###### calendar? - -`CalendarLike` - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -###### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -#### Returns - -`Tempo` - -## Accessors - -### \[toStringTag\] - -#### Get Signature - -> **get** **\[toStringTag\]**(): `string` - -Defined in: [tempo.class.ts:1024](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1024) - -##### Returns - -`string` - -*** - -### cal - -#### Get Signature - -> **get** **cal**(): `string` - -Defined in: [tempo.class.ts:1217](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1217) - -Temporal Calendar ID (e.g., 'iso8601' | 'gregory') - -##### Returns - -`string` - -*** - -### config - -#### Get Signature - -> **get** **config**(): [`Config`](../@magmacomputing/namespaces/Internal/interfaces/Config.md) - -Defined in: [tempo.class.ts:1258](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1258) - -current Tempo configuration - -##### Returns - -[`Config`](../@magmacomputing/namespaces/Internal/interfaces/Config.md) - -*** - -### day - -#### Get Signature - -> **get** **day**(): `number` - -Defined in: [tempo.class.ts:1208](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1208) - -Day of the month (alias for `dd`) - -##### Returns - -`number` - -*** - -### dd - -#### Get Signature - -> **get** **dd**(): `number` - -Defined in: [tempo.class.ts:1207](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1207) - -Day of the month (1-31) - -##### Returns - -`number` - -*** - -### dow - -#### Get Signature - -> **get** **dow**(): `0` \| `1` \| `2` \| `3` \| `4` \| `5` \| `6` \| `7` - -Defined in: [tempo.class.ts:1223](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1223) - -ISO weekday number: Mon=1, Sun=7 - -##### Returns - -`0` \| `1` \| `2` \| `3` \| `4` \| `5` \| `6` \| `7` - -*** - -### epoch - -#### Get Signature - -> **get** **epoch**(): `SecureObject`\<\{ `ms`: `number`; `ns`: `bigint`; `ss`: `number`; `us`: `number`; \}\> - -Defined in: [tempo.class.ts:1288](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1288) - -units since epoch - -##### Returns - -`SecureObject`\<\{ `ms`: `number`; `ns`: `bigint`; `ss`: `number`; `us`: `number`; \}\> - -*** - -### ff - -#### Get Signature - -> **get** **ff**(): `number` - -Defined in: [tempo.class.ts:1215](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1215) - -Fractional seconds (e.g., 0.123456789) - -##### Returns - -`number` - -*** - -### fmt - -#### Get Signature - -> **get** **fmt**(): `any` - -Defined in: [tempo.class.ts:1287](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1287) - -Formatted results for all pre-defined format codes - -##### Returns - -`any` - -*** - -### hh - -#### Get Signature - -> **get** **hh**(): [`hh`](../type-aliases/hh.md) - -Defined in: [tempo.class.ts:1209](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1209) - -Hour of the day (0-23) - -##### Returns - -[`hh`](../type-aliases/hh.md) - -*** - -### isValid - -#### Get Signature - -> **get** **isValid**(): `boolean` - -Defined in: [tempo.class.ts:1226](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1226) - -`true` if the underlying date-time is valid. - -##### Returns - -`boolean` - -*** - -### mi - -#### Get Signature - -> **get** **mi**(): [`mi`](../type-aliases/mi.md) - -Defined in: [tempo.class.ts:1210](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1210) - -Minutes of the hour (0-59) - -##### Returns - -[`mi`](../type-aliases/mi.md) - -*** - -### mm - -#### Get Signature - -> **get** **mm**(): [`mm`](../type-aliases/mm.md) - -Defined in: [tempo.class.ts:1205](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1205) - -Month number: Jan=1, Dec=12 - -##### Returns - -[`mm`](../type-aliases/mm.md) - -*** - -### mmm - -#### Get Signature - -> **get** **mmm**(): `"All"` \| `"Jan"` \| `"Feb"` \| `"Mar"` \| `"Apr"` \| `"May"` \| `"Jun"` \| `"Jul"` \| `"Aug"` \| `"Sep"` \| `"Oct"` \| `"Nov"` \| `"Dec"` - -Defined in: [tempo.class.ts:1219](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1219) - -Short month name (e.g., 'Jan') - -##### Returns - -`"All"` \| `"Jan"` \| `"Feb"` \| `"Mar"` \| `"Apr"` \| `"May"` \| `"Jun"` \| `"Jul"` \| `"Aug"` \| `"Sep"` \| `"Oct"` \| `"Nov"` \| `"Dec"` - -*** - -### mon - -#### Get Signature - -> **get** **mon**(): `"May"` \| `"Every"` \| `"January"` \| `"February"` \| `"March"` \| `"April"` \| `"June"` \| `"July"` \| `"August"` \| `"September"` \| `"October"` \| `"November"` \| `"December"` - -Defined in: [tempo.class.ts:1220](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1220) - -Full month name (e.g., 'January') - -##### Returns - -`"May"` \| `"Every"` \| `"January"` \| `"February"` \| `"March"` \| `"April"` \| `"June"` \| `"July"` \| `"August"` \| `"September"` \| `"October"` \| `"November"` \| `"December"` - -*** - -### ms - -#### Get Signature - -> **get** **ms**(): [`ms`](../type-aliases/ms.md) - -Defined in: [tempo.class.ts:1212](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1212) - -Milliseconds of the second (0-999) - -##### Returns - -[`ms`](../type-aliases/ms.md) - -*** - -### nano - -#### Get Signature - -> **get** **nano**(): `bigint` - -Defined in: [tempo.class.ts:1224](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1224) - -Nanoseconds since Unix epoch (BigInt) - -##### Returns - -`bigint` - -*** - -### ns - -#### Get Signature - -> **get** **ns**(): [`ns`](../type-aliases/ns.md) - -Defined in: [tempo.class.ts:1214](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1214) - -Nanoseconds of the microsecond (0-999) - -##### Returns - -[`ns`](../type-aliases/ns.md) - -*** - -### parse - -#### Get Signature - -> **get** **parse**(): [`Parse`](../@magmacomputing/namespaces/Internal/interfaces/Parse.md) - -Defined in: [tempo.class.ts:1281](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1281) - -Instance-specific parse rules (merged with global) - -##### Returns - -[`Parse`](../@magmacomputing/namespaces/Internal/interfaces/Parse.md) - -*** - -### ranges - -#### Get Signature - -> **get** **ranges**(): `Record`\<`string`, `string`\> - -Defined in: [tempo.class.ts:1245](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1245) - -current range key for every registered term - -##### Returns - -`Record`\<`string`, `string`\> - -*** - -### ss - -#### Get Signature - -> **get** **ss**(): [`ss`](../type-aliases/ss.md) - -Defined in: [tempo.class.ts:1211](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1211) - -Seconds of the minute (0-59) - -##### Returns - -[`ss`](../type-aliases/ss.md) - -*** - -### term - -#### Get Signature - -> **get** **term**(): `any` - -Defined in: [tempo.class.ts:1286](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1286) - -Object containing results from all term plugins - -##### Returns - -`any` - -*** - -### terms - -#### Get Signature - -> **get** **terms**(): `Record`\<`string`, `string`[]\> - -Defined in: [tempo.class.ts:1232](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1232) - -list of registered terms and their available range keys - -##### Returns - -`Record`\<`string`, `string`[]\> - -*** - -### ts - -#### Get Signature - -> **get** **ts**(): `number` \| `bigint` - -Defined in: [tempo.class.ts:1218](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1218) - -Unix timestamp (defaults to milliseconds) - -##### Returns - -`number` \| `bigint` - -*** - -### tz - -#### Get Signature - -> **get** **tz**(): `string` - -Defined in: [tempo.class.ts:1216](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1216) - -IANA Time Zone ID (e.g., 'Australia/Sydney') - -##### Returns - -`string` - -*** - -### us - -#### Get Signature - -> **get** **us**(): [`us`](../type-aliases/us.md) - -Defined in: [tempo.class.ts:1213](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1213) - -Microseconds of the millisecond (0-999) - -##### Returns - -[`us`](../type-aliases/us.md) - -*** - -### wkd - -#### Get Signature - -> **get** **wkd**(): `"Everyday"` \| `"Monday"` \| `"Tuesday"` \| `"Wednesday"` \| `"Thursday"` \| `"Friday"` \| `"Saturday"` \| `"Sunday"` - -Defined in: [tempo.class.ts:1222](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1222) - -Full weekday name (e.g., 'Monday') - -##### Returns - -`"Everyday"` \| `"Monday"` \| `"Tuesday"` \| `"Wednesday"` \| `"Thursday"` \| `"Friday"` \| `"Saturday"` \| `"Sunday"` - -*** - -### ww - -#### Get Signature - -> **get** **ww**(): [`ww`](../type-aliases/ww.md) - -Defined in: [tempo.class.ts:1206](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1206) - -ISO week number of the year - -##### Returns - -[`ww`](../type-aliases/ww.md) - -*** - -### www - -#### Get Signature - -> **get** **www**(): `"All"` \| `"Mon"` \| `"Tue"` \| `"Wed"` \| `"Thu"` \| `"Fri"` \| `"Sat"` \| `"Sun"` - -Defined in: [tempo.class.ts:1221](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1221) - -Short weekday name (e.g., 'Mon') - -##### Returns - -`"All"` \| `"Mon"` \| `"Tue"` \| `"Wed"` \| `"Thu"` \| `"Fri"` \| `"Sat"` \| `"Sun"` - -*** - -### yw - -#### Get Signature - -> **get** **yw**(): `number` \| `undefined` - -Defined in: [tempo.class.ts:1204](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1204) - -4-digit ISO week-numbering year - -##### Returns - -`number` \| `undefined` - -*** - -### yy - -#### Get Signature - -> **get** **yy**(): `number` - -Defined in: [tempo.class.ts:1203](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1203) - -4-digit year (e.g., 2024) - -##### Returns - -`number` - -*** - -### config - -#### Get Signature - -> **get** `static` **config**(): `any` - -Defined in: [tempo.class.ts:860](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L860) - -global Tempo configuration - -##### Returns - -`any` - -*** - -### default - -#### Get Signature - -> **get** `static` **default**(): `Readonly`\<\{ `calendar?`: `string` \| `SecureObject`\<`ZonedDateTime`\> \| `SecureObject`\<`PlainDate`\> \| `SecureObject`\<`PlainDateTime`\> \| `SecureObject`\<`PlainMonthDay`\> \| `SecureObject`\<`PlainYearMonth`\>; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: [`Logic`](../type-aliases/Logic.md) \| `SecureObject`\<`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\>\> \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Logic`](../type-aliases/Logic.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>\>; `formats?`: `SecureObject`\<`Property`\<`any`\>\>; `layout?`: [`Pattern`](../type-aliases/Pattern.md) \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureObject`\<`Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>\>; `locale?`: `string`; `mdyLayouts?`: `SecureArray`\<[`Pair`](../type-aliases/Pair.md)\>; `mdyLocales?`: `string` \| `SecureArray`\<`string`\>; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`Logic`](../type-aliases/Logic.md) \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Logic`](../type-aliases/Logic.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>\> \| `SecureObject`\<`Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>\>; `pivot?`: `number`; `plugins?`: `SecureObject`\<[`Plugin`](../interfaces/Plugin.md)\> \| `SecureArray`\<[`Plugin`](../interfaces/Plugin.md)\>; `rtfFormat?`: `SecureObject`\<`RelativeTimeFormat`\>; `rtfStyle?`: `RelativeTimeFormatStyle`; `scope`: `"default"`; `silent?`: `boolean`; `snippet?`: [`Pattern`](../type-aliases/Pattern.md) \| `SecureObject`\<`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\>\> \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md); `timeZone`: `string` \| `SecureObject`\<`ZonedDateTime`\>; `value?`: `string` \| `number` \| `bigint` \| `Date` \| `SecureObject`\<`ZonedDateTime`\> \| `SecureObject`\<`PlainDate`\> \| `SecureObject`\<`PlainDateTime`\> \| `SecureObject`\<`Tempo`\> \| `SecureObject`\<`Instant`\> \| `SecureObject`\<`PlainTime`\> \| `SecureObject`\<`Duration`\> \| `SecureObject`\<`ZonedDateTimeLikeObject`\> \| `null`; \}\> - -Defined in: [tempo.class.ts:923](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L923) - -Tempo initial default settings - -##### Returns - -`Readonly`\<\{ `calendar?`: `string` \| `SecureObject`\<`ZonedDateTime`\> \| `SecureObject`\<`PlainDate`\> \| `SecureObject`\<`PlainDateTime`\> \| `SecureObject`\<`PlainMonthDay`\> \| `SecureObject`\<`PlainYearMonth`\>; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: [`Logic`](../type-aliases/Logic.md) \| `SecureObject`\<`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\>\> \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Logic`](../type-aliases/Logic.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>\>; `formats?`: `SecureObject`\<`Property`\<`any`\>\>; `layout?`: [`Pattern`](../type-aliases/Pattern.md) \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureObject`\<`Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>\>; `locale?`: `string`; `mdyLayouts?`: `SecureArray`\<[`Pair`](../type-aliases/Pair.md)\>; `mdyLocales?`: `string` \| `SecureArray`\<`string`\>; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`Logic`](../type-aliases/Logic.md) \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Logic`](../type-aliases/Logic.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>\> \| `SecureObject`\<`Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>\>; `pivot?`: `number`; `plugins?`: `SecureObject`\<[`Plugin`](../interfaces/Plugin.md)\> \| `SecureArray`\<[`Plugin`](../interfaces/Plugin.md)\>; `rtfFormat?`: `SecureObject`\<`RelativeTimeFormat`\>; `rtfStyle?`: `RelativeTimeFormatStyle`; `scope`: `"default"`; `silent?`: `boolean`; `snippet?`: [`Pattern`](../type-aliases/Pattern.md) \| `SecureObject`\<`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\>\> \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md); `timeZone`: `string` \| `SecureObject`\<`ZonedDateTime`\>; `value?`: `string` \| `number` \| `bigint` \| `Date` \| `SecureObject`\<`ZonedDateTime`\> \| `SecureObject`\<`PlainDate`\> \| `SecureObject`\<`PlainDateTime`\> \| `SecureObject`\<`Tempo`\> \| `SecureObject`\<`Instant`\> \| `SecureObject`\<`PlainTime`\> \| `SecureObject`\<`Duration`\> \| `SecureObject`\<`ZonedDateTimeLikeObject`\> \| `null`; \}\> - -*** - -### discovery - -#### Get Signature - -> **get** `static` **discovery**(): `any` - -Defined in: [tempo.class.ts:876](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L876) - -global discovery configuration - -##### Returns - -`any` - -*** - -### FORMAT - -#### Get Signature - -> **get** `static` **FORMAT**(): `EnumifyType`\<\{ `date`: `"{yyyy}-{mm}-{dd}"`; `dayDate`: `"{dd}-{mmm}-{yyyy}"`; `dayMonth`: `"{dd}-{mmm}"`; `dayTime`: `"{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}"`; `display`: `"{www}, {dd} {mmm} {yyyy}"`; `logStamp`: `"{yyyy}{mm}{dd}T{hhmiss}.{ff}"`; `sortTime`: `"{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}"`; `time`: `"{hh}:{mi}:{ss}"`; `weekDate`: `"{www}, {yyyy}-{mmm}-{dd}"`; `weekStamp`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}"`; `weekTime`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"`; `yearMonth`: `"{yyyy}{mm}"`; `yearMonthDay`: `"{yyyy}{mm}{dd}"`; `yearWeek`: `"{yw}{ww}"`; \}\> - -Defined in: [tempo.class.ts:83](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L83) - -Pre-configured format {name -> string} pairs - -##### Returns - -`EnumifyType`\<\{ `date`: `"{yyyy}-{mm}-{dd}"`; `dayDate`: `"{dd}-{mmm}-{yyyy}"`; `dayMonth`: `"{dd}-{mmm}"`; `dayTime`: `"{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}"`; `display`: `"{www}, {dd} {mmm} {yyyy}"`; `logStamp`: `"{yyyy}{mm}{dd}T{hhmiss}.{ff}"`; `sortTime`: `"{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}"`; `time`: `"{hh}:{mi}:{ss}"`; `weekDate`: `"{www}, {yyyy}-{mmm}-{dd}"`; `weekStamp`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}"`; `weekTime`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"`; `yearMonth`: `"{yyyy}{mm}"`; `yearMonthDay`: `"{yyyy}{mm}{dd}"`; `yearWeek`: `"{yw}{ww}"`; \}\> - -*** - -### formats - -#### Get Signature - -> **get** `static` **formats**(): `any` - -Defined in: [tempo.class.ts:912](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L912) - -static Tempo.formats (registry) - -##### Returns - -`any` - -*** - -### instant - -#### Get Signature - -> **get** `static` **instant**(): `Instant` - -Defined in: [tempo.class.ts:895](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L895) - -get the current system Instant - -##### Returns - -`Instant` - -*** - -### LIMIT - -#### Get Signature - -> **get** `static` **LIMIT**(): `object` - -Defined in: [tempo.class.ts:87](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L87) - -some useful Dates - -##### Returns - -###### maxTempo - -###### Get Signature - -> **get** **maxTempo**(): `bigint` - -Tempo(31-Dec-9999.23:59:59).ns - -###### Returns - -`bigint` - -###### minTempo - -###### Get Signature - -> **get** **minTempo**(): `bigint` - -Tempo(01-Jan-1000.00:00:00).ns - -###### Returns - -`bigint` - -*** - -### MODE - -#### Get Signature - -> **get** `static` **MODE**(): `EnumifyType`\<\{ `Auto`: `"auto"`; `Defer`: `"defer"`; `Strict`: `"strict"`; \}\> - -Defined in: [tempo.class.ts:86](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L86) - -initialization strategies - -##### Returns - -`EnumifyType`\<\{ `Auto`: `"auto"`; `Defer`: `"defer"`; `Strict`: `"strict"`; \}\> - -*** - -### NUMBER - -#### Get Signature - -> **get** `static` **NUMBER**(): `EnumifyType`\<\{ `eight`: `8`; `five`: `5`; `four`: `4`; `nine`: `9`; `one`: `1`; `seven`: `7`; `six`: `6`; `ten`: `10`; `three`: `3`; `two`: `2`; `zero`: `0`; \}\> - -Defined in: [tempo.class.ts:84](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L84) - -Number names (0-10) - -##### Returns - -`EnumifyType`\<\{ `eight`: `8`; `five`: `5`; `four`: `4`; `nine`: `9`; `one`: `1`; `seven`: `7`; `six`: `6`; `ten`: `10`; `three`: `3`; `two`: `2`; `zero`: `0`; \}\> - -*** - -### options - -#### Get Signature - -> **get** `static` **options**(): `any` - -Defined in: [tempo.class.ts:882](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L882) - -##### Returns - -`any` - -*** - -### parse - -#### Get Signature - -> **get** `static` **parse**(): [`Parse`](../@magmacomputing/namespaces/Internal/interfaces/Parse.md) - -Defined in: [tempo.class.ts:930](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L930) - -configuration governing the static 'rules' used when parsing t.DateTime argument - -##### Returns - -[`Parse`](../@magmacomputing/namespaces/Internal/interfaces/Parse.md) - -*** - -### properties - -#### Get Signature - -> **get** `static` **properties**(): `SecureArray`\<`string`\> - -Defined in: [tempo.class.ts:917](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L917) - -static Tempo properties getter - -##### Returns - -`SecureArray`\<`string`\> - -*** - -### terms - -#### Get Signature - -> **get** `static` **terms**(): `SecureArray`\<`Omit`\<[`TermPlugin`](../interfaces/TermPlugin.md), `"define"` \| `"resolve"`\>\> & `Record`\<`string`, `Omit`\<[`TermPlugin`](../interfaces/TermPlugin.md), `"define"` \| `"resolve"`\>\> - -Defined in: [tempo.class.ts:898](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L898) - -static Tempo.terms (registry) - -##### Returns - -`SecureArray`\<`Omit`\<[`TermPlugin`](../interfaces/TermPlugin.md), `"define"` \| `"resolve"`\>\> & `Record`\<`string`, `Omit`\<[`TermPlugin`](../interfaces/TermPlugin.md), `"define"` \| `"resolve"`\>\> - -*** - -### TIMEZONE - -#### Get Signature - -> **get** `static` **TIMEZONE**(): `object` - -Defined in: [tempo.class.ts:85](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L85) - -TimeZone aliases - -##### Returns - -`object` - -###### acst - -> `readonly` **acst**: `"Australia/Adelaide"` = `'Australia/Adelaide'` - -###### aest - -> `readonly` **aest**: `"Australia/Sydney"` = `'Australia/Sydney'` - -###### awst - -> `readonly` **awst**: `"Australia/Perth"` = `'Australia/Perth'` - -###### cet - -> `readonly` **cet**: `"Europe/Paris"` = `'Europe/Paris'` - -###### cst - -> `readonly` **cst**: `"America/Chicago"` = `'America/Chicago'` - -###### eet - -> `readonly` **eet**: `"Europe/Helsinki"` = `'Europe/Helsinki'` - -###### est - -> `readonly` **est**: `"America/New_York"` = `'America/New_York'` - -###### gmt - -> `readonly` **gmt**: `"Europe/London"` = `'Europe/London'` - -###### ist - -> `readonly` **ist**: `"Asia/Kolkata"` = `'Asia/Kolkata'` - -###### jst - -> `readonly` **jst**: `"Asia/Tokyo"` = `'Asia/Tokyo'` - -###### mst - -> `readonly` **mst**: `"America/Denver"` = `'America/Denver'` - -###### npt - -> `readonly` **npt**: `"Asia/Kathmandu"` = `'Asia/Kathmandu'` - -###### nzt - -> `readonly` **nzt**: `"Pacific/Auckland"` = `'Pacific/Auckland'` - -###### pst - -> `readonly` **pst**: `"America/Los_Angeles"` = `'America/Los_Angeles'` - -###### utc - -> `readonly` **utc**: `"UTC"` = `'UTC'` - -## Methods - -### \[iterator\]() - -> **\[iterator\]**(): `ArrayIterator`\<`EntryOf`\<`any`\>\> - -Defined in: [tempo.class.ts:1020](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1020) - -iterate over instance formats - -#### Returns - -`ArrayIterator`\<`EntryOf`\<`any`\>\> - -*** - -### \[toPrimitive\]() - -> **\[toPrimitive\]**(`hint?`): `string` \| `number` \| `bigint` - -Defined in: [tempo.class.ts:1011](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1011) - -allow for auto-convert of Tempo to BigInt, Number or String - -#### Parameters - -##### hint? - -`"string"` \| `"number"` \| `"default"` - -#### Returns - -`string` \| `number` \| `bigint` - -*** - -### add() - -> **add**(`tempo?`, `options?`): `Tempo` - -Defined in: [tempo.class.ts:1321](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1321) - -returns a new `Tempo` with specific duration added. - -#### Parameters - -##### tempo? - -[`Add`](../type-aliases/Add.md) - -##### options? - -###### calendar? - -`CalendarLike` - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -###### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -#### Returns - -`Tempo` - -*** - -### clone() - -> **clone**(): `Tempo` - -Defined in: [tempo.class.ts:1323](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1323) - -returns a clone of the current `Tempo` instance. - -#### Returns - -`Tempo` - -*** - -### format() - -#### Call Signature - -> **format**\<`K`\>(`fmt`): `any` - -Defined in: [tempo.class.ts:1305](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1305) - -##### Type Parameters - -###### K - -`K` *extends* `Format` - -##### Parameters - -###### fmt - -`K` - -##### Returns - -`any` - -#### Call Signature - -> **format**(`fmt`): `any` - -Defined in: [plugin/module/module.format.ts:12](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.format.ts#L12) - -applies a format to the instance. - -##### Parameters - -###### fmt - -`any` - -##### Returns - -`any` - -*** - -### set() - -> **set**(`tempo?`, `options?`): `Tempo` - -Defined in: [tempo.class.ts:1322](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1322) - -returns a new `Tempo` with specific offsets. - -#### Parameters - -##### tempo? - -[`Set`](../type-aliases/Set.md) - -##### options? - -###### calendar? - -`CalendarLike` - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -###### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -#### Returns - -`Tempo` - -*** - -### since() - -#### Call Signature - -> **since**(...`args`): `any` - -Defined in: [tempo.class.ts:1316](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1316) - -time elapsed since another date-time - -##### Parameters - -###### args - -...`any`[] - -##### Returns - -`any` - -#### Call Signature - -> **since**(`until`, `opts?`): `string` - -Defined in: [plugin/module/module.duration.ts:18](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L18) - -time elapsed since (with unit) - -##### Parameters - -###### until - -[`Until`](../type-aliases/Until.md) - -###### opts? - -###### calendar? - -`CalendarLike` - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -###### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -##### Returns - -`string` - -#### Call Signature - -> **since**(`dateTimeOrOpts`, `until`): `string` - -Defined in: [plugin/module/module.duration.ts:19](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L19) - -time elapsed since another date-time (with unit) - -##### Parameters - -###### dateTimeOrOpts - -[`DateTime`](../type-aliases/DateTime.md) \| \{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} - -[`DateTime`](../type-aliases/DateTime.md) - -*** - -###### Type Literal - -\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} - -###### calendar? - -CalendarLike \| undefined - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -RelativeTimeFormatStyle \| undefined - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -TimeStamp \| undefined - -Precision to measure timestamps (ms | us) - -###### timeZone? - -TimeZoneLike \| undefined - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -###### until - -[`Until`](../type-aliases/Until.md) - -##### Returns - -`string` - -#### Call Signature - -> **since**(`dateTimeOrOpts?`, `opts?`): `string` - -Defined in: [plugin/module/module.duration.ts:20](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L20) - -time elapsed since another date-time (w'out unit) - -##### Parameters - -###### dateTimeOrOpts? - -[`DateTime`](../type-aliases/DateTime.md) \| \{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} - -[`DateTime`](../type-aliases/DateTime.md) - -*** - -###### Type Literal - -\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} - -###### calendar? - -CalendarLike \| undefined - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -RelativeTimeFormatStyle \| undefined - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -TimeStamp \| undefined - -Precision to measure timestamps (ms | us) - -###### timeZone? - -TimeZoneLike \| undefined - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -###### opts? - -###### calendar? - -`CalendarLike` - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -###### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -##### Returns - -`string` - -#### Call Signature - -> **since**(`optsOrDate?`, `optsOrUntil?`): `string` - -Defined in: [plugin/module/module.duration.ts:21](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L21) - -time elapsed since another date-time - -##### Parameters - -###### optsOrDate? - -`any` - -###### optsOrUntil? - -`any` - -##### Returns - -`string` - -*** - -### toDate() - -> **toDate**(): `Date` - -Defined in: [tempo.class.ts:1341](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1341) - -the date-time as a standard `Date` object. - -#### Returns - -`Date` - -*** - -### toDateTime() - -> **toDateTime**(): `ZonedDateTime` - -Defined in: [tempo.class.ts:1326](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1326) - -returns the underlying Temporal.ZonedDateTime - -#### Returns - -`ZonedDateTime` - -*** - -### toInstant() - -> **toInstant**(): `Instant` - -Defined in: [tempo.class.ts:1338](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1338) - -returns the underlying Temporal.Instant - -#### Returns - -`Instant` - -*** - -### toJSON() - -> **toJSON**(): `object` - -Defined in: [tempo.class.ts:1350](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1350) - -Custom JSON serialization for `JSON.stringify`. - -#### Returns - -##### calendar - -> **calendar**: `CalendarLike` - -Temporal calendar - -##### catch - -> **catch**: `boolean` \| `undefined` - -catch or throw Errors - -##### debug - -> **debug**: `boolean` \| `undefined` - -additional console.log for tracking - -##### discovery - -> **discovery**: `string` \| `symbol` - -globalThis Discovery Symbol - -##### formats - -> **formats**: `EnumifyType` - -pre-configured format strings - -##### locale - -> **locale**: `string` - -locale (e.g. en-AU) - -##### mode - -> **mode**: `"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -##### plugins - -> **plugins**: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -##### rtfFormat - -> **rtfFormat**: `RelativeTimeFormat` - -Pre-configured relative time formatter - -##### rtfStyle - -> **rtfStyle**: `RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -##### scope - -> **scope**: `"global"` \| `"local"` - -configuration (global | local) - -##### silent - -> **silent**: `boolean` \| `undefined` - -suppress console output during catch - -##### sphere - -> **sphere**: `"north"` \| `"south"` \| `"east"` \| `"west"` \| `undefined` - -hemisphere for term.qtr or term.szn - -##### store - -> **store**: `string` - -localStorage key - -##### timeStamp - -> **timeStamp**: [`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -##### timeZone - -> **timeZone**: `TimeZoneLike` - -Temporal timeZone - -##### value - -> **value**: `string` - -*** - -### toNow() - -> **toNow**(): `ZonedDateTime` - -Defined in: [tempo.class.ts:1340](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1340) - -the current system time localized to this instance. - -#### Returns - -`ZonedDateTime` - -*** - -### toPlainDate() - -> **toPlainDate**(): `PlainDate` - -Defined in: [tempo.class.ts:1335](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1335) - -returns a Temporal.PlainDate representation - -#### Returns - -`PlainDate` - -*** - -### toPlainDateTime() - -> **toPlainDateTime**(): `PlainDateTime` - -Defined in: [tempo.class.ts:1337](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1337) - -returns a Temporal.PlainDateTime representation - -#### Returns - -`PlainDateTime` - -*** - -### toPlainTime() - -> **toPlainTime**(): `PlainTime` - -Defined in: [tempo.class.ts:1336](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1336) - -returns a Temporal.PlainTime representation - -#### Returns - -`PlainTime` - -*** - -### toString() - -> **toString**(): `string` - -Defined in: [tempo.class.ts:1343](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1343) - -ISO8601 string representation of the date-time. - -#### Returns - -`string` - -*** - -### until() - -#### Call Signature - -> **until**(...`args`): `any` - -Defined in: [tempo.class.ts:1311](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1311) - -time duration until another date-time - -##### Parameters - -###### args - -...`any`[] - -##### Returns - -`any` - -#### Call Signature - -> **until**(`dateTimeOrOpts?`, `opts?`): [`Duration`](../type-aliases/Duration.md) - -Defined in: [plugin/module/module.duration.ts:13](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L13) - -time duration until (returns Duration) - -##### Parameters - -###### dateTimeOrOpts? - -[`DateTime`](../type-aliases/DateTime.md) \| \{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} - -[`DateTime`](../type-aliases/DateTime.md) - -*** - -###### Type Literal - -\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} - -###### calendar? - -CalendarLike \| undefined - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -RelativeTimeFormatStyle \| undefined - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -TimeStamp \| undefined - -Precision to measure timestamps (ms | us) - -###### timeZone? - -TimeZoneLike \| undefined - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -###### opts? - -###### calendar? - -`CalendarLike` - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -###### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -##### Returns - -[`Duration`](../type-aliases/Duration.md) - -#### Call Signature - -> **until**(`unit`, `opts?`): `number` - -Defined in: [plugin/module/module.duration.ts:14](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L14) - -time duration until (with unit, returns number) - -##### Parameters - -###### unit - -[`Unit`](../type-aliases/Unit.md) - -###### opts? - -###### calendar? - -`CalendarLike` - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -###### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -##### Returns - -`number` - -#### Call Signature - -> **until**(`dateTimeOrOpts`, `unit`): `number` - -Defined in: [plugin/module/module.duration.ts:15](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L15) - -time duration until another date-time (with unit ) - -##### Parameters - -###### dateTimeOrOpts - -[`DateTime`](../type-aliases/DateTime.md) \| \{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} - -[`DateTime`](../type-aliases/DateTime.md) - -*** - -###### Type Literal - -\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} - -###### calendar? - -CalendarLike \| undefined - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -RelativeTimeFormatStyle \| undefined - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -TimeStamp \| undefined - -Precision to measure timestamps (ms | us) - -###### timeZone? - -TimeZoneLike \| undefined - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -###### unit - -[`Unit`](../type-aliases/Unit.md) - -##### Returns - -`number` - -#### Call Signature - -> **until**(`optsOrDate?`, `optsOrUntil?`): `number` \| [`Duration`](../type-aliases/Duration.md) - -Defined in: [plugin/module/module.duration.ts:16](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L16) - -fallback: union of possible returns - -##### Parameters - -###### optsOrDate? - -`string` \| `number` \| `bigint` \| `Tempo` \| `Instant` \| `ZonedDateTime` \| `Date` \| `PlainDate` \| `PlainTime` \| `PlainDateTime` \| `Duration` \| `ZonedDateTimeLikeObject` \| \{\[`key`: `string`\]: `any`; `calendar?`: `CalendarLike`; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>; `formats?`: `Property`\<`any`\>; `layout?`: [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: `RelativeTimeFormatStyle`; `silent?`: `boolean`; `snippet?`: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md); `timeZone?`: `TimeZoneLike`; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} \| `object` & `object` \| `null` - -`string` - -*** - -`number` - -*** - -`bigint` - -*** - -`Tempo` - -*** - -`Instant` - -*** - -`ZonedDateTime` - -*** - -`Date` - -*** - -`PlainDate` - -*** - -`PlainTime` - -*** - -`PlainDateTime` - -*** - -`Duration` - -*** - -`ZonedDateTimeLikeObject` - -*** - -###### Type Literal - -\{\[`key`: `string`\]: `any`; `calendar?`: `CalendarLike`; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>; `formats?`: `Property`\<`any`\>; `layout?`: [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: `RelativeTimeFormatStyle`; `silent?`: `boolean`; `snippet?`: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md); `timeZone?`: `TimeZoneLike`; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} - -###### calendar? - -`CalendarLike` - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -###### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -*** - -`object` & `object` - -*** - -`null` - -###### optsOrUntil? - -[`Until`](../type-aliases/Until.md) \| \{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} - -[`Until`](../type-aliases/Until.md) - -*** - -###### Type Literal - -\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} - -###### calendar? - -CalendarLike \| undefined - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -RelativeTimeFormatStyle \| undefined - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -TimeStamp \| undefined - -Precision to measure timestamps (ms | us) - -###### timeZone? - -TimeZoneLike \| undefined - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -##### Returns - -`number` \| [`Duration`](../type-aliases/Duration.md) - -*** - -### \[dispose\]() - -> `static` **\[dispose\]**(): `void` - -Defined in: [tempo.class.ts:949](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L949) - -release global config and reset library to defaults - -#### Returns - -`void` - -*** - -### \[hasInstance\]() - -> `static` **\[hasInstance\]**(`instance`): `boolean` - -Defined in: [tempo.class.ts:953](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L953) - -#### Parameters - -##### instance - -`any` - -#### Returns - -`boolean` - -*** - -### \[iterator\]() - -> `static` **\[iterator\]**(): `ArrayIterator`\<`string`\> - -Defined in: [tempo.class.ts:944](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L944) - -iterate over Tempo properties - -#### Returns - -`ArrayIterator`\<`string`\> - -*** - -### compare() - -> `static` **compare**(`tempo1?`, `tempo2?`): `number` - -Defined in: [tempo.class.ts:853](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L853) - -Compares two `Tempo` instances or date-time values. - -#### Parameters - -##### tempo1? - -\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} \| [`DateTime`](../type-aliases/DateTime.md) - -###### Type Literal - -\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} - -###### calendar? - -CalendarLike \| undefined - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -RelativeTimeFormatStyle \| undefined - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -TimeStamp \| undefined - -Precision to measure timestamps (ms | us) - -###### timeZone? - -TimeZoneLike \| undefined - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -*** - -[`DateTime`](../type-aliases/DateTime.md) - -##### tempo2? - -\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} \| [`DateTime`](../type-aliases/DateTime.md) - -###### Type Literal - -\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} - -###### calendar? - -CalendarLike \| undefined - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -RelativeTimeFormatStyle \| undefined - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -TimeStamp \| undefined - -Precision to measure timestamps (ms | us) - -###### timeZone? - -TimeZoneLike \| undefined - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -*** - -[`DateTime`](../type-aliases/DateTime.md) - -#### Returns - -`number` - -*** - -### duration() - -> `static` **duration**(`input`): [`Duration`](../type-aliases/Duration.md) - -Defined in: [tempo.class.ts:775](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L775) - -returns a full Tempo Duration object (EDO) for the given input - -#### Parameters - -##### input - -`any` - -#### Returns - -[`Duration`](../type-aliases/Duration.md) - -*** - -### extend() - -#### Call Signature - -> `static` **extend**(`plugin`, `options?`): *typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) - -Defined in: [tempo.class.ts:588](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L588) - -Register a plugin or term extension. - -##### Parameters - -###### plugin - -[`Plugin`](../interfaces/Plugin.md) - -A plugin or term extension to register. - -###### options? - -Optional configuration for the plugin. - -###### calendar? - -`CalendarLike` - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -###### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -##### Returns - -*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) - -#### Call Signature - -> `static` **extend**(`plugins`, `options?`): *typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) - -Defined in: [tempo.class.ts:595](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L595) - -Register an array of plugins or term extensions. - -##### Parameters - -###### plugins - -`any`[] - -An array of plugins, terms, or extensions to register. - -###### options? - -Optional configuration for the plugins. - -###### calendar? - -`CalendarLike` - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -###### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -##### Returns - -*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) - -#### Call Signature - -> `static` **extend**(...`args`): *typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) - -Defined in: [tempo.class.ts:601](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L601) - -Register multiple plugins or term extensions. - -##### Parameters - -###### args - -...`any`[] - -A plugin, term, or list of extensions to register. - -##### Returns - -*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) - -*** - -### from() - -#### Call Signature - -> `static` **from**(`options?`): `Tempo` - -Defined in: [tempo.class.ts:889](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L889) - -Creates a new `Tempo` instance. - -##### Parameters - -###### options? - -###### calendar? - -`CalendarLike` - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -###### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -##### Returns - -`Tempo` - -#### Call Signature - -> `static` **from**(`tempo`, `options?`): `Tempo` - -Defined in: [tempo.class.ts:890](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L890) - -Creates a new `Tempo` instance. - -##### Parameters - -###### tempo - -[`DateTime`](../type-aliases/DateTime.md) - -###### options? - -###### calendar? - -`CalendarLike` - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -###### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -##### Returns - -`Tempo` - -*** - -### init() - -> `static` **init**(`options?`): *typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) - -Defined in: [tempo.class.ts:704](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L704) - -Reset Tempo to its default, built-in registration state - -#### Parameters - -##### options? - -###### calendar? - -`CalendarLike` - -Temporal calendar - -###### catch? - -`boolean` - -catch or throw Errors - -###### debug? - -`boolean` - -additional console.log for tracking - -###### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -###### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -###### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -###### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -###### locale? - -`string` - -locale (e.g. en-AU) - -###### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -###### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -###### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -###### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -###### pivot? - -`number` - -pivot year for two-digit years - -###### plugins? - -[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] - -plugins to be automatically extended - -###### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -###### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -###### silent? - -`boolean` - -suppress console output during catch - -###### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -###### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -###### store? - -`string` - -localStorage key - -###### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -###### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -###### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -#### Returns - -*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) - -*** - -### isTempo() - -> `static` **isTempo**(`instance?`): `instance is Tempo` - -Defined in: [tempo.class.ts:958](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L958) - -check if a supplied variable is a valid Tempo instance - -#### Parameters - -##### instance? - -`any` - -#### Returns - -`instance is Tempo` - -*** - -### now() - -> `static` **now**(): `bigint` - -Defined in: [tempo.class.ts:893](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L893) - -#### Returns - -`bigint` diff --git a/packages/tempo/doc/api/interfaces/Extension.md b/packages/tempo/doc/api/interfaces/Extension.md deleted file mode 100644 index adf81f41..00000000 --- a/packages/tempo/doc/api/interfaces/Extension.md +++ /dev/null @@ -1,54 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -Defined in: [plugin/plugin.type.ts:44](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L44) - -## Extension -Type for Extension plugins. - -## Extends - -- [`Plugin`](Plugin.md) - -## Indexable - -> \[`key`: `string`\]: `any` - -## Properties - -### install - -> **install**: (`this`, `t`) => `void` - -Defined in: [plugin/plugin.type.ts:29](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L29) - -#### Parameters - -##### this - -[`Tempo`](../classes/Tempo.md) - -##### t - -*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) - -#### Returns - -`void` - -#### Inherited from - -[`Plugin`](Plugin.md).[`install`](Plugin.md#install) - -*** - -### name - -> **name**: `string` - -Defined in: [plugin/plugin.type.ts:28](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L28) - -#### Inherited from - -[`Plugin`](Plugin.md).[`name`](Plugin.md#name) diff --git a/packages/tempo/doc/api/interfaces/Module.md b/packages/tempo/doc/api/interfaces/Module.md deleted file mode 100644 index 65120196..00000000 --- a/packages/tempo/doc/api/interfaces/Module.md +++ /dev/null @@ -1,54 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -Defined in: [plugin/plugin.type.ts:36](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L36) - -## Module -Type for Module plugins. - -## Extends - -- [`Plugin`](Plugin.md) - -## Indexable - -> \[`key`: `string`\]: `any` - -## Properties - -### install - -> **install**: (`this`, `t`) => `void` - -Defined in: [plugin/plugin.type.ts:29](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L29) - -#### Parameters - -##### this - -[`Tempo`](../classes/Tempo.md) - -##### t - -*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) - -#### Returns - -`void` - -#### Inherited from - -[`Plugin`](Plugin.md).[`install`](Plugin.md#install) - -*** - -### name - -> **name**: `string` - -Defined in: [plugin/plugin.type.ts:28](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L28) - -#### Inherited from - -[`Plugin`](Plugin.md).[`name`](Plugin.md#name) diff --git a/packages/tempo/doc/api/interfaces/Params.md b/packages/tempo/doc/api/interfaces/Params.md deleted file mode 100644 index 00f3be09..00000000 --- a/packages/tempo/doc/api/interfaces/Params.md +++ /dev/null @@ -1,329 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -Defined in: [tempo.type.ts:144](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L144) - -Type for consistency in expected arguments for helper functions - -## Extended by - -- [`Params`](../@magmacomputing/namespaces/Tempo/interfaces/Params.md) - -## Type Parameters - -### T - -`T` - -## Call Signature - -> **Params**(`tempo?`, `options?`): `T` - -Defined in: [tempo.type.ts:145](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L145) - -Type for consistency in expected arguments for helper functions - -### Parameters - -#### tempo? - -[`DateTime`](../type-aliases/DateTime.md) - -#### options? - -##### calendar? - -`CalendarLike` - -Temporal calendar - -##### catch? - -`boolean` - -catch or throw Errors - -##### debug? - -`boolean` - -additional console.log for tracking - -##### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -##### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -##### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -##### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -##### locale? - -`string` - -locale (e.g. en-AU) - -##### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -##### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -##### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -##### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -##### pivot? - -`number` - -pivot year for two-digit years - -##### plugins? - -[`Plugin`](Plugin.md) \| [`Plugin`](Plugin.md)[] - -plugins to be automatically extended - -##### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -##### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -##### silent? - -`boolean` - -suppress console output during catch - -##### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -##### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -##### store? - -`string` - -localStorage key - -##### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -##### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -##### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -### Returns - -`T` - -## Call Signature - -> **Params**(`options`): `T` - -Defined in: [tempo.type.ts:146](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L146) - -Type for consistency in expected arguments for helper functions - -### Parameters - -#### options - -##### calendar? - -`CalendarLike` - -Temporal calendar - -##### catch? - -`boolean` - -catch or throw Errors - -##### debug? - -`boolean` - -additional console.log for tracking - -##### discovery? - -`string` \| `symbol` - -globalThis Discovery Symbol - -##### event? - -`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> - -custom date aliases (events). - -##### formats? - -`Property`\<`any`\> - -custom format strings to merge in the FORMAT enum - -##### layout? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> - -patterns to help parse value - -##### locale? - -`string` - -locale (e.g. en-AU) - -##### mdyLayouts? - -[`Pair`](../type-aliases/Pair.md)[] - -swap parse-order of layouts - -##### mdyLocales? - -`string` \| `string`[] - -locale-names that prefer 'mm-dd-yy' date order - -##### mode? - -`"auto"` \| `"strict"` \| `"defer"` - -initialization strategy ('auto'|'strict'|'defer') - -##### period? - -[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> - -custom time aliases (periods). - -##### pivot? - -`number` - -pivot year for two-digit years - -##### plugins? - -[`Plugin`](Plugin.md) \| [`Plugin`](Plugin.md)[] - -plugins to be automatically extended - -##### rtfFormat? - -`RelativeTimeFormat` - -Pre-configured relative time formatter - -##### rtfStyle? - -`RelativeTimeFormatStyle` - -Default style for relative time ('long' | 'short' | 'narrow') - -##### silent? - -`boolean` - -suppress console output during catch - -##### snippet? - -`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> - -date-time snippets to help compose a Layout - -##### sphere? - -`"north"` \| `"south"` \| `"east"` \| `"west"` - -hemisphere for term.qtr or term.szn - -##### store? - -`string` - -localStorage key - -##### timeStamp? - -[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) - -Precision to measure timestamps (ms | us) - -##### timeZone? - -`TimeZoneLike` - -Temporal timeZone - -##### value? - -[`DateTime`](../type-aliases/DateTime.md) - -supplied value to parse - -### Returns - -`T` diff --git a/packages/tempo/doc/api/interfaces/Plugin.md b/packages/tempo/doc/api/interfaces/Plugin.md deleted file mode 100644 index aa68894b..00000000 --- a/packages/tempo/doc/api/interfaces/Plugin.md +++ /dev/null @@ -1,44 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -Defined in: [plugin/plugin.type.ts:27](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L27) - -## Plugin -Interface for general Tempo plugins (Modules/Extensions). - -## Extended by - -- [`PluginContainer`](../@magmacomputing/namespaces/Internal/interfaces/PluginContainer.md) -- [`Module`](Module.md) -- [`Extension`](Extension.md) - -## Properties - -### install - -> **install**: (`this`, `t`) => `void` - -Defined in: [plugin/plugin.type.ts:29](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L29) - -#### Parameters - -##### this - -[`Tempo`](../classes/Tempo.md) - -##### t - -*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) - -#### Returns - -`void` - -*** - -### name - -> **name**: `string` - -Defined in: [plugin/plugin.type.ts:28](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L28) diff --git a/packages/tempo/doc/api/interfaces/TermPlugin.md b/packages/tempo/doc/api/interfaces/TermPlugin.md deleted file mode 100644 index 69b69a30..00000000 --- a/packages/tempo/doc/api/interfaces/TermPlugin.md +++ /dev/null @@ -1,96 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -Defined in: [plugin/plugin.type.ts:10](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L10) - -## TermPlugin -Interface for term-driven parsing and resolution. - -## Properties - -### define - -> **define**: (`this`, `keyOnly?`, `anchor?`) => `string` \| [`Range`](../type-aliases/Range.md) \| [`Range`](../type-aliases/Range.md)[] \| `undefined` - -Defined in: [plugin/plugin.type.ts:17](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L17) - -#### Parameters - -##### this - -[`Tempo`](../classes/Tempo.md) - -##### keyOnly? - -`boolean` - -##### anchor? - -`any` - -#### Returns - -`string` \| [`Range`](../type-aliases/Range.md) \| [`Range`](../type-aliases/Range.md)[] \| `undefined` - -*** - -### description? - -> `optional` **description?**: `string` - -Defined in: [plugin/plugin.type.ts:13](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L13) - -*** - -### groups? - -> `optional` **groups?**: `any` - -Defined in: [plugin/plugin.type.ts:14](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L14) - -*** - -### key - -> **key**: `string` - -Defined in: [plugin/plugin.type.ts:11](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L11) - -*** - -### ranges? - -> `optional` **ranges?**: `any`[] - -Defined in: [plugin/plugin.type.ts:15](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L15) - -*** - -### resolve? - -> `optional` **resolve?**: (`this`, `anchor?`) => [`Range`](../type-aliases/Range.md)[] - -Defined in: [plugin/plugin.type.ts:16](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L16) - -#### Parameters - -##### this - -[`Tempo`](../classes/Tempo.md) - -##### anchor? - -`any` - -#### Returns - -[`Range`](../type-aliases/Range.md)[] - -*** - -### scope? - -> `optional` **scope?**: `string` - -Defined in: [plugin/plugin.type.ts:12](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L12) diff --git a/packages/tempo/doc/api/type-aliases/Add.md b/packages/tempo/doc/api/type-aliases/Add.md deleted file mode 100644 index a5c5c31c..00000000 --- a/packages/tempo/doc/api/type-aliases/Add.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Add** = `Prettify`\<[`AddUnits`](AddUnits.md) & [`TermOffset`](TermOffset.md)\> \| [`DateTime`](DateTime.md) - -Defined in: [tempo.type.ts:92](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L92) diff --git a/packages/tempo/doc/api/type-aliases/AddUnits.md b/packages/tempo/doc/api/type-aliases/AddUnits.md deleted file mode 100644 index ba6d652a..00000000 --- a/packages/tempo/doc/api/type-aliases/AddUnits.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **AddUnits** = `{ [K in Unit]?: number }` - -Defined in: [tempo.type.ts:91](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L91) diff --git a/packages/tempo/doc/api/type-aliases/BaseDuration.md b/packages/tempo/doc/api/type-aliases/BaseDuration.md deleted file mode 100644 index 2d9ca364..00000000 --- a/packages/tempo/doc/api/type-aliases/BaseDuration.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **BaseDuration** = `Record`\<[`Units`](Units.md), `number`\> - -Defined in: [tempo.type.ts:60](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L60) diff --git a/packages/tempo/doc/api/type-aliases/COMPASS.md b/packages/tempo/doc/api/type-aliases/COMPASS.md deleted file mode 100644 index 7967ac83..00000000 --- a/packages/tempo/doc/api/type-aliases/COMPASS.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **COMPASS** = `ValueOf`\<*typeof* [`COMPASS`](../variables/COMPASS.md)\> - -Defined in: [tempo.enum.ts:21](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L21) - -cardinal directions diff --git a/packages/tempo/doc/api/type-aliases/DURATION-1.md b/packages/tempo/doc/api/type-aliases/DURATION-1.md deleted file mode 100644 index 72b2677a..00000000 --- a/packages/tempo/doc/api/type-aliases/DURATION-1.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **DURATION** = `KeyOf`\<*typeof* [`DURATION`](../variables/DURATION.md)\> - -Defined in: [tempo.enum.ts:148](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L148) - -number of seconds in a time unit diff --git a/packages/tempo/doc/api/type-aliases/DURATIONS.md b/packages/tempo/doc/api/type-aliases/DURATIONS.md deleted file mode 100644 index a1c01965..00000000 --- a/packages/tempo/doc/api/type-aliases/DURATIONS.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **DURATIONS** = `KeyOf`\<*typeof* [`DURATIONS`](../variables/DURATIONS.md)\> - -Defined in: [tempo.enum.ts:152](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L152) - -number of milliseconds in a time unit diff --git a/packages/tempo/doc/api/type-aliases/DateTime.md b/packages/tempo/doc/api/type-aliases/DateTime.md deleted file mode 100644 index b8da1b54..00000000 --- a/packages/tempo/doc/api/type-aliases/DateTime.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **DateTime** = `string` \| `number` \| `bigint` \| `Date` \| [`Tempo`](../classes/Tempo.md) \| `TemporalObject` \| `Temporal.ZonedDateTimeLike` \| `undefined` \| `null` - -Defined in: [tempo.type.ts:38](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L38) - -the value that Tempo will attempt to interpret as a valid ISO date / time diff --git a/packages/tempo/doc/api/type-aliases/DateTimeUnit.md b/packages/tempo/doc/api/type-aliases/DateTimeUnit.md deleted file mode 100644 index 6aa25e28..00000000 --- a/packages/tempo/doc/api/type-aliases/DateTimeUnit.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **DateTimeUnit** = `Temporal.DateUnit` \| `Temporal.TimeUnit` - -Defined in: [tempo.type.ts:57](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L57) - -Configuration to use for #until() and #since() argument diff --git a/packages/tempo/doc/api/type-aliases/Duration.md b/packages/tempo/doc/api/type-aliases/Duration.md deleted file mode 100644 index 38a74463..00000000 --- a/packages/tempo/doc/api/type-aliases/Duration.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Duration** = `NonOptional`\<`Temporal.DurationLikeObject`\> & `Record`\<`"iso"`, `string`\> & `Record`\<`"sign"`, `number`\> & `Record`\<`"blank"`, `boolean`\> & `Record`\<`"unit"`, `string` \| `undefined`\> - -Defined in: [tempo.type.ts:106](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L106) diff --git a/packages/tempo/doc/api/type-aliases/ELEMENT-1.md b/packages/tempo/doc/api/type-aliases/ELEMENT-1.md deleted file mode 100644 index ce9cc0d0..00000000 --- a/packages/tempo/doc/api/type-aliases/ELEMENT-1.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **ELEMENT** = `ValueOf`\<*typeof* [`ELEMENT`](../variables/ELEMENT.md)\> - -Defined in: [tempo.enum.ts:184](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L184) diff --git a/packages/tempo/doc/api/type-aliases/Element.md b/packages/tempo/doc/api/type-aliases/Element.md deleted file mode 100644 index 40c370d3..00000000 --- a/packages/tempo/doc/api/type-aliases/Element.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Element** = `enums.Element` - -Defined in: [tempo.type.ts:137](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L137) diff --git a/packages/tempo/doc/api/type-aliases/FORMAT-1.md b/packages/tempo/doc/api/type-aliases/FORMAT-1.md deleted file mode 100644 index a8b84c73..00000000 --- a/packages/tempo/doc/api/type-aliases/FORMAT-1.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **FORMAT** = `ValueOf`\<*typeof* [`FORMAT`](../variables/FORMAT.md)\> - -Defined in: [tempo.enum.ts:156](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L156) - -common format aliases diff --git a/packages/tempo/doc/api/type-aliases/FlexibleDuration.md b/packages/tempo/doc/api/type-aliases/FlexibleDuration.md deleted file mode 100644 index 5c39b13b..00000000 --- a/packages/tempo/doc/api/type-aliases/FlexibleDuration.md +++ /dev/null @@ -1,23 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **FlexibleDuration** = `{ [K in Units]: Pick & { [P in keyof Omit]?: number } }`\[[`Units`](Units.md)\] - -Defined in: [tempo.type.ts:75](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L75) - -# FlexibleDuration -A distributive mapped type over [Units](Units.md) which requires at least one duration key -from [BaseDuration](BaseDuration.md) (the mapped key K) while making all other BaseDuration -properties optional. - -## Example - -```ts -// Valid: at least one key is present -const a: FlexibleDuration = { hours: 1 }; -const b: FlexibleDuration = { hours: 1, minutes: 30 }; - -// Invalid: empty object (no mandatory key) -const c: FlexibleDuration = {}; -``` diff --git a/packages/tempo/doc/api/type-aliases/Format.md b/packages/tempo/doc/api/type-aliases/Format.md deleted file mode 100644 index 017ac84f..00000000 --- a/packages/tempo/doc/api/type-aliases/Format.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Format** = `enums.Format` - -Defined in: [tempo.type.ts:115](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L115) - -Union of all known format strings diff --git a/packages/tempo/doc/api/type-aliases/FormatRegistry.md b/packages/tempo/doc/api/type-aliases/FormatRegistry.md deleted file mode 100644 index 27fb63e1..00000000 --- a/packages/tempo/doc/api/type-aliases/FormatRegistry.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **FormatRegistry** = `enums.FormatEnum` - -Defined in: [tempo.type.ts:117](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L117) - -Enum registry of format strings diff --git a/packages/tempo/doc/api/type-aliases/FormatType.md b/packages/tempo/doc/api/type-aliases/FormatType.md deleted file mode 100644 index a4ead0f5..00000000 --- a/packages/tempo/doc/api/type-aliases/FormatType.md +++ /dev/null @@ -1,13 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **FormatType**\<`K`\> = `enums.FormatType`\<`K`\> - -Defined in: [tempo.type.ts:118](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L118) - -## Type Parameters - -### K - -`K` *extends* `PropertyKey` diff --git a/packages/tempo/doc/api/type-aliases/Formats.md b/packages/tempo/doc/api/type-aliases/Formats.md deleted file mode 100644 index b495f67f..00000000 --- a/packages/tempo/doc/api/type-aliases/Formats.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Formats** = `enums.Formats` - -Defined in: [tempo.type.ts:112](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L112) - -mapping of format names to instance-resolutions (string | number) diff --git a/packages/tempo/doc/api/type-aliases/Groups.md b/packages/tempo/doc/api/type-aliases/Groups.md deleted file mode 100644 index b1cd28cf..00000000 --- a/packages/tempo/doc/api/type-aliases/Groups.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Groups** = `Record`\<`string`, `string`\> - -Defined in: [tempo.type.ts:43](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L43) diff --git a/packages/tempo/doc/api/type-aliases/Logic.md b/packages/tempo/doc/api/type-aliases/Logic.md deleted file mode 100644 index d07b1170..00000000 --- a/packages/tempo/doc/api/type-aliases/Logic.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Logic** = `string` \| `number` \| `Function` - -Defined in: [tempo.type.ts:41](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L41) diff --git a/packages/tempo/doc/api/type-aliases/MODE-1.md b/packages/tempo/doc/api/type-aliases/MODE-1.md deleted file mode 100644 index 8bd4792a..00000000 --- a/packages/tempo/doc/api/type-aliases/MODE-1.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **MODE** = `ValueOf`\<*typeof* [`MODE`](../variables/MODE.md)\> - -Defined in: [tempo.enum.ts:217](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L217) - -initialization strategies diff --git a/packages/tempo/doc/api/type-aliases/MONTH-1.md b/packages/tempo/doc/api/type-aliases/MONTH-1.md deleted file mode 100644 index d0d8dcaf..00000000 --- a/packages/tempo/doc/api/type-aliases/MONTH-1.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **MONTH** = `KeyOf`\<*typeof* [`MONTH`](../variables/MONTH.md)\> - -Defined in: [tempo.enum.ts:129](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L129) - -Gregorian calendar months (short-form) diff --git a/packages/tempo/doc/api/type-aliases/MONTHS.md b/packages/tempo/doc/api/type-aliases/MONTHS.md deleted file mode 100644 index e8750d2e..00000000 --- a/packages/tempo/doc/api/type-aliases/MONTHS.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **MONTHS** = `KeyOf`\<*typeof* [`MONTHS`](../variables/MONTHS.md)\> - -Defined in: [tempo.enum.ts:131](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L131) - -Gregorian calendar months (long-form) diff --git a/packages/tempo/doc/api/type-aliases/MUTATION.md b/packages/tempo/doc/api/type-aliases/MUTATION.md deleted file mode 100644 index d3fdfc0a..00000000 --- a/packages/tempo/doc/api/type-aliases/MUTATION.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **MUTATION** = `ValueOf`\<*typeof* [`MUTATION`](../variables/MUTATION.md)\> - -Defined in: [tempo.enum.ts:201](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L201) diff --git a/packages/tempo/doc/api/type-aliases/Mode.md b/packages/tempo/doc/api/type-aliases/Mode.md deleted file mode 100644 index 2bdde262..00000000 --- a/packages/tempo/doc/api/type-aliases/Mode.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Mode** = [`MODE`](MODE-1.md) - -Defined in: [tempo.type.ts:139](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L139) diff --git a/packages/tempo/doc/api/type-aliases/Modifier.md b/packages/tempo/doc/api/type-aliases/Modifier.md deleted file mode 100644 index 5704ff29..00000000 --- a/packages/tempo/doc/api/type-aliases/Modifier.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Modifier** = `"="` \| `"-"` \| `"+"` \| `"<"` \| `"<="` \| `"-="` \| `">"` \| `">="` \| `"+="` \| `"this"` \| `"next"` \| `"prev"` \| `"last"` \| `"first"` \| `undefined` - -Defined in: [tempo.type.ts:94](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L94) diff --git a/packages/tempo/doc/api/type-aliases/Month.md b/packages/tempo/doc/api/type-aliases/Month.md deleted file mode 100644 index ea07ab91..00000000 --- a/packages/tempo/doc/api/type-aliases/Month.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Month** = `enums.Month` - -Defined in: [tempo.type.ts:136](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L136) diff --git a/packages/tempo/doc/api/type-aliases/Mutate.md b/packages/tempo/doc/api/type-aliases/Mutate.md deleted file mode 100644 index 7afee34b..00000000 --- a/packages/tempo/doc/api/type-aliases/Mutate.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Mutate** = `"start"` \| `"mid"` \| `"end"` - -Defined in: [tempo.type.ts:80](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L80) diff --git a/packages/tempo/doc/api/type-aliases/Number.md b/packages/tempo/doc/api/type-aliases/Number.md deleted file mode 100644 index 35c5e295..00000000 --- a/packages/tempo/doc/api/type-aliases/Number.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Number** = `enums.Number` - -Defined in: [tempo.type.ts:138](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L138) diff --git a/packages/tempo/doc/api/type-aliases/NumericPattern.md b/packages/tempo/doc/api/type-aliases/NumericPattern.md deleted file mode 100644 index 0f751973..00000000 --- a/packages/tempo/doc/api/type-aliases/NumericPattern.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **NumericPattern** = *typeof* `enums.NumericPattern`\[`number`\] - -Defined in: [tempo.type.ts:140](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L140) diff --git a/packages/tempo/doc/api/type-aliases/Options.md b/packages/tempo/doc/api/type-aliases/Options.md deleted file mode 100644 index d2c1e9f8..00000000 --- a/packages/tempo/doc/api/type-aliases/Options.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Options** = `Prettify`\<`{ [K in keyof BaseOptions]?: BaseOptions[K] }` & `Record`\<`string`, `any`\>\> - -Defined in: [tempo.type.ts:45](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L45) diff --git a/packages/tempo/doc/api/type-aliases/OwnFormat.md b/packages/tempo/doc/api/type-aliases/OwnFormat.md deleted file mode 100644 index b9821a48..00000000 --- a/packages/tempo/doc/api/type-aliases/OwnFormat.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **OwnFormat** = `enums.OwnFormat` - -Defined in: [tempo.type.ts:109](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L109) - -pre-configured format strings diff --git a/packages/tempo/doc/api/type-aliases/Pair.md b/packages/tempo/doc/api/type-aliases/Pair.md deleted file mode 100644 index e5a9a621..00000000 --- a/packages/tempo/doc/api/type-aliases/Pair.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Pair** = \[`string`, `string`\] - -Defined in: [tempo.type.ts:42](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L42) diff --git a/packages/tempo/doc/api/type-aliases/Pattern.md b/packages/tempo/doc/api/type-aliases/Pattern.md deleted file mode 100644 index 2789c1e4..00000000 --- a/packages/tempo/doc/api/type-aliases/Pattern.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Pattern** = `string` \| `RegExp` - -Defined in: [tempo.type.ts:40](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L40) diff --git a/packages/tempo/doc/api/type-aliases/Range.md b/packages/tempo/doc/api/type-aliases/Range.md deleted file mode 100644 index fbba4cd9..00000000 --- a/packages/tempo/doc/api/type-aliases/Range.md +++ /dev/null @@ -1,10 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Range** = `Prettify`\<`object` & \{ `year`: `number`; \} \| \{ `month`: `number`; \} \| \{ `week`: `number`; \} \| \{ `day`: `number`; \} \| \{ `hour`: `number`; \} \| \{ `minute`: `number`; \} \| \{ `second`: `number`; \} \| \{ `millisecond`: `number`; \} \| \{ `microsecond`: `number`; \} \| \{ `nanosecond`: `number`; \} & `object`\> - -Defined in: [plugin/plugin.type.ts:59](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L59) - -## Range -Discrete time interval within a specific term. diff --git a/packages/tempo/doc/api/type-aliases/Relative.md b/packages/tempo/doc/api/type-aliases/Relative.md deleted file mode 100644 index 95c00293..00000000 --- a/packages/tempo/doc/api/type-aliases/Relative.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Relative** = `"ago"` \| `"hence"` \| `"prior"` \| `"from now"` - -Defined in: [tempo.type.ts:95](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L95) diff --git a/packages/tempo/doc/api/type-aliases/ResolvedRange.md b/packages/tempo/doc/api/type-aliases/ResolvedRange.md deleted file mode 100644 index 17fc7c60..00000000 --- a/packages/tempo/doc/api/type-aliases/ResolvedRange.md +++ /dev/null @@ -1,36 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **ResolvedRange** = [`Range`](Range.md) & `object` - -Defined in: [plugin/plugin.type.ts:90](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L90) - -## ResolvedRange -Range with additional metadata. - -## Type Declaration - -### end - -> **end**: [`Tempo`](../classes/Tempo.md) - -### label? - -> `optional` **label?**: `string` - -### rollover? - -> `optional` **rollover?**: `string` - -### scope? - -> `optional` **scope?**: `string` - -### start - -> **start**: [`Tempo`](../classes/Tempo.md) - -### unit? - -> `optional` **unit?**: `string` diff --git a/packages/tempo/doc/api/type-aliases/SEASON.md b/packages/tempo/doc/api/type-aliases/SEASON.md deleted file mode 100644 index b70e825a..00000000 --- a/packages/tempo/doc/api/type-aliases/SEASON.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **SEASON** = `ValueOf`\<*typeof* [`SEASON`](../variables/SEASON.md)\> - -Defined in: [tempo.enum.ts:12](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L12) - -calendar seasons diff --git a/packages/tempo/doc/api/type-aliases/Set.md b/packages/tempo/doc/api/type-aliases/Set.md deleted file mode 100644 index 0bede66d..00000000 --- a/packages/tempo/doc/api/type-aliases/Set.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Set** = `Prettify`\<[`SetFields`](SetFields.md) & `object` & [`TermOffset`](TermOffset.md)\> \| [`DateTime`](DateTime.md) - -Defined in: [tempo.type.ts:87](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L87) diff --git a/packages/tempo/doc/api/type-aliases/SetFields.md b/packages/tempo/doc/api/type-aliases/SetFields.md deleted file mode 100644 index 2e09f78d..00000000 --- a/packages/tempo/doc/api/type-aliases/SetFields.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **SetFields** = \{ \[K in Mutate\]?: Unit \| \`#$\{string\}\` \} & \{ \[K in "date" \| "time" \| "event" \| "period"\]?: string \} - -Defined in: [tempo.type.ts:82](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L82) diff --git a/packages/tempo/doc/api/type-aliases/TIMEZONE.md b/packages/tempo/doc/api/type-aliases/TIMEZONE.md deleted file mode 100644 index 78886a58..00000000 --- a/packages/tempo/doc/api/type-aliases/TIMEZONE.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **TIMEZONE** = `KeyOf`\<*typeof* [`TIMEZONE`](../variables/TIMEZONE.md)\> - -Defined in: [tempo.enum.ts:143](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L143) - -common time-zone aliases diff --git a/packages/tempo/doc/api/type-aliases/TermOffset.md b/packages/tempo/doc/api/type-aliases/TermOffset.md deleted file mode 100644 index d8454561..00000000 --- a/packages/tempo/doc/api/type-aliases/TermOffset.md +++ /dev/null @@ -1,11 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **TermOffset** = `object` - -Defined in: [tempo.type.ts:81](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L81) - -## Index Signature - -\[`K`: `` `#${string}` ``\]: `string` \| `number` diff --git a/packages/tempo/doc/api/type-aliases/Terms.md b/packages/tempo/doc/api/type-aliases/Terms.md deleted file mode 100644 index fc30f5aa..00000000 --- a/packages/tempo/doc/api/type-aliases/Terms.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Terms** = `Property`\<`any`\> - -Defined in: [plugin/plugin.type.ts:21](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L21) - -mapping of terms to their resolved values diff --git a/packages/tempo/doc/api/type-aliases/Unit.md b/packages/tempo/doc/api/type-aliases/Unit.md deleted file mode 100644 index 063f05d0..00000000 --- a/packages/tempo/doc/api/type-aliases/Unit.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Unit** = [`DateTimeUnit`](DateTimeUnit.md) \| `Plural`\<[`DateTimeUnit`](DateTimeUnit.md)\> - -Defined in: [tempo.type.ts:58](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L58) diff --git a/packages/tempo/doc/api/type-aliases/Units.md b/packages/tempo/doc/api/type-aliases/Units.md deleted file mode 100644 index 6fba868f..00000000 --- a/packages/tempo/doc/api/type-aliases/Units.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Units** = `Temporal.PluralizeUnit`\<[`DateTimeUnit`](DateTimeUnit.md)\> - -Defined in: [tempo.type.ts:59](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L59) diff --git a/packages/tempo/doc/api/type-aliases/Until.md b/packages/tempo/doc/api/type-aliases/Until.md deleted file mode 100644 index f437808e..00000000 --- a/packages/tempo/doc/api/type-aliases/Until.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Until** = [`Options`](Options.md) & `object` \| [`Unit`](Unit.md) - -Defined in: [tempo.type.ts:78](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L78) diff --git a/packages/tempo/doc/api/type-aliases/WEEKDAY-1.md b/packages/tempo/doc/api/type-aliases/WEEKDAY-1.md deleted file mode 100644 index 84a18d76..00000000 --- a/packages/tempo/doc/api/type-aliases/WEEKDAY-1.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **WEEKDAY** = `KeyOf`\<*typeof* [`WEEKDAY`](../variables/WEEKDAY.md)\> - -Defined in: [tempo.enum.ts:119](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L119) - -Gregorian calendar week-days (short-form) diff --git a/packages/tempo/doc/api/type-aliases/WEEKDAYS.md b/packages/tempo/doc/api/type-aliases/WEEKDAYS.md deleted file mode 100644 index ec01515f..00000000 --- a/packages/tempo/doc/api/type-aliases/WEEKDAYS.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **WEEKDAYS** = `KeyOf`\<*typeof* [`WEEKDAYS`](../variables/WEEKDAYS.md)\> - -Defined in: [tempo.enum.ts:121](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L121) - -Gregorian calendar week-days (long-form) diff --git a/packages/tempo/doc/api/type-aliases/Weekday.md b/packages/tempo/doc/api/type-aliases/Weekday.md deleted file mode 100644 index efe26da8..00000000 --- a/packages/tempo/doc/api/type-aliases/Weekday.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **Weekday** = `enums.Weekday` - -Defined in: [tempo.type.ts:135](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L135) diff --git a/packages/tempo/doc/api/type-aliases/ZONED_DATE_TIME.md b/packages/tempo/doc/api/type-aliases/ZONED_DATE_TIME.md deleted file mode 100644 index 23f68ea2..00000000 --- a/packages/tempo/doc/api/type-aliases/ZONED_DATE_TIME.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **ZONED\_DATE\_TIME** = `ValueOf`\<*typeof* [`ZONED_DATE_TIME`](../variables/ZONED_DATE_TIME.md)\> - -Defined in: [tempo.enum.ts:207](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L207) diff --git a/packages/tempo/doc/api/type-aliases/hh.md b/packages/tempo/doc/api/type-aliases/hh.md deleted file mode 100644 index 05804041..00000000 --- a/packages/tempo/doc/api/type-aliases/hh.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **hh** = `IntRange`\<`0`, `24`\> - -Defined in: [tempo.type.ts:98](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L98) diff --git a/packages/tempo/doc/api/type-aliases/mi.md b/packages/tempo/doc/api/type-aliases/mi.md deleted file mode 100644 index 6ce4bd0e..00000000 --- a/packages/tempo/doc/api/type-aliases/mi.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **mi** = `IntRange`\<`0`, `60`\> - -Defined in: [tempo.type.ts:99](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L99) diff --git a/packages/tempo/doc/api/type-aliases/mm.md b/packages/tempo/doc/api/type-aliases/mm.md deleted file mode 100644 index 9540ef9f..00000000 --- a/packages/tempo/doc/api/type-aliases/mm.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **mm** = `IntRange`\<`0`, `12`\> - -Defined in: [tempo.type.ts:97](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L97) diff --git a/packages/tempo/doc/api/type-aliases/ms.md b/packages/tempo/doc/api/type-aliases/ms.md deleted file mode 100644 index a0fb6640..00000000 --- a/packages/tempo/doc/api/type-aliases/ms.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **ms** = `IntRange`\<`0`, `999`\> - -Defined in: [tempo.type.ts:101](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L101) diff --git a/packages/tempo/doc/api/type-aliases/ns.md b/packages/tempo/doc/api/type-aliases/ns.md deleted file mode 100644 index ae88d110..00000000 --- a/packages/tempo/doc/api/type-aliases/ns.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **ns** = `IntRange`\<`0`, `999`\> - -Defined in: [tempo.type.ts:103](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L103) diff --git a/packages/tempo/doc/api/type-aliases/ss.md b/packages/tempo/doc/api/type-aliases/ss.md deleted file mode 100644 index abb57ca0..00000000 --- a/packages/tempo/doc/api/type-aliases/ss.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **ss** = `IntRange`\<`0`, `60`\> - -Defined in: [tempo.type.ts:100](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L100) diff --git a/packages/tempo/doc/api/type-aliases/us.md b/packages/tempo/doc/api/type-aliases/us.md deleted file mode 100644 index 7ac493b1..00000000 --- a/packages/tempo/doc/api/type-aliases/us.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **us** = `IntRange`\<`0`, `999`\> - -Defined in: [tempo.type.ts:102](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L102) diff --git a/packages/tempo/doc/api/type-aliases/ww.md b/packages/tempo/doc/api/type-aliases/ww.md deleted file mode 100644 index f2c58716..00000000 --- a/packages/tempo/doc/api/type-aliases/ww.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **ww** = `IntRange`\<`1`, `53`\> - -Defined in: [tempo.type.ts:104](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L104) diff --git a/packages/tempo/doc/api/variables/COMPASS.md b/packages/tempo/doc/api/variables/COMPASS.md deleted file mode 100644 index 75c3ff11..00000000 --- a/packages/tempo/doc/api/variables/COMPASS.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **COMPASS**: `EnumifyType`\<\{ `East`: `"east"`; `North`: `"north"`; `South`: `"south"`; `West`: `"west"`; \}\> - -Defined in: [tempo.enum.ts:21](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L21) - -cardinal directions diff --git a/packages/tempo/doc/api/variables/DISCOVERY.md b/packages/tempo/doc/api/variables/DISCOVERY.md deleted file mode 100644 index f674abed..00000000 --- a/packages/tempo/doc/api/variables/DISCOVERY.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **DISCOVERY**: `EnumifyType`\<`Index`\\> - -Defined in: [tempo.enum.ts:227](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L227) diff --git a/packages/tempo/doc/api/variables/DURATION.md b/packages/tempo/doc/api/variables/DURATION.md deleted file mode 100644 index 46fad38d..00000000 --- a/packages/tempo/doc/api/variables/DURATION.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **DURATION**: `EnumifyType`\<\{ `day`: `86400`; `hour`: `3600`; `microsecond`: `0.000001`; `millisecond`: `0.001`; `minute`: `60`; `month`: `2628000`; `nanosecond`: `1e-9`; `second`: `1`; `week`: `604800`; `year`: `31536000`; \}\> - -Defined in: [tempo.enum.ts:148](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L148) - -number of seconds in a time unit diff --git a/packages/tempo/doc/api/variables/DURATIONS.md b/packages/tempo/doc/api/variables/DURATIONS.md deleted file mode 100644 index 4b8238be..00000000 --- a/packages/tempo/doc/api/variables/DURATIONS.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **DURATIONS**: `EnumifyType`\<\{ `days`: `86400000`; `hours`: `3600000`; `microseconds`: `0.001`; `milliseconds`: `1`; `minutes`: `60000`; `months`: `2628000000`; `nanoseconds`: `0.000001`; `seconds`: `1000`; `weeks`: `604800000`; `years`: `31536000000`; \}\> - -Defined in: [tempo.enum.ts:152](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L152) - -number of milliseconds in a time unit diff --git a/packages/tempo/doc/api/variables/ELEMENT.md b/packages/tempo/doc/api/variables/ELEMENT.md deleted file mode 100644 index b9150bc6..00000000 --- a/packages/tempo/doc/api/variables/ELEMENT.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **ELEMENT**: `EnumifyType`\<\{ `dd`: `"day"`; `hh`: `"hour"`; `mi`: `"minute"`; `mm`: `"month"`; `ms`: `"millisecond"`; `ns`: `"nanosecond"`; `ss`: `"second"`; `us`: `"microsecond"`; `ww`: `"week"`; `yy`: `"year"`; \}\> - -Defined in: [tempo.enum.ts:184](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L184) diff --git a/packages/tempo/doc/api/variables/FORMAT.md b/packages/tempo/doc/api/variables/FORMAT.md deleted file mode 100644 index b54823ff..00000000 --- a/packages/tempo/doc/api/variables/FORMAT.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **FORMAT**: `EnumifyType`\<\{ `date`: `"{yyyy}-{mm}-{dd}"`; `dayDate`: `"{dd}-{mmm}-{yyyy}"`; `dayMonth`: `"{dd}-{mmm}"`; `dayTime`: `"{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}"`; `display`: `"{www}, {dd} {mmm} {yyyy}"`; `logStamp`: `"{yyyy}{mm}{dd}T{hhmiss}.{ff}"`; `sortTime`: `"{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}"`; `time`: `"{hh}:{mi}:{ss}"`; `weekDate`: `"{www}, {yyyy}-{mmm}-{dd}"`; `weekStamp`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}"`; `weekTime`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"`; `yearMonth`: `"{yyyy}{mm}"`; `yearMonthDay`: `"{yyyy}{mm}{dd}"`; `yearWeek`: `"{yw}{ww}"`; \}\> - -Defined in: [tempo.enum.ts:156](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L156) - -common format aliases diff --git a/packages/tempo/doc/api/variables/LIMIT.md b/packages/tempo/doc/api/variables/LIMIT.md deleted file mode 100644 index b953527c..00000000 --- a/packages/tempo/doc/api/variables/LIMIT.md +++ /dev/null @@ -1,33 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **LIMIT**: `object` - -Defined in: [tempo.enum.ts:180](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L180) - -## Type Declaration - -### maxTempo - -#### Get Signature - -> **get** **maxTempo**(): `bigint` - -Tempo(31-Dec-9999.23:59:59).ns - -##### Returns - -`bigint` - -### minTempo - -#### Get Signature - -> **get** **minTempo**(): `bigint` - -Tempo(01-Jan-1000.00:00:00).ns - -##### Returns - -`bigint` diff --git a/packages/tempo/doc/api/variables/MODE.md b/packages/tempo/doc/api/variables/MODE.md deleted file mode 100644 index b92c175a..00000000 --- a/packages/tempo/doc/api/variables/MODE.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **MODE**: `EnumifyType`\<\{ `Auto`: `"auto"`; `Defer`: `"defer"`; `Strict`: `"strict"`; \}\> - -Defined in: [tempo.enum.ts:217](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L217) - -initialization strategies diff --git a/packages/tempo/doc/api/variables/MONTH.md b/packages/tempo/doc/api/variables/MONTH.md deleted file mode 100644 index b4452d1c..00000000 --- a/packages/tempo/doc/api/variables/MONTH.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **MONTH**: `EnumifyType`\<`Index`\\> - -Defined in: [tempo.enum.ts:129](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L129) - -Gregorian calendar months (short-form) diff --git a/packages/tempo/doc/api/variables/MONTHS.md b/packages/tempo/doc/api/variables/MONTHS.md deleted file mode 100644 index f31a0833..00000000 --- a/packages/tempo/doc/api/variables/MONTHS.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **MONTHS**: `EnumifyType`\<`Index`\\> - -Defined in: [tempo.enum.ts:131](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L131) - -Gregorian calendar months (long-form) diff --git a/packages/tempo/doc/api/variables/MUTATION.md b/packages/tempo/doc/api/variables/MUTATION.md deleted file mode 100644 index fd166505..00000000 --- a/packages/tempo/doc/api/variables/MUTATION.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **MUTATION**: `EnumifyType`\<`Index`\\> - -Defined in: [tempo.enum.ts:201](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L201) diff --git a/packages/tempo/doc/api/variables/NUMBER.md b/packages/tempo/doc/api/variables/NUMBER.md deleted file mode 100644 index 8230c7c0..00000000 --- a/packages/tempo/doc/api/variables/NUMBER.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **NUMBER**: `EnumifyType`\<\{ `eight`: `8`; `five`: `5`; `four`: `4`; `nine`: `9`; `one`: `1`; `seven`: `7`; `six`: `6`; `ten`: `10`; `three`: `3`; `two`: `2`; `zero`: `0`; \}\> - -Defined in: [tempo.enum.ts:139](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L139) - -number names (0-10) diff --git a/packages/tempo/doc/api/variables/OPTION.md b/packages/tempo/doc/api/variables/OPTION.md deleted file mode 100644 index b77a41e9..00000000 --- a/packages/tempo/doc/api/variables/OPTION.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **OPTION**: `EnumifyType`\<`Index`\\> - -Defined in: [tempo.enum.ts:213](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L213) diff --git a/packages/tempo/doc/api/variables/PARSE.md b/packages/tempo/doc/api/variables/PARSE.md deleted file mode 100644 index 91639321..00000000 --- a/packages/tempo/doc/api/variables/PARSE.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **PARSE**: `EnumifyType`\<`Index`\\> - -Defined in: [tempo.enum.ts:222](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L222) diff --git a/packages/tempo/doc/api/variables/SEASON.md b/packages/tempo/doc/api/variables/SEASON.md deleted file mode 100644 index dae74e2f..00000000 --- a/packages/tempo/doc/api/variables/SEASON.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **SEASON**: `EnumifyType`\<\{ `Autumn`: `"autumn"`; `Spring`: `"spring"`; `Summer`: `"summer"`; `Winter`: `"winter"`; \}\> - -Defined in: [tempo.enum.ts:12](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L12) - -calendar seasons diff --git a/packages/tempo/doc/api/variables/TIMEZONE.md b/packages/tempo/doc/api/variables/TIMEZONE.md deleted file mode 100644 index ce8b1329..00000000 --- a/packages/tempo/doc/api/variables/TIMEZONE.md +++ /dev/null @@ -1,71 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **TIMEZONE**: `object` - -Defined in: [tempo.enum.ts:143](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L143) - -common time-zone aliases - -## Type Declaration - -### acst - -> `readonly` **acst**: `"Australia/Adelaide"` = `'Australia/Adelaide'` - -### aest - -> `readonly` **aest**: `"Australia/Sydney"` = `'Australia/Sydney'` - -### awst - -> `readonly` **awst**: `"Australia/Perth"` = `'Australia/Perth'` - -### cet - -> `readonly` **cet**: `"Europe/Paris"` = `'Europe/Paris'` - -### cst - -> `readonly` **cst**: `"America/Chicago"` = `'America/Chicago'` - -### eet - -> `readonly` **eet**: `"Europe/Helsinki"` = `'Europe/Helsinki'` - -### est - -> `readonly` **est**: `"America/New_York"` = `'America/New_York'` - -### gmt - -> `readonly` **gmt**: `"Europe/London"` = `'Europe/London'` - -### ist - -> `readonly` **ist**: `"Asia/Kolkata"` = `'Asia/Kolkata'` - -### jst - -> `readonly` **jst**: `"Asia/Tokyo"` = `'Asia/Tokyo'` - -### mst - -> `readonly` **mst**: `"America/Denver"` = `'America/Denver'` - -### npt - -> `readonly` **npt**: `"Asia/Kathmandu"` = `'Asia/Kathmandu'` - -### nzt - -> `readonly` **nzt**: `"Pacific/Auckland"` = `'Pacific/Auckland'` - -### pst - -> `readonly` **pst**: `"America/Los_Angeles"` = `'America/Los_Angeles'` - -### utc - -> `readonly` **utc**: `"UTC"` = `'UTC'` diff --git a/packages/tempo/doc/api/variables/WEEKDAY.md b/packages/tempo/doc/api/variables/WEEKDAY.md deleted file mode 100644 index 93d53e2e..00000000 --- a/packages/tempo/doc/api/variables/WEEKDAY.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **WEEKDAY**: `EnumifyType`\<`Index`\\> - -Defined in: [tempo.enum.ts:119](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L119) - -Gregorian calendar week-days (short-form) diff --git a/packages/tempo/doc/api/variables/WEEKDAYS.md b/packages/tempo/doc/api/variables/WEEKDAYS.md deleted file mode 100644 index 1618aa7e..00000000 --- a/packages/tempo/doc/api/variables/WEEKDAYS.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **WEEKDAYS**: `EnumifyType`\<`Index`\\> - -Defined in: [tempo.enum.ts:121](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L121) - -Gregorian calendar week-days (long-form) diff --git a/packages/tempo/doc/api/variables/ZONED_DATE_TIME.md b/packages/tempo/doc/api/variables/ZONED_DATE_TIME.md deleted file mode 100644 index f64df3ed..00000000 --- a/packages/tempo/doc/api/variables/ZONED_DATE_TIME.md +++ /dev/null @@ -1,7 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **ZONED\_DATE\_TIME**: `EnumifyType`\<`Index`\\> - -Defined in: [tempo.enum.ts:207](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L207) diff --git a/packages/tempo/doc/api/variables/enums.md b/packages/tempo/doc/api/variables/enums.md deleted file mode 100644 index 92c5b9e2..00000000 --- a/packages/tempo/doc/api/variables/enums.md +++ /dev/null @@ -1,195 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> **enums**: `object` - -Defined in: [tempo.enum.ts:237](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L237) - -public-reachable enums - -## Type Declaration - -### COMPASS - -> **COMPASS**: `EnumifyType`\<\{ `East`: `"east"`; `North`: `"north"`; `South`: `"south"`; `West`: `"west"`; \}\> - -cardinal directions - -### DURATION - -> **DURATION**: `EnumifyType`\<\{ `day`: `86400`; `hour`: `3600`; `microsecond`: `0.000001`; `millisecond`: `0.001`; `minute`: `60`; `month`: `2628000`; `nanosecond`: `1e-9`; `second`: `1`; `week`: `604800`; `year`: `31536000`; \}\> - -number of seconds in a time unit - -### DURATIONS - -> **DURATIONS**: `EnumifyType`\<\{ `days`: `86400000`; `hours`: `3600000`; `microseconds`: `0.001`; `milliseconds`: `1`; `minutes`: `60000`; `months`: `2628000000`; `nanoseconds`: `0.000001`; `seconds`: `1000`; `weeks`: `604800000`; `years`: `31536000000`; \}\> - -number of milliseconds in a time unit - -### ELEMENT - -> **ELEMENT**: `EnumifyType`\<\{ `dd`: `"day"`; `hh`: `"hour"`; `mi`: `"minute"`; `mm`: `"month"`; `ms`: `"millisecond"`; `ns`: `"nanosecond"`; `ss`: `"second"`; `us`: `"microsecond"`; `ww`: `"week"`; `yy`: `"year"`; \}\> - -### FORMAT - -> **FORMAT**: `EnumifyType`\<\{ `date`: `"{yyyy}-{mm}-{dd}"`; `dayDate`: `"{dd}-{mmm}-{yyyy}"`; `dayMonth`: `"{dd}-{mmm}"`; `dayTime`: `"{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}"`; `display`: `"{www}, {dd} {mmm} {yyyy}"`; `logStamp`: `"{yyyy}{mm}{dd}T{hhmiss}.{ff}"`; `sortTime`: `"{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}"`; `time`: `"{hh}:{mi}:{ss}"`; `weekDate`: `"{www}, {yyyy}-{mmm}-{dd}"`; `weekStamp`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}"`; `weekTime`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"`; `yearMonth`: `"{yyyy}{mm}"`; `yearMonthDay`: `"{yyyy}{mm}{dd}"`; `yearWeek`: `"{yw}{ww}"`; \}\> - -common format aliases - -### LIMIT - -> **LIMIT**: `object` - -#### LIMIT.maxTempo - -##### Get Signature - -> **get** **maxTempo**(): `bigint` - -Defined in: [tempo.enum.ts:97](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L97) - -Tempo(31-Dec-9999.23:59:59).ns - -###### Returns - -`bigint` - -#### LIMIT.minTempo - -##### Get Signature - -> **get** **minTempo**(): `bigint` - -Defined in: [tempo.enum.ts:98](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L98) - -Tempo(01-Jan-1000.00:00:00).ns - -###### Returns - -`bigint` - -### MODE - -> **MODE**: `EnumifyType`\<\{ `Auto`: `"auto"`; `Defer`: `"defer"`; `Strict`: `"strict"`; \}\> - -initialization strategies - -### MONTH - -> **MONTH**: `EnumifyType`\<`Index`\\> - -Gregorian calendar months (short-form) - -### MONTHS - -> **MONTHS**: `EnumifyType`\<`Index`\\> - -Gregorian calendar months (long-form) - -### MUTATION - -> **MUTATION**: `EnumifyType`\<`Index`\\> - -### NUMBER - -> **NUMBER**: `EnumifyType`\<\{ `eight`: `8`; `five`: `5`; `four`: `4`; `nine`: `9`; `one`: `1`; `seven`: `7`; `six`: `6`; `ten`: `10`; `three`: `3`; `two`: `2`; `zero`: `0`; \}\> - -number names (0-10) - -### OPTION - -> **OPTION**: `EnumifyType`\<`Index`\\> - -### PARSE - -> **PARSE**: `EnumifyType`\<`Index`\\> - -### SEASON - -> **SEASON**: `EnumifyType`\<\{ `Autumn`: `"autumn"`; `Spring`: `"spring"`; `Summer`: `"summer"`; `Winter`: `"winter"`; \}\> - -calendar seasons - -### TIMEZONE - -> **TIMEZONE**: `object` - -common time-zone aliases - -#### TIMEZONE.acst - -> `readonly` **acst**: `"Australia/Adelaide"` = `'Australia/Adelaide'` - -#### TIMEZONE.aest - -> `readonly` **aest**: `"Australia/Sydney"` = `'Australia/Sydney'` - -#### TIMEZONE.awst - -> `readonly` **awst**: `"Australia/Perth"` = `'Australia/Perth'` - -#### TIMEZONE.cet - -> `readonly` **cet**: `"Europe/Paris"` = `'Europe/Paris'` - -#### TIMEZONE.cst - -> `readonly` **cst**: `"America/Chicago"` = `'America/Chicago'` - -#### TIMEZONE.eet - -> `readonly` **eet**: `"Europe/Helsinki"` = `'Europe/Helsinki'` - -#### TIMEZONE.est - -> `readonly` **est**: `"America/New_York"` = `'America/New_York'` - -#### TIMEZONE.gmt - -> `readonly` **gmt**: `"Europe/London"` = `'Europe/London'` - -#### TIMEZONE.ist - -> `readonly` **ist**: `"Asia/Kolkata"` = `'Asia/Kolkata'` - -#### TIMEZONE.jst - -> `readonly` **jst**: `"Asia/Tokyo"` = `'Asia/Tokyo'` - -#### TIMEZONE.mst - -> `readonly` **mst**: `"America/Denver"` = `'America/Denver'` - -#### TIMEZONE.npt - -> `readonly` **npt**: `"Asia/Kathmandu"` = `'Asia/Kathmandu'` - -#### TIMEZONE.nzt - -> `readonly` **nzt**: `"Pacific/Auckland"` = `'Pacific/Auckland'` - -#### TIMEZONE.pst - -> `readonly` **pst**: `"America/Los_Angeles"` = `'America/Los_Angeles'` - -#### TIMEZONE.utc - -> `readonly` **utc**: `"UTC"` = `'UTC'` - -### WEEKDAY - -> **WEEKDAY**: `EnumifyType`\<`Index`\\> - -Gregorian calendar week-days (short-form) - -### WEEKDAYS - -> **WEEKDAYS**: `EnumifyType`\<`Index`\\> - -Gregorian calendar week-days (long-form) - -### ZONED\_DATE\_TIME - -> **ZONED\_DATE\_TIME**: `EnumifyType`\<`Index`\\> diff --git a/packages/tempo/doc/api/variables/fmtTempo.md b/packages/tempo/doc/api/variables/fmtTempo.md deleted file mode 100644 index fd3f12ff..00000000 --- a/packages/tempo/doc/api/variables/fmtTempo.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **fmtTempo**: `Fmt` - -Defined in: [tempo.class.ts:1824](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1824) - -format a Tempo diff --git a/packages/tempo/doc/api/variables/getStamp.md b/packages/tempo/doc/api/variables/getStamp.md deleted file mode 100644 index b0e9e68f..00000000 --- a/packages/tempo/doc/api/variables/getStamp.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **getStamp**: [`Params`](../interfaces/Params.md)\<`number` \| `bigint`\> - -Defined in: [tempo.class.ts:1822](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1822) - -current timestamp (ts) diff --git a/packages/tempo/doc/api/variables/getTempo.md b/packages/tempo/doc/api/variables/getTempo.md deleted file mode 100644 index 2c6e74b6..00000000 --- a/packages/tempo/doc/api/variables/getTempo.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@magmacomputing/tempo**](../README.md) - -*** - -> `const` **getTempo**: [`Params`](../interfaces/Params.md)\<[`Tempo`](../classes/Tempo.md)\> - -Defined in: [tempo.class.ts:1823](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1823) - -create new Tempo diff --git a/packages/tempo/doc/architecture.md b/packages/tempo/doc/architecture.md deleted file mode 100644 index f3c3ae54..00000000 --- a/packages/tempo/doc/architecture.md +++ /dev/null @@ -1,140 +0,0 @@ -# 🏗️ Core Architecture - -Tempo v2.0.1 introduces several industry-leading architectural patterns designed for maximum resilience in complex Monorepo and Proxy-wrapped environments. - -## 🌐 Shared Global Registry -To solve the "Split-Brain" issue inherent in monorepo development (where multiple instances of the same library might be loaded), Tempo utilizes a **Shared Global Registry**. By leveraging `Symbol.for('magmacomputing/library/registry')` on `globalThis`, all versions of the Tempo and Library packages share a unified type-identification engine. This ensures that classes are correctly identified as constructors even when loaded across different module boundaries. - -## 🕵️ Decoupled Logging (Logify) -Tempo uses **Logify**, a diagnostic engine that leverages private Symbols to avoid polluting the public console or object state. -- **Context-Aware**: Logs track their discovery path (e.g., "Applied via Global Discovery"). -- **Zero-Footprint**: When `debug: false`, the logging overhead is mathematically eliminated. -- **Symbol-Gated**: Diagnostic metadata is attached via `Symbol.for($Logify)`, making it invisible to standard iteration (`Object.keys`) and serialization (`JSON.stringify`). - -## 🛡️ Hardened Functional Resolution -The engine implements a "Fail-Safe" execution pattern for functional inputs, automatically recovering from misidentified types—such as ES6 classes wrapped in defensive Proxies or circular dependency deadlocks. -- **Defensive Execution**: All plugin invocations are wrapped in recursive `try/catch` blocks. -- **Silent Failover**: When combined with `catch: true`, resolution failures return a **Void Instance**, preventing application crashes while providing clear diagnostic symbols for debugging. - -## 🏗️ Tempo Architecture: Internal Protection & Performance - -Tempo employs two distinct methodologies for protecting its internal state. These strategies are complementary, each tailored to a specific scope (Instance vs. Global) and performance requirement. - ---- - -## 🧭 Methodology Comparison - -| Feature | **Lazy Evaluation (Shadowing)** | **Soft Freeze (Proxy)** | -| :--- | :--- | :--- | -| **Primary Target** | `Tempo.#term`, `Tempo.#fmt` (Instance State) | `NUMBER`, `FORMAT` (Global Registries) | -| **Scope** | **Instance-Specific**: Unique to every separate `new Tempo()` call. | **Global-Shared**: One single source of truth used by all instances. | -| **Primary Goal** | **Performance**: Avoid computing expensive terms (e.g., `qtr` or `szn`) until they are needed, | **Extensibility**: Allow plugins to safely append new data to registries at runtime. | -| **Mechanism** | `Object.create(proto)` + Prototype Shadowing. | `new Proxy(target)` + Symbol-bypass. | -| **Why this one?** | **Memory Efficiency**: Thousands of instances share the same base prototype. | **Reference Stability**: Shared registries must stay at the same object reference. | - ---- - -## ⚡ The "Zero-Cost Constructor" Objective -Tempo is built with a **"Performance First"** mindset, specifically targeting the overhead of the class constructor. In high-frequency applications (like Tickers or real-time Dashboards), creating thousands of objects must be nearly as cheap as a primitive assignment. - -This objective is achieved through two primary architectural pillars: -1. **Lazy Evaluation ([Section 1](#1-lazy-evaluation-shadowing))**: Deferring the expensive work of string parsing and term computation until the first property access. -2. **Master Guard ([Section 3](#3-master-guard-fast-fail-sync-point))**: Implementing a high-speed "fast-fail" gatekeeper to instantly reject invalid inputs when parsing *is* eventually triggered. - -Together, these ensure that `new Tempo()` maintains an $O(1)$ constructor execution time by deferring $O(N)$ full-parse work until the first property access, regardless of how many plugins or custom terms are registered in the global system. - ---- - -## 🔁 Iteration & Enumerability (The Shadowing Chain) - -When using prototype shadowing, the JavaScript behavior for property inspection changes significantly. This is a trade-off for the performance gains. - -### ⚠️ The `Object.keys()` Warning -`Object.keys(instance.fmt)` only returns the **enumerable own properties** of the current link in the shadowing chain. -- **Initially**: Returns `[]` (all evaluated getters are non-enumerable on the base). -- **After 1st Access** (e.g., `.date`): Returns `['date']`. -- **After 2nd Access** (e.g., `.time`): Returns `['time']`. The `.date` property is now located on the **immediate prototype** of the current object. - -### 🛡️ The Flattening Iterator -Tempo implements a **Flattening Iterator** via `[Symbol.iterator]` which enables iterable consumers like `for...of`, array spread (`[...instance]`), and `Object.fromEntries(instance)` to traverse the shadowing chain (using `Object.getPrototypeOf`) and collect evaluated property entries. - -- **`[Symbol.iterator]`**: Traverses the shadowing chain to provide a flattened view of all computed state. -- **⚠️ Important**: `for...in` and object spread (`{...instance}`) **do not** use the iterator; instead, they rely on enumerable own/inherited properties and are not supported by the flattening logic. -- **`Tempo.formats` & `Tempo.terms`**: These static getters continue to provide a registry-wide view of **available** keys across the entire system, regardless of their evaluation state. - ---- - -## 1. Lazy Evaluation (Shadowing) -Used for: `Tempo.#term`, `Tempo.#fmt` - -The **Instance Shadowing** pattern is designed for massive scale. When a library is used heavily, creating thousands of `new Proxy()` objects adds significant memory overhead. Instead, Tempo leverages the native JavaScript prototype chain. - -### How it works: -- **Stage 0**: All instances initially point to the same base `#term` object containing un-evaluated getters. -- **Stage 1**: When a term (e.g., `.qtr`) is accessed, the value is computed once. -- **Stage 2**: Tempo uses a **Generic Lazy Delegator** Proxy (via `getLazyDelegator`) which catches property access and evaluates it on-demand. -- **Result**: The JS engine executes lookups via an optimized Proxy handler, making lookups nearly as fast as raw property access while keeping the state strictly immutable. - -> [!TIP] -> For more implementation details, see [Lazy Evaluation Pattern](./lazy-evaluation-pattern.md). - ---- - -## 2. Soft Freeze Strategy (Proxy) -Used for: `Tempo.NUMBER`, `Tempo.FORMAT`, `Tempo.TIMEZONE`, `Tempo.config` - -Global registries must be **live** but **secure**. As of **v2.0.1**, these are protected by a "Soft Freeze" layer to prevent accidental state corruption by third-party code. - -### How it works: -- **The User**: Sees a read-only Proxy that behaves like a frozen object. Direct assignments are blocked to prevent "poisoning" the global state. -- **The Library**: Uses a private symbol bypass to perform "Transactional Updates" via `registryUpdate()`. -- **Result**: The object reference remains constant while allowing controlled extensibility. This ensures that internal caches (like the Master Guard) can be re-synchronized whenever a registry changes. - -> [!TIP] -> For more implementation details, see [Soft Freeze Strategy](./soft_freeze_strategy.md). - ---- - - -## ⚡ 3. Master Guard (Guarded-Lazy Strategy) -Used for: `new Tempo(string | number)` - -The **Guarded-Lazy** strategy ensures that even with hundreds of custom plugins, the entry point remains nearly instantaneous. In **v2.0.1**, this was refined for 100% matching reliability. - -### How it works: -1. **Longest-Token Matching**: To prevent partial matching (e.g., matching `qtr` inside `quarter`), the guard uses a "Scan-and-Consume" loop that prioritizes the longest available token. -2. **Unified Wordlist**: The guard automatically ingests all registered Terms, Timezones, Month names, and Custom Events into a single high-speed lookup Set. -3. **High-Speed Gatekeeper**: By avoiding complex backtracking regexes, the gatekeeper provides predictable $O(1)$ performance even as the plugin list grows. -4. **Auto-Lazy**: Valid inputs that pass the guard automatically switch the instance to `mode: 'defer'`, deferring the full $O(N)$ parse work until a property is actually read. - -### 📈 Validation & Performance -The efficiency of the Master Guard and the success of the Zero-Cost objective have been validated via local benchmarking: - -- **Instantiation Overhead**: ~523µs on average (passing the Master Guard). *(Node.js v24.14.1, 12th Gen Intel i7-1255U, Linux x86_64; steady-state measured after 1k warm-up runs, n=10k. Validates the Zero-Cost objective on this hardware.)* -- **Fast-Fail Rejection**: ~359µs on average (failing the Master Guard). *(Node.js v24.14.1, 12th Gen Intel i7-1255U, Linux x86_64; steady-state measured after 1k warm-up runs, n=10k. Demonstrates the Master Guard's low-latency rejection performance.)* - -> [!TIP] -> For detailed timing results and methodology, see [Performance Benchmarks](./tempo.benchmarks.md). - ---- - -## 🔄 Internal Lifecycle & Reactive Sync -Tempo maintains system-wide synchronization through a private, Symbol-based hook system. - -### Reactive Registration -When a plugin is imported via a side-effect (`import '@magmacomputing/tempo/ticker'`), it triggers a **`sym.$Register`** hook. -- **Auto-Sync**: The `Tempo` class listens for these hooks and automatically updates its internal registries. -- **Guard Rebuild**: Every time a new term or layout is registered, the **Master Guard** is automatically rebuilt to include the new tokens, ensuring the "Zero-Cost Constructor" always stays up to date. - -### Disposable Engine (`Symbol.dispose`) -The `Tempo` class implements the explicit resource management pattern. -- **Clean Slate**: Calling `Tempo[Symbol.dispose]()` (or using the `using` keyword in a test suite) resets all global registries and configuration to their factory defaults. -- **Isolation**: This is critical for testing environments to prevent state-leaks between test cases. - ---- - -## ⚖️ Summary -The Tempo architecture follows the principle of **"Right Tool for the Job"**: -- **Shadowing** provides the extreme performance and memory efficiency required for **per-instance computed state**. -- **Proxies** provide the reference stability and controlled extensibility required for **global system registries**. -- **Master Guard** ensures that even with massive extensibility, the entry point remains a "Zero-Cost Constructor". diff --git a/packages/tempo/doc/commercial.md b/packages/tempo/doc/commercial.md deleted file mode 100644 index 15b86592..00000000 --- a/packages/tempo/doc/commercial.md +++ /dev/null @@ -1,42 +0,0 @@ -# 🤝 Magma Computing: Professional Services - -Tempo is a high-performance, precision date-time library maintained by **Magma Computing**. We offer a range of professional services and private extensions to help teams build robust, time-sensitive applications. - -## 🚀 Our Services - -### 🧩 Custom Plugin Development -Need a specialized plugin for your industry? We design and implement high-performance Tempo extensions such as: -- **Financial Tickers**: Real-time market-aware pulses with weekend/holiday suppression. -- **Production Timelines**: Complex shift-based scheduling and resource allocation generators. -- **Custom Terms**: Domain-specific date ranges (e.g., academic years, retail seasons, or medical billing cycles). - -### 🏛️ Architecture & Migration Consulting -Transitioning from legacy libraries like **Moment.js** or **Luxon**? Our team can: -- Audit your existing date-time logic for `Temporal` compatibility. -- Perform high-fidelity migrations of complex "relative time" calculations. -- Optimize performance for large-scale data processing. - -### 🛡️ Enterprise Support -For mission-critical applications, we provide priority support, security auditing, and private bug-fix releases tailored to your deployment schedule. - ---- - -## 💎 Premium Extensions - -In addition to our open-source core, we offer a suite of **Premium Plugins** that are available via a private NPM registry or commercial license. These extensions provide advanced logic for enterprise-scale requirements. - -**[Browse the Plugin Marketplace](./tempo.plugin.md)** - ---- - -## 📬 Contact Us - -Ready to discuss your project? Get in touch with our engineering team: - -- **Email**: [contact@magmacomputing.com.au](mailto:contact@magmacomputing.com.au) -- **GitHub**: [github.com/magmacomputing](https://github.com/magmacomputing) - ---- - -> [!NOTE] -> Tempo is, and will always be, an **Open Core** project. Our professional services are designed to complement the free library with deep domain expertise and specialized extensions. diff --git a/packages/tempo/doc/comparison.md b/packages/tempo/doc/comparison.md deleted file mode 100644 index 85eb48c8..00000000 --- a/packages/tempo/doc/comparison.md +++ /dev/null @@ -1,47 +0,0 @@ -# 🥊 Tempo vs. The Competition - -If you are choosing a date library today, you are likely looking at **Day.js**, **Luxon**, or **date-fns**. While these are excellent tools, they were all built for the legacy `Date` era. - -**Tempo** is the first premium wrapper built specifically for the **Temporal API** (Stage 4), giving it unique advantages that legacy libraries simply cannot match. - ---- - -## At a Glance - -| Feature | Tempo 💎 | Day.js / Moment | Luxon | date-fns | -| :--- | :--- | :--- | :--- | :--- | -| **Foundation** | **Native Temporal** | Legacy `Date` | Legacy `Intl` + `Date` | Legacy `Date` | -| **Precision** | **Nanoseconds** | Milliseconds | Milliseconds | Milliseconds | -| **Parsing** | **Human-Centric** | Strict / Plugin | Strict | Modular / Strict | -| **Business Logic** | **Terms System** | Manual Math | Manual Math | Manual Math | -| **Time Zones** | **First-Class** | Plugin-based | Built-in | Separate Lib | -| **Future-Proof** | **100% (Native)** | Deprecated/Legacy | Legacy Bridge | Legacy Bridge | - ---- - -## 💎 Why Tempo Wins - -### 1. The "Terms" Engine (Business Intelligence) -Most libraries stop at "adding 2 days." Tempo introduces the **Terms** system, allowing you to encode domain-specific logic (Fiscal Quarters, Meteorological Seasons, Academic Terms, Zodiac Signs) directly into the tempo `term` object. -> *Competition:* You have to write custom utility functions and import them everywhere. - -### 2. Human-Centric Parsing -Day.js and Luxon are quite strict. If your string isn't in exactly the right format, they fail. Tempo’s **Snippet & Layout** engine is designed to be "forgiving" and human-centric, handling relative dates like "next Friday" or "Christmas" out of the box. -> *Competition:* Often requires an external library like `Chrono` or complex regex boilerplate. - -### 3. Nanosecond Precision -Native `Date` (and thus Day.js/Luxon/date-fns) is limited to milliseconds. For high-frequency trading, scientific data, or distributed systems, this isn't enough. Tempo inherits **nanosecond precision** from the Temporal API. -> *Competition:* Capped at 1/1000th of a second. - -### 4. Zero "Leaky Abstractions" -When you use a legacy library, you are often fighting the weirdness of the 1995 `Date` object (like months being 0-indexed). Tempo is built on `Temporal`, which was designed from the ground up to be mathematically sound and developer-friendly. - ---- - -## Which should you choose? - -- **Choose Day.js if:** You have a legacy codebase and need a tiny <2KB patch for simple tasks. -- **Choose Luxon if:** You need a mature, stable bridge while you wait for your environment to support Temporal. -- **Choose Tempo if:** You want to build on the **future of JavaScript**, you need **high precision**, or your app requires **complex business-date logic** that other libraries make difficult. - -[**Ready to start? See the Quick Start Guide →**](../README.md#🛠️-quick-start) diff --git a/packages/tempo/doc/lazy-evaluation-pattern.md b/packages/tempo/doc/lazy-evaluation-pattern.md deleted file mode 100644 index 75a93560..00000000 --- a/packages/tempo/doc/lazy-evaluation-pattern.md +++ /dev/null @@ -1,69 +0,0 @@ -# The Immutable Proxy-Delegator Lazy Evaluation Pattern - -When building complex JavaScript libraries (like date-time utilities), exposing numerous computed properties as getters on an object is common. However, computing them all upfront is expensive, and re-computing them on every access is wasteful. The standard solution is "Lazy Evaluation": evaluate the getter on first access, and then overwrite the getter with the literal value. - -But what if the base object is strictly **immutable** (via `Object.freeze`)? - -This article details a highly optimized $O(1)$ pattern for securely lazy-evaluating properties on immutable objects using a Proxy-based delegator and private fields. - -## The Problem: Mutating Frozen State - -A traditional lazy evaluation approach destroys and recreates the properties on the parent object. If the parent object is `Object.freeze()`'d for security (preventing API consumers from tampering with state), you cannot simply `Object.defineProperty` to overwrite the getter with a literal value. - -To get around freezing, you might try taking all property descriptors, wiping the object, mapping the other getters to a new object, adding the evaluated value, and calling `Object.freeze()` on the new object. This operation runs in $O(N)$ time every single time *any* getter is accessed. - -## The Solution: Proxy-Delegator with Memoization - -Tempo achieves lazy evaluation in $O(1)$ time using a **Delegator Proxy** that memoizes results back onto the target object. - -```javascript -// The O(1) approach - Extremely fast, zero overhead - -#setLazy(target, name, defineFunction) { - const get = () => { - const value = defineFunction.call(this); // Evaluate the value - - // Memoize the value by defining it as a static property on the target - Object.defineProperty(target, name, { - value, - enumerable: true, - configurable: true, - writable: false - }); - - return value; - }; - - // Define the initial getter - Object.defineProperty(target, name, { get, enumerable: true, configurable: true }); -} -``` - -### How it Works - -1. **Proxy Entry Point:** - Tempo uses a single Proxy (the `delegate` helper) to catch the very first access to a property. This Proxy doesn't store state; it just routes the request to the lazy evaluator. - -2. **Private Fields Bypass the Freeze:** - The internal containers (`#term`, `#fmt`) are private fields. Native JS Private Fields don't exist as properties on the object; they are internal engine slots. Thus, even if the `Tempo` instance is frozen, we can still update the *internal* state of the container objects. - -3. **Innate JS Engine Optimizations:** - Once a property (e.g., `.quarter`) is evaluated, it is "baked" into the target object as a standard value property. Subsequent lookups bypass the Proxy and the getter entirely. The JS engine treats it as a raw property access, which is the fastest possible operation in JavaScript. - -4. **Zero Over-allocation:** - Unused getters remain as simple function pointers. They cost absolutely nothing in execution time or memory until they are needed. - -### Summary - -By combining **Private Fields**, **Proxies**, and **Property Memoization**, Tempo builds securely immutable APIs that lazy-load computed getters with zero overhead after the initial call. - -## 🌈 The Best of All Worlds - -As of **v2.1.2**, Tempo uses a **Proxy-Delegator** that combines the security of immutability with the speed of raw property access: - -1. **Lazy by Default**: Properties are only evaluated when accessed, keeping the constructor near-instant. -2. **Memoized Evaluation**: Once accessed (e.g., `t.term.quarter`), the result is "baked" into the instance using `Object.defineProperty`. -3. **$O(1)$ Performance**: Every access *after* the first is a direct property lookup—no Proxy traps, no prototype traversal. -4. **Transparent Discovery**: Because properties are enumerable, `console.log(t.term)` or `JSON.stringify` will trigger the evaluation of all registered terms at once, providing a perfect "snapshot" of the instance state. - -To prevent diagnostic noise during these full-evaluation events, initialize Tempo with **`silent: true`**. diff --git a/packages/tempo/doc/migration-guide.md b/packages/tempo/doc/migration-guide.md deleted file mode 100644 index 94eb9e15..00000000 --- a/packages/tempo/doc/migration-guide.md +++ /dev/null @@ -1,47 +0,0 @@ -# ⚠️ Migrating to Tempo v2.x - -Tempo v2.x introduces architectural improvements and a more modular engine. While we strive for backward compatibility, there are some key changes to consider when upgrading from v1.x. - -## 📦 Modular Architecture -Tempo is now split into a `core` engine and optional modules. - -### If you use the full package: -If you import from `@magmacomputing/tempo`, everything (except Plugin extensions, like .ticker()) is included and works exactly like v1.x. No changes are required. - -### If you want a lean bundle: -You can now import the core engine only: -```javascript -import { Tempo } from '@magmacomputing/tempo/core'; -``` -If you do this, you must manually import the features you need. Built-in features now self-register on import via side-effects. - -## 🔌 Feature Registration -Features like `mutation`, `duration`, `format`, and the `ticker` are now modular. - -### v1.x (Automatic) -In v1.x, all features were always present. - -### v2.x (Opt-in for Core) -If using the Core engine, simply import the module to activate the feature: -```javascript -import '@magmacomputing/tempo/duration'; -import '@magmacomputing/tempo/ticker'; -``` - -## 🗓️ Term Logic Refactor -The way Terms (Quarters, Seasons, Zodiacs, etc.) are handled has been unified. - -- **v1.x:** Some term properties were ad-hoc on the instance. -- **v2.x:** All term logic is centralized under the `.term` property or accessible via the `#` shorthand in `.set()` and `.add()`. - -Example of new syntax: -```javascript -// Snap to start of quarter -t.set({ start: '#quarter' }); - -// Add two quarters while preserving day-of-quarter -t.add({ '#quarter': 2 }); -``` - -## 🧪 Testing and Stability -v2.x has been hardened with a 100% pass rate on our regression suite. If you were relying on undocumented "quirks" or bugs in v1.x parsing, you may find that v2.x is more strict and deterministic. diff --git a/packages/tempo/doc/releases/versions.md b/packages/tempo/doc/releases/versions.md deleted file mode 100644 index 5b4d9149..00000000 --- a/packages/tempo/doc/releases/versions.md +++ /dev/null @@ -1,49 +0,0 @@ -# 📜 Version History - -Tempo v2.1.2 is a major milestone, delivering a more reactive architecture and rock-solid stability. - -## [v2.1.2] - 2026-04-16 - -### 🏗️ Modular Architecture -Tempo is now split into `core` and optional plugin/modules, allowing you to include only what you need. This reduces bundle size for users who only need the basic engine. - -### 📝 Improved Logging -Internal logging now uses context-aware Symbols. This decouples the logging logic from the core engine, allowing for cleaner diagnostics without performance overhead. - -### ⏱️ Static API -- Added `Tempo.duration()` static method for convenient duration creation without instantiating a full Tempo date object first. - -### 🔌 Side Effect Registration -Plugins now support automatic registration. -- The full `@magmacomputing/tempo` package includes all modules by default. -- Core users (`@magmacomputing/tempo/core`) can activate features simply by importing the corresponding module (e.g., `import '@magmacomputing/tempo/ticker'`). - -### 🛡️ 100% Reliability -The engine passes all regression tests, ensuring complete stability across: -- Parsing complex date strings. -- Calculation and relative math. -- Formatting routines. - -### 🗓️ Unified Term Logic -Terms (like Quarters and Seasons) are now fully integrated: -- Use `#` in `set()` to jump to boundaries (e.g., `t.set({ start: '#quarter' })`). -- Use `{#term}` in `format()` to embed semantic labels (e.g. "Second Quarter") directly into strings (e.g., `t.format('Today is {yyyy}-{mm}-{dd} in the {#quarter}')`. - -### ➗ Relational Term Math -A category-first feature. Shift dates by semantic "steps" with `.add({ '#quarter': 1 })`. Tempo preserves your relative duration within the term, jumping across gaps and handling overflows with mathematical precision. - -### 🔗 Fluent Immutable Boundaries -Term ranges now return fully functional, frozen `Tempo` instances for `start` and `end`. This allows for seamless chaining: -```javascript -t.term.qtr.start.format('{dd} {mmm}') -``` - -### ⚡ Ticker Reliability -Fully stabilized the Ticker subsystem: -- Resolved async generator hangs. -- Synchronized pulse counts ($N$ pulses for `limit: N`), guaranteeing 100% predictable reactive streams. - -### 🚀 Parsing Engine Optimization -- Re-engineered pattern generation for $O(1)$ instance creation. -- Improved support for custom layout literals in local/one-off parsers. -- Significant refinements to the natural language engine for even more intuitive relative-date handling ("next Friday", "two days ago", etc.). diff --git a/packages/tempo/doc/soft_freeze_strategy.md b/packages/tempo/doc/soft_freeze_strategy.md deleted file mode 100644 index c8406993..00000000 --- a/packages/tempo/doc/soft_freeze_strategy.md +++ /dev/null @@ -1,90 +0,0 @@ -# Soft Freeze Strategy - -The **Soft Freeze** is a design pattern used in the Tempo library to balance **Public Immutability** with **Internal Extensibility**. It ensures that shared registries (like `NUMBER`, `FORMAT`, or `DURATION`) are read-only for users while remaining mutable for internal library features like plugin and runtime updates. - -## The Problem - -Standard JavaScript `Object.freeze()` is a "Hard Freeze": -- **Pros**: Guaranteed immutability; prevents accidental state corruption. -- **Cons**: Impossible to extend. Once frozen, even the library itself cannot add new formats or number-words (e.g., via `Tempo.registryUpdate`). - -An unfrozen object is even riskier: -- **Risk**: A user could accidentally write `NUMBER['one'] = 'two'`, which would break the library globally for all instances. - -## The Solution: Soft Freeze - -A Soft Freeze uses a **Read-Only Proxy** wrapped around a **Mutable Target**. - -### 1. The Proxy (Public Shield) -The Proxy traps all mutation attempts (`set`, `deleteProperty`, `defineProperty`) and returns `false`. This makes the object look and feel like a frozen object to the public API. - -### 2. The Target (Internal Source of Truth) -The underlying object remains mutable. It is NOT passed through `Object.freeze()`. This allows the library to perform controlled mutations when explicitly requested (e.g., during plugin registration). - -### 3. Access Control ($Target Symbol) -The library uses a private `Symbol` called `$Target`. Only code with access to this symbol can "unwrap" the proxy to access the mutable underlying object. - ---- - -## Implementation Details - -### `proxy.library.ts` -The core logic resides in `proxify`, which now supports an optional `lock` parameter. - -- **Hard Freeze** (`frozen=true, lock=true`): Both the proxy and the target are immutable. -- **Soft Freeze** (`frozen=true, lock=false`): The proxy is read-only, but the target stays mutable. - -```typescript -export function proxify(target: T, frozen = true, lock = frozen) { - const tgt = (target as any)[$Target] ?? target; // unwrap proxy - - // Hard Freeze: prevent all mutation to the target - if (lock) secure(tgt); - - return new Proxy(tgt, { - set: (_, key, val) => { - // Soft Freeze: Proxy blocks mutation, but target stays mutable - return frozen ? false : Reflect.set(tgt, key, val); - }, - deleteProperty: (_, key) => { - return frozen ? false : Reflect.deleteProperty(tgt, key); - }, - // ... other traps - }); -} -``` - -### `enumerate.library.ts` -The `enumify` utility uses Soft Freeze by default for registries that are intended to be extensible. - -```typescript -export function enumify(list, frozen = true) { - const target = Object.create(proto, descriptors); - - // Default to Soft Freeze (frozen=true, lock=false) - // if 'frozen' is passed as false, it signals 'extensible library registry' - return proxify(target, true, frozen); -} -``` - -## Benefits -1. **Bulletproof Public API**: Users cannot accidentally overwrite library constants. -2. **Library Extensibility**: A plugin can add new data to registries at runtime without bypasses or 'hacks'. -3. **Safe Global Discovery**: External discovery objects (via `Symbol.for($Tempo)`) can extend the library with new aliases but are prevented from overwriting core keys. -4. **Internal State Integrity**: Centralized `STATE` objects are protected from direct access while providing a single source of truth. -5. **Transparent Experience**: The object behaves like a POJO (Plain Old JavaScript Object) in the debugger and typical usage. - -## The "Safe Merge" Rule - -To prevent a global discovery object from "trashing" the registry, the library implements a **Safe Merge** rule for all shared states. - -When merging external data (discovery or plugin): -- **Additive Only**: New keys are added. -- **Root Protection**: Core building blocks (like `NUMBER['one']` or `FORMAT['iso']`) are protected from being overwritten. - -This ensures that while the library is extensible, its fundamental logic remains deterministic and secure across all environments. - ---- - -> [!NOTE] -> **v2.1.2 Update**: The Soft Freeze is now tightly integrated with **Logify**. Internal state updates bypass the Proxy using a private Symbol, allowing the engine to remain "Silent" while performing complex transactional updates during the discovery phase. diff --git a/packages/tempo/doc/tempo-vs-temporal.md b/packages/tempo/doc/tempo-vs-temporal.md deleted file mode 100644 index 99687bfa..00000000 --- a/packages/tempo/doc/tempo-vs-temporal.md +++ /dev/null @@ -1,88 +0,0 @@ -# 🆚 Tempo vs. Native Temporal - -While `Temporal` provides an excellent, mathematically sound foundation for dates in JavaScript, it is designed to be highly explicit and strict. **Tempo** acts as a developer-friendly wrapper that eliminates boilerplate and makes common tasks effortless, while still giving you the rock-solid reliability of Temporal under the hood. - -To enhance (not replace) Temporal's strictness, Tempo adds: -* flexibility (through its parsing engine and output formatting), -* convenience (through its many getters and methods), -* configurability (through its dynamic aliases (events, periods)), -* business logic (through its lazy-loaded plugin system (terms)) - -Here is a side-by-side comparison of how you achieve the same outcomes, as well as things Tempo can do that native Temporal cannot easily. - -### 1. Parsing: Strict vs. Flexible - -Temporal only accepts strict ISO 8601 strings. If you have user input, database dumps, or human-readable dates, you have to write your own parser first. Tempo handles it out-of-the-box. - -**Native Temporal ❌** -```javascript - -Temporal.PlainDate.from('2026/01/24'); // Throws RangeError: invalid ISO 8601 string -Temporal.PlainDate.from('next Friday'); // Throws RangeError -``` - -**Tempo ✅** -```javascript - -new Tempo('2026/01/24'); // Parses perfectly -new Tempo('next Friday'); // Parses relative natural language perfectly -``` - -### 2. Formatting: Verbose vs. Simple Tokens - -Temporal relies on the `Intl.DateTimeFormat` API for formatting. While powerful for localization, it is incredibly verbose for simple, specific string outputs. - -**Native Temporal 🐢** -```javascript -const date = Temporal.Now.plainDateISO(); -date.toLocaleString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' }); // Output: "24 Jan 2026" -``` - -**Tempo 🚀** -```javascript -const t = new Tempo(); - -// Use the format method to create custom formats, or use the pre-built getters (on the 'fmt' property) -t.format('{dd} {mmm} {yyyy}'); // Output: "24 Jan 2026" -t.fmt.date; // Output: "2026-01-24" -``` - -### 3. Business Logic & Complex Terms - -Native Temporal deals with standard calendar units (days, months, years). Tempo extends this with business-aware concepts, relative querying, and rich getters. - -**Native Temporal 🐢** -```javascript -const date = Temporal.Now.plainDateISO(); -// To find if it's a weekend, you need: -const isWeekend = date.dayOfWeek === 6 || date.dayOfWeek === 7; - -// To find the fiscal/calendar quarter... write your own math logic -``` - -**Tempo 🚀** -This is a perfect example of where Tempo adds business logic (something that Temporal does not do). -To add a 'term' that defines 'isWeekend' to Tempo, you would write a plugin that defines the term. -From that point, the plugin is available to new Tempo instances. - -See the section on [plugin](tempo.term.md) for more information. - - -```typescript -const t = new Tempo(); -const isWeekend = t.term.isWeekend; // through plugin - -// Built-in complex terms via plugin -t.term.qtr; // returns calculated 'fiscal quarter' based on current instance (date and hemisphere) e.g., 'Q1' -t.term.szn; // returns calculated 'meteorological season' based on current instance (date and hemisphere) e.g., 'Summer' - -// Time since/until (native Temporal only returns Duration objects, not strings) - -t.until('3pm','minutes'); // 5.046264992345 - -t.until('xmas', 'days'); // "289.58470466349036" -t.until('xmas'); // if no 'unit' provided, then duration object "{years:0, months:9, ... }" - -t.since('yesterday', 'days'); // unit-argument determines granularity "1d ago" -t.since('yesterday afternoon'); // if no 'unit' provided, then duration string "-P1DT9H32M19.402536059S" -``` \ No newline at end of file diff --git a/packages/tempo/doc/tempo.api.md b/packages/tempo/doc/tempo.api.md deleted file mode 100644 index ed42e15b..00000000 --- a/packages/tempo/doc/tempo.api.md +++ /dev/null @@ -1,180 +0,0 @@ -# Tempo API Reference - -This document provides a comprehensive technical reference for the `Tempo` class, including static methods, properties, and instance API. - ---- - -- [TypeScript Types Reference](./tempo.types.md) -- [Tempo Cookbook](./tempo.cookbook.md) - ---- - -## 🏗️ Static Methods - -### `Tempo.init(options?: Tempo.Options)` -Initializes the global default configuration for all subsequent `Tempo` instances. -- **Returns:** `Tempo.Config` (The resolved global config). -- **Note:** Settings are inherited from library defaults, persistent storage, and provided options. Use `silent: true` to suppress `console.error` output for expected failures. - -### `Tempo.extend(arg, options?)` -Unified extender for library functionality. -- **Plugin:** `Tempo.extend(TickerPlugin)` — Adds functional extensions. -- **Term:** `Tempo.extend(MyTerm)` — Registers grammar/parsing terms. -- **Discovery:** `Tempo.extend(config)` — Bootstraps global configuration. - **Formats:** `Tempo.extend(MyFormat)` — Registers custom format strings. - -- **Returns:** `typeof Tempo` (for chaining). -- **Note:** Plugins are installed only once; existing core members are protected. - -### `Tempo.from(tempo?: Tempo.DateTime | Tempo.Options, options?: Tempo.Options)` -Creates a new `Tempo` instance. A static alternative to `new Tempo()`. -- **Returns:** `Tempo` - -### `Tempo.compare(tempo1, tempo2?)` -Compares two `Tempo` instances or date-time values for sorting. -- **Returns:** `-1` (smaller), `0` (equal), or `1` (larger). - -### `Tempo.duration(input)` -(Plugin required) Creates a full Tempo Duration object (EDO) from an ISO string or DurationLike object. -- **Returns:** `Tempo.Duration` -- **Example:** `Tempo.duration('P1Y')` or `Tempo.duration({ months: 2 })` - - -### `Tempo.now()` -Returns the current Unix epoch in nanoseconds as a `BigInt`. - -### `Tempo.getSymbol(key?: string | symbol)` -Retrieves or registers a `Symbol` for internal token mapping. - -### `Tempo.ticker(arg1?, arg2?)` -(Plugin required) Creates a reactive stream of `Tempo` instances at regular intervals. -- **Returns:** An `AsyncGenerator` (if no callback) or a `stop` function (if callback provided). -- **See:** [Tempo Ticker Guide](./tempo.ticker.md) for the full polymorphic signature and usage patterns. - -### `Tempo.regexp(layout, snippet?)` -Translates a Tempo layout string into a compiled `RegExp`. - -### `Tempo[Symbol.dispose]()` -Releases the global configuration and resets the library to its initial defaults. Equivalent to calling `Tempo.init()`. - ---- - -## ⚙️ Static Properties - -### `Tempo.config` -Returns the current *global* configuration settings. - -### `Tempo.default` -Returns the *initial* out-of-the-box library defaults. - -### `Tempo.terms` -Returns an array of all currently registered term plugins. - -### `Tempo.parse` -Returns the global parsing rules registry (snippets, layouts, events, etc.). - -### `Tempo.properties` -Returns a list of all public static accessor names on the `Tempo` class. - -### 🔢 Static Enumerators -Access to the internal dictionaries used by Tempo: -- `WEEKDAY` | `WEEKDAYS` -- `MONTH` | `MONTHS` -- `SEASON` | `COMPASS` -- `DURATION` | `DURATIONS` -- `ELEMENT` (Units map) -- `FORMAT` (Registry of pre-defined formats) -- `LIMIT` (Useful boundary dates) - ---- - -## 🚀 Instance Methods - -### `tempo.add(payload: Tempo.DateTime | Tempo.Add, options?: Tempo.Options)` -Returns a **new** `Tempo` instance with the specified duration or date-time payload added. -- **Example:** `t.add({ days: 2 })` or `t.add('tomorrow')` - -### `tempo.set(payload: Tempo.DateTime | Tempo.Set, options?: Tempo.Options)` -Returns a **new** `Tempo` instance with specific values or relative alignments. -- **Example:** `t.set({ month: 5, hh: 12 })` or `t.set({ start: 'month' })` landing on `01-May 00:00:00`. -- **Note (End):** Using `end` with an anchor (e.g., `set({ end: '#qtr' })`) lands on the **Inclusive End** of the period (e.g., `30-Sep 23:59:59.999...`). This follows industry UX expectations for "end-of-period" navigation. -- **Note (Mid):** Using `mid` with an anchor lands on the **Arithmetic Mid-point** (exact nanosecond center) of the period. - -### `tempo.clone()` -Returns a **new**, lean `Tempo` instance based on the current one. It preserves all local configuration but starts a fresh "parse history" (length 1). This is ideal for minimizing memory footprint in long chains or live tickers. - -### `tempo.format(fmt: string)` -Returns a formatted string or number based on the provided token or named format. - -### `tempo.until(until, opts?)` -Calculates the duration until another date-time. -- **Returns:** `number` (if a unit is provided) or a `Tempo.Duration` object. - -### `tempo.since(since?: Tempo.DateTime | Tempo.Options, opts?: Tempo.Options)` -Returns a human-readable relative time string (e.g., "3 days ago"). -- **Returns:** `string` -- **Options:** - - `rtfStyle`: `'long' | 'short' | 'narrow'` (default: `'narrow'`). See `Intl.RelativeTimeFormatStyle`. - - `rtfFormat`: A pre-configured `Intl.RelativeTimeFormat` instance. -- **Example:** - - `t.since('yesterday')` -> `"1d ago"` - - `t.since('yesterday', { rtfStyle: 'long' })` -> `"1 day ago"` - - `t.since(t2, { rtfFormat: new Intl.RelativeTimeFormat('fr') })` -> `"il y a 2 heures"` -- **Performance:** Tempo memoizes `Intl` object creation internally. For maximum performance in high-volume loops, you can pass a pre-allocated `rtfFormat` instance. - -### `tempo.isValid` -Returns `true` if the instance represents a valid date-time. - -### `tempo.toString()` -Returns the ISO 8601 string representation. - -### `tempo.toDate()` -Returns a standard JavaScript `Date` object. - -### `tempo.toDateTime()` -Returns the underlying `Temporal.ZonedDateTime` object. - -### `tempo.toInstant()` -Returns the underlying `Temporal.Instant` object. - -### `tempo.toPlainDate()` -Returns a `Temporal.PlainDate` representation. - -### `tempo.toPlainTime()` -Returns a `Temporal.PlainTime` representation. - -### `tempo.toPlainDateTime()` -Returns a `Temporal.PlainDateTime` representation. - ---- - -## 🔍 Instance Properties - -### Date & Time Accessors -- `yy`: 4-digit year. -- `yw`: 4-digit ISO week-numbering year. -- `mm`: Month (1-12). -- `dd`: Day of month (1-31). -- `ww`: ISO week number (1-53). -- `hh`: Hour (0-23). -- `mi`: Minutes (0-59). -- `ss`: Seconds (0-59). -- `ms`: Milliseconds (0-999). -- `us`: Microseconds (0-999). -- `ns`: Nanoseconds (0-999). -- `ff`: Fractional seconds (decimal). - -### Localization & Context -- `tz`: IANA Time Zone ID. -- `ts`: Unix timestamp (based on `config.timeStamp`). -- `mmm` / `mon`: Short/Full Month name. -- `www` / `wkd`: Short/Full Weekday name. -- `dow`: Day of week number (Mon=1, Sun=7). - -### Lineage & Metadata -- `nano`: Epoch nanoseconds (`BigInt`). -- `epoch`: Object containing `ss`, `ms`, `us`, `ns` epoch values. -- `term`: Object containing results from all active term plugins. (Note: These are enumerable for easy discovery). -- `fmt`: Registry of pre-calculated strings for all standard formats. (Note: These are enumerable for easy discovery). -- `config`: The effective configuration for this specific instance (Note: `scope`, `anchor`, and `value` are excluded from the public object). -- `parse`: The parsing rules and lineage for this instance. diff --git a/packages/tempo/doc/tempo.benchmarks.md b/packages/tempo/doc/tempo.benchmarks.md deleted file mode 100644 index 5a748f51..00000000 --- a/packages/tempo/doc/tempo.benchmarks.md +++ /dev/null @@ -1,45 +0,0 @@ -# 🚀 Tempo Performance Benchmarks - -To ensure high performance in mass-instantiation scenarios, Tempo implements a "Zero-Cost Constructor" architecture using prototype shadowing and lazy delegation. This document outlines the benchmark results for these optimizations. - -## 📊 Summary of Timings - -Timings were captured over **1,000 iterations** to measure micro-overhead and compare different instantiation strategies. - -| Method | Total Time | µs / op | Notes | -| :--- | :--- | :--- | :--- | -| **Default (Lazy Proxy)** | 523.14ms | **523.14µs** | Current $O(1)$ constructor. | -| **Eager Simulation** | 1394.51ms | **1394.51µs** | **~2.7x slower** (simulating pre-refactor impact). | -| **Fast-Fail @sync** | 359.04ms | **359.04µs** | Rejected instantly by the Master Guard. | -| **Object.create Baseline** | 0.22ms | 0.22µs | Raw JS overhead for comparison. | - ---- - -## 🏗️ Architectural Impact - -### 1. Proxy-Delegator Delegation ($O(1)$) - -By using a **Proxy-Delegator** pattern, the constructor returns near-instantly without populating the formatting (`fmt`) or term (`term`) objects. These registries are only discovered and memoized on the first property access. - -- **Gain**: ~65% reduction in instantiation overhead. -- **v2.1.2 Update**: The Scan-and-Consume guard further stabilizes the "Zero-Cost Constructor" by ensuring that even with massive plugin lists, the entry-point remains $O(1)$. - -### 2. The Master Guard (Fast-Fail) - -The static `#guard` regex acts as a rapid "Sync Point." - -- **Efficiency**: Strings that do not contain valid date-time characters are rejected in $O(1)$ time. -- **Performance**: Validating a string against the guard is ~30% faster than a full parsing cycle, even for simple ISO strings. - ---- - -## 🧪 Benchmark Methodology - -The benchmark script used `performance.now()` within a Vitest environment to ensure accurate module resolution and internal alias support (`#library`). - -1. **Lazy Creation**: Creates a `new Tempo('2024-05-20')` without accessing any properties. -2. **Eager Simulation**: Creates a `new Tempo()` and manually triggers discovery on 5 core properties to simulate O(N) initialization. -3. **Invalid Parse**: Passes a string that fails the Master Guard (e.g., includes emojis or exotic symbols) to measure rejection speed. - -> [!NOTE] -> These benchmarks represent the library's performance under Node.js v22+. Results may vary based on the JS engine (V8, JavaScriptCore, etc.) but the $O(1)$ complexity remains constant. diff --git a/packages/tempo/doc/tempo.config.md b/packages/tempo/doc/tempo.config.md deleted file mode 100644 index 68b41fa6..00000000 --- a/packages/tempo/doc/tempo.config.md +++ /dev/null @@ -1,198 +0,0 @@ -# Configuration Guide - -**Tempo** provides a flexible, multi-tiered configuration system. Settings are applied in a specific order of precedence, allowing you to set broad defaults that can be refined at the application or instance level. - -## Precedence Hierarchy - -Settings are loaded in the following order (where later stages override earlier ones): -1. **Library Defaults**: Sensible out-of-the-box baseline. -2. **Persistent Storage**: Sticky user preferences (which merge into Defaults). -3. **Global Discovery**: Enterprise-level setup discovered via `Symbol.for('$Tempo')`. -4. **Library Extension**: Dynamic feature registration via `Tempo.extend()`. -5. **Explicit Initialization**: Baseline configuration via `Tempo.init()`. -6. **Instance Constructor**: Specific overrides for a single `new Tempo()` call. - ---- - -## 🔒 Registry Protection (Soft Freeze) - -- **Read-Only Proxy**: Core registries (`TIMEZONE`, `FORMAT`, etc.) are returned as read-only proxies. Any attempt to directly assign to them will fail. -- **Controlled Extension**: To update a registry, you must use `Tempo.extend()` or `Tempo.init()`. This ensures internal caches (like the Master Guard regex) are synchronized. -- **Atomic Updates**: Multiple extensions are batched, ensuring that the parsing engine is only rebuilt once per change. - -This strategy prevents accidental state corruption while maintaining the flexible, extensible nature of the library. - ---- - -## 1. Persistent Configuration (`$Tempo`) - -The first layer Tempo checks after its own internal defaults is persistent storage. This is ideal for "sticky" settings like a user's preferred timezone or locale that should persist across sessions without a database. - -```javascript -// Write a preference to localStorage under the default key ('$Tempo') -Tempo.writeStore({ timeZone:'Australia/Sydney' }); -// Write a preference to localStorage under the key 'userSettings' -Tempo.writeStore({ timeZone: 'America/New_York' }, 'userSettings'); - -// On the next page load or session, Tempo will use the default store ('$Tempo') automatically -// or to apply a different store on the next page load or session, initialize with that store: -Tempo.init({ store: 'userSettings' }); -``` - ---- - -## 2. Global Discovery - -To facilitate configuration in micro-frontend architectures or when using a ` +``` + +### Browser (Script Tag) + +For legacy environments or simple prototypes, use the single-file bundle: + +```html + + +``` + +--- + +## Installation + +```bash +npm install @magmacomputing/tempo +``` + +--- + +## ✨ What's New in v2.1.2 (Stabilized) +The **v2.1.2** release represents the stabilization of the modular architecture and the introduction of advanced relational math: + +- **Modular Architecture**: Tempo is now split into **Core** (lite) and **Full** (batteries-included) versions. Features like Tickers and Durations are now side-effectable plugins. +- **Relational Math**: Shifting by terms (e.g., `.add({ '#quarter': 1 })`) now uses **Cycle Preservation**, maintaining your relative offset within semantic cycles. +- **Scan-and-Consume Guard**: A high-performance internal matching engine that enables $O(1)$ instantiation even with dozens of active terminology plugins. +- **Logify & Symbol Internalization**: Internal diagnostics and lifecycle hooks are now protected by context-aware Symbols, preventing state leakage and ensuring monorepo compatibility. + +--- + +> [!IMPORTANT] +> `Tempo` requires an environment with native `Temporal` support (Modern Runtimes like Node.js 20+, Deno, or Bun). +> If your environment is older, you must provide your own polyfill. + +### Build Target + +Tempo is compiled to **ES2022**. This target supports modern JavaScript features like **Private Class Fields** (`#property`) while maintaining compatibility with the vast majority of modern browsers and server-side runtimes (Node 20+, Deno, Bun). + +### Polyfilling (if required) + +If you need to support older environments, we recommend `@js-temporal/polyfill`: + +```bash +npm install @js-temporal/polyfill +``` + +Then, import it at the very top of your application entry point: + +```typescript +import '@js-temporal/polyfill'; +``` + +### 💻 Server-Side (Node.js, Deno, Bun) + +`Tempo` is a native ESM package. In modern runtimes, simply import the class: + +```typescript +import { Tempo } from '@magmacomputing/tempo'; + +const t = new Tempo('next Friday'); +console.log(t.format('{dd} {mon} {yyyy}')); +``` + + +``` +--- + +## Parsing + +`Tempo`'s strongest feature is its flexible parsing engine. It can interpret: + +- **ISO Strings**: `2024-05-20T10:00:00Z` +- **Short Dates**: `20-May`, `May 20` (locale-aware) +- **Relative Strings**: `next Monday`, `last Friday`, `2 days ago` +- **Numbers/BigInt**: Unix timestamps in milliseconds or nanoseconds +- **Temporal Objects**: `ZonedDateTime`, `PlainDate`, etc. + +### Snippets & Layouts +The parsing engine uses a library of RegEx patterns. +You can extend these patterns a) globally (via `Tempo.init()`) or b) per instance (via options to `new Tempo`. + +`Tempo` also supports **Event** and **Period** aliases. These can be simple strings or functions that return a value to be parsed. When using functions, ensure you use the `function` keyword to maintain proper `this` binding to the `Tempo` instance. + +```typescript +Tempo.extend({ + event: { + 'birthday': '20 May', + 'tomorrow': function () { return this.add({ days: 1 }) }, + } +}); +``` + +- [Layout Patterns Guide](./tempo.layout.md): Details on creating custom parsing patterns and using relative units. +- [Weekday Parsing Guide](./tempo.weekday.md): Deep dive into relative weekday expressions (e.g., "next Monday"). +- [Custom Patterns & Snippets](./tempo.pattern.md): Advanced guide on how Tempo translates layouts into regex. + +### US-Style Dates (Ambiguous Digits) +When parsing dates comprised entirely of digits (e.g., `04012026`), the input can be visually ambiguous: Is it `04-Jan-2026` (Day-Month-Year) or `Apr-01-2026` (Month-Day-Year)? + +Tempo solves this elegantly using **reasonable defaults and TimeZone awareness**: +1. **TimeZone Detection**: + Tempo will (if not provided) infer the timeZone from the runtime environment. + If you do provide a `timeZone` it should be an IANA timezone identifier or an "±hh:mm" offset. + If the timeZone is associated with one of the locales that suggest month-day-year order (which defaults to `en-US`), it assumes the input is US-style (Tempo.parse.mdyLocales) +2. **Prioritized Parsing**: + - If the timeZone favors US-style, Tempo tries the inbuilt **Month-Day-Year (`mdy`)** parsing layout *first*. + - If the timeZone favors the rest of the world, Tempo tries the inbuilt **Day-Month-Year (`dmy`)** parsing layout *first*. +3. **Automatic Fallback**: + If the first layout fails (for example, reading `15012026` as `mdy` fails because there is no 15th month), Tempo will automatically "re-try" using the alternate layout. + +You can configure what timeZone or specific layouts trigger this behavior in the configuration options: +```typescript +const usDate = new Tempo('04012026', { timeZone: 'America/New_York' }); // Parsed as Apr-01-2026 +const ukDate = new Tempo('04012026', { timeZone: 'Europe/London' }); // Parsed as 04-Jan-2026 +``` +*(Note: This logic only applies to **Parsing** digits-only input. **Formatting** US-style output remains dependent on the `{mm}{dd}{yyyy}` layout string you choose to output.)* + +--- + +## Formatting + +Formatting uses a placeholder syntax similar to many template engines: + +| Placeholder | Description | Type | Range | Example | +| :--- | :--- | :--- | :--- | :--- | +| `{yyyy}` | Year | `4-digit` | `0001-9999` | `2024` | +| `{yw}` | ISO Week-numbering Year | `4-digit` | `0001-9999` | `2024` | +| `{yy}` | Year | `2-digit` | `00-99` | `24` | +| `{mm}` | Month | `2-digit` | `01-12` | `05` | +| `{mon}` | Full Month Name | `string` | `January - December` | `June` | +| `{mmm}` | Month Name | `3-char string` | `Jan - Dec` | `Jun` | +| `{dd}` | Day of Month | `2-digit` | `01-31` | `20` | +| `{day}` | Day of Month | `1-2 digit` | `1-31` | `20` | +| `{wkd}` | Full Weekday Name | `string` | `Monday - Sunday` | `Monday` | +| `{www}` | Weekday Name | `3-char string` | `Mon - Sun` | `Mon` | +| `{dow}` | Day of Week (Mon-Sun) | `1-digit` | `1-7` | `1` | +| `{ww}` | Week of Year | `1-2 digit` | `1-53` | `21` | +| `{hh}` | Hour | `1-2 digit` | `0-24` | `14` | +| `{HH}` | Hour (with meridiem) | `1-2 digit` | `1-12` | `02pm` | +| `{mi}` | Minutes | `2-digit` | `00-59` | `05` | +| `{ss}` | Seconds | `2-digit` | `00-59` | `05` | +| `{ms}` | Milliseconds | `3-digit` | `000-999` | `005` | +| `{us}` | Microseconds | `3-digit` | `000-999` | `000` | +| `{ns}` | Nanoseconds | `3-digit` | `000-999` | `000` | +| `{ff}` | Fractional Seconds | `9-digit` | `0-999999999` | `005000000` | +| `{ts}` | Unix Timestamp | `digits` | `n/a` | `1716163200000` | +| `{#term}` | Unified Term Identity | `string` | `n/a` | `{#qtr}` or `{#quarter}` | + +Example: +```typescript +const t = new Tempo(); +t.format('{dd} {mon} {yyyy}'); // "24 January 2026" +``` + +### ISO 8601 Week Dates +*(Note: `{yw}` represents the ISO week year, which may differ from `{yyyy}` at the start or end of a calendar year if the current date belongs to an ISO week from the adjacent year.)* + +Tempo supports the **ISO 8601 Week Date** system, which is commonly used in business and logistics for unambiguous weekly scheduling. + +- **`{ww}`**: Represents the ISO week number (01–53). +- **`{yw}`**: Represents the ISO week-numbering year. + +A week in this system always starts on a **Monday**. Week 01 is defined as the week with the year's first Thursday (or the week containing January 4th). + +To format a standard ISO week date (e.g., `2024-W21`), use both placeholders together: +```typescript +const t = new Tempo('2024-05-20'); +t.format('{yw}-W{ww}'); // "2024-W21" +``` + +--- + +## Manipulation + +`Tempo` instances are **immutable**. Methods like `add` and `set` return a *new* `Tempo` instance. + +### `add(payload, options?)` +Adds a duration (positive or negative) or a date-time payload to the instance. +```typescript +t.add({ days: -1, hours: 2 }); +t.add('tomorrow'); +``` + +### `set(payload, options?)` +Sets the instance to a specific point or relative position. +```typescript +t.set({ hour: 0 }); // Midnight +t.set({ start: 'month' }); // Start of the current month +t.set({ end: '#quarter' }); // End of the current fiscal quarter +``` + +### `until(dateTime, unit?)` +Calculates the duration until another date-time. +```typescript +t.until('2024-12-25', 'days'); // Returns number of days +t.until('2024-12-25'); // Returns Temporal.Duration object, with an 'iso' property (ISO 8601 duration format) +``` + +### `since(dateTime, unit?)` +Calculates the elapsed time since another date-time (returns a human-readable string). +```typescript +t.since('yesterday', 'days'); // "1d ago" +t.add({days:-2}).set({period:'afternoon'}).since(); // Returns ISO 8601 duration format (e.g. 'P1DT20H59M49.290589287S') +``` + +### `compare(t1, t2)` +Static method which can be used to sort Tempo's across different timeZones +```typescript +const t1 = new Tempo('2024-05-20', { timeZone: 'America/New_York' }); +const t2 = new Tempo('2024-05-20', { timeZone: 'Europe/London' }); +[t1,t2].sort(Tempo.compare).forEach(t => console.log('timeZone: ', t.config.timeZone)); +// timeZone: Europe/London +// timeZone: America/New_York +``` +or to compare `Tempo` instances as "before" (-1), "same-as" (0), or "after" (1) +```typescript +const t1 = new Tempo('2024-05-20', { timeZone: 'America/New_York' }); +const t2 = new Tempo('2024-05-20', { timeZone: 'Europe/London' }); +Tempo.compare(t1, t2); // 1, meaning t1 is 'later than' t2 +``` + +--- + +## Plugin System + +Tempo is designed to be lean. Non-core features like the `ticker` or advanced business logic can be added via the plugin system. + +### Extending Tempo +To add a plugin, use the static `extend()` method. + +```typescript +import { Tempo } from '@magmacomputing/tempo/core'; +import { TickerModule } from '@magmacomputing/tempo/ticker'; + +Tempo.extend(TickerModule); +``` + +- [Plugin Development Guide](./tempo.plugin.md): A detailed overview of the `Tempo.extend()` API and best practices for creating custom extensions. + +> [!NOTE] +> **Selective Immobility**: When you extend Tempo, the base methods (like `format`, `add`, `set`) are protected. You can add NEW functionality, but you cannot overwrite the essential behavior of the library. + +--- + +## Ticker (Optional Plugin) + +`Tempo.ticker` creates a reactive stream of `Tempo` instances, making it easy to build clocks or countdowns. +**Note**: This requires the `TickerModule` to be specifically installed first, when using the 'Tempo Core' package. + +```typescript +// Pattern: Async Generator, which emits a new Tempo instance every second +for await (const t of Tempo.ticker()) { + console.log(t.format('{hh}:{mi}:{ss}')); +} +``` + +See the [Tempo Ticker guide](./tempo.ticker.md) for full details and API signatures. + +--- + +## Plugin (Terms) + +`Tempo` can be extended with 'terms' — plugins that calculate complex date ranges. + +### Unified Term Logic (v2.0.0) + +Terms are now fully integrated into the base `set()`, `add()`, `until()` and `format()` methods via the `#` indicator: + +1. **Anchored Mutations**: Jump to the `start`, `mid`, or `end` of any term: + ```typescript + t.set({ start: '#quarter' }); // April 1st (if in Q2) + t.set({ end: '#season' }); // Nov 30th (if in Autumn) + ``` +2. **Identity Placeholders**: Embed term identities into formatting strings: + - `{#qtr}`: Returns the technical key (e.g., `"Q2"`). + - `{#quarter}`: Returns the semantic label (e.g., `"Second Quarter"`), falling back to the key if no label exists. + +3. **Term Traversal (Math)**: Shift the date by semantic "steps" using `#term` units in `.add()`: + ```typescript + t.add({ '#quarter': 1 }); // Move to the same day/time in the NEXT quarter + t.add({ '#season': -1 }); // Move back one season + t.add({ '#morning': 1 }); // Jump across gaps to the next morning period + ``` + *Note: Relational math preserves your relative duration from the start of the term and applies overflow constraints.* + +### Persistent Access +Terms remain accessible via the `t.term` getter for programmatic use. The `start` and `end` boundaries are returned as **fluent, immutable Tempo instances**: +- `t.term.qtr`: Current fiscal calendar quarter object. +- `t.term.szn`: Current meteorological season (North/South hemisphere-aware). +- `t.term.zdc`: Current Western/Chinese astrological sign. + +```typescript +const q = t.term.qtr; +console.log(q.start.format('{dd} {mmm}')); // Fluent formatting directly from the term! +console.log(q.end.since(t, 'days')); // Calculate days remaining in the quarter +``` + +See the [Tempo Terms guide](./tempo.term.md) for full details and plugin development. + +--- + +## Context & Configuration + +Global settings can be configured using [`Tempo.init()`](./tempo.config.md). +This will affect any new Tempo instances created (but not affect any existing instances). + +```typescript +Tempo.init({ + timeZone: 'Europe/London', + locale: 'en-GB' +}); +``` + +### TIMEZONE Aliases +For convenience, `timeZone` configurations accept both strict IANA identifiers (e.g., `Australia/Sydney`) and common abbreviations. +Tempo will automatically translate these abbreviations before passing them to the underlying engine (e.g., `utc` -> `UTC`, `pst` -> `America/Los_Angeles`). + +These are stored in the `Tempo.TIMEZONE` registry, which is protected by **Soft Freeze** but remains extensible via `Tempo.registryUpdate()`. + +See the [Configuration Guide](./tempo.config.md#timezone-registry) for the complete list of default aliases. + +Instances can also be created with specific options: +```typescript +new Tempo('2024-05-20', { timeZone: 'AEST', debug: true }); +``` + +--- + +## Debugging + +Tempo includes a robust debugging mode that tracks internal mutations and parsing decisions. + +See the [Tempo Debugging guide](./tempo.debugging.md) for full details on using the `debug: true` flag and the `tempo.log` getter. + +--- + +## Technical References +- [API Reference](./tempo.api.md) +- [Cookbook](./tempo.cookbook.md) +- [Library Functionality](./tempo.library.md) +- [Architecture & Internal Protection](./architecture.md) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/README.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/README.md new file mode 100644 index 00000000..0501d669 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/README.md @@ -0,0 +1,22 @@ +[**@magmacomputing/tempo**](../../../README.md) + +*** + +## Interfaces + +- [BaseOptions](interfaces/BaseOptions.md) +- [Config](interfaces/Config.md) +- [Discovery](interfaces/Discovery.md) +- [Parse](interfaces/Parse.md) +- [PluginContainer](interfaces/PluginContainer.md) +- [State](interfaces/State.md) + +## Type Aliases + +- [Match](type-aliases/Match.md) +- [MatchExtend](type-aliases/MatchExtend.md) +- [OptionsKeep](type-aliases/OptionsKeep.md) +- [PatternOption](type-aliases/PatternOption.md) +- [PatternOptionArray](type-aliases/PatternOptionArray.md) +- [Registry](type-aliases/Registry.md) +- [TimeStamp](type-aliases/TimeStamp.md) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/BaseOptions.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/BaseOptions.md new file mode 100644 index 00000000..d34856fa --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/BaseOptions.md @@ -0,0 +1,241 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.type.ts:155](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L155) + +the Options object found in a config-module, or passed to a call to Tempo.init({}) or 'new Tempo({})' + +## Extended by + +- [`BaseOptions`](../../Tempo/interfaces/BaseOptions.md) + +## Properties + +### calendar + +> **calendar**: `CalendarLike` + +Defined in: [tempo.type.ts:162](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L162) + +Temporal calendar + +*** + +### catch + +> **catch**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:159](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L159) + +catch or throw Errors + +*** + +### debug + +> **debug**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:158](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L158) + +additional console.log for tracking + +*** + +### discovery + +> **discovery**: `string` \| `symbol` + +Defined in: [tempo.type.ts:157](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L157) + +globalThis Discovery Symbol + +*** + +### event + +> **event**: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> + +Defined in: [tempo.type.ts:174](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L174) + +custom date aliases (events). + +*** + +### formats + +> **formats**: `Property`\<`any`\> + +Defined in: [tempo.type.ts:176](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L176) + +custom format strings to merge in the FORMAT enum + +*** + +### layout + +> **layout**: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +Defined in: [tempo.type.ts:173](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L173) + +patterns to help parse value + +*** + +### locale + +> **locale**: `string` + +Defined in: [tempo.type.ts:163](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L163) + +locale (e.g. en-AU) + +*** + +### mdyLayouts + +> **mdyLayouts**: [`Pair`](../../../../type-aliases/Pair.md)[] + +Defined in: [tempo.type.ts:171](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L171) + +swap parse-order of layouts + +*** + +### mdyLocales + +> **mdyLocales**: `string` \| `string`[] + +Defined in: [tempo.type.ts:170](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L170) + +locale-names that prefer 'mm-dd-yy' date order + +*** + +### mode? + +> `optional` **mode?**: `"auto"` \| `"strict"` \| `"defer"` + +Defined in: [tempo.type.ts:169](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L169) + +initialization strategy ('auto'|'strict'|'defer') + +*** + +### period + +> **period**: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +Defined in: [tempo.type.ts:175](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L175) + +custom time aliases (periods). + +*** + +### pivot + +> **pivot**: `number` + +Defined in: [tempo.type.ts:164](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L164) + +pivot year for two-digit years + +*** + +### plugins + +> **plugins**: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] + +Defined in: [tempo.type.ts:177](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L177) + +plugins to be automatically extended + +*** + +### rtfFormat? + +> `optional` **rtfFormat?**: `RelativeTimeFormat` + +Defined in: [tempo.type.ts:166](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L166) + +Pre-configured relative time formatter + +*** + +### rtfStyle? + +> `optional` **rtfStyle?**: `RelativeTimeFormatStyle` + +Defined in: [tempo.type.ts:167](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L167) + +Default style for relative time ('long' | 'short' | 'narrow') + +*** + +### silent + +> **silent**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:160](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L160) + +suppress console output during catch + +*** + +### snippet + +> **snippet**: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> + +Defined in: [tempo.type.ts:172](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L172) + +date-time snippets to help compose a Layout + +*** + +### sphere + +> **sphere**: `"north"` \| `"south"` \| `"east"` \| `"west"` \| `undefined` + +Defined in: [tempo.type.ts:165](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L165) + +hemisphere for term.qtr or term.szn + +*** + +### store + +> **store**: `string` + +Defined in: [tempo.type.ts:156](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L156) + +localStorage key + +*** + +### timeStamp? + +> `optional` **timeStamp?**: [`TimeStamp`](../type-aliases/TimeStamp.md) + +Defined in: [tempo.type.ts:168](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L168) + +Precision to measure timestamps (ms | us) + +*** + +### timeZone + +> **timeZone**: `TimeZoneLike` + +Defined in: [tempo.type.ts:161](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L161) + +Temporal timeZone + +*** + +### value + +> **value**: [`DateTime`](../../../../type-aliases/DateTime.md) + +Defined in: [tempo.type.ts:178](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L178) + +supplied value to parse diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Config.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Config.md new file mode 100644 index 00000000..6ecf9b3d --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Config.md @@ -0,0 +1,233 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.type.ts:230](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L230) + +Instance configuration derived from supply, storage, and discovery. + +## Extends + +- `Required`\<`Omit`\<[`OptionsKeep`](../type-aliases/OptionsKeep.md), `"formats"`\>\> + +## Indexable + +> \[`key`: `string`\]: `any` + +index-signature + +## Properties + +### calendar + +> **calendar**: `CalendarLike` + +Defined in: [tempo.type.ts:162](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L162) + +Temporal calendar + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`calendar`](../../Tempo/interfaces/BaseOptions.md#calendar) + +*** + +### catch + +> **catch**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:159](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L159) + +catch or throw Errors + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`catch`](../../Tempo/interfaces/BaseOptions.md#catch) + +*** + +### debug + +> **debug**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:158](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L158) + +additional console.log for tracking + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`debug`](../../Tempo/interfaces/BaseOptions.md#debug) + +*** + +### discovery + +> **discovery**: `string` \| `symbol` + +Defined in: [tempo.type.ts:157](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L157) + +globalThis Discovery Symbol + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`discovery`](../../Tempo/interfaces/BaseOptions.md#discovery) + +*** + +### formats + +> **formats**: `EnumifyType` + +Defined in: [tempo.type.ts:232](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L232) + +pre-configured format strings + +*** + +### locale + +> **locale**: `string` + +Defined in: [tempo.type.ts:163](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L163) + +locale (e.g. en-AU) + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`locale`](../../Tempo/interfaces/BaseOptions.md#locale) + +*** + +### mode + +> **mode**: `"auto"` \| `"strict"` \| `"defer"` + +Defined in: [tempo.type.ts:169](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L169) + +initialization strategy ('auto'|'strict'|'defer') + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`mode`](../../Tempo/interfaces/BaseOptions.md#mode) + +*** + +### plugins + +> **plugins**: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] + +Defined in: [tempo.type.ts:177](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L177) + +plugins to be automatically extended + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`plugins`](../../Tempo/interfaces/BaseOptions.md#plugins) + +*** + +### rtfFormat + +> **rtfFormat**: `RelativeTimeFormat` + +Defined in: [tempo.type.ts:166](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L166) + +Pre-configured relative time formatter + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`rtfFormat`](../../Tempo/interfaces/BaseOptions.md#rtfformat) + +*** + +### rtfStyle + +> **rtfStyle**: `RelativeTimeFormatStyle` + +Defined in: [tempo.type.ts:167](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L167) + +Default style for relative time ('long' | 'short' | 'narrow') + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`rtfStyle`](../../Tempo/interfaces/BaseOptions.md#rtfstyle) + +*** + +### scope + +> **scope**: `"global"` \| `"local"` + +Defined in: [tempo.type.ts:231](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L231) + +configuration (global | local) + +*** + +### silent + +> **silent**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:160](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L160) + +suppress console output during catch + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`silent`](../../Tempo/interfaces/BaseOptions.md#silent) + +*** + +### sphere + +> **sphere**: `"north"` \| `"south"` \| `"east"` \| `"west"` \| `undefined` + +Defined in: [tempo.type.ts:165](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L165) + +hemisphere for term.qtr or term.szn + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`sphere`](../../Tempo/interfaces/BaseOptions.md#sphere) + +*** + +### store + +> **store**: `string` + +Defined in: [tempo.type.ts:156](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L156) + +localStorage key + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`store`](../../Tempo/interfaces/BaseOptions.md#store) + +*** + +### timeStamp + +> **timeStamp**: [`TimeStamp`](../type-aliases/TimeStamp.md) + +Defined in: [tempo.type.ts:168](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L168) + +Precision to measure timestamps (ms | us) + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`timeStamp`](../../Tempo/interfaces/BaseOptions.md#timestamp) + +*** + +### timeZone + +> **timeZone**: `TimeZoneLike` + +Defined in: [tempo.type.ts:161](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L161) + +Temporal timeZone + +#### Inherited from + +[`BaseOptions`](../../Tempo/interfaces/BaseOptions.md).[`timeZone`](../../Tempo/interfaces/BaseOptions.md#timezone) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Discovery.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Discovery.md new file mode 100644 index 00000000..2c1dcc0c --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Discovery.md @@ -0,0 +1,233 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.type.ts:237](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L237) + +structured configuration for Global Discovery via Symbol.for('$Tempo') + +## Properties + +### formats? + +> `optional` **formats?**: `Property`\<`any`\> + +Defined in: [tempo.type.ts:241](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L241) + +custom format strings to merge in the FORMAT dictionary + +*** + +### numbers? + +> `optional` **numbers?**: `Record`\<`string`, `number`\> + +Defined in: [tempo.type.ts:240](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L240) + +aliases to merge in the Number-Word dictionary + +*** + +### options? + +> `optional` **options?**: \{\[`key`: `string`\]: `any`; `calendar?`: `CalendarLike`; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\>; `formats?`: `Property`\<`any`\>; `layout?`: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../../../../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>; `pivot?`: `number`; `plugins?`: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: `RelativeTimeFormatStyle`; `silent?`: `boolean`; `snippet?`: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../type-aliases/TimeStamp.md); `timeZone?`: `TimeZoneLike`; `value?`: [`DateTime`](../../../../type-aliases/DateTime.md); \} \| (() => `object`) + +Defined in: [tempo.type.ts:238](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L238) + +pre-defined config options for Tempo.#global + +#### Union Members + +##### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: `CalendarLike`; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\>; `formats?`: `Property`\<`any`\>; `layout?`: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../../../../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>; `pivot?`: `number`; `plugins?`: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: `RelativeTimeFormatStyle`; `silent?`: `boolean`; `snippet?`: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../type-aliases/TimeStamp.md); `timeZone?`: `TimeZoneLike`; `value?`: [`DateTime`](../../../../type-aliases/DateTime.md); \} + +##### Index Signature + +\[`key`: `string`\]: `any` + +##### calendar? + +> `optional` **calendar?**: `CalendarLike` + +Temporal calendar + +##### catch? + +> `optional` **catch?**: `boolean` + +catch or throw Errors + +##### debug? + +> `optional` **debug?**: `boolean` + +additional console.log for tracking + +##### discovery? + +> `optional` **discovery?**: `string` \| `symbol` + +globalThis Discovery Symbol + +##### event? + +> `optional` **event?**: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> + +custom date aliases (events). + +##### formats? + +> `optional` **formats?**: `Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +##### layout? + +> `optional` **layout?**: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +##### locale? + +> `optional` **locale?**: `string` + +locale (e.g. en-AU) + +##### mdyLayouts? + +> `optional` **mdyLayouts?**: [`Pair`](../../../../type-aliases/Pair.md)[] + +swap parse-order of layouts + +##### mdyLocales? + +> `optional` **mdyLocales?**: `string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +##### mode? + +> `optional` **mode?**: `"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +##### period? + +> `optional` **period?**: [`PatternOption`](../type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +##### pivot? + +> `optional` **pivot?**: `number` + +pivot year for two-digit years + +##### plugins? + +> `optional` **plugins?**: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] + +plugins to be automatically extended + +##### rtfFormat? + +> `optional` **rtfFormat?**: `RelativeTimeFormat` + +Pre-configured relative time formatter + +##### rtfStyle? + +> `optional` **rtfStyle?**: `RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +##### silent? + +> `optional` **silent?**: `boolean` + +suppress console output during catch + +##### snippet? + +> `optional` **snippet?**: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +##### sphere? + +> `optional` **sphere?**: `"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +##### store? + +> `optional` **store?**: `string` + +localStorage key + +##### timeStamp? + +> `optional` **timeStamp?**: [`TimeStamp`](../type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +##### timeZone? + +> `optional` **timeZone?**: `TimeZoneLike` + +Temporal timeZone + +##### value? + +> `optional` **value?**: [`DateTime`](../../../../type-aliases/DateTime.md) + +supplied value to parse + +*** + +##### Function + +() => `object` + +*** + +### plugins? + +> `optional` **plugins?**: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] + +Defined in: [tempo.type.ts:243](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L243) + +plugins to be automatically extended via Tempo.extend() + +*** + +### term? + +> `optional` **term?**: [`TermPlugin`](../../../../interfaces/TermPlugin.md) \| [`TermPlugin`](../../../../interfaces/TermPlugin.md)[] + +Defined in: [tempo.type.ts:242](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L242) + +term plugins to be registered via Tempo.addTerm() + +*** + +### ~~terms?~~ + +> `optional` **terms?**: [`TermPlugin`](../../../../interfaces/TermPlugin.md) \| [`TermPlugin`](../../../../interfaces/TermPlugin.md)[] + +Defined in: [tempo.type.ts:244](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L244) + +#### Deprecated + +use term instead + +*** + +### timeZones? + +> `optional` **timeZones?**: `Record`\<`string`, `string`\> + +Defined in: [tempo.type.ts:239](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L239) + +aliases to merge in the TimeZone dictionary diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Parse.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Parse.md new file mode 100644 index 00000000..30583dea --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/Parse.md @@ -0,0 +1,145 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.type.ts:198](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L198) + +Debugging results of a parse operation. See `doc/tempo.api.md`. + +## Properties + +### event + +> **event**: `Extend` + +Defined in: [tempo.type.ts:206](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L206) + +configured Events + +*** + +### isAnchored? + +> `optional` **isAnchored?**: `boolean` + +Defined in: [tempo.type.ts:210](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L210) + +was this a nested/anchored parse? + +*** + +### isMonthDay? + +> `optional` **isMonthDay?**: `boolean` + +Defined in: [tempo.type.ts:201](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L201) + +is a timeZone that prefers 'mmddyyyy' date order + +*** + +### layout + +> **layout**: `Extend` + +Defined in: [tempo.type.ts:204](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L204) + +Tempo layout strings + +*** + +### mdyLayouts + +> **mdyLayouts**: [`Pair`](../../../../type-aliases/Pair.md)[] + +Defined in: [tempo.type.ts:200](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L200) + +Layout names that are switched to mdy + +*** + +### mdyLocales + +> **mdyLocales**: `object`[] + +Defined in: [tempo.type.ts:199](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L199) + +Locales which prefer 'mm-dd-yyyy' date-order + +#### locale + +> **locale**: `string` + +#### timeZones + +> **timeZones**: `string`[] + +*** + +### mode + +> **mode**: `"auto"` \| `"strict"` \| `"defer"` + +Defined in: [tempo.type.ts:211](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L211) + +initialization strategy ('auto'|'strict'|'defer') + +*** + +### pattern + +> **pattern**: [`Registry`](../type-aliases/Registry.md) + +Defined in: [tempo.type.ts:205](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L205) + +Map of regex-patterns to match input-string + +*** + +### period + +> **period**: `Extend` + +Defined in: [tempo.type.ts:207](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L207) + +configured Periods + +*** + +### pivot + +> **pivot**: `number` + +Defined in: [tempo.type.ts:208](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L208) + +pivot year for two-digit years + +*** + +### result + +> **result**: [`Match`](../type-aliases/Match.md)[] + +Defined in: [tempo.type.ts:209](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L209) + +parsing match result + +*** + +### snippet + +> **snippet**: `Extend` + +Defined in: [tempo.type.ts:203](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L203) + +Tempo snippets to aid in parsing + +*** + +### token + +> **token**: `Extend` + +Defined in: [tempo.type.ts:202](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L202) + +Symbol registry diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/PluginContainer.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/PluginContainer.md new file mode 100644 index 00000000..9ced2017 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/PluginContainer.md @@ -0,0 +1,57 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.type.ts:187](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L187) + +internal metadata for a plugin to track installation + +## Extends + +- [`Plugin`](../../../../interfaces/Plugin.md) + +## Properties + +### install + +> **install**: (`this`, `t`) => `void` + +Defined in: [plugin/plugin.type.ts:29](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L29) + +#### Parameters + +##### this + +[`Tempo`](../../../../classes/Tempo.md) + +##### t + +*typeof* [`Tempo`](../../Tempo/README.md) + +#### Returns + +`void` + +#### Inherited from + +[`Plugin`](../../../../interfaces/Plugin.md).[`install`](../../../../interfaces/Plugin.md#install) + +*** + +### installed? + +> `optional` **installed?**: `boolean` + +Defined in: [tempo.type.ts:188](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L188) + +*** + +### name + +> **name**: `string` + +Defined in: [plugin/plugin.type.ts:28](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L28) + +#### Inherited from + +[`Plugin`](../../../../interfaces/Plugin.md).[`name`](../../../../interfaces/Plugin.md#name) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/State.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/State.md new file mode 100644 index 00000000..2973244f --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/interfaces/State.md @@ -0,0 +1,27 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.type.ts:192](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L192) + +the encapsulated state of a Tempo instance + +## Properties + +### config + +> **config**: [`Config`](Config.md) + +Defined in: [tempo.type.ts:193](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L193) + +current defaults for all Tempo instances + +*** + +### parse + +> **parse**: [`Parse`](Parse.md) + +Defined in: [tempo.type.ts:194](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L194) + +parsing rules diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Match.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Match.md new file mode 100644 index 00000000..fcb2a3a4 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Match.md @@ -0,0 +1,27 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Match** = `object` & `TypeValue`\<`any`\> \| [`MatchExtend`](MatchExtend.md) + +Defined in: [tempo.type.ts:220](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L220) + +## Type Declaration + +### groups? + +> `optional` **groups?**: [`Groups`](../../../../type-aliases/Groups.md) + +groups from the pattern match + +### isAnchored? + +> `optional` **isAnchored?**: `boolean` + +was this a nested/anchored parse? + +### match? + +> `optional` **match?**: `string` + +pattern which matched the input diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/MatchExtend.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/MatchExtend.md new file mode 100644 index 00000000..89cbeaae --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/MatchExtend.md @@ -0,0 +1,25 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **MatchExtend** = `object` + +Defined in: [tempo.type.ts:219](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L219) + +debug a Tempo instantiation + +## Properties + +### type + +> **type**: `"Event"` \| `"Period"` + +Defined in: [tempo.type.ts:219](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L219) + +*** + +### value + +> **value**: `string` \| `number` \| `Function` + +Defined in: [tempo.type.ts:219](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L219) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/OptionsKeep.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/OptionsKeep.md new file mode 100644 index 00000000..aa6764d8 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/OptionsKeep.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **OptionsKeep** = `Omit`\<[`BaseOptions`](../interfaces/BaseOptions.md), `"mdyLocales"` \| `"mdyLayouts"` \| `"pivot"` \| `"snippet"` \| `"layout"` \| `"event"` \| `"period"` \| `"value"`\> + +Defined in: [tempo.type.ts:227](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L227) + +drop the parse-only Options diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md new file mode 100644 index 00000000..8514e45b --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md @@ -0,0 +1,13 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **PatternOption**\<`T`\> = `T` \| `Record`\<`string` \| `symbol`, `T`\> \| [`PatternOptionArray`](PatternOptionArray.md)\<`T`\> + +Defined in: [tempo.type.ts:152](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L152) + +## Type Parameters + +### T + +`T` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOptionArray.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOptionArray.md new file mode 100644 index 00000000..19e5b7d1 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/PatternOptionArray.md @@ -0,0 +1,13 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **PatternOptionArray**\<`T`\> = [`PatternOption`](PatternOption.md)\<`T`\>[] + +Defined in: [tempo.type.ts:151](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L151) + +## Type Parameters + +### T + +`T` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Registry.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Registry.md new file mode 100644 index 00000000..74d7de95 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/Registry.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Registry** = `Map`\<`symbol`, `RegExp`\> + +Defined in: [tempo.type.ts:150](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L150) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md new file mode 100644 index 00000000..46b43dec --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **TimeStamp** = `"ss"` \| `"ms"` \| `"us"` \| `"ns"` + +Defined in: [tempo.type.ts:184](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L184) + +high-precision precision to measure timestamps (ms | us) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/README.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/README.md new file mode 100644 index 00000000..1a55515f --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/README.md @@ -0,0 +1,209 @@ +[**@magmacomputing/tempo**](../../../README.md) + +*** + +## Interfaces + +- [BaseOptions](interfaces/BaseOptions.md) +- [Params](interfaces/Params.md) + +## Type Aliases + +- [Add](type-aliases/Add.md) +- [COMPASS](type-aliases/COMPASS.md) +- [DateTime](type-aliases/DateTime.md) +- [Duration](type-aliases/Duration.md) +- [DURATION](type-aliases/DURATION-1.md) +- [DURATIONS](type-aliases/DURATIONS.md) +- [Element](type-aliases/Element.md) +- [ELEMENT](type-aliases/ELEMENT-1.md) +- [Extension](type-aliases/Extension.md) +- [Format](type-aliases/Format.md) +- [FormatRegistry](type-aliases/FormatRegistry.md) +- [Formats](type-aliases/Formats.md) +- [FormatType](type-aliases/FormatType.md) +- [Groups](type-aliases/Groups.md) +- [hh](type-aliases/hh.md) +- [Logic](type-aliases/Logic.md) +- [mi](type-aliases/mi.md) +- [mm](type-aliases/mm.md) +- [Modifier](type-aliases/Modifier.md) +- [Module](type-aliases/Module.md) +- [Month](type-aliases/Month.md) +- [MONTH](type-aliases/MONTH-1.md) +- [MONTHS](type-aliases/MONTHS.md) +- [ms](type-aliases/ms.md) +- [Mutate](type-aliases/Mutate.md) +- [ns](type-aliases/ns.md) +- [Options](type-aliases/Options.md) +- [OwnFormat](type-aliases/OwnFormat.md) +- [Pair](type-aliases/Pair.md) +- [Pattern](type-aliases/Pattern.md) +- [PatternOption](type-aliases/PatternOption.md) +- [PatternOptionArray](type-aliases/PatternOptionArray.md) +- [Plugin](type-aliases/Plugin.md) +- [Relative](type-aliases/Relative.md) +- [SEASON](type-aliases/SEASON.md) +- [Set](type-aliases/Set.md) +- [ss](type-aliases/ss.md) +- [TermPlugin](type-aliases/TermPlugin.md) +- [Terms](type-aliases/Terms.md) +- [Unit](type-aliases/Unit.md) +- [Until](type-aliases/Until.md) +- [us](type-aliases/us.md) +- [Weekday](type-aliases/Weekday.md) +- [WEEKDAY](type-aliases/WEEKDAY-1.md) +- [WEEKDAYS](type-aliases/WEEKDAYS.md) +- [ww](type-aliases/ww.md) + +## Variables + +- [tickers](variables/tickers.md) + +## Functions + +- [ticker](functions/ticker.md) + +## Accessors + +### COMPASS + +#### Get Signature + +> **get** **COMPASS**(): `EnumifyType`\<\{ `East`: `"east"`; `North`: `"north"`; `South`: `"south"`; `West`: `"west"`; \}\> + +Defined in: [tempo.class.ts:80](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L80) + +Compass cardinal points + +##### Returns + +`EnumifyType`\<\{ `East`: `"east"`; `North`: `"north"`; `South`: `"south"`; `West`: `"west"`; \}\> + +*** + +### DURATION + +#### Get Signature + +> **get** **DURATION**(): `EnumifyType`\<\{ `day`: `86400`; `hour`: `3600`; `microsecond`: `0.000001`; `millisecond`: `0.001`; `minute`: `60`; `month`: `2628000`; `nanosecond`: `1e-9`; `second`: `1`; `week`: `604800`; `year`: `31536000`; \}\> + +Defined in: [tempo.class.ts:76](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L76) + +Time durations as seconds (singular) + +##### Returns + +`EnumifyType`\<\{ `day`: `86400`; `hour`: `3600`; `microsecond`: `0.000001`; `millisecond`: `0.001`; `minute`: `60`; `month`: `2628000`; `nanosecond`: `1e-9`; `second`: `1`; `week`: `604800`; `year`: `31536000`; \}\> + +*** + +### DURATIONS + +#### Get Signature + +> **get** **DURATIONS**(): `EnumifyType`\<\{ `days`: `86400000`; `hours`: `3600000`; `microseconds`: `0.001`; `milliseconds`: `1`; `minutes`: `60000`; `months`: `2628000000`; `nanoseconds`: `0.000001`; `seconds`: `1000`; `weeks`: `604800000`; `years`: `31536000000`; \}\> + +Defined in: [tempo.class.ts:77](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L77) + +Time durations as milliseconds (plural) + +##### Returns + +`EnumifyType`\<\{ `days`: `86400000`; `hours`: `3600000`; `microseconds`: `0.001`; `milliseconds`: `1`; `minutes`: `60000`; `months`: `2628000000`; `nanoseconds`: `0.000001`; `seconds`: `1000`; `weeks`: `604800000`; `years`: `31536000000`; \}\> + +*** + +### ELEMENT + +#### Get Signature + +> **get** **ELEMENT**(): `EnumifyType`\<\{ `dd`: `"day"`; `hh`: `"hour"`; `mi`: `"minute"`; `mm`: `"month"`; `ms`: `"millisecond"`; `ns`: `"nanosecond"`; `ss`: `"second"`; `us`: `"microsecond"`; `ww`: `"week"`; `yy`: `"year"`; \}\> + +Defined in: [tempo.class.ts:82](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L82) + +Tempo to Temporal DateTime Units map + +##### Returns + +`EnumifyType`\<\{ `dd`: `"day"`; `hh`: `"hour"`; `mi`: `"minute"`; `mm`: `"month"`; `ms`: `"millisecond"`; `ns`: `"nanosecond"`; `ss`: `"second"`; `us`: `"microsecond"`; `ww`: `"week"`; `yy`: `"year"`; \}\> + +*** + +### MONTH + +#### Get Signature + +> **get** **MONTH**(): `EnumifyType`\<`Index`\\> + +Defined in: [tempo.class.ts:74](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L74) + +Month names (short-form) + +##### Returns + +`EnumifyType`\<`Index`\\> + +*** + +### MONTHS + +#### Get Signature + +> **get** **MONTHS**(): `EnumifyType`\<`Index`\\> + +Defined in: [tempo.class.ts:75](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L75) + +Month names (long-form) + +##### Returns + +`EnumifyType`\<`Index`\\> + +*** + +### SEASON + +#### Get Signature + +> **get** **SEASON**(): `EnumifyType`\<\{ `Autumn`: `"autumn"`; `Spring`: `"spring"`; `Summer`: `"summer"`; `Winter`: `"winter"`; \}\> + +Defined in: [tempo.class.ts:79](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L79) + +Quarterly Seasons + +##### Returns + +`EnumifyType`\<\{ `Autumn`: `"autumn"`; `Spring`: `"spring"`; `Summer`: `"summer"`; `Winter`: `"winter"`; \}\> + +*** + +### WEEKDAY + +#### Get Signature + +> **get** **WEEKDAY**(): `EnumifyType`\<`Index`\\> + +Defined in: [tempo.class.ts:72](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L72) + +Weekday names (short-form) + +##### Returns + +`EnumifyType`\<`Index`\\> + +*** + +### WEEKDAYS + +#### Get Signature + +> **get** **WEEKDAYS**(): `EnumifyType`\<`Index`\\> + +Defined in: [tempo.class.ts:73](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L73) + +Weekday names (long-form) + +##### Returns + +`EnumifyType`\<`Index`\\> diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/functions/ticker.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/functions/ticker.md new file mode 100644 index 00000000..9091bcfb --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/functions/ticker.md @@ -0,0 +1,111 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +## Call Signature + +> **ticker**(`interval?`): `Instance` + +Defined in: [plugin/extend/extend.ticker.ts:16](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L16) + +### Parameters + +#### interval? + +`Interval` + +### Returns + +`Instance` + +## Call Signature + +> **ticker**(`options`): `Instance` + +Defined in: [plugin/extend/extend.ticker.ts:17](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L17) + +### Parameters + +#### options + +`Options` + +### Returns + +`Instance` + +## Call Signature + +> **ticker**(`callback`): `Instance` + +Defined in: [plugin/extend/extend.ticker.ts:18](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L18) + +### Parameters + +#### callback + +`Callback` + +### Returns + +`Instance` + +## Call Signature + +> **ticker**(`interval`, `callback`): `Instance` + +Defined in: [plugin/extend/extend.ticker.ts:19](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L19) + +### Parameters + +#### interval + +`Interval` + +#### callback + +`Callback` + +### Returns + +`Instance` + +## Call Signature + +> **ticker**(`options`, `callback`): `Instance` + +Defined in: [plugin/extend/extend.ticker.ts:20](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L20) + +### Parameters + +#### options + +`Options` + +#### callback + +`Callback` + +### Returns + +`Instance` + +## Call Signature + +> **ticker**(`options`, `extraOptions`): `Instance` + +Defined in: [plugin/extend/extend.ticker.ts:21](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L21) + +### Parameters + +#### options + +`Options` + +#### extraOptions + +`Options` + +### Returns + +`Instance` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/BaseOptions.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/BaseOptions.md new file mode 100644 index 00000000..c89bab50 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/BaseOptions.md @@ -0,0 +1,333 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.class.ts:1836](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1836) + +the Options object found in a config-module, or passed to a call to Tempo.init({}) or 'new Tempo({})' + +## Extends + +- [`BaseOptions`](../../Internal/interfaces/BaseOptions.md) + +## Properties + +### calendar + +> **calendar**: `CalendarLike` + +Defined in: [tempo.type.ts:162](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L162) + +Temporal calendar + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`calendar`](../../Internal/interfaces/BaseOptions.md#calendar) + +*** + +### catch + +> **catch**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:159](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L159) + +catch or throw Errors + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`catch`](../../Internal/interfaces/BaseOptions.md#catch) + +*** + +### debug + +> **debug**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:158](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L158) + +additional console.log for tracking + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`debug`](../../Internal/interfaces/BaseOptions.md#debug) + +*** + +### discovery + +> **discovery**: `string` \| `symbol` + +Defined in: [tempo.type.ts:157](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L157) + +globalThis Discovery Symbol + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`discovery`](../../Internal/interfaces/BaseOptions.md#discovery) + +*** + +### event + +> **event**: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> + +Defined in: [tempo.type.ts:174](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L174) + +custom date aliases (events). + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`event`](../../Internal/interfaces/BaseOptions.md#event) + +*** + +### formats + +> **formats**: `Property`\<`any`\> + +Defined in: [tempo.type.ts:176](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L176) + +custom format strings to merge in the FORMAT enum + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`formats`](../../Internal/interfaces/BaseOptions.md#formats) + +*** + +### layout + +> **layout**: [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +Defined in: [tempo.type.ts:173](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L173) + +patterns to help parse value + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`layout`](../../Internal/interfaces/BaseOptions.md#layout) + +*** + +### locale + +> **locale**: `string` + +Defined in: [tempo.type.ts:163](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L163) + +locale (e.g. en-AU) + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`locale`](../../Internal/interfaces/BaseOptions.md#locale) + +*** + +### mdyLayouts + +> **mdyLayouts**: [`Pair`](../../../../type-aliases/Pair.md)[] + +Defined in: [tempo.type.ts:171](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L171) + +swap parse-order of layouts + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`mdyLayouts`](../../Internal/interfaces/BaseOptions.md#mdylayouts) + +*** + +### mdyLocales + +> **mdyLocales**: `string` \| `string`[] + +Defined in: [tempo.type.ts:170](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L170) + +locale-names that prefer 'mm-dd-yy' date order + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`mdyLocales`](../../Internal/interfaces/BaseOptions.md#mdylocales) + +*** + +### mode? + +> `optional` **mode?**: `"auto"` \| `"strict"` \| `"defer"` + +Defined in: [tempo.type.ts:169](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L169) + +initialization strategy ('auto'|'strict'|'defer') + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`mode`](../../Internal/interfaces/BaseOptions.md#mode) + +*** + +### period + +> **period**: [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +Defined in: [tempo.type.ts:175](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L175) + +custom time aliases (periods). + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`period`](../../Internal/interfaces/BaseOptions.md#period) + +*** + +### pivot + +> **pivot**: `number` + +Defined in: [tempo.type.ts:164](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L164) + +pivot year for two-digit years + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`pivot`](../../Internal/interfaces/BaseOptions.md#pivot) + +*** + +### plugins + +> **plugins**: [`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] + +Defined in: [tempo.type.ts:177](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L177) + +plugins to be automatically extended + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`plugins`](../../Internal/interfaces/BaseOptions.md#plugins) + +*** + +### rtfFormat? + +> `optional` **rtfFormat?**: `RelativeTimeFormat` + +Defined in: [tempo.type.ts:166](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L166) + +Pre-configured relative time formatter + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`rtfFormat`](../../Internal/interfaces/BaseOptions.md#rtfformat) + +*** + +### rtfStyle? + +> `optional` **rtfStyle?**: `RelativeTimeFormatStyle` + +Defined in: [tempo.type.ts:167](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L167) + +Default style for relative time ('long' | 'short' | 'narrow') + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`rtfStyle`](../../Internal/interfaces/BaseOptions.md#rtfstyle) + +*** + +### silent + +> **silent**: `boolean` \| `undefined` + +Defined in: [tempo.type.ts:160](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L160) + +suppress console output during catch + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`silent`](../../Internal/interfaces/BaseOptions.md#silent) + +*** + +### snippet + +> **snippet**: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> + +Defined in: [tempo.type.ts:172](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L172) + +date-time snippets to help compose a Layout + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`snippet`](../../Internal/interfaces/BaseOptions.md#snippet) + +*** + +### sphere + +> **sphere**: `"north"` \| `"south"` \| `"east"` \| `"west"` \| `undefined` + +Defined in: [tempo.type.ts:165](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L165) + +hemisphere for term.qtr or term.szn + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`sphere`](../../Internal/interfaces/BaseOptions.md#sphere) + +*** + +### store + +> **store**: `string` + +Defined in: [tempo.type.ts:156](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L156) + +localStorage key + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`store`](../../Internal/interfaces/BaseOptions.md#store) + +*** + +### timeStamp? + +> `optional` **timeStamp?**: [`TimeStamp`](../../Internal/type-aliases/TimeStamp.md) + +Defined in: [tempo.type.ts:168](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L168) + +Precision to measure timestamps (ms | us) + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`timeStamp`](../../Internal/interfaces/BaseOptions.md#timestamp) + +*** + +### timeZone + +> **timeZone**: `TimeZoneLike` + +Defined in: [tempo.type.ts:161](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L161) + +Temporal timeZone + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`timeZone`](../../Internal/interfaces/BaseOptions.md#timezone) + +*** + +### value + +> **value**: [`DateTime`](../../../../type-aliases/DateTime.md) + +Defined in: [tempo.type.ts:178](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L178) + +supplied value to parse + +#### Inherited from + +[`BaseOptions`](../../Internal/interfaces/BaseOptions.md).[`value`](../../Internal/interfaces/BaseOptions.md#value) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/Params.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/Params.md new file mode 100644 index 00000000..7d6ec789 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/interfaces/Params.md @@ -0,0 +1,329 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +Defined in: [tempo.class.ts:1887](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1887) + +Type for consistency in expected arguments for helper functions + +## Extends + +- [`Params`](../../../../interfaces/Params.md)\<`T`\> + +## Type Parameters + +### T + +`T` + +## Call Signature + +> **Params**(`tempo?`, `options?`): `T` + +Defined in: [tempo.class.ts:1887](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1887) + +Type for consistency in expected arguments for helper functions + +### Parameters + +#### tempo? + +[`DateTime`](../../../../type-aliases/DateTime.md) + +#### options? + +##### calendar? + +`CalendarLike` + +Temporal calendar + +##### catch? + +`boolean` + +catch or throw Errors + +##### debug? + +`boolean` + +additional console.log for tracking + +##### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +##### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> + +custom date aliases (events). + +##### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +##### layout? + +[`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +##### locale? + +`string` + +locale (e.g. en-AU) + +##### mdyLayouts? + +[`Pair`](../../../../type-aliases/Pair.md)[] + +swap parse-order of layouts + +##### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +##### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +##### period? + +[`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +##### pivot? + +`number` + +pivot year for two-digit years + +##### plugins? + +[`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] + +plugins to be automatically extended + +##### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +##### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +##### silent? + +`boolean` + +suppress console output during catch + +##### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +##### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +##### store? + +`string` + +localStorage key + +##### timeStamp? + +[`TimeStamp`](../../Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +##### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +##### value? + +[`DateTime`](../../../../type-aliases/DateTime.md) + +supplied value to parse + +### Returns + +`T` + +## Call Signature + +> **Params**(`options`): `T` + +Defined in: [tempo.class.ts:1887](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1887) + +Type for consistency in expected arguments for helper functions + +### Parameters + +#### options + +##### calendar? + +`CalendarLike` + +Temporal calendar + +##### catch? + +`boolean` + +catch or throw Errors + +##### debug? + +`boolean` + +additional console.log for tracking + +##### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +##### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../../../../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> + +custom date aliases (events). + +##### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +##### layout? + +[`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +##### locale? + +`string` + +locale (e.g. en-AU) + +##### mdyLayouts? + +[`Pair`](../../../../type-aliases/Pair.md)[] + +swap parse-order of layouts + +##### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +##### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +##### period? + +[`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Logic`](../../../../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +##### pivot? + +`number` + +pivot year for two-digit years + +##### plugins? + +[`Plugin`](../../../../interfaces/Plugin.md) \| [`Plugin`](../../../../interfaces/Plugin.md)[] + +plugins to be automatically extended + +##### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +##### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +##### silent? + +`boolean` + +suppress console output during catch + +##### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<[`Pattern`](../../../../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +##### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +##### store? + +`string` + +localStorage key + +##### timeStamp? + +[`TimeStamp`](../../Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +##### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +##### value? + +[`DateTime`](../../../../type-aliases/DateTime.md) + +supplied value to parse + +### Returns + +`T` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Add.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Add.md new file mode 100644 index 00000000..2b45e943 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Add.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Add** = [`Add`](../../../../type-aliases/Add.md) + +Defined in: [tempo.class.ts:1849](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1849) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/COMPASS.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/COMPASS.md new file mode 100644 index 00000000..03acc8b0 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/COMPASS.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **COMPASS** = `t.COMPASS` + +Defined in: [tempo.class.ts:80](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L80) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATION-1.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATION-1.md new file mode 100644 index 00000000..590faa82 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATION-1.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **DURATION** = `t.DURATION` + +Defined in: [tempo.class.ts:76](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L76) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATIONS.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATIONS.md new file mode 100644 index 00000000..da1c5a0d --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DURATIONS.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **DURATIONS** = `t.DURATIONS` + +Defined in: [tempo.class.ts:77](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L77) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DateTime.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DateTime.md new file mode 100644 index 00000000..833443c2 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/DateTime.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **DateTime** = [`DateTime`](../../../../type-aliases/DateTime.md) + +Defined in: [tempo.class.ts:1827](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1827) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Duration.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Duration.md new file mode 100644 index 00000000..ee353130 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Duration.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Duration** = [`Duration`](../../../../type-aliases/Duration.md) + +Defined in: [tempo.class.ts:1871](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1871) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ELEMENT-1.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ELEMENT-1.md new file mode 100644 index 00000000..5a407693 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ELEMENT-1.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **ELEMENT** = `t.ELEMENT` + +Defined in: [tempo.class.ts:82](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L82) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Element.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Element.md new file mode 100644 index 00000000..252804f3 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Element.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Element** = [`Element`](../../../../type-aliases/Element.md) + +Defined in: [tempo.class.ts:1885](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1885) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Extension.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Extension.md new file mode 100644 index 00000000..d2bf9caa --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Extension.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Extension** = [`Extension`](../../../../interfaces/Extension.md) + +Defined in: [tempo.class.ts:1842](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1842) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Format.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Format.md new file mode 100644 index 00000000..cc4bae98 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Format.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Format** = [`Format`](../../../../type-aliases/Format.md) + +Defined in: [tempo.class.ts:1853](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1853) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatRegistry.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatRegistry.md new file mode 100644 index 00000000..dc9f1e0c --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatRegistry.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **FormatRegistry** = [`FormatRegistry`](../../../../type-aliases/FormatRegistry.md) + +Defined in: [tempo.class.ts:1854](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1854) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatType.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatType.md new file mode 100644 index 00000000..1f5d0f77 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/FormatType.md @@ -0,0 +1,13 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **FormatType**\<`K`\> = [`FormatType`](../../../../type-aliases/FormatType.md)\<`K`\> + +Defined in: [tempo.class.ts:1855](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1855) + +## Type Parameters + +### K + +`K` *extends* `PropertyKey` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Formats.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Formats.md new file mode 100644 index 00000000..cdd40c6d --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Formats.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Formats** = [`Formats`](../../../../type-aliases/Formats.md) + +Defined in: [tempo.class.ts:1852](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1852) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Groups.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Groups.md new file mode 100644 index 00000000..d6be9e53 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Groups.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Groups** = [`Groups`](../../../../type-aliases/Groups.md) + +Defined in: [tempo.class.ts:1831](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1831) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Logic.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Logic.md new file mode 100644 index 00000000..ba90c374 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Logic.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Logic** = [`Logic`](../../../../type-aliases/Logic.md) + +Defined in: [tempo.class.ts:1829](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1829) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTH-1.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTH-1.md new file mode 100644 index 00000000..400071c6 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTH-1.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **MONTH** = `t.MONTH` + +Defined in: [tempo.class.ts:74](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L74) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTHS.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTHS.md new file mode 100644 index 00000000..531b984c --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/MONTHS.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **MONTHS** = `t.MONTHS` + +Defined in: [tempo.class.ts:75](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L75) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Modifier.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Modifier.md new file mode 100644 index 00000000..93241bd8 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Modifier.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Modifier** = [`Modifier`](../../../../type-aliases/Modifier.md) + +Defined in: [tempo.class.ts:1859](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1859) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Module.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Module.md new file mode 100644 index 00000000..cd8740a2 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Module.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Module** = [`Module`](../../../../interfaces/Module.md) + +Defined in: [tempo.class.ts:1841](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1841) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Month.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Month.md new file mode 100644 index 00000000..d1ff6e17 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Month.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Month** = [`Month`](../../../../type-aliases/Month.md) + +Defined in: [tempo.class.ts:1884](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1884) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Mutate.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Mutate.md new file mode 100644 index 00000000..719ca738 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Mutate.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Mutate** = [`Mutate`](../../../../type-aliases/Mutate.md) + +Defined in: [tempo.class.ts:1847](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1847) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Options.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Options.md new file mode 100644 index 00000000..0ac79253 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Options.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Options** = [`Options`](../../../../type-aliases/Options.md) + +Defined in: [tempo.class.ts:1837](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1837) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/OwnFormat.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/OwnFormat.md new file mode 100644 index 00000000..431356cc --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/OwnFormat.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **OwnFormat** = [`OwnFormat`](../../../../type-aliases/OwnFormat.md) + +Defined in: [tempo.class.ts:1851](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1851) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pair.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pair.md new file mode 100644 index 00000000..91afb29a --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pair.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Pair** = [`Pair`](../../../../type-aliases/Pair.md) + +Defined in: [tempo.class.ts:1830](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1830) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pattern.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pattern.md new file mode 100644 index 00000000..ba7992e6 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Pattern.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Pattern** = [`Pattern`](../../../../type-aliases/Pattern.md) + +Defined in: [tempo.class.ts:1828](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1828) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOption.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOption.md new file mode 100644 index 00000000..4444fe41 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOption.md @@ -0,0 +1,13 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **PatternOption**\<`T`\> = [`PatternOption`](../../Internal/type-aliases/PatternOption.md)\<`T`\> + +Defined in: [tempo.class.ts:1834](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1834) + +## Type Parameters + +### T + +`T` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOptionArray.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOptionArray.md new file mode 100644 index 00000000..b32a8fa8 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/PatternOptionArray.md @@ -0,0 +1,13 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **PatternOptionArray**\<`T`\> = [`PatternOptionArray`](../../Internal/type-aliases/PatternOptionArray.md)\<`T`\> + +Defined in: [tempo.class.ts:1833](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1833) + +## Type Parameters + +### T + +`T` diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Plugin.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Plugin.md new file mode 100644 index 00000000..7e3fa99f --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Plugin.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Plugin** = [`Plugin`](../../../../interfaces/Plugin.md) + +Defined in: [tempo.class.ts:1840](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1840) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Relative.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Relative.md new file mode 100644 index 00000000..9fa3f6a2 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Relative.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Relative** = [`Relative`](../../../../type-aliases/Relative.md) + +Defined in: [tempo.class.ts:1860](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1860) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/SEASON.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/SEASON.md new file mode 100644 index 00000000..7d31ad1b --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/SEASON.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **SEASON** = `t.SEASON` + +Defined in: [tempo.class.ts:79](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L79) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Set.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Set.md new file mode 100644 index 00000000..0f3a9eb9 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Set.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Set** = [`Set`](../../../../type-aliases/Set.md) + +Defined in: [tempo.class.ts:1848](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1848) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/TermPlugin.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/TermPlugin.md new file mode 100644 index 00000000..19a41c82 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/TermPlugin.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **TermPlugin** = [`TermPlugin`](../../../../interfaces/TermPlugin.md) + +Defined in: [tempo.class.ts:1839](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1839) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Terms.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Terms.md new file mode 100644 index 00000000..90451a2c --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Terms.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Terms** = [`Terms`](../../../../type-aliases/Terms.md) + +Defined in: [tempo.class.ts:1857](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1857) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Unit.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Unit.md new file mode 100644 index 00000000..a28dc4e4 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Unit.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Unit** = [`Unit`](../../../../type-aliases/Unit.md) + +Defined in: [tempo.class.ts:1845](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1845) + +Configuration to use for #until() and #since() argument diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Until.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Until.md new file mode 100644 index 00000000..89b5ccdf --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Until.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Until** = [`Until`](../../../../type-aliases/Until.md) + +Defined in: [tempo.class.ts:1846](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1846) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAY-1.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAY-1.md new file mode 100644 index 00000000..192d4571 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAY-1.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **WEEKDAY** = `t.WEEKDAY` + +Defined in: [tempo.class.ts:72](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L72) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAYS.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAYS.md new file mode 100644 index 00000000..d9dd9afa --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/WEEKDAYS.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **WEEKDAYS** = `t.WEEKDAYS` + +Defined in: [tempo.class.ts:73](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L73) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Weekday.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Weekday.md new file mode 100644 index 00000000..ae79e9c3 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/Weekday.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **Weekday** = [`Weekday`](../../../../type-aliases/Weekday.md) + +Defined in: [tempo.class.ts:1883](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1883) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/hh.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/hh.md new file mode 100644 index 00000000..146f29d4 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/hh.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **hh** = [`hh`](../../../../type-aliases/hh.md) + +Defined in: [tempo.class.ts:1863](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1863) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mi.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mi.md new file mode 100644 index 00000000..e762855e --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mi.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **mi** = [`mi`](../../../../type-aliases/mi.md) + +Defined in: [tempo.class.ts:1864](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1864) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mm.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mm.md new file mode 100644 index 00000000..b728cd1e --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/mm.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **mm** = [`mm`](../../../../type-aliases/mm.md) + +Defined in: [tempo.class.ts:1862](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1862) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ms.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ms.md new file mode 100644 index 00000000..e9e71eda --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ms.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **ms** = [`ms`](../../../../type-aliases/ms.md) + +Defined in: [tempo.class.ts:1866](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1866) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ns.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ns.md new file mode 100644 index 00000000..7cef821c --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ns.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **ns** = [`ns`](../../../../type-aliases/ns.md) + +Defined in: [tempo.class.ts:1868](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1868) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ss.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ss.md new file mode 100644 index 00000000..4c98a624 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ss.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **ss** = [`ss`](../../../../type-aliases/ss.md) + +Defined in: [tempo.class.ts:1865](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1865) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/us.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/us.md new file mode 100644 index 00000000..dc75d6d0 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/us.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **us** = [`us`](../../../../type-aliases/us.md) + +Defined in: [tempo.class.ts:1867](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1867) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ww.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ww.md new file mode 100644 index 00000000..0125d3e7 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/type-aliases/ww.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> **ww** = [`ww`](../../../../type-aliases/ww.md) + +Defined in: [tempo.class.ts:1869](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1869) diff --git a/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/variables/tickers.md b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/variables/tickers.md new file mode 100644 index 00000000..ea19e6c3 --- /dev/null +++ b/packages/tempo/doc/api/@magmacomputing/namespaces/Tempo/variables/tickers.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../../../../README.md) + +*** + +> `const` **tickers**: `Ticker.Snapshot`[] + +Defined in: [plugin/extend/extend.ticker.ts:15](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/extend/extend.ticker.ts#L15) diff --git a/packages/tempo/doc/api/README.md b/packages/tempo/doc/api/README.md new file mode 100644 index 00000000..d51e9331 --- /dev/null +++ b/packages/tempo/doc/api/README.md @@ -0,0 +1,106 @@ +**@magmacomputing/tempo** + +*** + +## Namespaces + +- [Internal](@magmacomputing/namespaces/Internal/README.md) +- [Tempo](@magmacomputing/namespaces/Tempo/README.md) + +## Classes + +- [Tempo](classes/Tempo.md) + +## Interfaces + +- [Extension](interfaces/Extension.md) +- [Module](interfaces/Module.md) +- [Params](interfaces/Params.md) +- [Plugin](interfaces/Plugin.md) +- [TermPlugin](interfaces/TermPlugin.md) + +## Type Aliases + +- [Add](type-aliases/Add.md) +- [AddUnits](type-aliases/AddUnits.md) +- [BaseDuration](type-aliases/BaseDuration.md) +- [COMPASS](type-aliases/COMPASS.md) +- [DateTime](type-aliases/DateTime.md) +- [DateTimeUnit](type-aliases/DateTimeUnit.md) +- [Duration](type-aliases/Duration.md) +- [DURATION](type-aliases/DURATION-1.md) +- [DURATIONS](type-aliases/DURATIONS.md) +- [Element](type-aliases/Element.md) +- [ELEMENT](type-aliases/ELEMENT-1.md) +- [FlexibleDuration](type-aliases/FlexibleDuration.md) +- [Format](type-aliases/Format.md) +- [FORMAT](type-aliases/FORMAT-1.md) +- [FormatRegistry](type-aliases/FormatRegistry.md) +- [Formats](type-aliases/Formats.md) +- [FormatType](type-aliases/FormatType.md) +- [Groups](type-aliases/Groups.md) +- [hh](type-aliases/hh.md) +- [Logic](type-aliases/Logic.md) +- [mi](type-aliases/mi.md) +- [mm](type-aliases/mm.md) +- [Mode](type-aliases/Mode.md) +- [MODE](type-aliases/MODE-1.md) +- [Modifier](type-aliases/Modifier.md) +- [Month](type-aliases/Month.md) +- [MONTH](type-aliases/MONTH-1.md) +- [MONTHS](type-aliases/MONTHS.md) +- [ms](type-aliases/ms.md) +- [Mutate](type-aliases/Mutate.md) +- [MUTATION](type-aliases/MUTATION.md) +- [ns](type-aliases/ns.md) +- [Number](type-aliases/Number.md) +- [NumericPattern](type-aliases/NumericPattern.md) +- [Options](type-aliases/Options.md) +- [OwnFormat](type-aliases/OwnFormat.md) +- [Pair](type-aliases/Pair.md) +- [Pattern](type-aliases/Pattern.md) +- [Range](type-aliases/Range.md) +- [Relative](type-aliases/Relative.md) +- [ResolvedRange](type-aliases/ResolvedRange.md) +- [SEASON](type-aliases/SEASON.md) +- [Set](type-aliases/Set.md) +- [SetFields](type-aliases/SetFields.md) +- [ss](type-aliases/ss.md) +- [TermOffset](type-aliases/TermOffset.md) +- [Terms](type-aliases/Terms.md) +- [TIMEZONE](type-aliases/TIMEZONE.md) +- [Unit](type-aliases/Unit.md) +- [Units](type-aliases/Units.md) +- [Until](type-aliases/Until.md) +- [us](type-aliases/us.md) +- [Weekday](type-aliases/Weekday.md) +- [WEEKDAY](type-aliases/WEEKDAY-1.md) +- [WEEKDAYS](type-aliases/WEEKDAYS.md) +- [ww](type-aliases/ww.md) +- [ZONED\_DATE\_TIME](type-aliases/ZONED_DATE_TIME.md) + +## Variables + +- [COMPASS](variables/COMPASS.md) +- [DISCOVERY](variables/DISCOVERY.md) +- [DURATION](variables/DURATION.md) +- [DURATIONS](variables/DURATIONS.md) +- [ELEMENT](variables/ELEMENT.md) +- [enums](variables/enums.md) +- [fmtTempo](variables/fmtTempo.md) +- [FORMAT](variables/FORMAT.md) +- [getStamp](variables/getStamp.md) +- [getTempo](variables/getTempo.md) +- [LIMIT](variables/LIMIT.md) +- [MODE](variables/MODE.md) +- [MONTH](variables/MONTH.md) +- [MONTHS](variables/MONTHS.md) +- [MUTATION](variables/MUTATION.md) +- [NUMBER](variables/NUMBER.md) +- [OPTION](variables/OPTION.md) +- [PARSE](variables/PARSE.md) +- [SEASON](variables/SEASON.md) +- [TIMEZONE](variables/TIMEZONE.md) +- [WEEKDAY](variables/WEEKDAY.md) +- [WEEKDAYS](variables/WEEKDAYS.md) +- [ZONED\_DATE\_TIME](variables/ZONED_DATE_TIME.md) diff --git a/packages/tempo/doc/api/classes/Tempo.md b/packages/tempo/doc/api/classes/Tempo.md new file mode 100644 index 00000000..868ef4ac --- /dev/null +++ b/packages/tempo/doc/api/classes/Tempo.md @@ -0,0 +1,4693 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +Defined in: [tempo.class.ts:71](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L71) + +# Tempo +A powerful wrapper around `Temporal.ZonedDateTime` for flexible parsing and intuitive manipulation of date-time objects. +Bridges the gap between raw string/number inputs and the strict requirements of the ECMAScript Temporal API. + +## Indexable + +> \[`key`: `symbol`\]: `string` \| `boolean` \| ((`hint?`) => `string` \| `number` \| `bigint`) \| (() => `ArrayIterator`\<`EntryOf`\<`any`\>\>) \| (() => `object`) + +## Constructors + +### Constructor + +> **new Tempo**(`options?`): `Tempo` + +Defined in: [tempo.class.ts:1035](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1035) + +Instantiates a new `Tempo` object with configuration only. + +#### Parameters + +##### options? + +Configuration options for this specific instance. + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +#### Returns + +`Tempo` + +### Constructor + +> **new Tempo**(`tempo`, `options?`): `Tempo` + +Defined in: [tempo.class.ts:1042](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1042) + +Instantiates a new `Tempo` object with a value. + +#### Parameters + +##### tempo + +[`DateTime`](../type-aliases/DateTime.md) + +The date-time value to parse. + +##### options? + +Configuration options for this specific instance. + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +#### Returns + +`Tempo` + +## Accessors + +### \[toStringTag\] + +#### Get Signature + +> **get** **\[toStringTag\]**(): `string` + +Defined in: [tempo.class.ts:1024](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1024) + +##### Returns + +`string` + +*** + +### cal + +#### Get Signature + +> **get** **cal**(): `string` + +Defined in: [tempo.class.ts:1217](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1217) + +Temporal Calendar ID (e.g., 'iso8601' | 'gregory') + +##### Returns + +`string` + +*** + +### config + +#### Get Signature + +> **get** **config**(): [`Config`](../@magmacomputing/namespaces/Internal/interfaces/Config.md) + +Defined in: [tempo.class.ts:1258](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1258) + +current Tempo configuration + +##### Returns + +[`Config`](../@magmacomputing/namespaces/Internal/interfaces/Config.md) + +*** + +### day + +#### Get Signature + +> **get** **day**(): `number` + +Defined in: [tempo.class.ts:1208](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1208) + +Day of the month (alias for `dd`) + +##### Returns + +`number` + +*** + +### dd + +#### Get Signature + +> **get** **dd**(): `number` + +Defined in: [tempo.class.ts:1207](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1207) + +Day of the month (1-31) + +##### Returns + +`number` + +*** + +### dow + +#### Get Signature + +> **get** **dow**(): `0` \| `1` \| `2` \| `3` \| `4` \| `5` \| `6` \| `7` + +Defined in: [tempo.class.ts:1223](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1223) + +ISO weekday number: Mon=1, Sun=7 + +##### Returns + +`0` \| `1` \| `2` \| `3` \| `4` \| `5` \| `6` \| `7` + +*** + +### epoch + +#### Get Signature + +> **get** **epoch**(): `SecureObject`\<\{ `ms`: `number`; `ns`: `bigint`; `ss`: `number`; `us`: `number`; \}\> + +Defined in: [tempo.class.ts:1288](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1288) + +units since epoch + +##### Returns + +`SecureObject`\<\{ `ms`: `number`; `ns`: `bigint`; `ss`: `number`; `us`: `number`; \}\> + +*** + +### ff + +#### Get Signature + +> **get** **ff**(): `number` + +Defined in: [tempo.class.ts:1215](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1215) + +Fractional seconds (e.g., 0.123456789) + +##### Returns + +`number` + +*** + +### fmt + +#### Get Signature + +> **get** **fmt**(): `any` + +Defined in: [tempo.class.ts:1287](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1287) + +Formatted results for all pre-defined format codes + +##### Returns + +`any` + +*** + +### hh + +#### Get Signature + +> **get** **hh**(): [`hh`](../type-aliases/hh.md) + +Defined in: [tempo.class.ts:1209](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1209) + +Hour of the day (0-23) + +##### Returns + +[`hh`](../type-aliases/hh.md) + +*** + +### isValid + +#### Get Signature + +> **get** **isValid**(): `boolean` + +Defined in: [tempo.class.ts:1226](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1226) + +`true` if the underlying date-time is valid. + +##### Returns + +`boolean` + +*** + +### mi + +#### Get Signature + +> **get** **mi**(): [`mi`](../type-aliases/mi.md) + +Defined in: [tempo.class.ts:1210](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1210) + +Minutes of the hour (0-59) + +##### Returns + +[`mi`](../type-aliases/mi.md) + +*** + +### mm + +#### Get Signature + +> **get** **mm**(): [`mm`](../type-aliases/mm.md) + +Defined in: [tempo.class.ts:1205](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1205) + +Month number: Jan=1, Dec=12 + +##### Returns + +[`mm`](../type-aliases/mm.md) + +*** + +### mmm + +#### Get Signature + +> **get** **mmm**(): `"All"` \| `"Jan"` \| `"Feb"` \| `"Mar"` \| `"Apr"` \| `"May"` \| `"Jun"` \| `"Jul"` \| `"Aug"` \| `"Sep"` \| `"Oct"` \| `"Nov"` \| `"Dec"` + +Defined in: [tempo.class.ts:1219](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1219) + +Short month name (e.g., 'Jan') + +##### Returns + +`"All"` \| `"Jan"` \| `"Feb"` \| `"Mar"` \| `"Apr"` \| `"May"` \| `"Jun"` \| `"Jul"` \| `"Aug"` \| `"Sep"` \| `"Oct"` \| `"Nov"` \| `"Dec"` + +*** + +### mon + +#### Get Signature + +> **get** **mon**(): `"May"` \| `"Every"` \| `"January"` \| `"February"` \| `"March"` \| `"April"` \| `"June"` \| `"July"` \| `"August"` \| `"September"` \| `"October"` \| `"November"` \| `"December"` + +Defined in: [tempo.class.ts:1220](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1220) + +Full month name (e.g., 'January') + +##### Returns + +`"May"` \| `"Every"` \| `"January"` \| `"February"` \| `"March"` \| `"April"` \| `"June"` \| `"July"` \| `"August"` \| `"September"` \| `"October"` \| `"November"` \| `"December"` + +*** + +### ms + +#### Get Signature + +> **get** **ms**(): [`ms`](../type-aliases/ms.md) + +Defined in: [tempo.class.ts:1212](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1212) + +Milliseconds of the second (0-999) + +##### Returns + +[`ms`](../type-aliases/ms.md) + +*** + +### nano + +#### Get Signature + +> **get** **nano**(): `bigint` + +Defined in: [tempo.class.ts:1224](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1224) + +Nanoseconds since Unix epoch (BigInt) + +##### Returns + +`bigint` + +*** + +### ns + +#### Get Signature + +> **get** **ns**(): [`ns`](../type-aliases/ns.md) + +Defined in: [tempo.class.ts:1214](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1214) + +Nanoseconds of the microsecond (0-999) + +##### Returns + +[`ns`](../type-aliases/ns.md) + +*** + +### parse + +#### Get Signature + +> **get** **parse**(): [`Parse`](../@magmacomputing/namespaces/Internal/interfaces/Parse.md) + +Defined in: [tempo.class.ts:1281](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1281) + +Instance-specific parse rules (merged with global) + +##### Returns + +[`Parse`](../@magmacomputing/namespaces/Internal/interfaces/Parse.md) + +*** + +### ranges + +#### Get Signature + +> **get** **ranges**(): `Record`\<`string`, `string`\> + +Defined in: [tempo.class.ts:1245](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1245) + +current range key for every registered term + +##### Returns + +`Record`\<`string`, `string`\> + +*** + +### ss + +#### Get Signature + +> **get** **ss**(): [`ss`](../type-aliases/ss.md) + +Defined in: [tempo.class.ts:1211](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1211) + +Seconds of the minute (0-59) + +##### Returns + +[`ss`](../type-aliases/ss.md) + +*** + +### term + +#### Get Signature + +> **get** **term**(): `any` + +Defined in: [tempo.class.ts:1286](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1286) + +Object containing results from all term plugins + +##### Returns + +`any` + +*** + +### terms + +#### Get Signature + +> **get** **terms**(): `Record`\<`string`, `string`[]\> + +Defined in: [tempo.class.ts:1232](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1232) + +list of registered terms and their available range keys + +##### Returns + +`Record`\<`string`, `string`[]\> + +*** + +### ts + +#### Get Signature + +> **get** **ts**(): `number` \| `bigint` + +Defined in: [tempo.class.ts:1218](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1218) + +Unix timestamp (defaults to milliseconds) + +##### Returns + +`number` \| `bigint` + +*** + +### tz + +#### Get Signature + +> **get** **tz**(): `string` + +Defined in: [tempo.class.ts:1216](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1216) + +IANA Time Zone ID (e.g., 'Australia/Sydney') + +##### Returns + +`string` + +*** + +### us + +#### Get Signature + +> **get** **us**(): [`us`](../type-aliases/us.md) + +Defined in: [tempo.class.ts:1213](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1213) + +Microseconds of the millisecond (0-999) + +##### Returns + +[`us`](../type-aliases/us.md) + +*** + +### wkd + +#### Get Signature + +> **get** **wkd**(): `"Everyday"` \| `"Monday"` \| `"Tuesday"` \| `"Wednesday"` \| `"Thursday"` \| `"Friday"` \| `"Saturday"` \| `"Sunday"` + +Defined in: [tempo.class.ts:1222](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1222) + +Full weekday name (e.g., 'Monday') + +##### Returns + +`"Everyday"` \| `"Monday"` \| `"Tuesday"` \| `"Wednesday"` \| `"Thursday"` \| `"Friday"` \| `"Saturday"` \| `"Sunday"` + +*** + +### ww + +#### Get Signature + +> **get** **ww**(): [`ww`](../type-aliases/ww.md) + +Defined in: [tempo.class.ts:1206](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1206) + +ISO week number of the year + +##### Returns + +[`ww`](../type-aliases/ww.md) + +*** + +### www + +#### Get Signature + +> **get** **www**(): `"All"` \| `"Mon"` \| `"Tue"` \| `"Wed"` \| `"Thu"` \| `"Fri"` \| `"Sat"` \| `"Sun"` + +Defined in: [tempo.class.ts:1221](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1221) + +Short weekday name (e.g., 'Mon') + +##### Returns + +`"All"` \| `"Mon"` \| `"Tue"` \| `"Wed"` \| `"Thu"` \| `"Fri"` \| `"Sat"` \| `"Sun"` + +*** + +### yw + +#### Get Signature + +> **get** **yw**(): `number` \| `undefined` + +Defined in: [tempo.class.ts:1204](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1204) + +4-digit ISO week-numbering year + +##### Returns + +`number` \| `undefined` + +*** + +### yy + +#### Get Signature + +> **get** **yy**(): `number` + +Defined in: [tempo.class.ts:1203](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1203) + +4-digit year (e.g., 2024) + +##### Returns + +`number` + +*** + +### config + +#### Get Signature + +> **get** `static` **config**(): `any` + +Defined in: [tempo.class.ts:860](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L860) + +global Tempo configuration + +##### Returns + +`any` + +*** + +### default + +#### Get Signature + +> **get** `static` **default**(): `Readonly`\<\{ `calendar?`: `string` \| `SecureObject`\<`ZonedDateTime`\> \| `SecureObject`\<`PlainDate`\> \| `SecureObject`\<`PlainDateTime`\> \| `SecureObject`\<`PlainMonthDay`\> \| `SecureObject`\<`PlainYearMonth`\>; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: [`Logic`](../type-aliases/Logic.md) \| `SecureObject`\<`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\>\> \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Logic`](../type-aliases/Logic.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>\>; `formats?`: `SecureObject`\<`Property`\<`any`\>\>; `layout?`: [`Pattern`](../type-aliases/Pattern.md) \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureObject`\<`Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>\>; `locale?`: `string`; `mdyLayouts?`: `SecureArray`\<[`Pair`](../type-aliases/Pair.md)\>; `mdyLocales?`: `string` \| `SecureArray`\<`string`\>; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`Logic`](../type-aliases/Logic.md) \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Logic`](../type-aliases/Logic.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>\> \| `SecureObject`\<`Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>\>; `pivot?`: `number`; `plugins?`: `SecureObject`\<[`Plugin`](../interfaces/Plugin.md)\> \| `SecureArray`\<[`Plugin`](../interfaces/Plugin.md)\>; `rtfFormat?`: `SecureObject`\<`RelativeTimeFormat`\>; `rtfStyle?`: `RelativeTimeFormatStyle`; `scope`: `"default"`; `silent?`: `boolean`; `snippet?`: [`Pattern`](../type-aliases/Pattern.md) \| `SecureObject`\<`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\>\> \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md); `timeZone`: `string` \| `SecureObject`\<`ZonedDateTime`\>; `value?`: `string` \| `number` \| `bigint` \| `Date` \| `SecureObject`\<`ZonedDateTime`\> \| `SecureObject`\<`PlainDate`\> \| `SecureObject`\<`PlainDateTime`\> \| `SecureObject`\<`Tempo`\> \| `SecureObject`\<`Instant`\> \| `SecureObject`\<`PlainTime`\> \| `SecureObject`\<`Duration`\> \| `SecureObject`\<`ZonedDateTimeLikeObject`\> \| `null`; \}\> + +Defined in: [tempo.class.ts:923](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L923) + +Tempo initial default settings + +##### Returns + +`Readonly`\<\{ `calendar?`: `string` \| `SecureObject`\<`ZonedDateTime`\> \| `SecureObject`\<`PlainDate`\> \| `SecureObject`\<`PlainDateTime`\> \| `SecureObject`\<`PlainMonthDay`\> \| `SecureObject`\<`PlainYearMonth`\>; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: [`Logic`](../type-aliases/Logic.md) \| `SecureObject`\<`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\>\> \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Logic`](../type-aliases/Logic.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>\>; `formats?`: `SecureObject`\<`Property`\<`any`\>\>; `layout?`: [`Pattern`](../type-aliases/Pattern.md) \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureObject`\<`Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>\>; `locale?`: `string`; `mdyLayouts?`: `SecureArray`\<[`Pair`](../type-aliases/Pair.md)\>; `mdyLocales?`: `string` \| `SecureArray`\<`string`\>; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`Logic`](../type-aliases/Logic.md) \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Logic`](../type-aliases/Logic.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>\> \| `SecureObject`\<`Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>\>; `pivot?`: `number`; `plugins?`: `SecureObject`\<[`Plugin`](../interfaces/Plugin.md)\> \| `SecureArray`\<[`Plugin`](../interfaces/Plugin.md)\>; `rtfFormat?`: `SecureObject`\<`RelativeTimeFormat`\>; `rtfStyle?`: `RelativeTimeFormatStyle`; `scope`: `"default"`; `silent?`: `boolean`; `snippet?`: [`Pattern`](../type-aliases/Pattern.md) \| `SecureObject`\<`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\>\> \| `SecureObject`\<`Record`\<`string` \| `symbol`, [`Pattern`](../type-aliases/Pattern.md)\>\> \| `SecureArray`\<[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md); `timeZone`: `string` \| `SecureObject`\<`ZonedDateTime`\>; `value?`: `string` \| `number` \| `bigint` \| `Date` \| `SecureObject`\<`ZonedDateTime`\> \| `SecureObject`\<`PlainDate`\> \| `SecureObject`\<`PlainDateTime`\> \| `SecureObject`\<`Tempo`\> \| `SecureObject`\<`Instant`\> \| `SecureObject`\<`PlainTime`\> \| `SecureObject`\<`Duration`\> \| `SecureObject`\<`ZonedDateTimeLikeObject`\> \| `null`; \}\> + +*** + +### discovery + +#### Get Signature + +> **get** `static` **discovery**(): `any` + +Defined in: [tempo.class.ts:876](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L876) + +global discovery configuration + +##### Returns + +`any` + +*** + +### FORMAT + +#### Get Signature + +> **get** `static` **FORMAT**(): `EnumifyType`\<\{ `date`: `"{yyyy}-{mm}-{dd}"`; `dayDate`: `"{dd}-{mmm}-{yyyy}"`; `dayMonth`: `"{dd}-{mmm}"`; `dayTime`: `"{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}"`; `display`: `"{www}, {dd} {mmm} {yyyy}"`; `logStamp`: `"{yyyy}{mm}{dd}T{hhmiss}.{ff}"`; `sortTime`: `"{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}"`; `time`: `"{hh}:{mi}:{ss}"`; `weekDate`: `"{www}, {yyyy}-{mmm}-{dd}"`; `weekStamp`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}"`; `weekTime`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"`; `yearMonth`: `"{yyyy}{mm}"`; `yearMonthDay`: `"{yyyy}{mm}{dd}"`; `yearWeek`: `"{yw}{ww}"`; \}\> + +Defined in: [tempo.class.ts:83](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L83) + +Pre-configured format {name -> string} pairs + +##### Returns + +`EnumifyType`\<\{ `date`: `"{yyyy}-{mm}-{dd}"`; `dayDate`: `"{dd}-{mmm}-{yyyy}"`; `dayMonth`: `"{dd}-{mmm}"`; `dayTime`: `"{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}"`; `display`: `"{www}, {dd} {mmm} {yyyy}"`; `logStamp`: `"{yyyy}{mm}{dd}T{hhmiss}.{ff}"`; `sortTime`: `"{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}"`; `time`: `"{hh}:{mi}:{ss}"`; `weekDate`: `"{www}, {yyyy}-{mmm}-{dd}"`; `weekStamp`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}"`; `weekTime`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"`; `yearMonth`: `"{yyyy}{mm}"`; `yearMonthDay`: `"{yyyy}{mm}{dd}"`; `yearWeek`: `"{yw}{ww}"`; \}\> + +*** + +### formats + +#### Get Signature + +> **get** `static` **formats**(): `any` + +Defined in: [tempo.class.ts:912](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L912) + +static Tempo.formats (registry) + +##### Returns + +`any` + +*** + +### instant + +#### Get Signature + +> **get** `static` **instant**(): `Instant` + +Defined in: [tempo.class.ts:895](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L895) + +get the current system Instant + +##### Returns + +`Instant` + +*** + +### LIMIT + +#### Get Signature + +> **get** `static` **LIMIT**(): `object` + +Defined in: [tempo.class.ts:87](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L87) + +some useful Dates + +##### Returns + +###### maxTempo + +###### Get Signature + +> **get** **maxTempo**(): `bigint` + +Tempo(31-Dec-9999.23:59:59).ns + +###### Returns + +`bigint` + +###### minTempo + +###### Get Signature + +> **get** **minTempo**(): `bigint` + +Tempo(01-Jan-1000.00:00:00).ns + +###### Returns + +`bigint` + +*** + +### MODE + +#### Get Signature + +> **get** `static` **MODE**(): `EnumifyType`\<\{ `Auto`: `"auto"`; `Defer`: `"defer"`; `Strict`: `"strict"`; \}\> + +Defined in: [tempo.class.ts:86](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L86) + +initialization strategies + +##### Returns + +`EnumifyType`\<\{ `Auto`: `"auto"`; `Defer`: `"defer"`; `Strict`: `"strict"`; \}\> + +*** + +### NUMBER + +#### Get Signature + +> **get** `static` **NUMBER**(): `EnumifyType`\<\{ `eight`: `8`; `five`: `5`; `four`: `4`; `nine`: `9`; `one`: `1`; `seven`: `7`; `six`: `6`; `ten`: `10`; `three`: `3`; `two`: `2`; `zero`: `0`; \}\> + +Defined in: [tempo.class.ts:84](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L84) + +Number names (0-10) + +##### Returns + +`EnumifyType`\<\{ `eight`: `8`; `five`: `5`; `four`: `4`; `nine`: `9`; `one`: `1`; `seven`: `7`; `six`: `6`; `ten`: `10`; `three`: `3`; `two`: `2`; `zero`: `0`; \}\> + +*** + +### options + +#### Get Signature + +> **get** `static` **options**(): `any` + +Defined in: [tempo.class.ts:882](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L882) + +##### Returns + +`any` + +*** + +### parse + +#### Get Signature + +> **get** `static` **parse**(): [`Parse`](../@magmacomputing/namespaces/Internal/interfaces/Parse.md) + +Defined in: [tempo.class.ts:930](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L930) + +configuration governing the static 'rules' used when parsing t.DateTime argument + +##### Returns + +[`Parse`](../@magmacomputing/namespaces/Internal/interfaces/Parse.md) + +*** + +### properties + +#### Get Signature + +> **get** `static` **properties**(): `SecureArray`\<`string`\> + +Defined in: [tempo.class.ts:917](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L917) + +static Tempo properties getter + +##### Returns + +`SecureArray`\<`string`\> + +*** + +### terms + +#### Get Signature + +> **get** `static` **terms**(): `SecureArray`\<`Omit`\<[`TermPlugin`](../interfaces/TermPlugin.md), `"define"` \| `"resolve"`\>\> & `Record`\<`string`, `Omit`\<[`TermPlugin`](../interfaces/TermPlugin.md), `"define"` \| `"resolve"`\>\> + +Defined in: [tempo.class.ts:898](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L898) + +static Tempo.terms (registry) + +##### Returns + +`SecureArray`\<`Omit`\<[`TermPlugin`](../interfaces/TermPlugin.md), `"define"` \| `"resolve"`\>\> & `Record`\<`string`, `Omit`\<[`TermPlugin`](../interfaces/TermPlugin.md), `"define"` \| `"resolve"`\>\> + +*** + +### TIMEZONE + +#### Get Signature + +> **get** `static` **TIMEZONE**(): `object` + +Defined in: [tempo.class.ts:85](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L85) + +TimeZone aliases + +##### Returns + +`object` + +###### acst + +> `readonly` **acst**: `"Australia/Adelaide"` = `'Australia/Adelaide'` + +###### aest + +> `readonly` **aest**: `"Australia/Sydney"` = `'Australia/Sydney'` + +###### awst + +> `readonly` **awst**: `"Australia/Perth"` = `'Australia/Perth'` + +###### cet + +> `readonly` **cet**: `"Europe/Paris"` = `'Europe/Paris'` + +###### cst + +> `readonly` **cst**: `"America/Chicago"` = `'America/Chicago'` + +###### eet + +> `readonly` **eet**: `"Europe/Helsinki"` = `'Europe/Helsinki'` + +###### est + +> `readonly` **est**: `"America/New_York"` = `'America/New_York'` + +###### gmt + +> `readonly` **gmt**: `"Europe/London"` = `'Europe/London'` + +###### ist + +> `readonly` **ist**: `"Asia/Kolkata"` = `'Asia/Kolkata'` + +###### jst + +> `readonly` **jst**: `"Asia/Tokyo"` = `'Asia/Tokyo'` + +###### mst + +> `readonly` **mst**: `"America/Denver"` = `'America/Denver'` + +###### npt + +> `readonly` **npt**: `"Asia/Kathmandu"` = `'Asia/Kathmandu'` + +###### nzt + +> `readonly` **nzt**: `"Pacific/Auckland"` = `'Pacific/Auckland'` + +###### pst + +> `readonly` **pst**: `"America/Los_Angeles"` = `'America/Los_Angeles'` + +###### utc + +> `readonly` **utc**: `"UTC"` = `'UTC'` + +## Methods + +### \[iterator\]() + +> **\[iterator\]**(): `ArrayIterator`\<`EntryOf`\<`any`\>\> + +Defined in: [tempo.class.ts:1020](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1020) + +iterate over instance formats + +#### Returns + +`ArrayIterator`\<`EntryOf`\<`any`\>\> + +*** + +### \[toPrimitive\]() + +> **\[toPrimitive\]**(`hint?`): `string` \| `number` \| `bigint` + +Defined in: [tempo.class.ts:1011](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1011) + +allow for auto-convert of Tempo to BigInt, Number or String + +#### Parameters + +##### hint? + +`"string"` \| `"number"` \| `"default"` + +#### Returns + +`string` \| `number` \| `bigint` + +*** + +### add() + +> **add**(`tempo?`, `options?`): `Tempo` + +Defined in: [tempo.class.ts:1321](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1321) + +returns a new `Tempo` with specific duration added. + +#### Parameters + +##### tempo? + +[`Add`](../type-aliases/Add.md) + +##### options? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +#### Returns + +`Tempo` + +*** + +### clone() + +> **clone**(): `Tempo` + +Defined in: [tempo.class.ts:1323](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1323) + +returns a clone of the current `Tempo` instance. + +#### Returns + +`Tempo` + +*** + +### format() + +#### Call Signature + +> **format**\<`K`\>(`fmt`): `any` + +Defined in: [tempo.class.ts:1305](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1305) + +##### Type Parameters + +###### K + +`K` *extends* `Format` + +##### Parameters + +###### fmt + +`K` + +##### Returns + +`any` + +#### Call Signature + +> **format**(`fmt`): `any` + +Defined in: [plugin/module/module.format.ts:12](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.format.ts#L12) + +applies a format to the instance. + +##### Parameters + +###### fmt + +`any` + +##### Returns + +`any` + +*** + +### set() + +> **set**(`tempo?`, `options?`): `Tempo` + +Defined in: [tempo.class.ts:1322](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1322) + +returns a new `Tempo` with specific offsets. + +#### Parameters + +##### tempo? + +[`Set`](../type-aliases/Set.md) + +##### options? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +#### Returns + +`Tempo` + +*** + +### since() + +#### Call Signature + +> **since**(...`args`): `any` + +Defined in: [tempo.class.ts:1316](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1316) + +time elapsed since another date-time + +##### Parameters + +###### args + +...`any`[] + +##### Returns + +`any` + +#### Call Signature + +> **since**(`until`, `opts?`): `string` + +Defined in: [plugin/module/module.duration.ts:18](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L18) + +time elapsed since (with unit) + +##### Parameters + +###### until + +[`Until`](../type-aliases/Until.md) + +###### opts? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +`string` + +#### Call Signature + +> **since**(`dateTimeOrOpts`, `until`): `string` + +Defined in: [plugin/module/module.duration.ts:19](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L19) + +time elapsed since another date-time (with unit) + +##### Parameters + +###### dateTimeOrOpts + +[`DateTime`](../type-aliases/DateTime.md) \| \{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +[`DateTime`](../type-aliases/DateTime.md) + +*** + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +CalendarLike \| undefined + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +RelativeTimeFormatStyle \| undefined + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +TimeStamp \| undefined + +Precision to measure timestamps (ms | us) + +###### timeZone? + +TimeZoneLike \| undefined + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +###### until + +[`Until`](../type-aliases/Until.md) + +##### Returns + +`string` + +#### Call Signature + +> **since**(`dateTimeOrOpts?`, `opts?`): `string` + +Defined in: [plugin/module/module.duration.ts:20](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L20) + +time elapsed since another date-time (w'out unit) + +##### Parameters + +###### dateTimeOrOpts? + +[`DateTime`](../type-aliases/DateTime.md) \| \{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +[`DateTime`](../type-aliases/DateTime.md) + +*** + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +CalendarLike \| undefined + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +RelativeTimeFormatStyle \| undefined + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +TimeStamp \| undefined + +Precision to measure timestamps (ms | us) + +###### timeZone? + +TimeZoneLike \| undefined + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +###### opts? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +`string` + +#### Call Signature + +> **since**(`optsOrDate?`, `optsOrUntil?`): `string` + +Defined in: [plugin/module/module.duration.ts:21](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L21) + +time elapsed since another date-time + +##### Parameters + +###### optsOrDate? + +`any` + +###### optsOrUntil? + +`any` + +##### Returns + +`string` + +*** + +### toDate() + +> **toDate**(): `Date` + +Defined in: [tempo.class.ts:1341](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1341) + +the date-time as a standard `Date` object. + +#### Returns + +`Date` + +*** + +### toDateTime() + +> **toDateTime**(): `ZonedDateTime` + +Defined in: [tempo.class.ts:1326](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1326) + +returns the underlying Temporal.ZonedDateTime + +#### Returns + +`ZonedDateTime` + +*** + +### toInstant() + +> **toInstant**(): `Instant` + +Defined in: [tempo.class.ts:1338](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1338) + +returns the underlying Temporal.Instant + +#### Returns + +`Instant` + +*** + +### toJSON() + +> **toJSON**(): `object` + +Defined in: [tempo.class.ts:1350](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1350) + +Custom JSON serialization for `JSON.stringify`. + +#### Returns + +##### calendar + +> **calendar**: `CalendarLike` + +Temporal calendar + +##### catch + +> **catch**: `boolean` \| `undefined` + +catch or throw Errors + +##### debug + +> **debug**: `boolean` \| `undefined` + +additional console.log for tracking + +##### discovery + +> **discovery**: `string` \| `symbol` + +globalThis Discovery Symbol + +##### formats + +> **formats**: `EnumifyType` + +pre-configured format strings + +##### locale + +> **locale**: `string` + +locale (e.g. en-AU) + +##### mode + +> **mode**: `"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +##### plugins + +> **plugins**: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +##### rtfFormat + +> **rtfFormat**: `RelativeTimeFormat` + +Pre-configured relative time formatter + +##### rtfStyle + +> **rtfStyle**: `RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +##### scope + +> **scope**: `"global"` \| `"local"` + +configuration (global | local) + +##### silent + +> **silent**: `boolean` \| `undefined` + +suppress console output during catch + +##### sphere + +> **sphere**: `"north"` \| `"south"` \| `"east"` \| `"west"` \| `undefined` + +hemisphere for term.qtr or term.szn + +##### store + +> **store**: `string` + +localStorage key + +##### timeStamp + +> **timeStamp**: [`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +##### timeZone + +> **timeZone**: `TimeZoneLike` + +Temporal timeZone + +##### value + +> **value**: `string` + +*** + +### toNow() + +> **toNow**(): `ZonedDateTime` + +Defined in: [tempo.class.ts:1340](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1340) + +the current system time localized to this instance. + +#### Returns + +`ZonedDateTime` + +*** + +### toPlainDate() + +> **toPlainDate**(): `PlainDate` + +Defined in: [tempo.class.ts:1335](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1335) + +returns a Temporal.PlainDate representation + +#### Returns + +`PlainDate` + +*** + +### toPlainDateTime() + +> **toPlainDateTime**(): `PlainDateTime` + +Defined in: [tempo.class.ts:1337](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1337) + +returns a Temporal.PlainDateTime representation + +#### Returns + +`PlainDateTime` + +*** + +### toPlainTime() + +> **toPlainTime**(): `PlainTime` + +Defined in: [tempo.class.ts:1336](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1336) + +returns a Temporal.PlainTime representation + +#### Returns + +`PlainTime` + +*** + +### toString() + +> **toString**(): `string` + +Defined in: [tempo.class.ts:1343](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1343) + +ISO8601 string representation of the date-time. + +#### Returns + +`string` + +*** + +### until() + +#### Call Signature + +> **until**(...`args`): `any` + +Defined in: [tempo.class.ts:1311](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1311) + +time duration until another date-time + +##### Parameters + +###### args + +...`any`[] + +##### Returns + +`any` + +#### Call Signature + +> **until**(`dateTimeOrOpts?`, `opts?`): [`Duration`](../type-aliases/Duration.md) + +Defined in: [plugin/module/module.duration.ts:13](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L13) + +time duration until (returns Duration) + +##### Parameters + +###### dateTimeOrOpts? + +[`DateTime`](../type-aliases/DateTime.md) \| \{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +[`DateTime`](../type-aliases/DateTime.md) + +*** + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +CalendarLike \| undefined + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +RelativeTimeFormatStyle \| undefined + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +TimeStamp \| undefined + +Precision to measure timestamps (ms | us) + +###### timeZone? + +TimeZoneLike \| undefined + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +###### opts? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +[`Duration`](../type-aliases/Duration.md) + +#### Call Signature + +> **until**(`unit`, `opts?`): `number` + +Defined in: [plugin/module/module.duration.ts:14](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L14) + +time duration until (with unit, returns number) + +##### Parameters + +###### unit + +[`Unit`](../type-aliases/Unit.md) + +###### opts? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +`number` + +#### Call Signature + +> **until**(`dateTimeOrOpts`, `unit`): `number` + +Defined in: [plugin/module/module.duration.ts:15](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L15) + +time duration until another date-time (with unit ) + +##### Parameters + +###### dateTimeOrOpts + +[`DateTime`](../type-aliases/DateTime.md) \| \{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +[`DateTime`](../type-aliases/DateTime.md) + +*** + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +CalendarLike \| undefined + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +RelativeTimeFormatStyle \| undefined + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +TimeStamp \| undefined + +Precision to measure timestamps (ms | us) + +###### timeZone? + +TimeZoneLike \| undefined + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +###### unit + +[`Unit`](../type-aliases/Unit.md) + +##### Returns + +`number` + +#### Call Signature + +> **until**(`optsOrDate?`, `optsOrUntil?`): `number` \| [`Duration`](../type-aliases/Duration.md) + +Defined in: [plugin/module/module.duration.ts:16](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/module/module.duration.ts#L16) + +fallback: union of possible returns + +##### Parameters + +###### optsOrDate? + +`string` \| `number` \| `bigint` \| `Tempo` \| `Instant` \| `ZonedDateTime` \| `Date` \| `PlainDate` \| `PlainTime` \| `PlainDateTime` \| `Duration` \| `ZonedDateTimeLikeObject` \| \{\[`key`: `string`\]: `any`; `calendar?`: `CalendarLike`; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>; `formats?`: `Property`\<`any`\>; `layout?`: [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: `RelativeTimeFormatStyle`; `silent?`: `boolean`; `snippet?`: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md); `timeZone?`: `TimeZoneLike`; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} \| `object` & `object` \| `null` + +`string` + +*** + +`number` + +*** + +`bigint` + +*** + +`Tempo` + +*** + +`Instant` + +*** + +`ZonedDateTime` + +*** + +`Date` + +*** + +`PlainDate` + +*** + +`PlainTime` + +*** + +`PlainDateTime` + +*** + +`Duration` + +*** + +`ZonedDateTimeLikeObject` + +*** + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: `CalendarLike`; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: `Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\>; `formats?`: `Property`\<`any`\>; `layout?`: [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\>; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\>; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: `RelativeTimeFormatStyle`; `silent?`: `boolean`; `snippet?`: `Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\>; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: [`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md); `timeZone?`: `TimeZoneLike`; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +*** + +`object` & `object` + +*** + +`null` + +###### optsOrUntil? + +[`Until`](../type-aliases/Until.md) \| \{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +[`Until`](../type-aliases/Until.md) + +*** + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +CalendarLike \| undefined + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +RelativeTimeFormatStyle \| undefined + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +TimeStamp \| undefined + +Precision to measure timestamps (ms | us) + +###### timeZone? + +TimeZoneLike \| undefined + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +`number` \| [`Duration`](../type-aliases/Duration.md) + +*** + +### \[dispose\]() + +> `static` **\[dispose\]**(): `void` + +Defined in: [tempo.class.ts:949](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L949) + +release global config and reset library to defaults + +#### Returns + +`void` + +*** + +### \[hasInstance\]() + +> `static` **\[hasInstance\]**(`instance`): `boolean` + +Defined in: [tempo.class.ts:953](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L953) + +#### Parameters + +##### instance + +`any` + +#### Returns + +`boolean` + +*** + +### \[iterator\]() + +> `static` **\[iterator\]**(): `ArrayIterator`\<`string`\> + +Defined in: [tempo.class.ts:944](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L944) + +iterate over Tempo properties + +#### Returns + +`ArrayIterator`\<`string`\> + +*** + +### compare() + +> `static` **compare**(`tempo1?`, `tempo2?`): `number` + +Defined in: [tempo.class.ts:853](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L853) + +Compares two `Tempo` instances or date-time values. + +#### Parameters + +##### tempo1? + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} \| [`DateTime`](../type-aliases/DateTime.md) + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +CalendarLike \| undefined + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +RelativeTimeFormatStyle \| undefined + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +TimeStamp \| undefined + +Precision to measure timestamps (ms | us) + +###### timeZone? + +TimeZoneLike \| undefined + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +*** + +[`DateTime`](../type-aliases/DateTime.md) + +##### tempo2? + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} \| [`DateTime`](../type-aliases/DateTime.md) + +###### Type Literal + +\{\[`key`: `string`\]: `any`; `calendar?`: CalendarLike \| undefined; `catch?`: `boolean`; `debug?`: `boolean`; `discovery?`: `string` \| `symbol`; `event?`: Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ...; `formats?`: `Property`\<`any`\>; `layout?`: PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined; `locale?`: `string`; `mdyLayouts?`: [`Pair`](../type-aliases/Pair.md)[]; `mdyLocales?`: `string` \| `string`[]; `mode?`: `"auto"` \| `"strict"` \| `"defer"`; `period?`: PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined; `pivot?`: `number`; `plugins?`: [`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[]; `rtfFormat?`: `RelativeTimeFormat`; `rtfStyle?`: RelativeTimeFormatStyle \| undefined; `silent?`: `boolean`; `snippet?`: Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined; `sphere?`: `"north"` \| `"south"` \| `"east"` \| `"west"`; `store?`: `string`; `timeStamp?`: TimeStamp \| undefined; `timeZone?`: TimeZoneLike \| undefined; `value?`: [`DateTime`](../type-aliases/DateTime.md); \} + +###### calendar? + +CalendarLike \| undefined + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +Extend\<\{ readonly 'new.?years? ?eve': "31 Dec"; readonly nye: "31 Dec"; readonly 'new.?years?( ?day)?': "01 Jan"; readonly ny: "01 Jan"; readonly 'christmas ?eve': "24 Dec"; readonly christmas: "25 Dec"; ... 5 more ...; readonly yesterday: (this: Tempo) =\> Tempo; \}, string, string \| Function\> \| PatternOption\<...\> \| ... + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +PatternOption\ \| Extend\<\{ readonly \[x: symbol\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| ... 5 more ... \| "\{nbr\}\{sep\}?\{unt\}\{sep\}?\{afx\}"; \}, symbol, string\> \| undefined + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +PatternOption\ \| Extend\<\{ readonly 'mid\[ -\]?night': "24:00"; readonly morning: "8:00"; readonly 'mid\[ -\]?morning': "10:00"; readonly 'mid\[ -\]?day': "12:00"; readonly noon: "12:00"; readonly 'after\[ -\]?noon': "3:00pm"; readonly evening: "18:00"; readonly night: "20:00"; \}, string, string \| Function\> \| undefined + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +RelativeTimeFormatStyle \| undefined + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +Extend\<\{ readonly \[x: symbol\]: RegExp; \}, symbol, RegExp\> \| PatternOption\ \| undefined + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +TimeStamp \| undefined + +Precision to measure timestamps (ms | us) + +###### timeZone? + +TimeZoneLike \| undefined + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +*** + +[`DateTime`](../type-aliases/DateTime.md) + +#### Returns + +`number` + +*** + +### duration() + +> `static` **duration**(`input`): [`Duration`](../type-aliases/Duration.md) + +Defined in: [tempo.class.ts:775](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L775) + +returns a full Tempo Duration object (EDO) for the given input + +#### Parameters + +##### input + +`any` + +#### Returns + +[`Duration`](../type-aliases/Duration.md) + +*** + +### extend() + +#### Call Signature + +> `static` **extend**(`plugin`, `options?`): *typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +Defined in: [tempo.class.ts:588](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L588) + +Register a plugin or term extension. + +##### Parameters + +###### plugin + +[`Plugin`](../interfaces/Plugin.md) + +A plugin or term extension to register. + +###### options? + +Optional configuration for the plugin. + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +#### Call Signature + +> `static` **extend**(`plugins`, `options?`): *typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +Defined in: [tempo.class.ts:595](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L595) + +Register an array of plugins or term extensions. + +##### Parameters + +###### plugins + +`any`[] + +An array of plugins, terms, or extensions to register. + +###### options? + +Optional configuration for the plugins. + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +#### Call Signature + +> `static` **extend**(...`args`): *typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +Defined in: [tempo.class.ts:601](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L601) + +Register multiple plugins or term extensions. + +##### Parameters + +###### args + +...`any`[] + +A plugin, term, or list of extensions to register. + +##### Returns + +*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +*** + +### from() + +#### Call Signature + +> `static` **from**(`options?`): `Tempo` + +Defined in: [tempo.class.ts:889](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L889) + +Creates a new `Tempo` instance. + +##### Parameters + +###### options? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +`Tempo` + +#### Call Signature + +> `static` **from**(`tempo`, `options?`): `Tempo` + +Defined in: [tempo.class.ts:890](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L890) + +Creates a new `Tempo` instance. + +##### Parameters + +###### tempo + +[`DateTime`](../type-aliases/DateTime.md) + +###### options? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +##### Returns + +`Tempo` + +*** + +### init() + +> `static` **init**(`options?`): *typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +Defined in: [tempo.class.ts:704](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L704) + +Reset Tempo to its default, built-in registration state + +#### Parameters + +##### options? + +###### calendar? + +`CalendarLike` + +Temporal calendar + +###### catch? + +`boolean` + +catch or throw Errors + +###### debug? + +`boolean` + +additional console.log for tracking + +###### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +###### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => `Tempo`; `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => `Tempo`; \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +###### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +###### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +###### locale? + +`string` + +locale (e.g. en-AU) + +###### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +###### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +###### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +###### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +###### pivot? + +`number` + +pivot year for two-digit years + +###### plugins? + +[`Plugin`](../interfaces/Plugin.md) \| [`Plugin`](../interfaces/Plugin.md)[] + +plugins to be automatically extended + +###### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +###### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +###### silent? + +`boolean` + +suppress console output during catch + +###### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +###### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +###### store? + +`string` + +localStorage key + +###### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +###### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +###### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +#### Returns + +*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +*** + +### isTempo() + +> `static` **isTempo**(`instance?`): `instance is Tempo` + +Defined in: [tempo.class.ts:958](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L958) + +check if a supplied variable is a valid Tempo instance + +#### Parameters + +##### instance? + +`any` + +#### Returns + +`instance is Tempo` + +*** + +### now() + +> `static` **now**(): `bigint` + +Defined in: [tempo.class.ts:893](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L893) + +#### Returns + +`bigint` diff --git a/packages/tempo/doc/api/interfaces/Extension.md b/packages/tempo/doc/api/interfaces/Extension.md new file mode 100644 index 00000000..adf81f41 --- /dev/null +++ b/packages/tempo/doc/api/interfaces/Extension.md @@ -0,0 +1,54 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +Defined in: [plugin/plugin.type.ts:44](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L44) + +## Extension +Type for Extension plugins. + +## Extends + +- [`Plugin`](Plugin.md) + +## Indexable + +> \[`key`: `string`\]: `any` + +## Properties + +### install + +> **install**: (`this`, `t`) => `void` + +Defined in: [plugin/plugin.type.ts:29](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L29) + +#### Parameters + +##### this + +[`Tempo`](../classes/Tempo.md) + +##### t + +*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +#### Returns + +`void` + +#### Inherited from + +[`Plugin`](Plugin.md).[`install`](Plugin.md#install) + +*** + +### name + +> **name**: `string` + +Defined in: [plugin/plugin.type.ts:28](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L28) + +#### Inherited from + +[`Plugin`](Plugin.md).[`name`](Plugin.md#name) diff --git a/packages/tempo/doc/api/interfaces/Module.md b/packages/tempo/doc/api/interfaces/Module.md new file mode 100644 index 00000000..65120196 --- /dev/null +++ b/packages/tempo/doc/api/interfaces/Module.md @@ -0,0 +1,54 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +Defined in: [plugin/plugin.type.ts:36](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L36) + +## Module +Type for Module plugins. + +## Extends + +- [`Plugin`](Plugin.md) + +## Indexable + +> \[`key`: `string`\]: `any` + +## Properties + +### install + +> **install**: (`this`, `t`) => `void` + +Defined in: [plugin/plugin.type.ts:29](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L29) + +#### Parameters + +##### this + +[`Tempo`](../classes/Tempo.md) + +##### t + +*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +#### Returns + +`void` + +#### Inherited from + +[`Plugin`](Plugin.md).[`install`](Plugin.md#install) + +*** + +### name + +> **name**: `string` + +Defined in: [plugin/plugin.type.ts:28](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L28) + +#### Inherited from + +[`Plugin`](Plugin.md).[`name`](Plugin.md#name) diff --git a/packages/tempo/doc/api/interfaces/Params.md b/packages/tempo/doc/api/interfaces/Params.md new file mode 100644 index 00000000..00f3be09 --- /dev/null +++ b/packages/tempo/doc/api/interfaces/Params.md @@ -0,0 +1,329 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +Defined in: [tempo.type.ts:144](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L144) + +Type for consistency in expected arguments for helper functions + +## Extended by + +- [`Params`](../@magmacomputing/namespaces/Tempo/interfaces/Params.md) + +## Type Parameters + +### T + +`T` + +## Call Signature + +> **Params**(`tempo?`, `options?`): `T` + +Defined in: [tempo.type.ts:145](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L145) + +Type for consistency in expected arguments for helper functions + +### Parameters + +#### tempo? + +[`DateTime`](../type-aliases/DateTime.md) + +#### options? + +##### calendar? + +`CalendarLike` + +Temporal calendar + +##### catch? + +`boolean` + +catch or throw Errors + +##### debug? + +`boolean` + +additional console.log for tracking + +##### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +##### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +##### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +##### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +##### locale? + +`string` + +locale (e.g. en-AU) + +##### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +##### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +##### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +##### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +##### pivot? + +`number` + +pivot year for two-digit years + +##### plugins? + +[`Plugin`](Plugin.md) \| [`Plugin`](Plugin.md)[] + +plugins to be automatically extended + +##### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +##### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +##### silent? + +`boolean` + +suppress console output during catch + +##### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +##### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +##### store? + +`string` + +localStorage key + +##### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +##### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +##### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +### Returns + +`T` + +## Call Signature + +> **Params**(`options`): `T` + +Defined in: [tempo.type.ts:146](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L146) + +Type for consistency in expected arguments for helper functions + +### Parameters + +#### options + +##### calendar? + +`CalendarLike` + +Temporal calendar + +##### catch? + +`boolean` + +catch or throw Errors + +##### debug? + +`boolean` + +additional console.log for tracking + +##### discovery? + +`string` \| `symbol` + +globalThis Discovery Symbol + +##### event? + +`Extend`\<\{ `christmas`: `"25 Dec"`; `christmas ?eve`: `"24 Dec"`; `new.?years? ?eve`: `"31 Dec"`; `new.?years?( ?day)?`: `"01 Jan"`; `now`: (`this`) => `ZonedDateTime`; `ny`: `"01 Jan"`; `nye`: `"31 Dec"`; `today`: (`this`) => `ZonedDateTime`; `tomorrow`: (`this`) => [`Tempo`](../classes/Tempo.md); `xmas`: `"25 Dec"`; `xmas ?eve`: `"24 Dec"`; `yesterday`: (`this`) => [`Tempo`](../classes/Tempo.md); \}, `string`, `string` \| `Function`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> + +custom date aliases (events). + +##### formats? + +`Property`\<`any`\> + +custom format strings to merge in the FORMAT enum + +##### layout? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> \| `Extend`\<\{\[`key`: `symbol`\]: "(\{dd\}\{sep\}?\{mm\}(\{sep\}?\{yy\})?\|\{mod\}?(\{evt\})\|(?\\{slk\}))" \| "(\{hh\}\{mi\}?\{ss\}?\{ff\}?\{mer\}?\|\{per\})" \| "(\{dt\})(?:(?:\{sep\}+\|T)(\{tm\}))?\{tzd\}?\{brk\}?" \| `"({wkd}{sep}+)?{dd}{sep}?{mm}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{mm}{sep}?{dd}({sep}?{yy})?{sfx}?{brk}?"` \| `"({wkd}{sep}+)?{yy}{sep}?{mm}({sep}?{dd})?{sfx}?{brk}?"` \| `"{mod}?{wkd}{afx}?{sfx}?"` \| `"{mod}?{dd}{afx}?"` \| `"{nbr}{sep}?{unt}{sep}?{afx}"`; \}, `symbol`, `string`\> + +patterns to help parse value + +##### locale? + +`string` + +locale (e.g. en-AU) + +##### mdyLayouts? + +[`Pair`](../type-aliases/Pair.md)[] + +swap parse-order of layouts + +##### mdyLocales? + +`string` \| `string`[] + +locale-names that prefer 'mm-dd-yy' date order + +##### mode? + +`"auto"` \| `"strict"` \| `"defer"` + +initialization strategy ('auto'|'strict'|'defer') + +##### period? + +[`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Logic`](../type-aliases/Logic.md)\> \| `Extend`\<\{ `after[ -]?noon`: `"3:00pm"`; `evening`: `"18:00"`; `mid[ -]?day`: `"12:00"`; `mid[ -]?morning`: `"10:00"`; `mid[ -]?night`: `"24:00"`; `morning`: `"8:00"`; `night`: `"20:00"`; `noon`: `"12:00"`; \}, `string`, `string` \| `Function`\> + +custom time aliases (periods). + +##### pivot? + +`number` + +pivot year for two-digit years + +##### plugins? + +[`Plugin`](Plugin.md) \| [`Plugin`](Plugin.md)[] + +plugins to be automatically extended + +##### rtfFormat? + +`RelativeTimeFormat` + +Pre-configured relative time formatter + +##### rtfStyle? + +`RelativeTimeFormatStyle` + +Default style for relative time ('long' | 'short' | 'narrow') + +##### silent? + +`boolean` + +suppress console output during catch + +##### snippet? + +`Extend`\<\{\[`key`: `symbol`\]: `RegExp`; \}, `symbol`, `RegExp`\> \| [`PatternOption`](../@magmacomputing/namespaces/Internal/type-aliases/PatternOption.md)\<[`Pattern`](../type-aliases/Pattern.md)\> + +date-time snippets to help compose a Layout + +##### sphere? + +`"north"` \| `"south"` \| `"east"` \| `"west"` + +hemisphere for term.qtr or term.szn + +##### store? + +`string` + +localStorage key + +##### timeStamp? + +[`TimeStamp`](../@magmacomputing/namespaces/Internal/type-aliases/TimeStamp.md) + +Precision to measure timestamps (ms | us) + +##### timeZone? + +`TimeZoneLike` + +Temporal timeZone + +##### value? + +[`DateTime`](../type-aliases/DateTime.md) + +supplied value to parse + +### Returns + +`T` diff --git a/packages/tempo/doc/api/interfaces/Plugin.md b/packages/tempo/doc/api/interfaces/Plugin.md new file mode 100644 index 00000000..aa68894b --- /dev/null +++ b/packages/tempo/doc/api/interfaces/Plugin.md @@ -0,0 +1,44 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +Defined in: [plugin/plugin.type.ts:27](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L27) + +## Plugin +Interface for general Tempo plugins (Modules/Extensions). + +## Extended by + +- [`PluginContainer`](../@magmacomputing/namespaces/Internal/interfaces/PluginContainer.md) +- [`Module`](Module.md) +- [`Extension`](Extension.md) + +## Properties + +### install + +> **install**: (`this`, `t`) => `void` + +Defined in: [plugin/plugin.type.ts:29](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L29) + +#### Parameters + +##### this + +[`Tempo`](../classes/Tempo.md) + +##### t + +*typeof* [`Tempo`](../@magmacomputing/namespaces/Tempo/README.md) + +#### Returns + +`void` + +*** + +### name + +> **name**: `string` + +Defined in: [plugin/plugin.type.ts:28](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L28) diff --git a/packages/tempo/doc/api/interfaces/TermPlugin.md b/packages/tempo/doc/api/interfaces/TermPlugin.md new file mode 100644 index 00000000..69b69a30 --- /dev/null +++ b/packages/tempo/doc/api/interfaces/TermPlugin.md @@ -0,0 +1,96 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +Defined in: [plugin/plugin.type.ts:10](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L10) + +## TermPlugin +Interface for term-driven parsing and resolution. + +## Properties + +### define + +> **define**: (`this`, `keyOnly?`, `anchor?`) => `string` \| [`Range`](../type-aliases/Range.md) \| [`Range`](../type-aliases/Range.md)[] \| `undefined` + +Defined in: [plugin/plugin.type.ts:17](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L17) + +#### Parameters + +##### this + +[`Tempo`](../classes/Tempo.md) + +##### keyOnly? + +`boolean` + +##### anchor? + +`any` + +#### Returns + +`string` \| [`Range`](../type-aliases/Range.md) \| [`Range`](../type-aliases/Range.md)[] \| `undefined` + +*** + +### description? + +> `optional` **description?**: `string` + +Defined in: [plugin/plugin.type.ts:13](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L13) + +*** + +### groups? + +> `optional` **groups?**: `any` + +Defined in: [plugin/plugin.type.ts:14](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L14) + +*** + +### key + +> **key**: `string` + +Defined in: [plugin/plugin.type.ts:11](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L11) + +*** + +### ranges? + +> `optional` **ranges?**: `any`[] + +Defined in: [plugin/plugin.type.ts:15](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L15) + +*** + +### resolve? + +> `optional` **resolve?**: (`this`, `anchor?`) => [`Range`](../type-aliases/Range.md)[] + +Defined in: [plugin/plugin.type.ts:16](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L16) + +#### Parameters + +##### this + +[`Tempo`](../classes/Tempo.md) + +##### anchor? + +`any` + +#### Returns + +[`Range`](../type-aliases/Range.md)[] + +*** + +### scope? + +> `optional` **scope?**: `string` + +Defined in: [plugin/plugin.type.ts:12](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L12) diff --git a/packages/tempo/doc/api/type-aliases/Add.md b/packages/tempo/doc/api/type-aliases/Add.md new file mode 100644 index 00000000..a5c5c31c --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Add.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Add** = `Prettify`\<[`AddUnits`](AddUnits.md) & [`TermOffset`](TermOffset.md)\> \| [`DateTime`](DateTime.md) + +Defined in: [tempo.type.ts:92](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L92) diff --git a/packages/tempo/doc/api/type-aliases/AddUnits.md b/packages/tempo/doc/api/type-aliases/AddUnits.md new file mode 100644 index 00000000..ba6d652a --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/AddUnits.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **AddUnits** = `{ [K in Unit]?: number }` + +Defined in: [tempo.type.ts:91](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L91) diff --git a/packages/tempo/doc/api/type-aliases/BaseDuration.md b/packages/tempo/doc/api/type-aliases/BaseDuration.md new file mode 100644 index 00000000..2d9ca364 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/BaseDuration.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **BaseDuration** = `Record`\<[`Units`](Units.md), `number`\> + +Defined in: [tempo.type.ts:60](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L60) diff --git a/packages/tempo/doc/api/type-aliases/COMPASS.md b/packages/tempo/doc/api/type-aliases/COMPASS.md new file mode 100644 index 00000000..7967ac83 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/COMPASS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **COMPASS** = `ValueOf`\<*typeof* [`COMPASS`](../variables/COMPASS.md)\> + +Defined in: [tempo.enum.ts:21](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L21) + +cardinal directions diff --git a/packages/tempo/doc/api/type-aliases/DURATION-1.md b/packages/tempo/doc/api/type-aliases/DURATION-1.md new file mode 100644 index 00000000..72b2677a --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/DURATION-1.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **DURATION** = `KeyOf`\<*typeof* [`DURATION`](../variables/DURATION.md)\> + +Defined in: [tempo.enum.ts:148](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L148) + +number of seconds in a time unit diff --git a/packages/tempo/doc/api/type-aliases/DURATIONS.md b/packages/tempo/doc/api/type-aliases/DURATIONS.md new file mode 100644 index 00000000..a1c01965 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/DURATIONS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **DURATIONS** = `KeyOf`\<*typeof* [`DURATIONS`](../variables/DURATIONS.md)\> + +Defined in: [tempo.enum.ts:152](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L152) + +number of milliseconds in a time unit diff --git a/packages/tempo/doc/api/type-aliases/DateTime.md b/packages/tempo/doc/api/type-aliases/DateTime.md new file mode 100644 index 00000000..b8da1b54 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/DateTime.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **DateTime** = `string` \| `number` \| `bigint` \| `Date` \| [`Tempo`](../classes/Tempo.md) \| `TemporalObject` \| `Temporal.ZonedDateTimeLike` \| `undefined` \| `null` + +Defined in: [tempo.type.ts:38](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L38) + +the value that Tempo will attempt to interpret as a valid ISO date / time diff --git a/packages/tempo/doc/api/type-aliases/DateTimeUnit.md b/packages/tempo/doc/api/type-aliases/DateTimeUnit.md new file mode 100644 index 00000000..6aa25e28 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/DateTimeUnit.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **DateTimeUnit** = `Temporal.DateUnit` \| `Temporal.TimeUnit` + +Defined in: [tempo.type.ts:57](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L57) + +Configuration to use for #until() and #since() argument diff --git a/packages/tempo/doc/api/type-aliases/Duration.md b/packages/tempo/doc/api/type-aliases/Duration.md new file mode 100644 index 00000000..38a74463 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Duration.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Duration** = `NonOptional`\<`Temporal.DurationLikeObject`\> & `Record`\<`"iso"`, `string`\> & `Record`\<`"sign"`, `number`\> & `Record`\<`"blank"`, `boolean`\> & `Record`\<`"unit"`, `string` \| `undefined`\> + +Defined in: [tempo.type.ts:106](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L106) diff --git a/packages/tempo/doc/api/type-aliases/ELEMENT-1.md b/packages/tempo/doc/api/type-aliases/ELEMENT-1.md new file mode 100644 index 00000000..ce9cc0d0 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/ELEMENT-1.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **ELEMENT** = `ValueOf`\<*typeof* [`ELEMENT`](../variables/ELEMENT.md)\> + +Defined in: [tempo.enum.ts:184](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L184) diff --git a/packages/tempo/doc/api/type-aliases/Element.md b/packages/tempo/doc/api/type-aliases/Element.md new file mode 100644 index 00000000..40c370d3 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Element.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Element** = `enums.Element` + +Defined in: [tempo.type.ts:137](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L137) diff --git a/packages/tempo/doc/api/type-aliases/FORMAT-1.md b/packages/tempo/doc/api/type-aliases/FORMAT-1.md new file mode 100644 index 00000000..a8b84c73 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/FORMAT-1.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **FORMAT** = `ValueOf`\<*typeof* [`FORMAT`](../variables/FORMAT.md)\> + +Defined in: [tempo.enum.ts:156](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L156) + +common format aliases diff --git a/packages/tempo/doc/api/type-aliases/FlexibleDuration.md b/packages/tempo/doc/api/type-aliases/FlexibleDuration.md new file mode 100644 index 00000000..5c39b13b --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/FlexibleDuration.md @@ -0,0 +1,23 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **FlexibleDuration** = `{ [K in Units]: Pick & { [P in keyof Omit]?: number } }`\[[`Units`](Units.md)\] + +Defined in: [tempo.type.ts:75](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L75) + +# FlexibleDuration +A distributive mapped type over [Units](Units.md) which requires at least one duration key +from [BaseDuration](BaseDuration.md) (the mapped key K) while making all other BaseDuration +properties optional. + +## Example + +```ts +// Valid: at least one key is present +const a: FlexibleDuration = { hours: 1 }; +const b: FlexibleDuration = { hours: 1, minutes: 30 }; + +// Invalid: empty object (no mandatory key) +const c: FlexibleDuration = {}; +``` diff --git a/packages/tempo/doc/api/type-aliases/Format.md b/packages/tempo/doc/api/type-aliases/Format.md new file mode 100644 index 00000000..017ac84f --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Format.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Format** = `enums.Format` + +Defined in: [tempo.type.ts:115](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L115) + +Union of all known format strings diff --git a/packages/tempo/doc/api/type-aliases/FormatRegistry.md b/packages/tempo/doc/api/type-aliases/FormatRegistry.md new file mode 100644 index 00000000..27fb63e1 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/FormatRegistry.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **FormatRegistry** = `enums.FormatEnum` + +Defined in: [tempo.type.ts:117](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L117) + +Enum registry of format strings diff --git a/packages/tempo/doc/api/type-aliases/FormatType.md b/packages/tempo/doc/api/type-aliases/FormatType.md new file mode 100644 index 00000000..a4ead0f5 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/FormatType.md @@ -0,0 +1,13 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **FormatType**\<`K`\> = `enums.FormatType`\<`K`\> + +Defined in: [tempo.type.ts:118](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L118) + +## Type Parameters + +### K + +`K` *extends* `PropertyKey` diff --git a/packages/tempo/doc/api/type-aliases/Formats.md b/packages/tempo/doc/api/type-aliases/Formats.md new file mode 100644 index 00000000..b495f67f --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Formats.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Formats** = `enums.Formats` + +Defined in: [tempo.type.ts:112](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L112) + +mapping of format names to instance-resolutions (string | number) diff --git a/packages/tempo/doc/api/type-aliases/Groups.md b/packages/tempo/doc/api/type-aliases/Groups.md new file mode 100644 index 00000000..b1cd28cf --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Groups.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Groups** = `Record`\<`string`, `string`\> + +Defined in: [tempo.type.ts:43](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L43) diff --git a/packages/tempo/doc/api/type-aliases/Logic.md b/packages/tempo/doc/api/type-aliases/Logic.md new file mode 100644 index 00000000..d07b1170 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Logic.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Logic** = `string` \| `number` \| `Function` + +Defined in: [tempo.type.ts:41](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L41) diff --git a/packages/tempo/doc/api/type-aliases/MODE-1.md b/packages/tempo/doc/api/type-aliases/MODE-1.md new file mode 100644 index 00000000..8bd4792a --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/MODE-1.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **MODE** = `ValueOf`\<*typeof* [`MODE`](../variables/MODE.md)\> + +Defined in: [tempo.enum.ts:217](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L217) + +initialization strategies diff --git a/packages/tempo/doc/api/type-aliases/MONTH-1.md b/packages/tempo/doc/api/type-aliases/MONTH-1.md new file mode 100644 index 00000000..d0d8dcaf --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/MONTH-1.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **MONTH** = `KeyOf`\<*typeof* [`MONTH`](../variables/MONTH.md)\> + +Defined in: [tempo.enum.ts:129](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L129) + +Gregorian calendar months (short-form) diff --git a/packages/tempo/doc/api/type-aliases/MONTHS.md b/packages/tempo/doc/api/type-aliases/MONTHS.md new file mode 100644 index 00000000..e8750d2e --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/MONTHS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **MONTHS** = `KeyOf`\<*typeof* [`MONTHS`](../variables/MONTHS.md)\> + +Defined in: [tempo.enum.ts:131](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L131) + +Gregorian calendar months (long-form) diff --git a/packages/tempo/doc/api/type-aliases/MUTATION.md b/packages/tempo/doc/api/type-aliases/MUTATION.md new file mode 100644 index 00000000..d3fdfc0a --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/MUTATION.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **MUTATION** = `ValueOf`\<*typeof* [`MUTATION`](../variables/MUTATION.md)\> + +Defined in: [tempo.enum.ts:201](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L201) diff --git a/packages/tempo/doc/api/type-aliases/Mode.md b/packages/tempo/doc/api/type-aliases/Mode.md new file mode 100644 index 00000000..2bdde262 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Mode.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Mode** = [`MODE`](MODE-1.md) + +Defined in: [tempo.type.ts:139](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L139) diff --git a/packages/tempo/doc/api/type-aliases/Modifier.md b/packages/tempo/doc/api/type-aliases/Modifier.md new file mode 100644 index 00000000..5704ff29 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Modifier.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Modifier** = `"="` \| `"-"` \| `"+"` \| `"<"` \| `"<="` \| `"-="` \| `">"` \| `">="` \| `"+="` \| `"this"` \| `"next"` \| `"prev"` \| `"last"` \| `"first"` \| `undefined` + +Defined in: [tempo.type.ts:94](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L94) diff --git a/packages/tempo/doc/api/type-aliases/Month.md b/packages/tempo/doc/api/type-aliases/Month.md new file mode 100644 index 00000000..ea07ab91 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Month.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Month** = `enums.Month` + +Defined in: [tempo.type.ts:136](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L136) diff --git a/packages/tempo/doc/api/type-aliases/Mutate.md b/packages/tempo/doc/api/type-aliases/Mutate.md new file mode 100644 index 00000000..7afee34b --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Mutate.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Mutate** = `"start"` \| `"mid"` \| `"end"` + +Defined in: [tempo.type.ts:80](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L80) diff --git a/packages/tempo/doc/api/type-aliases/Number.md b/packages/tempo/doc/api/type-aliases/Number.md new file mode 100644 index 00000000..35c5e295 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Number.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Number** = `enums.Number` + +Defined in: [tempo.type.ts:138](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L138) diff --git a/packages/tempo/doc/api/type-aliases/NumericPattern.md b/packages/tempo/doc/api/type-aliases/NumericPattern.md new file mode 100644 index 00000000..0f751973 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/NumericPattern.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **NumericPattern** = *typeof* `enums.NumericPattern`\[`number`\] + +Defined in: [tempo.type.ts:140](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L140) diff --git a/packages/tempo/doc/api/type-aliases/Options.md b/packages/tempo/doc/api/type-aliases/Options.md new file mode 100644 index 00000000..d2c1e9f8 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Options.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Options** = `Prettify`\<`{ [K in keyof BaseOptions]?: BaseOptions[K] }` & `Record`\<`string`, `any`\>\> + +Defined in: [tempo.type.ts:45](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L45) diff --git a/packages/tempo/doc/api/type-aliases/OwnFormat.md b/packages/tempo/doc/api/type-aliases/OwnFormat.md new file mode 100644 index 00000000..b9821a48 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/OwnFormat.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **OwnFormat** = `enums.OwnFormat` + +Defined in: [tempo.type.ts:109](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L109) + +pre-configured format strings diff --git a/packages/tempo/doc/api/type-aliases/Pair.md b/packages/tempo/doc/api/type-aliases/Pair.md new file mode 100644 index 00000000..e5a9a621 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Pair.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Pair** = \[`string`, `string`\] + +Defined in: [tempo.type.ts:42](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L42) diff --git a/packages/tempo/doc/api/type-aliases/Pattern.md b/packages/tempo/doc/api/type-aliases/Pattern.md new file mode 100644 index 00000000..2789c1e4 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Pattern.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Pattern** = `string` \| `RegExp` + +Defined in: [tempo.type.ts:40](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L40) diff --git a/packages/tempo/doc/api/type-aliases/Range.md b/packages/tempo/doc/api/type-aliases/Range.md new file mode 100644 index 00000000..fbba4cd9 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Range.md @@ -0,0 +1,10 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Range** = `Prettify`\<`object` & \{ `year`: `number`; \} \| \{ `month`: `number`; \} \| \{ `week`: `number`; \} \| \{ `day`: `number`; \} \| \{ `hour`: `number`; \} \| \{ `minute`: `number`; \} \| \{ `second`: `number`; \} \| \{ `millisecond`: `number`; \} \| \{ `microsecond`: `number`; \} \| \{ `nanosecond`: `number`; \} & `object`\> + +Defined in: [plugin/plugin.type.ts:59](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L59) + +## Range +Discrete time interval within a specific term. diff --git a/packages/tempo/doc/api/type-aliases/Relative.md b/packages/tempo/doc/api/type-aliases/Relative.md new file mode 100644 index 00000000..95c00293 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Relative.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Relative** = `"ago"` \| `"hence"` \| `"prior"` \| `"from now"` + +Defined in: [tempo.type.ts:95](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L95) diff --git a/packages/tempo/doc/api/type-aliases/ResolvedRange.md b/packages/tempo/doc/api/type-aliases/ResolvedRange.md new file mode 100644 index 00000000..17fc7c60 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/ResolvedRange.md @@ -0,0 +1,36 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **ResolvedRange** = [`Range`](Range.md) & `object` + +Defined in: [plugin/plugin.type.ts:90](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L90) + +## ResolvedRange +Range with additional metadata. + +## Type Declaration + +### end + +> **end**: [`Tempo`](../classes/Tempo.md) + +### label? + +> `optional` **label?**: `string` + +### rollover? + +> `optional` **rollover?**: `string` + +### scope? + +> `optional` **scope?**: `string` + +### start + +> **start**: [`Tempo`](../classes/Tempo.md) + +### unit? + +> `optional` **unit?**: `string` diff --git a/packages/tempo/doc/api/type-aliases/SEASON.md b/packages/tempo/doc/api/type-aliases/SEASON.md new file mode 100644 index 00000000..b70e825a --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/SEASON.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **SEASON** = `ValueOf`\<*typeof* [`SEASON`](../variables/SEASON.md)\> + +Defined in: [tempo.enum.ts:12](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L12) + +calendar seasons diff --git a/packages/tempo/doc/api/type-aliases/Set.md b/packages/tempo/doc/api/type-aliases/Set.md new file mode 100644 index 00000000..0bede66d --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Set.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Set** = `Prettify`\<[`SetFields`](SetFields.md) & `object` & [`TermOffset`](TermOffset.md)\> \| [`DateTime`](DateTime.md) + +Defined in: [tempo.type.ts:87](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L87) diff --git a/packages/tempo/doc/api/type-aliases/SetFields.md b/packages/tempo/doc/api/type-aliases/SetFields.md new file mode 100644 index 00000000..2e09f78d --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/SetFields.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **SetFields** = \{ \[K in Mutate\]?: Unit \| \`#$\{string\}\` \} & \{ \[K in "date" \| "time" \| "event" \| "period"\]?: string \} + +Defined in: [tempo.type.ts:82](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L82) diff --git a/packages/tempo/doc/api/type-aliases/TIMEZONE.md b/packages/tempo/doc/api/type-aliases/TIMEZONE.md new file mode 100644 index 00000000..78886a58 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/TIMEZONE.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **TIMEZONE** = `KeyOf`\<*typeof* [`TIMEZONE`](../variables/TIMEZONE.md)\> + +Defined in: [tempo.enum.ts:143](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L143) + +common time-zone aliases diff --git a/packages/tempo/doc/api/type-aliases/TermOffset.md b/packages/tempo/doc/api/type-aliases/TermOffset.md new file mode 100644 index 00000000..d8454561 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/TermOffset.md @@ -0,0 +1,11 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **TermOffset** = `object` + +Defined in: [tempo.type.ts:81](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L81) + +## Index Signature + +\[`K`: `` `#${string}` ``\]: `string` \| `number` diff --git a/packages/tempo/doc/api/type-aliases/Terms.md b/packages/tempo/doc/api/type-aliases/Terms.md new file mode 100644 index 00000000..fc30f5aa --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Terms.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Terms** = `Property`\<`any`\> + +Defined in: [plugin/plugin.type.ts:21](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/plugin/plugin.type.ts#L21) + +mapping of terms to their resolved values diff --git a/packages/tempo/doc/api/type-aliases/Unit.md b/packages/tempo/doc/api/type-aliases/Unit.md new file mode 100644 index 00000000..063f05d0 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Unit.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Unit** = [`DateTimeUnit`](DateTimeUnit.md) \| `Plural`\<[`DateTimeUnit`](DateTimeUnit.md)\> + +Defined in: [tempo.type.ts:58](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L58) diff --git a/packages/tempo/doc/api/type-aliases/Units.md b/packages/tempo/doc/api/type-aliases/Units.md new file mode 100644 index 00000000..6fba868f --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Units.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Units** = `Temporal.PluralizeUnit`\<[`DateTimeUnit`](DateTimeUnit.md)\> + +Defined in: [tempo.type.ts:59](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L59) diff --git a/packages/tempo/doc/api/type-aliases/Until.md b/packages/tempo/doc/api/type-aliases/Until.md new file mode 100644 index 00000000..f437808e --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Until.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Until** = [`Options`](Options.md) & `object` \| [`Unit`](Unit.md) + +Defined in: [tempo.type.ts:78](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L78) diff --git a/packages/tempo/doc/api/type-aliases/WEEKDAY-1.md b/packages/tempo/doc/api/type-aliases/WEEKDAY-1.md new file mode 100644 index 00000000..84a18d76 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/WEEKDAY-1.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **WEEKDAY** = `KeyOf`\<*typeof* [`WEEKDAY`](../variables/WEEKDAY.md)\> + +Defined in: [tempo.enum.ts:119](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L119) + +Gregorian calendar week-days (short-form) diff --git a/packages/tempo/doc/api/type-aliases/WEEKDAYS.md b/packages/tempo/doc/api/type-aliases/WEEKDAYS.md new file mode 100644 index 00000000..ec01515f --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/WEEKDAYS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **WEEKDAYS** = `KeyOf`\<*typeof* [`WEEKDAYS`](../variables/WEEKDAYS.md)\> + +Defined in: [tempo.enum.ts:121](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L121) + +Gregorian calendar week-days (long-form) diff --git a/packages/tempo/doc/api/type-aliases/Weekday.md b/packages/tempo/doc/api/type-aliases/Weekday.md new file mode 100644 index 00000000..efe26da8 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/Weekday.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **Weekday** = `enums.Weekday` + +Defined in: [tempo.type.ts:135](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L135) diff --git a/packages/tempo/doc/api/type-aliases/ZONED_DATE_TIME.md b/packages/tempo/doc/api/type-aliases/ZONED_DATE_TIME.md new file mode 100644 index 00000000..23f68ea2 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/ZONED_DATE_TIME.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **ZONED\_DATE\_TIME** = `ValueOf`\<*typeof* [`ZONED_DATE_TIME`](../variables/ZONED_DATE_TIME.md)\> + +Defined in: [tempo.enum.ts:207](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L207) diff --git a/packages/tempo/doc/api/type-aliases/hh.md b/packages/tempo/doc/api/type-aliases/hh.md new file mode 100644 index 00000000..05804041 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/hh.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **hh** = `IntRange`\<`0`, `24`\> + +Defined in: [tempo.type.ts:98](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L98) diff --git a/packages/tempo/doc/api/type-aliases/mi.md b/packages/tempo/doc/api/type-aliases/mi.md new file mode 100644 index 00000000..6ce4bd0e --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/mi.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **mi** = `IntRange`\<`0`, `60`\> + +Defined in: [tempo.type.ts:99](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L99) diff --git a/packages/tempo/doc/api/type-aliases/mm.md b/packages/tempo/doc/api/type-aliases/mm.md new file mode 100644 index 00000000..9540ef9f --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/mm.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **mm** = `IntRange`\<`0`, `12`\> + +Defined in: [tempo.type.ts:97](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L97) diff --git a/packages/tempo/doc/api/type-aliases/ms.md b/packages/tempo/doc/api/type-aliases/ms.md new file mode 100644 index 00000000..a0fb6640 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/ms.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **ms** = `IntRange`\<`0`, `999`\> + +Defined in: [tempo.type.ts:101](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L101) diff --git a/packages/tempo/doc/api/type-aliases/ns.md b/packages/tempo/doc/api/type-aliases/ns.md new file mode 100644 index 00000000..ae88d110 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/ns.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **ns** = `IntRange`\<`0`, `999`\> + +Defined in: [tempo.type.ts:103](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L103) diff --git a/packages/tempo/doc/api/type-aliases/ss.md b/packages/tempo/doc/api/type-aliases/ss.md new file mode 100644 index 00000000..abb57ca0 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/ss.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **ss** = `IntRange`\<`0`, `60`\> + +Defined in: [tempo.type.ts:100](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L100) diff --git a/packages/tempo/doc/api/type-aliases/us.md b/packages/tempo/doc/api/type-aliases/us.md new file mode 100644 index 00000000..7ac493b1 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/us.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **us** = `IntRange`\<`0`, `999`\> + +Defined in: [tempo.type.ts:102](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L102) diff --git a/packages/tempo/doc/api/type-aliases/ww.md b/packages/tempo/doc/api/type-aliases/ww.md new file mode 100644 index 00000000..f2c58716 --- /dev/null +++ b/packages/tempo/doc/api/type-aliases/ww.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **ww** = `IntRange`\<`1`, `53`\> + +Defined in: [tempo.type.ts:104](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.type.ts#L104) diff --git a/packages/tempo/doc/api/variables/COMPASS.md b/packages/tempo/doc/api/variables/COMPASS.md new file mode 100644 index 00000000..75c3ff11 --- /dev/null +++ b/packages/tempo/doc/api/variables/COMPASS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **COMPASS**: `EnumifyType`\<\{ `East`: `"east"`; `North`: `"north"`; `South`: `"south"`; `West`: `"west"`; \}\> + +Defined in: [tempo.enum.ts:21](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L21) + +cardinal directions diff --git a/packages/tempo/doc/api/variables/DISCOVERY.md b/packages/tempo/doc/api/variables/DISCOVERY.md new file mode 100644 index 00000000..f674abed --- /dev/null +++ b/packages/tempo/doc/api/variables/DISCOVERY.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **DISCOVERY**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:227](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L227) diff --git a/packages/tempo/doc/api/variables/DURATION.md b/packages/tempo/doc/api/variables/DURATION.md new file mode 100644 index 00000000..46fad38d --- /dev/null +++ b/packages/tempo/doc/api/variables/DURATION.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **DURATION**: `EnumifyType`\<\{ `day`: `86400`; `hour`: `3600`; `microsecond`: `0.000001`; `millisecond`: `0.001`; `minute`: `60`; `month`: `2628000`; `nanosecond`: `1e-9`; `second`: `1`; `week`: `604800`; `year`: `31536000`; \}\> + +Defined in: [tempo.enum.ts:148](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L148) + +number of seconds in a time unit diff --git a/packages/tempo/doc/api/variables/DURATIONS.md b/packages/tempo/doc/api/variables/DURATIONS.md new file mode 100644 index 00000000..4b8238be --- /dev/null +++ b/packages/tempo/doc/api/variables/DURATIONS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **DURATIONS**: `EnumifyType`\<\{ `days`: `86400000`; `hours`: `3600000`; `microseconds`: `0.001`; `milliseconds`: `1`; `minutes`: `60000`; `months`: `2628000000`; `nanoseconds`: `0.000001`; `seconds`: `1000`; `weeks`: `604800000`; `years`: `31536000000`; \}\> + +Defined in: [tempo.enum.ts:152](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L152) + +number of milliseconds in a time unit diff --git a/packages/tempo/doc/api/variables/ELEMENT.md b/packages/tempo/doc/api/variables/ELEMENT.md new file mode 100644 index 00000000..b9150bc6 --- /dev/null +++ b/packages/tempo/doc/api/variables/ELEMENT.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **ELEMENT**: `EnumifyType`\<\{ `dd`: `"day"`; `hh`: `"hour"`; `mi`: `"minute"`; `mm`: `"month"`; `ms`: `"millisecond"`; `ns`: `"nanosecond"`; `ss`: `"second"`; `us`: `"microsecond"`; `ww`: `"week"`; `yy`: `"year"`; \}\> + +Defined in: [tempo.enum.ts:184](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L184) diff --git a/packages/tempo/doc/api/variables/FORMAT.md b/packages/tempo/doc/api/variables/FORMAT.md new file mode 100644 index 00000000..b54823ff --- /dev/null +++ b/packages/tempo/doc/api/variables/FORMAT.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **FORMAT**: `EnumifyType`\<\{ `date`: `"{yyyy}-{mm}-{dd}"`; `dayDate`: `"{dd}-{mmm}-{yyyy}"`; `dayMonth`: `"{dd}-{mmm}"`; `dayTime`: `"{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}"`; `display`: `"{www}, {dd} {mmm} {yyyy}"`; `logStamp`: `"{yyyy}{mm}{dd}T{hhmiss}.{ff}"`; `sortTime`: `"{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}"`; `time`: `"{hh}:{mi}:{ss}"`; `weekDate`: `"{www}, {yyyy}-{mmm}-{dd}"`; `weekStamp`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}"`; `weekTime`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"`; `yearMonth`: `"{yyyy}{mm}"`; `yearMonthDay`: `"{yyyy}{mm}{dd}"`; `yearWeek`: `"{yw}{ww}"`; \}\> + +Defined in: [tempo.enum.ts:156](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L156) + +common format aliases diff --git a/packages/tempo/doc/api/variables/LIMIT.md b/packages/tempo/doc/api/variables/LIMIT.md new file mode 100644 index 00000000..b953527c --- /dev/null +++ b/packages/tempo/doc/api/variables/LIMIT.md @@ -0,0 +1,33 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **LIMIT**: `object` + +Defined in: [tempo.enum.ts:180](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L180) + +## Type Declaration + +### maxTempo + +#### Get Signature + +> **get** **maxTempo**(): `bigint` + +Tempo(31-Dec-9999.23:59:59).ns + +##### Returns + +`bigint` + +### minTempo + +#### Get Signature + +> **get** **minTempo**(): `bigint` + +Tempo(01-Jan-1000.00:00:00).ns + +##### Returns + +`bigint` diff --git a/packages/tempo/doc/api/variables/MODE.md b/packages/tempo/doc/api/variables/MODE.md new file mode 100644 index 00000000..b92c175a --- /dev/null +++ b/packages/tempo/doc/api/variables/MODE.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **MODE**: `EnumifyType`\<\{ `Auto`: `"auto"`; `Defer`: `"defer"`; `Strict`: `"strict"`; \}\> + +Defined in: [tempo.enum.ts:217](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L217) + +initialization strategies diff --git a/packages/tempo/doc/api/variables/MONTH.md b/packages/tempo/doc/api/variables/MONTH.md new file mode 100644 index 00000000..b4452d1c --- /dev/null +++ b/packages/tempo/doc/api/variables/MONTH.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **MONTH**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:129](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L129) + +Gregorian calendar months (short-form) diff --git a/packages/tempo/doc/api/variables/MONTHS.md b/packages/tempo/doc/api/variables/MONTHS.md new file mode 100644 index 00000000..f31a0833 --- /dev/null +++ b/packages/tempo/doc/api/variables/MONTHS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **MONTHS**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:131](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L131) + +Gregorian calendar months (long-form) diff --git a/packages/tempo/doc/api/variables/MUTATION.md b/packages/tempo/doc/api/variables/MUTATION.md new file mode 100644 index 00000000..fd166505 --- /dev/null +++ b/packages/tempo/doc/api/variables/MUTATION.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **MUTATION**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:201](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L201) diff --git a/packages/tempo/doc/api/variables/NUMBER.md b/packages/tempo/doc/api/variables/NUMBER.md new file mode 100644 index 00000000..8230c7c0 --- /dev/null +++ b/packages/tempo/doc/api/variables/NUMBER.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **NUMBER**: `EnumifyType`\<\{ `eight`: `8`; `five`: `5`; `four`: `4`; `nine`: `9`; `one`: `1`; `seven`: `7`; `six`: `6`; `ten`: `10`; `three`: `3`; `two`: `2`; `zero`: `0`; \}\> + +Defined in: [tempo.enum.ts:139](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L139) + +number names (0-10) diff --git a/packages/tempo/doc/api/variables/OPTION.md b/packages/tempo/doc/api/variables/OPTION.md new file mode 100644 index 00000000..b77a41e9 --- /dev/null +++ b/packages/tempo/doc/api/variables/OPTION.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **OPTION**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:213](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L213) diff --git a/packages/tempo/doc/api/variables/PARSE.md b/packages/tempo/doc/api/variables/PARSE.md new file mode 100644 index 00000000..91639321 --- /dev/null +++ b/packages/tempo/doc/api/variables/PARSE.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **PARSE**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:222](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L222) diff --git a/packages/tempo/doc/api/variables/SEASON.md b/packages/tempo/doc/api/variables/SEASON.md new file mode 100644 index 00000000..dae74e2f --- /dev/null +++ b/packages/tempo/doc/api/variables/SEASON.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **SEASON**: `EnumifyType`\<\{ `Autumn`: `"autumn"`; `Spring`: `"spring"`; `Summer`: `"summer"`; `Winter`: `"winter"`; \}\> + +Defined in: [tempo.enum.ts:12](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L12) + +calendar seasons diff --git a/packages/tempo/doc/api/variables/TIMEZONE.md b/packages/tempo/doc/api/variables/TIMEZONE.md new file mode 100644 index 00000000..ce8b1329 --- /dev/null +++ b/packages/tempo/doc/api/variables/TIMEZONE.md @@ -0,0 +1,71 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **TIMEZONE**: `object` + +Defined in: [tempo.enum.ts:143](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L143) + +common time-zone aliases + +## Type Declaration + +### acst + +> `readonly` **acst**: `"Australia/Adelaide"` = `'Australia/Adelaide'` + +### aest + +> `readonly` **aest**: `"Australia/Sydney"` = `'Australia/Sydney'` + +### awst + +> `readonly` **awst**: `"Australia/Perth"` = `'Australia/Perth'` + +### cet + +> `readonly` **cet**: `"Europe/Paris"` = `'Europe/Paris'` + +### cst + +> `readonly` **cst**: `"America/Chicago"` = `'America/Chicago'` + +### eet + +> `readonly` **eet**: `"Europe/Helsinki"` = `'Europe/Helsinki'` + +### est + +> `readonly` **est**: `"America/New_York"` = `'America/New_York'` + +### gmt + +> `readonly` **gmt**: `"Europe/London"` = `'Europe/London'` + +### ist + +> `readonly` **ist**: `"Asia/Kolkata"` = `'Asia/Kolkata'` + +### jst + +> `readonly` **jst**: `"Asia/Tokyo"` = `'Asia/Tokyo'` + +### mst + +> `readonly` **mst**: `"America/Denver"` = `'America/Denver'` + +### npt + +> `readonly` **npt**: `"Asia/Kathmandu"` = `'Asia/Kathmandu'` + +### nzt + +> `readonly` **nzt**: `"Pacific/Auckland"` = `'Pacific/Auckland'` + +### pst + +> `readonly` **pst**: `"America/Los_Angeles"` = `'America/Los_Angeles'` + +### utc + +> `readonly` **utc**: `"UTC"` = `'UTC'` diff --git a/packages/tempo/doc/api/variables/WEEKDAY.md b/packages/tempo/doc/api/variables/WEEKDAY.md new file mode 100644 index 00000000..93d53e2e --- /dev/null +++ b/packages/tempo/doc/api/variables/WEEKDAY.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **WEEKDAY**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:119](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L119) + +Gregorian calendar week-days (short-form) diff --git a/packages/tempo/doc/api/variables/WEEKDAYS.md b/packages/tempo/doc/api/variables/WEEKDAYS.md new file mode 100644 index 00000000..1618aa7e --- /dev/null +++ b/packages/tempo/doc/api/variables/WEEKDAYS.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **WEEKDAYS**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:121](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L121) + +Gregorian calendar week-days (long-form) diff --git a/packages/tempo/doc/api/variables/ZONED_DATE_TIME.md b/packages/tempo/doc/api/variables/ZONED_DATE_TIME.md new file mode 100644 index 00000000..f64df3ed --- /dev/null +++ b/packages/tempo/doc/api/variables/ZONED_DATE_TIME.md @@ -0,0 +1,7 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **ZONED\_DATE\_TIME**: `EnumifyType`\<`Index`\\> + +Defined in: [tempo.enum.ts:207](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L207) diff --git a/packages/tempo/doc/api/variables/enums.md b/packages/tempo/doc/api/variables/enums.md new file mode 100644 index 00000000..92c5b9e2 --- /dev/null +++ b/packages/tempo/doc/api/variables/enums.md @@ -0,0 +1,195 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> **enums**: `object` + +Defined in: [tempo.enum.ts:237](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L237) + +public-reachable enums + +## Type Declaration + +### COMPASS + +> **COMPASS**: `EnumifyType`\<\{ `East`: `"east"`; `North`: `"north"`; `South`: `"south"`; `West`: `"west"`; \}\> + +cardinal directions + +### DURATION + +> **DURATION**: `EnumifyType`\<\{ `day`: `86400`; `hour`: `3600`; `microsecond`: `0.000001`; `millisecond`: `0.001`; `minute`: `60`; `month`: `2628000`; `nanosecond`: `1e-9`; `second`: `1`; `week`: `604800`; `year`: `31536000`; \}\> + +number of seconds in a time unit + +### DURATIONS + +> **DURATIONS**: `EnumifyType`\<\{ `days`: `86400000`; `hours`: `3600000`; `microseconds`: `0.001`; `milliseconds`: `1`; `minutes`: `60000`; `months`: `2628000000`; `nanoseconds`: `0.000001`; `seconds`: `1000`; `weeks`: `604800000`; `years`: `31536000000`; \}\> + +number of milliseconds in a time unit + +### ELEMENT + +> **ELEMENT**: `EnumifyType`\<\{ `dd`: `"day"`; `hh`: `"hour"`; `mi`: `"minute"`; `mm`: `"month"`; `ms`: `"millisecond"`; `ns`: `"nanosecond"`; `ss`: `"second"`; `us`: `"microsecond"`; `ww`: `"week"`; `yy`: `"year"`; \}\> + +### FORMAT + +> **FORMAT**: `EnumifyType`\<\{ `date`: `"{yyyy}-{mm}-{dd}"`; `dayDate`: `"{dd}-{mmm}-{yyyy}"`; `dayMonth`: `"{dd}-{mmm}"`; `dayTime`: `"{dd}-{mmm}-{yyyy} {hh}:{mi}:{ss}"`; `display`: `"{www}, {dd} {mmm} {yyyy}"`; `logStamp`: `"{yyyy}{mm}{dd}T{hhmiss}.{ff}"`; `sortTime`: `"{yyyy}-{mm}-{dd} {hh}:{mi}:{ss}"`; `time`: `"{hh}:{mi}:{ss}"`; `weekDate`: `"{www}, {yyyy}-{mmm}-{dd}"`; `weekStamp`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}.{ff}"`; `weekTime`: `"{www}, {yyyy}-{mmm}-{dd} {hh}:{mi}:{ss}"`; `yearMonth`: `"{yyyy}{mm}"`; `yearMonthDay`: `"{yyyy}{mm}{dd}"`; `yearWeek`: `"{yw}{ww}"`; \}\> + +common format aliases + +### LIMIT + +> **LIMIT**: `object` + +#### LIMIT.maxTempo + +##### Get Signature + +> **get** **maxTempo**(): `bigint` + +Defined in: [tempo.enum.ts:97](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L97) + +Tempo(31-Dec-9999.23:59:59).ns + +###### Returns + +`bigint` + +#### LIMIT.minTempo + +##### Get Signature + +> **get** **minTempo**(): `bigint` + +Defined in: [tempo.enum.ts:98](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.enum.ts#L98) + +Tempo(01-Jan-1000.00:00:00).ns + +###### Returns + +`bigint` + +### MODE + +> **MODE**: `EnumifyType`\<\{ `Auto`: `"auto"`; `Defer`: `"defer"`; `Strict`: `"strict"`; \}\> + +initialization strategies + +### MONTH + +> **MONTH**: `EnumifyType`\<`Index`\\> + +Gregorian calendar months (short-form) + +### MONTHS + +> **MONTHS**: `EnumifyType`\<`Index`\\> + +Gregorian calendar months (long-form) + +### MUTATION + +> **MUTATION**: `EnumifyType`\<`Index`\\> + +### NUMBER + +> **NUMBER**: `EnumifyType`\<\{ `eight`: `8`; `five`: `5`; `four`: `4`; `nine`: `9`; `one`: `1`; `seven`: `7`; `six`: `6`; `ten`: `10`; `three`: `3`; `two`: `2`; `zero`: `0`; \}\> + +number names (0-10) + +### OPTION + +> **OPTION**: `EnumifyType`\<`Index`\\> + +### PARSE + +> **PARSE**: `EnumifyType`\<`Index`\\> + +### SEASON + +> **SEASON**: `EnumifyType`\<\{ `Autumn`: `"autumn"`; `Spring`: `"spring"`; `Summer`: `"summer"`; `Winter`: `"winter"`; \}\> + +calendar seasons + +### TIMEZONE + +> **TIMEZONE**: `object` + +common time-zone aliases + +#### TIMEZONE.acst + +> `readonly` **acst**: `"Australia/Adelaide"` = `'Australia/Adelaide'` + +#### TIMEZONE.aest + +> `readonly` **aest**: `"Australia/Sydney"` = `'Australia/Sydney'` + +#### TIMEZONE.awst + +> `readonly` **awst**: `"Australia/Perth"` = `'Australia/Perth'` + +#### TIMEZONE.cet + +> `readonly` **cet**: `"Europe/Paris"` = `'Europe/Paris'` + +#### TIMEZONE.cst + +> `readonly` **cst**: `"America/Chicago"` = `'America/Chicago'` + +#### TIMEZONE.eet + +> `readonly` **eet**: `"Europe/Helsinki"` = `'Europe/Helsinki'` + +#### TIMEZONE.est + +> `readonly` **est**: `"America/New_York"` = `'America/New_York'` + +#### TIMEZONE.gmt + +> `readonly` **gmt**: `"Europe/London"` = `'Europe/London'` + +#### TIMEZONE.ist + +> `readonly` **ist**: `"Asia/Kolkata"` = `'Asia/Kolkata'` + +#### TIMEZONE.jst + +> `readonly` **jst**: `"Asia/Tokyo"` = `'Asia/Tokyo'` + +#### TIMEZONE.mst + +> `readonly` **mst**: `"America/Denver"` = `'America/Denver'` + +#### TIMEZONE.npt + +> `readonly` **npt**: `"Asia/Kathmandu"` = `'Asia/Kathmandu'` + +#### TIMEZONE.nzt + +> `readonly` **nzt**: `"Pacific/Auckland"` = `'Pacific/Auckland'` + +#### TIMEZONE.pst + +> `readonly` **pst**: `"America/Los_Angeles"` = `'America/Los_Angeles'` + +#### TIMEZONE.utc + +> `readonly` **utc**: `"UTC"` = `'UTC'` + +### WEEKDAY + +> **WEEKDAY**: `EnumifyType`\<`Index`\\> + +Gregorian calendar week-days (short-form) + +### WEEKDAYS + +> **WEEKDAYS**: `EnumifyType`\<`Index`\\> + +Gregorian calendar week-days (long-form) + +### ZONED\_DATE\_TIME + +> **ZONED\_DATE\_TIME**: `EnumifyType`\<`Index`\\> diff --git a/packages/tempo/doc/api/variables/fmtTempo.md b/packages/tempo/doc/api/variables/fmtTempo.md new file mode 100644 index 00000000..fd3f12ff --- /dev/null +++ b/packages/tempo/doc/api/variables/fmtTempo.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **fmtTempo**: `Fmt` + +Defined in: [tempo.class.ts:1824](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1824) + +format a Tempo diff --git a/packages/tempo/doc/api/variables/getStamp.md b/packages/tempo/doc/api/variables/getStamp.md new file mode 100644 index 00000000..b0e9e68f --- /dev/null +++ b/packages/tempo/doc/api/variables/getStamp.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **getStamp**: [`Params`](../interfaces/Params.md)\<`number` \| `bigint`\> + +Defined in: [tempo.class.ts:1822](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1822) + +current timestamp (ts) diff --git a/packages/tempo/doc/api/variables/getTempo.md b/packages/tempo/doc/api/variables/getTempo.md new file mode 100644 index 00000000..2c6e74b6 --- /dev/null +++ b/packages/tempo/doc/api/variables/getTempo.md @@ -0,0 +1,9 @@ +[**@magmacomputing/tempo**](../README.md) + +*** + +> `const` **getTempo**: [`Params`](../interfaces/Params.md)\<[`Tempo`](../classes/Tempo.md)\> + +Defined in: [tempo.class.ts:1823](https://github.com/magmacomputing/magma/blob/5faff5120d794572ccb66101602099151541b1b6/packages/tempo/src/tempo.class.ts#L1823) + +create new Tempo diff --git a/packages/tempo/doc/architecture.md b/packages/tempo/doc/architecture.md new file mode 100644 index 00000000..f3c3ae54 --- /dev/null +++ b/packages/tempo/doc/architecture.md @@ -0,0 +1,140 @@ +# 🏗️ Core Architecture + +Tempo v2.0.1 introduces several industry-leading architectural patterns designed for maximum resilience in complex Monorepo and Proxy-wrapped environments. + +## 🌐 Shared Global Registry +To solve the "Split-Brain" issue inherent in monorepo development (where multiple instances of the same library might be loaded), Tempo utilizes a **Shared Global Registry**. By leveraging `Symbol.for('magmacomputing/library/registry')` on `globalThis`, all versions of the Tempo and Library packages share a unified type-identification engine. This ensures that classes are correctly identified as constructors even when loaded across different module boundaries. + +## 🕵️ Decoupled Logging (Logify) +Tempo uses **Logify**, a diagnostic engine that leverages private Symbols to avoid polluting the public console or object state. +- **Context-Aware**: Logs track their discovery path (e.g., "Applied via Global Discovery"). +- **Zero-Footprint**: When `debug: false`, the logging overhead is mathematically eliminated. +- **Symbol-Gated**: Diagnostic metadata is attached via `Symbol.for($Logify)`, making it invisible to standard iteration (`Object.keys`) and serialization (`JSON.stringify`). + +## 🛡️ Hardened Functional Resolution +The engine implements a "Fail-Safe" execution pattern for functional inputs, automatically recovering from misidentified types—such as ES6 classes wrapped in defensive Proxies or circular dependency deadlocks. +- **Defensive Execution**: All plugin invocations are wrapped in recursive `try/catch` blocks. +- **Silent Failover**: When combined with `catch: true`, resolution failures return a **Void Instance**, preventing application crashes while providing clear diagnostic symbols for debugging. + +## 🏗️ Tempo Architecture: Internal Protection & Performance + +Tempo employs two distinct methodologies for protecting its internal state. These strategies are complementary, each tailored to a specific scope (Instance vs. Global) and performance requirement. + +--- + +## 🧭 Methodology Comparison + +| Feature | **Lazy Evaluation (Shadowing)** | **Soft Freeze (Proxy)** | +| :--- | :--- | :--- | +| **Primary Target** | `Tempo.#term`, `Tempo.#fmt` (Instance State) | `NUMBER`, `FORMAT` (Global Registries) | +| **Scope** | **Instance-Specific**: Unique to every separate `new Tempo()` call. | **Global-Shared**: One single source of truth used by all instances. | +| **Primary Goal** | **Performance**: Avoid computing expensive terms (e.g., `qtr` or `szn`) until they are needed, | **Extensibility**: Allow plugins to safely append new data to registries at runtime. | +| **Mechanism** | `Object.create(proto)` + Prototype Shadowing. | `new Proxy(target)` + Symbol-bypass. | +| **Why this one?** | **Memory Efficiency**: Thousands of instances share the same base prototype. | **Reference Stability**: Shared registries must stay at the same object reference. | + +--- + +## ⚡ The "Zero-Cost Constructor" Objective +Tempo is built with a **"Performance First"** mindset, specifically targeting the overhead of the class constructor. In high-frequency applications (like Tickers or real-time Dashboards), creating thousands of objects must be nearly as cheap as a primitive assignment. + +This objective is achieved through two primary architectural pillars: +1. **Lazy Evaluation ([Section 1](#1-lazy-evaluation-shadowing))**: Deferring the expensive work of string parsing and term computation until the first property access. +2. **Master Guard ([Section 3](#3-master-guard-fast-fail-sync-point))**: Implementing a high-speed "fast-fail" gatekeeper to instantly reject invalid inputs when parsing *is* eventually triggered. + +Together, these ensure that `new Tempo()` maintains an $O(1)$ constructor execution time by deferring $O(N)$ full-parse work until the first property access, regardless of how many plugins or custom terms are registered in the global system. + +--- + +## 🔁 Iteration & Enumerability (The Shadowing Chain) + +When using prototype shadowing, the JavaScript behavior for property inspection changes significantly. This is a trade-off for the performance gains. + +### ⚠️ The `Object.keys()` Warning +`Object.keys(instance.fmt)` only returns the **enumerable own properties** of the current link in the shadowing chain. +- **Initially**: Returns `[]` (all evaluated getters are non-enumerable on the base). +- **After 1st Access** (e.g., `.date`): Returns `['date']`. +- **After 2nd Access** (e.g., `.time`): Returns `['time']`. The `.date` property is now located on the **immediate prototype** of the current object. + +### 🛡️ The Flattening Iterator +Tempo implements a **Flattening Iterator** via `[Symbol.iterator]` which enables iterable consumers like `for...of`, array spread (`[...instance]`), and `Object.fromEntries(instance)` to traverse the shadowing chain (using `Object.getPrototypeOf`) and collect evaluated property entries. + +- **`[Symbol.iterator]`**: Traverses the shadowing chain to provide a flattened view of all computed state. +- **⚠️ Important**: `for...in` and object spread (`{...instance}`) **do not** use the iterator; instead, they rely on enumerable own/inherited properties and are not supported by the flattening logic. +- **`Tempo.formats` & `Tempo.terms`**: These static getters continue to provide a registry-wide view of **available** keys across the entire system, regardless of their evaluation state. + +--- + +## 1. Lazy Evaluation (Shadowing) +Used for: `Tempo.#term`, `Tempo.#fmt` + +The **Instance Shadowing** pattern is designed for massive scale. When a library is used heavily, creating thousands of `new Proxy()` objects adds significant memory overhead. Instead, Tempo leverages the native JavaScript prototype chain. + +### How it works: +- **Stage 0**: All instances initially point to the same base `#term` object containing un-evaluated getters. +- **Stage 1**: When a term (e.g., `.qtr`) is accessed, the value is computed once. +- **Stage 2**: Tempo uses a **Generic Lazy Delegator** Proxy (via `getLazyDelegator`) which catches property access and evaluates it on-demand. +- **Result**: The JS engine executes lookups via an optimized Proxy handler, making lookups nearly as fast as raw property access while keeping the state strictly immutable. + +> [!TIP] +> For more implementation details, see [Lazy Evaluation Pattern](./lazy-evaluation-pattern.md). + +--- + +## 2. Soft Freeze Strategy (Proxy) +Used for: `Tempo.NUMBER`, `Tempo.FORMAT`, `Tempo.TIMEZONE`, `Tempo.config` + +Global registries must be **live** but **secure**. As of **v2.0.1**, these are protected by a "Soft Freeze" layer to prevent accidental state corruption by third-party code. + +### How it works: +- **The User**: Sees a read-only Proxy that behaves like a frozen object. Direct assignments are blocked to prevent "poisoning" the global state. +- **The Library**: Uses a private symbol bypass to perform "Transactional Updates" via `registryUpdate()`. +- **Result**: The object reference remains constant while allowing controlled extensibility. This ensures that internal caches (like the Master Guard) can be re-synchronized whenever a registry changes. + +> [!TIP] +> For more implementation details, see [Soft Freeze Strategy](./soft_freeze_strategy.md). + +--- + + +## ⚡ 3. Master Guard (Guarded-Lazy Strategy) +Used for: `new Tempo(string | number)` + +The **Guarded-Lazy** strategy ensures that even with hundreds of custom plugins, the entry point remains nearly instantaneous. In **v2.0.1**, this was refined for 100% matching reliability. + +### How it works: +1. **Longest-Token Matching**: To prevent partial matching (e.g., matching `qtr` inside `quarter`), the guard uses a "Scan-and-Consume" loop that prioritizes the longest available token. +2. **Unified Wordlist**: The guard automatically ingests all registered Terms, Timezones, Month names, and Custom Events into a single high-speed lookup Set. +3. **High-Speed Gatekeeper**: By avoiding complex backtracking regexes, the gatekeeper provides predictable $O(1)$ performance even as the plugin list grows. +4. **Auto-Lazy**: Valid inputs that pass the guard automatically switch the instance to `mode: 'defer'`, deferring the full $O(N)$ parse work until a property is actually read. + +### 📈 Validation & Performance +The efficiency of the Master Guard and the success of the Zero-Cost objective have been validated via local benchmarking: + +- **Instantiation Overhead**: ~523µs on average (passing the Master Guard). *(Node.js v24.14.1, 12th Gen Intel i7-1255U, Linux x86_64; steady-state measured after 1k warm-up runs, n=10k. Validates the Zero-Cost objective on this hardware.)* +- **Fast-Fail Rejection**: ~359µs on average (failing the Master Guard). *(Node.js v24.14.1, 12th Gen Intel i7-1255U, Linux x86_64; steady-state measured after 1k warm-up runs, n=10k. Demonstrates the Master Guard's low-latency rejection performance.)* + +> [!TIP] +> For detailed timing results and methodology, see [Performance Benchmarks](./tempo.benchmarks.md). + +--- + +## 🔄 Internal Lifecycle & Reactive Sync +Tempo maintains system-wide synchronization through a private, Symbol-based hook system. + +### Reactive Registration +When a plugin is imported via a side-effect (`import '@magmacomputing/tempo/ticker'`), it triggers a **`sym.$Register`** hook. +- **Auto-Sync**: The `Tempo` class listens for these hooks and automatically updates its internal registries. +- **Guard Rebuild**: Every time a new term or layout is registered, the **Master Guard** is automatically rebuilt to include the new tokens, ensuring the "Zero-Cost Constructor" always stays up to date. + +### Disposable Engine (`Symbol.dispose`) +The `Tempo` class implements the explicit resource management pattern. +- **Clean Slate**: Calling `Tempo[Symbol.dispose]()` (or using the `using` keyword in a test suite) resets all global registries and configuration to their factory defaults. +- **Isolation**: This is critical for testing environments to prevent state-leaks between test cases. + +--- + +## ⚖️ Summary +The Tempo architecture follows the principle of **"Right Tool for the Job"**: +- **Shadowing** provides the extreme performance and memory efficiency required for **per-instance computed state**. +- **Proxies** provide the reference stability and controlled extensibility required for **global system registries**. +- **Master Guard** ensures that even with massive extensibility, the entry point remains a "Zero-Cost Constructor". diff --git a/packages/tempo/doc/commercial.md b/packages/tempo/doc/commercial.md new file mode 100644 index 00000000..15b86592 --- /dev/null +++ b/packages/tempo/doc/commercial.md @@ -0,0 +1,42 @@ +# 🤝 Magma Computing: Professional Services + +Tempo is a high-performance, precision date-time library maintained by **Magma Computing**. We offer a range of professional services and private extensions to help teams build robust, time-sensitive applications. + +## 🚀 Our Services + +### 🧩 Custom Plugin Development +Need a specialized plugin for your industry? We design and implement high-performance Tempo extensions such as: +- **Financial Tickers**: Real-time market-aware pulses with weekend/holiday suppression. +- **Production Timelines**: Complex shift-based scheduling and resource allocation generators. +- **Custom Terms**: Domain-specific date ranges (e.g., academic years, retail seasons, or medical billing cycles). + +### 🏛️ Architecture & Migration Consulting +Transitioning from legacy libraries like **Moment.js** or **Luxon**? Our team can: +- Audit your existing date-time logic for `Temporal` compatibility. +- Perform high-fidelity migrations of complex "relative time" calculations. +- Optimize performance for large-scale data processing. + +### 🛡️ Enterprise Support +For mission-critical applications, we provide priority support, security auditing, and private bug-fix releases tailored to your deployment schedule. + +--- + +## 💎 Premium Extensions + +In addition to our open-source core, we offer a suite of **Premium Plugins** that are available via a private NPM registry or commercial license. These extensions provide advanced logic for enterprise-scale requirements. + +**[Browse the Plugin Marketplace](./tempo.plugin.md)** + +--- + +## 📬 Contact Us + +Ready to discuss your project? Get in touch with our engineering team: + +- **Email**: [contact@magmacomputing.com.au](mailto:contact@magmacomputing.com.au) +- **GitHub**: [github.com/magmacomputing](https://github.com/magmacomputing) + +--- + +> [!NOTE] +> Tempo is, and will always be, an **Open Core** project. Our professional services are designed to complement the free library with deep domain expertise and specialized extensions. diff --git a/packages/tempo/doc/comparison.md b/packages/tempo/doc/comparison.md new file mode 100644 index 00000000..85eb48c8 --- /dev/null +++ b/packages/tempo/doc/comparison.md @@ -0,0 +1,47 @@ +# 🥊 Tempo vs. The Competition + +If you are choosing a date library today, you are likely looking at **Day.js**, **Luxon**, or **date-fns**. While these are excellent tools, they were all built for the legacy `Date` era. + +**Tempo** is the first premium wrapper built specifically for the **Temporal API** (Stage 4), giving it unique advantages that legacy libraries simply cannot match. + +--- + +## At a Glance + +| Feature | Tempo 💎 | Day.js / Moment | Luxon | date-fns | +| :--- | :--- | :--- | :--- | :--- | +| **Foundation** | **Native Temporal** | Legacy `Date` | Legacy `Intl` + `Date` | Legacy `Date` | +| **Precision** | **Nanoseconds** | Milliseconds | Milliseconds | Milliseconds | +| **Parsing** | **Human-Centric** | Strict / Plugin | Strict | Modular / Strict | +| **Business Logic** | **Terms System** | Manual Math | Manual Math | Manual Math | +| **Time Zones** | **First-Class** | Plugin-based | Built-in | Separate Lib | +| **Future-Proof** | **100% (Native)** | Deprecated/Legacy | Legacy Bridge | Legacy Bridge | + +--- + +## 💎 Why Tempo Wins + +### 1. The "Terms" Engine (Business Intelligence) +Most libraries stop at "adding 2 days." Tempo introduces the **Terms** system, allowing you to encode domain-specific logic (Fiscal Quarters, Meteorological Seasons, Academic Terms, Zodiac Signs) directly into the tempo `term` object. +> *Competition:* You have to write custom utility functions and import them everywhere. + +### 2. Human-Centric Parsing +Day.js and Luxon are quite strict. If your string isn't in exactly the right format, they fail. Tempo’s **Snippet & Layout** engine is designed to be "forgiving" and human-centric, handling relative dates like "next Friday" or "Christmas" out of the box. +> *Competition:* Often requires an external library like `Chrono` or complex regex boilerplate. + +### 3. Nanosecond Precision +Native `Date` (and thus Day.js/Luxon/date-fns) is limited to milliseconds. For high-frequency trading, scientific data, or distributed systems, this isn't enough. Tempo inherits **nanosecond precision** from the Temporal API. +> *Competition:* Capped at 1/1000th of a second. + +### 4. Zero "Leaky Abstractions" +When you use a legacy library, you are often fighting the weirdness of the 1995 `Date` object (like months being 0-indexed). Tempo is built on `Temporal`, which was designed from the ground up to be mathematically sound and developer-friendly. + +--- + +## Which should you choose? + +- **Choose Day.js if:** You have a legacy codebase and need a tiny <2KB patch for simple tasks. +- **Choose Luxon if:** You need a mature, stable bridge while you wait for your environment to support Temporal. +- **Choose Tempo if:** You want to build on the **future of JavaScript**, you need **high precision**, or your app requires **complex business-date logic** that other libraries make difficult. + +[**Ready to start? See the Quick Start Guide →**](../README.md#🛠️-quick-start) diff --git a/packages/tempo/doc/lazy-evaluation-pattern.md b/packages/tempo/doc/lazy-evaluation-pattern.md new file mode 100644 index 00000000..75a93560 --- /dev/null +++ b/packages/tempo/doc/lazy-evaluation-pattern.md @@ -0,0 +1,69 @@ +# The Immutable Proxy-Delegator Lazy Evaluation Pattern + +When building complex JavaScript libraries (like date-time utilities), exposing numerous computed properties as getters on an object is common. However, computing them all upfront is expensive, and re-computing them on every access is wasteful. The standard solution is "Lazy Evaluation": evaluate the getter on first access, and then overwrite the getter with the literal value. + +But what if the base object is strictly **immutable** (via `Object.freeze`)? + +This article details a highly optimized $O(1)$ pattern for securely lazy-evaluating properties on immutable objects using a Proxy-based delegator and private fields. + +## The Problem: Mutating Frozen State + +A traditional lazy evaluation approach destroys and recreates the properties on the parent object. If the parent object is `Object.freeze()`'d for security (preventing API consumers from tampering with state), you cannot simply `Object.defineProperty` to overwrite the getter with a literal value. + +To get around freezing, you might try taking all property descriptors, wiping the object, mapping the other getters to a new object, adding the evaluated value, and calling `Object.freeze()` on the new object. This operation runs in $O(N)$ time every single time *any* getter is accessed. + +## The Solution: Proxy-Delegator with Memoization + +Tempo achieves lazy evaluation in $O(1)$ time using a **Delegator Proxy** that memoizes results back onto the target object. + +```javascript +// The O(1) approach - Extremely fast, zero overhead + +#setLazy(target, name, defineFunction) { + const get = () => { + const value = defineFunction.call(this); // Evaluate the value + + // Memoize the value by defining it as a static property on the target + Object.defineProperty(target, name, { + value, + enumerable: true, + configurable: true, + writable: false + }); + + return value; + }; + + // Define the initial getter + Object.defineProperty(target, name, { get, enumerable: true, configurable: true }); +} +``` + +### How it Works + +1. **Proxy Entry Point:** + Tempo uses a single Proxy (the `delegate` helper) to catch the very first access to a property. This Proxy doesn't store state; it just routes the request to the lazy evaluator. + +2. **Private Fields Bypass the Freeze:** + The internal containers (`#term`, `#fmt`) are private fields. Native JS Private Fields don't exist as properties on the object; they are internal engine slots. Thus, even if the `Tempo` instance is frozen, we can still update the *internal* state of the container objects. + +3. **Innate JS Engine Optimizations:** + Once a property (e.g., `.quarter`) is evaluated, it is "baked" into the target object as a standard value property. Subsequent lookups bypass the Proxy and the getter entirely. The JS engine treats it as a raw property access, which is the fastest possible operation in JavaScript. + +4. **Zero Over-allocation:** + Unused getters remain as simple function pointers. They cost absolutely nothing in execution time or memory until they are needed. + +### Summary + +By combining **Private Fields**, **Proxies**, and **Property Memoization**, Tempo builds securely immutable APIs that lazy-load computed getters with zero overhead after the initial call. + +## 🌈 The Best of All Worlds + +As of **v2.1.2**, Tempo uses a **Proxy-Delegator** that combines the security of immutability with the speed of raw property access: + +1. **Lazy by Default**: Properties are only evaluated when accessed, keeping the constructor near-instant. +2. **Memoized Evaluation**: Once accessed (e.g., `t.term.quarter`), the result is "baked" into the instance using `Object.defineProperty`. +3. **$O(1)$ Performance**: Every access *after* the first is a direct property lookup—no Proxy traps, no prototype traversal. +4. **Transparent Discovery**: Because properties are enumerable, `console.log(t.term)` or `JSON.stringify` will trigger the evaluation of all registered terms at once, providing a perfect "snapshot" of the instance state. + +To prevent diagnostic noise during these full-evaluation events, initialize Tempo with **`silent: true`**. diff --git a/packages/tempo/doc/migration-guide.md b/packages/tempo/doc/migration-guide.md new file mode 100644 index 00000000..94eb9e15 --- /dev/null +++ b/packages/tempo/doc/migration-guide.md @@ -0,0 +1,47 @@ +# ⚠️ Migrating to Tempo v2.x + +Tempo v2.x introduces architectural improvements and a more modular engine. While we strive for backward compatibility, there are some key changes to consider when upgrading from v1.x. + +## 📦 Modular Architecture +Tempo is now split into a `core` engine and optional modules. + +### If you use the full package: +If you import from `@magmacomputing/tempo`, everything (except Plugin extensions, like .ticker()) is included and works exactly like v1.x. No changes are required. + +### If you want a lean bundle: +You can now import the core engine only: +```javascript +import { Tempo } from '@magmacomputing/tempo/core'; +``` +If you do this, you must manually import the features you need. Built-in features now self-register on import via side-effects. + +## 🔌 Feature Registration +Features like `mutation`, `duration`, `format`, and the `ticker` are now modular. + +### v1.x (Automatic) +In v1.x, all features were always present. + +### v2.x (Opt-in for Core) +If using the Core engine, simply import the module to activate the feature: +```javascript +import '@magmacomputing/tempo/duration'; +import '@magmacomputing/tempo/ticker'; +``` + +## 🗓️ Term Logic Refactor +The way Terms (Quarters, Seasons, Zodiacs, etc.) are handled has been unified. + +- **v1.x:** Some term properties were ad-hoc on the instance. +- **v2.x:** All term logic is centralized under the `.term` property or accessible via the `#` shorthand in `.set()` and `.add()`. + +Example of new syntax: +```javascript +// Snap to start of quarter +t.set({ start: '#quarter' }); + +// Add two quarters while preserving day-of-quarter +t.add({ '#quarter': 2 }); +``` + +## 🧪 Testing and Stability +v2.x has been hardened with a 100% pass rate on our regression suite. If you were relying on undocumented "quirks" or bugs in v1.x parsing, you may find that v2.x is more strict and deterministic. diff --git a/packages/tempo/doc/releases/versions.md b/packages/tempo/doc/releases/versions.md new file mode 100644 index 00000000..56ca2419 --- /dev/null +++ b/packages/tempo/doc/releases/versions.md @@ -0,0 +1,64 @@ +# 📜 Version History + +## [v2.1.3] - 2026-04-18 +### New Features +Added VitePress-based documentation system with TypeDoc API reference integration +Introduced browser demo pages showcasing various loading patterns +Expanded Temporal utilities with nanosecond-precision support and helper functions + +### Improvements +Refactored plugin system to object-based API for improved extensibility +Enhanced memoization performance and caching mechanisms +Streamlined library exports for better modularity and tree-shaking + +### Documentation +New CONTRIBUTING.md guide for developers +Added release process documentation +Updated README with improved formatting + +## [v2.1.2] - 2026-04-16 +Tempo v2.1.2 is a major milestone, delivering a more reactive architecture and rock-solid stability. + +### 🏗️ Modular Architecture +Tempo is now split into `core` and optional plugin/modules, allowing you to include only what you need. This reduces bundle size for users who only need the basic engine. + +### 📝 Improved Logging +Internal logging now uses context-aware Symbols. This decouples the logging logic from the core engine, allowing for cleaner diagnostics without performance overhead. + +### ⏱️ Static API +- Added `Tempo.duration()` static method for convenient duration creation without instantiating a full Tempo date object first. + +### 🔌 Side Effect Registration +Plugins now support automatic registration. +- The full `@magmacomputing/tempo` package includes all modules by default. +- Core users (`@magmacomputing/tempo/core`) can activate features simply by importing the corresponding module (e.g., `import '@magmacomputing/tempo/ticker'`). + +### 🛡️ 100% Reliability +The engine passes all regression tests, ensuring complete stability across: +- Parsing complex date strings. +- Calculation and relative math. +- Formatting routines. + +### 🗓️ Unified Term Logic +Terms (like Quarters and Seasons) are now fully integrated: +- Use `#` in `set()` to jump to boundaries (e.g., `t.set({ start: '#quarter' })`). +- Use `{#term}` in `format()` to embed semantic labels (e.g. "Second Quarter") directly into strings (e.g., `t.format('Today is {yyyy}-{mm}-{dd} in the {#quarter}')`. + +### ➗ Relational Term Math +A category-first feature. Shift dates by semantic "steps" with `.add({ '#quarter': 1 })`. Tempo preserves your relative duration within the term, jumping across gaps and handling overflows with mathematical precision. + +### 🔗 Fluent Immutable Boundaries +Term ranges now return fully functional, frozen `Tempo` instances for `start` and `end`. This allows for seamless chaining: +```javascript +t.term.qtr.start.format('{dd} {mmm}') +``` + +### ⚡ Ticker Reliability +Fully stabilized the Ticker subsystem: +- Resolved async generator hangs. +- Synchronized pulse counts ($N$ pulses for `limit: N`), guaranteeing 100% predictable reactive streams. + +### 🚀 Parsing Engine Optimization +- Re-engineered pattern generation for $O(1)$ instance creation. +- Improved support for custom layout literals in local/one-off parsers. +- Significant refinements to the natural language engine for even more intuitive relative-date handling ("next Friday", "two days ago", etc.). diff --git a/packages/tempo/doc/soft_freeze_strategy.md b/packages/tempo/doc/soft_freeze_strategy.md new file mode 100644 index 00000000..c8406993 --- /dev/null +++ b/packages/tempo/doc/soft_freeze_strategy.md @@ -0,0 +1,90 @@ +# Soft Freeze Strategy + +The **Soft Freeze** is a design pattern used in the Tempo library to balance **Public Immutability** with **Internal Extensibility**. It ensures that shared registries (like `NUMBER`, `FORMAT`, or `DURATION`) are read-only for users while remaining mutable for internal library features like plugin and runtime updates. + +## The Problem + +Standard JavaScript `Object.freeze()` is a "Hard Freeze": +- **Pros**: Guaranteed immutability; prevents accidental state corruption. +- **Cons**: Impossible to extend. Once frozen, even the library itself cannot add new formats or number-words (e.g., via `Tempo.registryUpdate`). + +An unfrozen object is even riskier: +- **Risk**: A user could accidentally write `NUMBER['one'] = 'two'`, which would break the library globally for all instances. + +## The Solution: Soft Freeze + +A Soft Freeze uses a **Read-Only Proxy** wrapped around a **Mutable Target**. + +### 1. The Proxy (Public Shield) +The Proxy traps all mutation attempts (`set`, `deleteProperty`, `defineProperty`) and returns `false`. This makes the object look and feel like a frozen object to the public API. + +### 2. The Target (Internal Source of Truth) +The underlying object remains mutable. It is NOT passed through `Object.freeze()`. This allows the library to perform controlled mutations when explicitly requested (e.g., during plugin registration). + +### 3. Access Control ($Target Symbol) +The library uses a private `Symbol` called `$Target`. Only code with access to this symbol can "unwrap" the proxy to access the mutable underlying object. + +--- + +## Implementation Details + +### `proxy.library.ts` +The core logic resides in `proxify`, which now supports an optional `lock` parameter. + +- **Hard Freeze** (`frozen=true, lock=true`): Both the proxy and the target are immutable. +- **Soft Freeze** (`frozen=true, lock=false`): The proxy is read-only, but the target stays mutable. + +```typescript +export function proxify(target: T, frozen = true, lock = frozen) { + const tgt = (target as any)[$Target] ?? target; // unwrap proxy + + // Hard Freeze: prevent all mutation to the target + if (lock) secure(tgt); + + return new Proxy(tgt, { + set: (_, key, val) => { + // Soft Freeze: Proxy blocks mutation, but target stays mutable + return frozen ? false : Reflect.set(tgt, key, val); + }, + deleteProperty: (_, key) => { + return frozen ? false : Reflect.deleteProperty(tgt, key); + }, + // ... other traps + }); +} +``` + +### `enumerate.library.ts` +The `enumify` utility uses Soft Freeze by default for registries that are intended to be extensible. + +```typescript +export function enumify(list, frozen = true) { + const target = Object.create(proto, descriptors); + + // Default to Soft Freeze (frozen=true, lock=false) + // if 'frozen' is passed as false, it signals 'extensible library registry' + return proxify(target, true, frozen); +} +``` + +## Benefits +1. **Bulletproof Public API**: Users cannot accidentally overwrite library constants. +2. **Library Extensibility**: A plugin can add new data to registries at runtime without bypasses or 'hacks'. +3. **Safe Global Discovery**: External discovery objects (via `Symbol.for($Tempo)`) can extend the library with new aliases but are prevented from overwriting core keys. +4. **Internal State Integrity**: Centralized `STATE` objects are protected from direct access while providing a single source of truth. +5. **Transparent Experience**: The object behaves like a POJO (Plain Old JavaScript Object) in the debugger and typical usage. + +## The "Safe Merge" Rule + +To prevent a global discovery object from "trashing" the registry, the library implements a **Safe Merge** rule for all shared states. + +When merging external data (discovery or plugin): +- **Additive Only**: New keys are added. +- **Root Protection**: Core building blocks (like `NUMBER['one']` or `FORMAT['iso']`) are protected from being overwritten. + +This ensures that while the library is extensible, its fundamental logic remains deterministic and secure across all environments. + +--- + +> [!NOTE] +> **v2.1.2 Update**: The Soft Freeze is now tightly integrated with **Logify**. Internal state updates bypass the Proxy using a private Symbol, allowing the engine to remain "Silent" while performing complex transactional updates during the discovery phase. diff --git a/packages/tempo/doc/tempo-vs-temporal.md b/packages/tempo/doc/tempo-vs-temporal.md new file mode 100644 index 00000000..99687bfa --- /dev/null +++ b/packages/tempo/doc/tempo-vs-temporal.md @@ -0,0 +1,88 @@ +# 🆚 Tempo vs. Native Temporal + +While `Temporal` provides an excellent, mathematically sound foundation for dates in JavaScript, it is designed to be highly explicit and strict. **Tempo** acts as a developer-friendly wrapper that eliminates boilerplate and makes common tasks effortless, while still giving you the rock-solid reliability of Temporal under the hood. + +To enhance (not replace) Temporal's strictness, Tempo adds: +* flexibility (through its parsing engine and output formatting), +* convenience (through its many getters and methods), +* configurability (through its dynamic aliases (events, periods)), +* business logic (through its lazy-loaded plugin system (terms)) + +Here is a side-by-side comparison of how you achieve the same outcomes, as well as things Tempo can do that native Temporal cannot easily. + +### 1. Parsing: Strict vs. Flexible + +Temporal only accepts strict ISO 8601 strings. If you have user input, database dumps, or human-readable dates, you have to write your own parser first. Tempo handles it out-of-the-box. + +**Native Temporal ❌** +```javascript + +Temporal.PlainDate.from('2026/01/24'); // Throws RangeError: invalid ISO 8601 string +Temporal.PlainDate.from('next Friday'); // Throws RangeError +``` + +**Tempo ✅** +```javascript + +new Tempo('2026/01/24'); // Parses perfectly +new Tempo('next Friday'); // Parses relative natural language perfectly +``` + +### 2. Formatting: Verbose vs. Simple Tokens + +Temporal relies on the `Intl.DateTimeFormat` API for formatting. While powerful for localization, it is incredibly verbose for simple, specific string outputs. + +**Native Temporal 🐢** +```javascript +const date = Temporal.Now.plainDateISO(); +date.toLocaleString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' }); // Output: "24 Jan 2026" +``` + +**Tempo 🚀** +```javascript +const t = new Tempo(); + +// Use the format method to create custom formats, or use the pre-built getters (on the 'fmt' property) +t.format('{dd} {mmm} {yyyy}'); // Output: "24 Jan 2026" +t.fmt.date; // Output: "2026-01-24" +``` + +### 3. Business Logic & Complex Terms + +Native Temporal deals with standard calendar units (days, months, years). Tempo extends this with business-aware concepts, relative querying, and rich getters. + +**Native Temporal 🐢** +```javascript +const date = Temporal.Now.plainDateISO(); +// To find if it's a weekend, you need: +const isWeekend = date.dayOfWeek === 6 || date.dayOfWeek === 7; + +// To find the fiscal/calendar quarter... write your own math logic +``` + +**Tempo 🚀** +This is a perfect example of where Tempo adds business logic (something that Temporal does not do). +To add a 'term' that defines 'isWeekend' to Tempo, you would write a plugin that defines the term. +From that point, the plugin is available to new Tempo instances. + +See the section on [plugin](tempo.term.md) for more information. + + +```typescript +const t = new Tempo(); +const isWeekend = t.term.isWeekend; // through plugin + +// Built-in complex terms via plugin +t.term.qtr; // returns calculated 'fiscal quarter' based on current instance (date and hemisphere) e.g., 'Q1' +t.term.szn; // returns calculated 'meteorological season' based on current instance (date and hemisphere) e.g., 'Summer' + +// Time since/until (native Temporal only returns Duration objects, not strings) + +t.until('3pm','minutes'); // 5.046264992345 + +t.until('xmas', 'days'); // "289.58470466349036" +t.until('xmas'); // if no 'unit' provided, then duration object "{years:0, months:9, ... }" + +t.since('yesterday', 'days'); // unit-argument determines granularity "1d ago" +t.since('yesterday afternoon'); // if no 'unit' provided, then duration string "-P1DT9H32M19.402536059S" +``` \ No newline at end of file diff --git a/packages/tempo/doc/tempo.api.md b/packages/tempo/doc/tempo.api.md new file mode 100644 index 00000000..ed42e15b --- /dev/null +++ b/packages/tempo/doc/tempo.api.md @@ -0,0 +1,180 @@ +# Tempo API Reference + +This document provides a comprehensive technical reference for the `Tempo` class, including static methods, properties, and instance API. + +--- + +- [TypeScript Types Reference](./tempo.types.md) +- [Tempo Cookbook](./tempo.cookbook.md) + +--- + +## 🏗️ Static Methods + +### `Tempo.init(options?: Tempo.Options)` +Initializes the global default configuration for all subsequent `Tempo` instances. +- **Returns:** `Tempo.Config` (The resolved global config). +- **Note:** Settings are inherited from library defaults, persistent storage, and provided options. Use `silent: true` to suppress `console.error` output for expected failures. + +### `Tempo.extend(arg, options?)` +Unified extender for library functionality. +- **Plugin:** `Tempo.extend(TickerPlugin)` — Adds functional extensions. +- **Term:** `Tempo.extend(MyTerm)` — Registers grammar/parsing terms. +- **Discovery:** `Tempo.extend(config)` — Bootstraps global configuration. + **Formats:** `Tempo.extend(MyFormat)` — Registers custom format strings. + +- **Returns:** `typeof Tempo` (for chaining). +- **Note:** Plugins are installed only once; existing core members are protected. + +### `Tempo.from(tempo?: Tempo.DateTime | Tempo.Options, options?: Tempo.Options)` +Creates a new `Tempo` instance. A static alternative to `new Tempo()`. +- **Returns:** `Tempo` + +### `Tempo.compare(tempo1, tempo2?)` +Compares two `Tempo` instances or date-time values for sorting. +- **Returns:** `-1` (smaller), `0` (equal), or `1` (larger). + +### `Tempo.duration(input)` +(Plugin required) Creates a full Tempo Duration object (EDO) from an ISO string or DurationLike object. +- **Returns:** `Tempo.Duration` +- **Example:** `Tempo.duration('P1Y')` or `Tempo.duration({ months: 2 })` + + +### `Tempo.now()` +Returns the current Unix epoch in nanoseconds as a `BigInt`. + +### `Tempo.getSymbol(key?: string | symbol)` +Retrieves or registers a `Symbol` for internal token mapping. + +### `Tempo.ticker(arg1?, arg2?)` +(Plugin required) Creates a reactive stream of `Tempo` instances at regular intervals. +- **Returns:** An `AsyncGenerator` (if no callback) or a `stop` function (if callback provided). +- **See:** [Tempo Ticker Guide](./tempo.ticker.md) for the full polymorphic signature and usage patterns. + +### `Tempo.regexp(layout, snippet?)` +Translates a Tempo layout string into a compiled `RegExp`. + +### `Tempo[Symbol.dispose]()` +Releases the global configuration and resets the library to its initial defaults. Equivalent to calling `Tempo.init()`. + +--- + +## ⚙️ Static Properties + +### `Tempo.config` +Returns the current *global* configuration settings. + +### `Tempo.default` +Returns the *initial* out-of-the-box library defaults. + +### `Tempo.terms` +Returns an array of all currently registered term plugins. + +### `Tempo.parse` +Returns the global parsing rules registry (snippets, layouts, events, etc.). + +### `Tempo.properties` +Returns a list of all public static accessor names on the `Tempo` class. + +### 🔢 Static Enumerators +Access to the internal dictionaries used by Tempo: +- `WEEKDAY` | `WEEKDAYS` +- `MONTH` | `MONTHS` +- `SEASON` | `COMPASS` +- `DURATION` | `DURATIONS` +- `ELEMENT` (Units map) +- `FORMAT` (Registry of pre-defined formats) +- `LIMIT` (Useful boundary dates) + +--- + +## 🚀 Instance Methods + +### `tempo.add(payload: Tempo.DateTime | Tempo.Add, options?: Tempo.Options)` +Returns a **new** `Tempo` instance with the specified duration or date-time payload added. +- **Example:** `t.add({ days: 2 })` or `t.add('tomorrow')` + +### `tempo.set(payload: Tempo.DateTime | Tempo.Set, options?: Tempo.Options)` +Returns a **new** `Tempo` instance with specific values or relative alignments. +- **Example:** `t.set({ month: 5, hh: 12 })` or `t.set({ start: 'month' })` landing on `01-May 00:00:00`. +- **Note (End):** Using `end` with an anchor (e.g., `set({ end: '#qtr' })`) lands on the **Inclusive End** of the period (e.g., `30-Sep 23:59:59.999...`). This follows industry UX expectations for "end-of-period" navigation. +- **Note (Mid):** Using `mid` with an anchor lands on the **Arithmetic Mid-point** (exact nanosecond center) of the period. + +### `tempo.clone()` +Returns a **new**, lean `Tempo` instance based on the current one. It preserves all local configuration but starts a fresh "parse history" (length 1). This is ideal for minimizing memory footprint in long chains or live tickers. + +### `tempo.format(fmt: string)` +Returns a formatted string or number based on the provided token or named format. + +### `tempo.until(until, opts?)` +Calculates the duration until another date-time. +- **Returns:** `number` (if a unit is provided) or a `Tempo.Duration` object. + +### `tempo.since(since?: Tempo.DateTime | Tempo.Options, opts?: Tempo.Options)` +Returns a human-readable relative time string (e.g., "3 days ago"). +- **Returns:** `string` +- **Options:** + - `rtfStyle`: `'long' | 'short' | 'narrow'` (default: `'narrow'`). See `Intl.RelativeTimeFormatStyle`. + - `rtfFormat`: A pre-configured `Intl.RelativeTimeFormat` instance. +- **Example:** + - `t.since('yesterday')` -> `"1d ago"` + - `t.since('yesterday', { rtfStyle: 'long' })` -> `"1 day ago"` + - `t.since(t2, { rtfFormat: new Intl.RelativeTimeFormat('fr') })` -> `"il y a 2 heures"` +- **Performance:** Tempo memoizes `Intl` object creation internally. For maximum performance in high-volume loops, you can pass a pre-allocated `rtfFormat` instance. + +### `tempo.isValid` +Returns `true` if the instance represents a valid date-time. + +### `tempo.toString()` +Returns the ISO 8601 string representation. + +### `tempo.toDate()` +Returns a standard JavaScript `Date` object. + +### `tempo.toDateTime()` +Returns the underlying `Temporal.ZonedDateTime` object. + +### `tempo.toInstant()` +Returns the underlying `Temporal.Instant` object. + +### `tempo.toPlainDate()` +Returns a `Temporal.PlainDate` representation. + +### `tempo.toPlainTime()` +Returns a `Temporal.PlainTime` representation. + +### `tempo.toPlainDateTime()` +Returns a `Temporal.PlainDateTime` representation. + +--- + +## 🔍 Instance Properties + +### Date & Time Accessors +- `yy`: 4-digit year. +- `yw`: 4-digit ISO week-numbering year. +- `mm`: Month (1-12). +- `dd`: Day of month (1-31). +- `ww`: ISO week number (1-53). +- `hh`: Hour (0-23). +- `mi`: Minutes (0-59). +- `ss`: Seconds (0-59). +- `ms`: Milliseconds (0-999). +- `us`: Microseconds (0-999). +- `ns`: Nanoseconds (0-999). +- `ff`: Fractional seconds (decimal). + +### Localization & Context +- `tz`: IANA Time Zone ID. +- `ts`: Unix timestamp (based on `config.timeStamp`). +- `mmm` / `mon`: Short/Full Month name. +- `www` / `wkd`: Short/Full Weekday name. +- `dow`: Day of week number (Mon=1, Sun=7). + +### Lineage & Metadata +- `nano`: Epoch nanoseconds (`BigInt`). +- `epoch`: Object containing `ss`, `ms`, `us`, `ns` epoch values. +- `term`: Object containing results from all active term plugins. (Note: These are enumerable for easy discovery). +- `fmt`: Registry of pre-calculated strings for all standard formats. (Note: These are enumerable for easy discovery). +- `config`: The effective configuration for this specific instance (Note: `scope`, `anchor`, and `value` are excluded from the public object). +- `parse`: The parsing rules and lineage for this instance. diff --git a/packages/tempo/doc/tempo.benchmarks.md b/packages/tempo/doc/tempo.benchmarks.md new file mode 100644 index 00000000..5a748f51 --- /dev/null +++ b/packages/tempo/doc/tempo.benchmarks.md @@ -0,0 +1,45 @@ +# 🚀 Tempo Performance Benchmarks + +To ensure high performance in mass-instantiation scenarios, Tempo implements a "Zero-Cost Constructor" architecture using prototype shadowing and lazy delegation. This document outlines the benchmark results for these optimizations. + +## 📊 Summary of Timings + +Timings were captured over **1,000 iterations** to measure micro-overhead and compare different instantiation strategies. + +| Method | Total Time | µs / op | Notes | +| :--- | :--- | :--- | :--- | +| **Default (Lazy Proxy)** | 523.14ms | **523.14µs** | Current $O(1)$ constructor. | +| **Eager Simulation** | 1394.51ms | **1394.51µs** | **~2.7x slower** (simulating pre-refactor impact). | +| **Fast-Fail @sync** | 359.04ms | **359.04µs** | Rejected instantly by the Master Guard. | +| **Object.create Baseline** | 0.22ms | 0.22µs | Raw JS overhead for comparison. | + +--- + +## 🏗️ Architectural Impact + +### 1. Proxy-Delegator Delegation ($O(1)$) + +By using a **Proxy-Delegator** pattern, the constructor returns near-instantly without populating the formatting (`fmt`) or term (`term`) objects. These registries are only discovered and memoized on the first property access. + +- **Gain**: ~65% reduction in instantiation overhead. +- **v2.1.2 Update**: The Scan-and-Consume guard further stabilizes the "Zero-Cost Constructor" by ensuring that even with massive plugin lists, the entry-point remains $O(1)$. + +### 2. The Master Guard (Fast-Fail) + +The static `#guard` regex acts as a rapid "Sync Point." + +- **Efficiency**: Strings that do not contain valid date-time characters are rejected in $O(1)$ time. +- **Performance**: Validating a string against the guard is ~30% faster than a full parsing cycle, even for simple ISO strings. + +--- + +## 🧪 Benchmark Methodology + +The benchmark script used `performance.now()` within a Vitest environment to ensure accurate module resolution and internal alias support (`#library`). + +1. **Lazy Creation**: Creates a `new Tempo('2024-05-20')` without accessing any properties. +2. **Eager Simulation**: Creates a `new Tempo()` and manually triggers discovery on 5 core properties to simulate O(N) initialization. +3. **Invalid Parse**: Passes a string that fails the Master Guard (e.g., includes emojis or exotic symbols) to measure rejection speed. + +> [!NOTE] +> These benchmarks represent the library's performance under Node.js v22+. Results may vary based on the JS engine (V8, JavaScriptCore, etc.) but the $O(1)$ complexity remains constant. diff --git a/packages/tempo/doc/tempo.config.md b/packages/tempo/doc/tempo.config.md new file mode 100644 index 00000000..68b41fa6 --- /dev/null +++ b/packages/tempo/doc/tempo.config.md @@ -0,0 +1,198 @@ +# Configuration Guide + +**Tempo** provides a flexible, multi-tiered configuration system. Settings are applied in a specific order of precedence, allowing you to set broad defaults that can be refined at the application or instance level. + +## Precedence Hierarchy + +Settings are loaded in the following order (where later stages override earlier ones): +1. **Library Defaults**: Sensible out-of-the-box baseline. +2. **Persistent Storage**: Sticky user preferences (which merge into Defaults). +3. **Global Discovery**: Enterprise-level setup discovered via `Symbol.for('$Tempo')`. +4. **Library Extension**: Dynamic feature registration via `Tempo.extend()`. +5. **Explicit Initialization**: Baseline configuration via `Tempo.init()`. +6. **Instance Constructor**: Specific overrides for a single `new Tempo()` call. + +--- + +## 🔒 Registry Protection (Soft Freeze) + +- **Read-Only Proxy**: Core registries (`TIMEZONE`, `FORMAT`, etc.) are returned as read-only proxies. Any attempt to directly assign to them will fail. +- **Controlled Extension**: To update a registry, you must use `Tempo.extend()` or `Tempo.init()`. This ensures internal caches (like the Master Guard regex) are synchronized. +- **Atomic Updates**: Multiple extensions are batched, ensuring that the parsing engine is only rebuilt once per change. + +This strategy prevents accidental state corruption while maintaining the flexible, extensible nature of the library. + +--- + +## 1. Persistent Configuration (`$Tempo`) + +The first layer Tempo checks after its own internal defaults is persistent storage. This is ideal for "sticky" settings like a user's preferred timezone or locale that should persist across sessions without a database. + +```javascript +// Write a preference to localStorage under the default key ('$Tempo') +Tempo.writeStore({ timeZone:'Australia/Sydney' }); +// Write a preference to localStorage under the key 'userSettings' +Tempo.writeStore({ timeZone: 'America/New_York' }, 'userSettings'); + +// On the next page load or session, Tempo will use the default store ('$Tempo') automatically +// or to apply a different store on the next page load or session, initialize with that store: +Tempo.init({ store: 'userSettings' }); +``` + +--- + +## 2. Global Discovery + +To facilitate configuration in micro-frontend architectures or when using a `