@vuu-ui/vuu-utils 0.13.12 → 0.13.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,51 @@
1
+ 'use strict';
2
+
3
+ var __typeError = (msg) => {
4
+ throw TypeError(msg);
5
+ };
6
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
7
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
8
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
9
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
10
+ var _millisSinceEpoch;
11
+ class Clock {
12
+ constructor(props) {
13
+ __privateAdd(this, _millisSinceEpoch, 0);
14
+ const today = /* @__PURE__ */ new Date();
15
+ const offset = today.getTimezoneOffset();
16
+ if (props) {
17
+ const dateProvided = typeof props.year === "number" && typeof props.month === "number" && typeof props.day === "number";
18
+ const year = props.year ?? today.getFullYear();
19
+ const month = props.month !== void 0 ? props.month - 1 : today.getMonth();
20
+ const day = props.day ?? today.getDay();
21
+ const hours = props.hours !== void 0 ? offset === 0 ? props.hours : (
22
+ // oversimplified, assumes BST
23
+ props.hours + 1
24
+ ) : dateProvided ? offset ? 1 : 0 : today.getUTCHours();
25
+ const minutes = props.minutes ?? (dateProvided ? 0 : today.getMinutes());
26
+ const seconds = props.seconds ?? (dateProvided ? 0 : today.getSeconds());
27
+ const ms = props.milliseconds ?? (dateProvided ? 0 : today.getMilliseconds());
28
+ const date = new Date(year, month, day, hours, minutes, seconds, ms);
29
+ __privateSet(this, _millisSinceEpoch, date.getTime());
30
+ } else {
31
+ __privateSet(this, _millisSinceEpoch, today.getTime());
32
+ }
33
+ }
34
+ advance(value, units = "ms") {
35
+ const multiplier = units === "ms" ? 1 : units === "seconds" ? 1e3 : 6e4;
36
+ __privateSet(this, _millisSinceEpoch, __privateGet(this, _millisSinceEpoch) + value * multiplier);
37
+ }
38
+ toString() {
39
+ return new Date(__privateGet(this, _millisSinceEpoch)).toISOString();
40
+ }
41
+ get now() {
42
+ return __privateGet(this, _millisSinceEpoch);
43
+ }
44
+ get date() {
45
+ return new Date(__privateGet(this, _millisSinceEpoch));
46
+ }
47
+ }
48
+ _millisSinceEpoch = new WeakMap();
49
+
50
+ exports.Clock = Clock;
51
+ //# sourceMappingURL=Clock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Clock.js","sources":["../../../../src/Clock.ts"],"sourcesContent":["export interface ClockProps {\n year?: number;\n month?: number;\n day?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n}\n\nexport type TimeUnit = \"minutes\" | \"seconds\" | \"ms\";\nexport class Clock {\n #millisSinceEpoch = 0;\n\n constructor(props?: ClockProps) {\n const today = new Date();\n const offset = today.getTimezoneOffset();\n if (props) {\n const dateProvided =\n typeof props.year === \"number\" &&\n typeof props.month === \"number\" &&\n typeof props.day === \"number\";\n\n const year = props.year ?? today.getFullYear();\n const month =\n props.month !== undefined ? props.month - 1 : today.getMonth();\n const day = props.day ?? today.getDay();\n\n const hours =\n props.hours !== undefined\n ? offset === 0\n ? props.hours\n : // oversimplified, assumes BST\n props.hours + 1\n : dateProvided\n ? offset\n ? 1 // assumed BST\n : 0\n : today.getUTCHours();\n const minutes = props.minutes ?? (dateProvided ? 0 : today.getMinutes());\n const seconds = props.seconds ?? (dateProvided ? 0 : today.getSeconds());\n const ms =\n props.milliseconds ?? (dateProvided ? 0 : today.getMilliseconds());\n const date = new Date(year, month, day, hours, minutes, seconds, ms);\n this.#millisSinceEpoch = date.getTime();\n } else {\n this.#millisSinceEpoch = today.getTime();\n }\n }\n\n advance(value: number, units: TimeUnit = \"ms\") {\n const multiplier = units === \"ms\" ? 1 : units === \"seconds\" ? 1000 : 60_000;\n this.#millisSinceEpoch += value * multiplier;\n }\n\n toString() {\n return new Date(this.#millisSinceEpoch).toISOString();\n }\n\n get now() {\n return this.#millisSinceEpoch;\n }\n\n get date() {\n return new Date(this.#millisSinceEpoch);\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AAAA,IAAA,iBAAA;AAWO,MAAM,KAAM,CAAA;AAAA,EAGjB,YAAY,KAAoB,EAAA;AAFhC,IAAoB,YAAA,CAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,CAAA;AAGlB,IAAM,MAAA,KAAA,uBAAY,IAAK,EAAA;AACvB,IAAM,MAAA,MAAA,GAAS,MAAM,iBAAkB,EAAA;AACvC,IAAA,IAAI,KAAO,EAAA;AACT,MAAM,MAAA,YAAA,GACJ,OAAO,KAAA,CAAM,IAAS,KAAA,QAAA,IACtB,OAAO,KAAA,CAAM,KAAU,KAAA,QAAA,IACvB,OAAO,KAAA,CAAM,GAAQ,KAAA,QAAA;AAEvB,MAAA,MAAM,IAAO,GAAA,KAAA,CAAM,IAAQ,IAAA,KAAA,CAAM,WAAY,EAAA;AAC7C,MAAM,MAAA,KAAA,GACJ,MAAM,KAAU,KAAA,KAAA,CAAA,GAAY,MAAM,KAAQ,GAAA,CAAA,GAAI,MAAM,QAAS,EAAA;AAC/D,MAAA,MAAM,GAAM,GAAA,KAAA,CAAM,GAAO,IAAA,KAAA,CAAM,MAAO,EAAA;AAEtC,MAAA,MAAM,QACJ,KAAM,CAAA,KAAA,KAAU,KACZ,CAAA,GAAA,MAAA,KAAW,IACT,KAAM,CAAA,KAAA;AAAA;AAAA,QAEN,MAAM,KAAQ,GAAA;AAAA,OAAA,GAChB,YACE,GAAA,MAAA,GACE,CACA,GAAA,CAAA,GACF,MAAM,WAAY,EAAA;AAC1B,MAAA,MAAM,UAAU,KAAM,CAAA,OAAA,KAAY,YAAe,GAAA,CAAA,GAAI,MAAM,UAAW,EAAA,CAAA;AACtE,MAAA,MAAM,UAAU,KAAM,CAAA,OAAA,KAAY,YAAe,GAAA,CAAA,GAAI,MAAM,UAAW,EAAA,CAAA;AACtE,MAAA,MAAM,KACJ,KAAM,CAAA,YAAA,KAAiB,YAAe,GAAA,CAAA,GAAI,MAAM,eAAgB,EAAA,CAAA;AAClE,MAAM,MAAA,IAAA,GAAO,IAAI,IAAK,CAAA,IAAA,EAAM,OAAO,GAAK,EAAA,KAAA,EAAO,OAAS,EAAA,OAAA,EAAS,EAAE,CAAA;AACnE,MAAK,YAAA,CAAA,IAAA,EAAA,iBAAA,EAAoB,KAAK,OAAQ,EAAA,CAAA;AAAA,KACjC,MAAA;AACL,MAAK,YAAA,CAAA,IAAA,EAAA,iBAAA,EAAoB,MAAM,OAAQ,EAAA,CAAA;AAAA;AACzC;AACF,EAEA,OAAA,CAAQ,KAAe,EAAA,KAAA,GAAkB,IAAM,EAAA;AAC7C,IAAA,MAAM,aAAa,KAAU,KAAA,IAAA,GAAO,CAAI,GAAA,KAAA,KAAU,YAAY,GAAO,GAAA,GAAA;AACrE,IAAK,YAAA,CAAA,IAAA,EAAA,iBAAA,EAAL,YAAK,CAAA,IAAA,EAAA,iBAAA,CAAA,GAAqB,KAAQ,GAAA,UAAA,CAAA;AAAA;AACpC,EAEA,QAAW,GAAA;AACT,IAAA,OAAO,IAAI,IAAA,CAAK,YAAK,CAAA,IAAA,EAAA,iBAAA,CAAiB,EAAE,WAAY,EAAA;AAAA;AACtD,EAEA,IAAI,GAAM,GAAA;AACR,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,iBAAA,CAAA;AAAA;AACd,EAEA,IAAI,IAAO,GAAA;AACT,IAAO,OAAA,IAAI,IAAK,CAAA,YAAA,CAAA,IAAA,EAAK,iBAAiB,CAAA,CAAA;AAAA;AAE1C;AAtDE,iBAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
@@ -16,6 +16,14 @@ const formatConfigByTimePatterns = {
16
16
  "hh:mm:ss a": {
17
17
  locale: "en-GB",
18
18
  options: { ...baseTimeFormatOptions, hour12: true }
19
+ },
20
+ "hh:mm:ss.ms": {
21
+ locale: "en-GB",
22
+ options: {
23
+ ...baseTimeFormatOptions,
24
+ hour12: false,
25
+ fractionalSecondDigits: 3
26
+ }
19
27
  }
20
28
  };
21
29
  const baseDateFormatOptions = {
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sources":["../../../../../src/date/formatter.ts"],"sourcesContent":["import { DateFormatter } from \"@internationalized/date\";\nimport { isNotNullOrUndefined } from \"../ts-utils\";\nimport { DatePattern, DateTimePattern, TimePattern } from \"./types\";\n\ntype DateTimeFormatConfig = {\n locale: string;\n options: Intl.DateTimeFormatOptions;\n};\n\n// Time format config\nconst baseTimeFormatOptions: Intl.DateTimeFormatOptions = {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n};\nconst formatConfigByTimePatterns: Record<TimePattern, DateTimeFormatConfig> = {\n \"hh:mm:ss\": {\n locale: \"en-GB\",\n options: { ...baseTimeFormatOptions, hour12: false },\n },\n \"hh:mm:ss a\": {\n locale: \"en-GB\",\n options: { ...baseTimeFormatOptions, hour12: true },\n },\n};\n\n// Date format config\nconst baseDateFormatOptions: Intl.DateTimeFormatOptions = {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n};\nconst formatConfigByDatePatterns: Record<DatePattern, DateTimeFormatConfig> = {\n \"dd.mm.yyyy\": {\n locale: \"de-De\",\n options: { ...baseDateFormatOptions },\n },\n \"dd/mm/yyyy\": { locale: \"en-GB\", options: { ...baseDateFormatOptions } },\n \"dd MMM yyyy\": {\n locale: \"en-GB\",\n options: { ...baseDateFormatOptions, month: \"short\" },\n },\n \"dd MMMM yyyy\": {\n locale: \"en-GB\",\n options: { ...baseDateFormatOptions, month: \"long\" },\n },\n \"mm/dd/yyyy\": { locale: \"en-US\", options: { ...baseDateFormatOptions } },\n \"MMM dd, yyyy\": {\n locale: \"en-US\",\n options: { ...baseDateFormatOptions, month: \"short\" },\n },\n \"MMMM dd, yyyy\": {\n locale: \"en-US\",\n options: { ...baseDateFormatOptions, month: \"long\" },\n },\n};\n\nfunction getFormatConfigs(pattern: DateTimePattern) {\n return [\n pattern.date ? formatConfigByDatePatterns[pattern.date] : null,\n pattern.time ? formatConfigByTimePatterns[pattern.time] : null,\n ];\n}\n\nexport function formatDate(pattern: DateTimePattern): (d: Date) => string {\n const formatters = getFormatConfigs(pattern)\n .filter(isNotNullOrUndefined)\n .map((c) => getDateFormatter(c.locale, c.options));\n\n return (d) => formatters.map((f) => f.format(d)).join(\" \");\n}\n\nexport function getDateFormatter(\n locale: string,\n options?: Intl.DateTimeFormatOptions\n) {\n return new DateFormatter(locale, options);\n}\n"],"names":["isNotNullOrUndefined","DateFormatter"],"mappings":";;;;;AAUA,MAAM,qBAAoD,GAAA;AAAA,EACxD,IAAM,EAAA,SAAA;AAAA,EACN,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA;AACV,CAAA;AACA,MAAM,0BAAwE,GAAA;AAAA,EAC5E,UAAY,EAAA;AAAA,IACV,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,QAAQ,KAAM;AAAA,GACrD;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,QAAQ,IAAK;AAAA;AAEtD,CAAA;AAGA,MAAM,qBAAoD,GAAA;AAAA,EACxD,GAAK,EAAA,SAAA;AAAA,EACL,KAAO,EAAA,SAAA;AAAA,EACP,IAAM,EAAA;AACR,CAAA;AACA,MAAM,0BAAwE,GAAA;AAAA,EAC5E,YAAc,EAAA;AAAA,IACZ,MAAQ,EAAA,OAAA;AAAA,IACR,OAAA,EAAS,EAAE,GAAG,qBAAsB;AAAA,GACtC;AAAA,EACA,YAAA,EAAc,EAAE,MAAQ,EAAA,OAAA,EAAS,SAAS,EAAE,GAAG,uBAAwB,EAAA;AAAA,EACvE,aAAe,EAAA;AAAA,IACb,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,OAAQ;AAAA,GACtD;AAAA,EACA,cAAgB,EAAA;AAAA,IACd,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,MAAO;AAAA,GACrD;AAAA,EACA,YAAA,EAAc,EAAE,MAAQ,EAAA,OAAA,EAAS,SAAS,EAAE,GAAG,uBAAwB,EAAA;AAAA,EACvE,cAAgB,EAAA;AAAA,IACd,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,OAAQ;AAAA,GACtD;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,MAAO;AAAA;AAEvD,CAAA;AAEA,SAAS,iBAAiB,OAA0B,EAAA;AAClD,EAAO,OAAA;AAAA,IACL,OAAQ,CAAA,IAAA,GAAO,0BAA2B,CAAA,OAAA,CAAQ,IAAI,CAAI,GAAA,IAAA;AAAA,IAC1D,OAAQ,CAAA,IAAA,GAAO,0BAA2B,CAAA,OAAA,CAAQ,IAAI,CAAI,GAAA;AAAA,GAC5D;AACF;AAEO,SAAS,WAAW,OAA+C,EAAA;AACxE,EAAA,MAAM,UAAa,GAAA,gBAAA,CAAiB,OAAO,CAAA,CACxC,OAAOA,4BAAoB,CAAA,CAC3B,GAAI,CAAA,CAAC,MAAM,gBAAiB,CAAA,CAAA,CAAE,MAAQ,EAAA,CAAA,CAAE,OAAO,CAAC,CAAA;AAEnD,EAAA,OAAO,CAAC,CAAA,KAAM,UAAW,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,CAAE,CAAA,MAAA,CAAO,CAAC,CAAC,CAAE,CAAA,IAAA,CAAK,GAAG,CAAA;AAC3D;AAEgB,SAAA,gBAAA,CACd,QACA,OACA,EAAA;AACA,EAAO,OAAA,IAAIC,kBAAc,CAAA,MAAA,EAAQ,OAAO,CAAA;AAC1C;;;;;"}
1
+ {"version":3,"file":"formatter.js","sources":["../../../../../src/date/formatter.ts"],"sourcesContent":["import { DateFormatter } from \"@internationalized/date\";\nimport { isNotNullOrUndefined } from \"../ts-utils\";\nimport { DatePattern, DateTimePattern, TimePattern } from \"./types\";\n\ntype DateTimeFormatConfig = {\n locale: string;\n options: Intl.DateTimeFormatOptions;\n};\n\n// Time format config\nconst baseTimeFormatOptions: Intl.DateTimeFormatOptions = {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n};\nconst formatConfigByTimePatterns: Record<TimePattern, DateTimeFormatConfig> = {\n \"hh:mm:ss\": {\n locale: \"en-GB\",\n options: { ...baseTimeFormatOptions, hour12: false },\n },\n \"hh:mm:ss a\": {\n locale: \"en-GB\",\n options: { ...baseTimeFormatOptions, hour12: true },\n },\n \"hh:mm:ss.ms\": {\n locale: \"en-GB\",\n options: {\n ...baseTimeFormatOptions,\n hour12: false,\n fractionalSecondDigits: 3,\n },\n },\n};\n\n// Date format config\nconst baseDateFormatOptions: Intl.DateTimeFormatOptions = {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n};\nconst formatConfigByDatePatterns: Record<DatePattern, DateTimeFormatConfig> = {\n \"dd.mm.yyyy\": {\n locale: \"de-De\",\n options: { ...baseDateFormatOptions },\n },\n \"dd/mm/yyyy\": { locale: \"en-GB\", options: { ...baseDateFormatOptions } },\n \"dd MMM yyyy\": {\n locale: \"en-GB\",\n options: { ...baseDateFormatOptions, month: \"short\" },\n },\n \"dd MMMM yyyy\": {\n locale: \"en-GB\",\n options: { ...baseDateFormatOptions, month: \"long\" },\n },\n \"mm/dd/yyyy\": { locale: \"en-US\", options: { ...baseDateFormatOptions } },\n \"MMM dd, yyyy\": {\n locale: \"en-US\",\n options: { ...baseDateFormatOptions, month: \"short\" },\n },\n \"MMMM dd, yyyy\": {\n locale: \"en-US\",\n options: { ...baseDateFormatOptions, month: \"long\" },\n },\n};\n\nfunction getFormatConfigs(pattern: DateTimePattern) {\n return [\n pattern.date ? formatConfigByDatePatterns[pattern.date] : null,\n pattern.time ? formatConfigByTimePatterns[pattern.time] : null,\n ];\n}\n\nexport function formatDate(pattern: DateTimePattern): (d: Date) => string {\n const formatters = getFormatConfigs(pattern)\n .filter(isNotNullOrUndefined)\n .map((c) => getDateFormatter(c.locale, c.options));\n\n return (d) => formatters.map((f) => f.format(d)).join(\" \");\n}\n\nexport function getDateFormatter(\n locale: string,\n options?: Intl.DateTimeFormatOptions,\n) {\n return new DateFormatter(locale, options);\n}\n"],"names":["isNotNullOrUndefined","DateFormatter"],"mappings":";;;;;AAUA,MAAM,qBAAoD,GAAA;AAAA,EACxD,IAAM,EAAA,SAAA;AAAA,EACN,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA;AACV,CAAA;AACA,MAAM,0BAAwE,GAAA;AAAA,EAC5E,UAAY,EAAA;AAAA,IACV,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,QAAQ,KAAM;AAAA,GACrD;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,QAAQ,IAAK;AAAA,GACpD;AAAA,EACA,aAAe,EAAA;AAAA,IACb,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA;AAAA,MACP,GAAG,qBAAA;AAAA,MACH,MAAQ,EAAA,KAAA;AAAA,MACR,sBAAwB,EAAA;AAAA;AAC1B;AAEJ,CAAA;AAGA,MAAM,qBAAoD,GAAA;AAAA,EACxD,GAAK,EAAA,SAAA;AAAA,EACL,KAAO,EAAA,SAAA;AAAA,EACP,IAAM,EAAA;AACR,CAAA;AACA,MAAM,0BAAwE,GAAA;AAAA,EAC5E,YAAc,EAAA;AAAA,IACZ,MAAQ,EAAA,OAAA;AAAA,IACR,OAAA,EAAS,EAAE,GAAG,qBAAsB;AAAA,GACtC;AAAA,EACA,YAAA,EAAc,EAAE,MAAQ,EAAA,OAAA,EAAS,SAAS,EAAE,GAAG,uBAAwB,EAAA;AAAA,EACvE,aAAe,EAAA;AAAA,IACb,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,OAAQ;AAAA,GACtD;AAAA,EACA,cAAgB,EAAA;AAAA,IACd,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,MAAO;AAAA,GACrD;AAAA,EACA,YAAA,EAAc,EAAE,MAAQ,EAAA,OAAA,EAAS,SAAS,EAAE,GAAG,uBAAwB,EAAA;AAAA,EACvE,cAAgB,EAAA;AAAA,IACd,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,OAAQ;AAAA,GACtD;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,MAAO;AAAA;AAEvD,CAAA;AAEA,SAAS,iBAAiB,OAA0B,EAAA;AAClD,EAAO,OAAA;AAAA,IACL,OAAQ,CAAA,IAAA,GAAO,0BAA2B,CAAA,OAAA,CAAQ,IAAI,CAAI,GAAA,IAAA;AAAA,IAC1D,OAAQ,CAAA,IAAA,GAAO,0BAA2B,CAAA,OAAA,CAAQ,IAAI,CAAI,GAAA;AAAA,GAC5D;AACF;AAEO,SAAS,WAAW,OAA+C,EAAA;AACxE,EAAA,MAAM,UAAa,GAAA,gBAAA,CAAiB,OAAO,CAAA,CACxC,OAAOA,4BAAoB,CAAA,CAC3B,GAAI,CAAA,CAAC,MAAM,gBAAiB,CAAA,CAAA,CAAE,MAAQ,EAAA,CAAA,CAAE,OAAO,CAAC,CAAA;AAEnD,EAAA,OAAO,CAAC,CAAA,KAAM,UAAW,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,CAAE,CAAA,MAAA,CAAO,CAAC,CAAC,CAAE,CAAA,IAAA,CAAK,GAAG,CAAA;AAC3D;AAEgB,SAAA,gBAAA,CACd,QACA,OACA,EAAA;AACA,EAAO,OAAA,IAAIC,kBAAc,CAAA,MAAA,EAAQ,OAAO,CAAA;AAC1C;;;;;"}
@@ -9,7 +9,11 @@ const supportedDatePatterns = [
9
9
  "MMM dd, yyyy",
10
10
  "MMMM dd, yyyy"
11
11
  ];
12
- const supportedTimePatterns = ["hh:mm:ss", "hh:mm:ss a"];
12
+ const supportedTimePatterns = [
13
+ "hh:mm:ss",
14
+ "hh:mm:ss a",
15
+ "hh:mm:ss.ms"
16
+ ];
13
17
  const supportedDateTimePatterns = {
14
18
  date: supportedDatePatterns,
15
19
  time: supportedTimePatterns
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../../../src/date/types.ts"],"sourcesContent":["import { ColumnTypeFormatting } from \"@vuu-ui/vuu-table-types\";\n\nconst supportedDatePatterns = [\n \"dd.mm.yyyy\",\n \"dd/mm/yyyy\",\n \"dd MMM yyyy\",\n \"dd MMMM yyyy\",\n \"mm/dd/yyyy\",\n \"MMM dd, yyyy\",\n \"MMMM dd, yyyy\",\n] as const;\n\nconst supportedTimePatterns = [\"hh:mm:ss\", \"hh:mm:ss a\"] as const;\n\nexport const supportedDateTimePatterns = {\n date: supportedDatePatterns,\n time: supportedTimePatterns,\n};\nexport const dateTimeLabelByType = { date: \"Date\", time: \"Time\" } as const;\n\nexport type DatePattern = (typeof supportedDatePatterns)[number];\nexport type TimePattern = (typeof supportedTimePatterns)[number];\n\nexport type DateTimePattern =\n | { date?: DatePattern; time: TimePattern }\n | { date: DatePattern; time?: TimePattern };\n\nexport const isDatePattern = (pattern?: string): pattern is DatePattern =>\n supportedDatePatterns.includes(pattern as DatePattern);\n\nexport const isTimePattern = (pattern?: string): pattern is TimePattern =>\n supportedTimePatterns.includes(pattern as TimePattern);\n\nexport const isDateTimePattern = (\n pattern?: ColumnTypeFormatting[\"pattern\"],\n): pattern is DateTimePattern =>\n isDatePattern(pattern?.date) || isTimePattern(pattern?.time);\n"],"names":[],"mappings":";;AAEA,MAAM,qBAAwB,GAAA;AAAA,EAC5B,YAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAEA,MAAM,qBAAA,GAAwB,CAAC,UAAA,EAAY,YAAY,CAAA;AAEhD,MAAM,yBAA4B,GAAA;AAAA,EACvC,IAAM,EAAA,qBAAA;AAAA,EACN,IAAM,EAAA;AACR;AACO,MAAM,mBAAsB,GAAA,EAAE,IAAM,EAAA,MAAA,EAAQ,MAAM,MAAO;AASzD,MAAM,aAAgB,GAAA,CAAC,OAC5B,KAAA,qBAAA,CAAsB,SAAS,OAAsB;AAEhD,MAAM,aAAgB,GAAA,CAAC,OAC5B,KAAA,qBAAA,CAAsB,SAAS,OAAsB;AAE1C,MAAA,iBAAA,GAAoB,CAC/B,OAEA,KAAA,aAAA,CAAc,SAAS,IAAI,CAAA,IAAK,aAAc,CAAA,OAAA,EAAS,IAAI;;;;;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../../../src/date/types.ts"],"sourcesContent":["import { ColumnTypeFormatting } from \"@vuu-ui/vuu-table-types\";\n\nconst supportedDatePatterns = [\n \"dd.mm.yyyy\",\n \"dd/mm/yyyy\",\n \"dd MMM yyyy\",\n \"dd MMMM yyyy\",\n \"mm/dd/yyyy\",\n \"MMM dd, yyyy\",\n \"MMMM dd, yyyy\",\n] as const;\n\nconst supportedTimePatterns = [\n \"hh:mm:ss\",\n \"hh:mm:ss a\",\n \"hh:mm:ss.ms\",\n] as const;\n\nexport const supportedDateTimePatterns = {\n date: supportedDatePatterns,\n time: supportedTimePatterns,\n};\nexport const dateTimeLabelByType = { date: \"Date\", time: \"Time\" } as const;\n\nexport type DatePattern = (typeof supportedDatePatterns)[number];\nexport type TimePattern = (typeof supportedTimePatterns)[number];\n\nexport type DateTimePattern =\n | { date?: DatePattern; time: TimePattern }\n | { date: DatePattern; time?: TimePattern };\n\nexport const isDatePattern = (pattern?: string): pattern is DatePattern =>\n supportedDatePatterns.includes(pattern as DatePattern);\n\nexport const isTimePattern = (pattern?: string): pattern is TimePattern =>\n supportedTimePatterns.includes(pattern as TimePattern);\n\nexport const isDateTimePattern = (\n pattern?: ColumnTypeFormatting[\"pattern\"],\n): pattern is DateTimePattern =>\n isDatePattern(pattern?.date) || isTimePattern(pattern?.time);\n"],"names":[],"mappings":";;AAEA,MAAM,qBAAwB,GAAA;AAAA,EAC5B,YAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAEA,MAAM,qBAAwB,GAAA;AAAA,EAC5B,UAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAEO,MAAM,yBAA4B,GAAA;AAAA,EACvC,IAAM,EAAA,qBAAA;AAAA,EACN,IAAM,EAAA;AACR;AACO,MAAM,mBAAsB,GAAA,EAAE,IAAM,EAAA,MAAA,EAAQ,MAAM,MAAO;AASzD,MAAM,aAAgB,GAAA,CAAC,OAC5B,KAAA,qBAAA,CAAsB,SAAS,OAAsB;AAEhD,MAAM,aAAgB,GAAA,CAAC,OAC5B,KAAA,qBAAA,CAAsB,SAAS,OAAsB;AAE1C,MAAA,iBAAA,GAAoB,CAC/B,OAEA,KAAA,aAAA,CAAc,SAAS,IAAI,CAAA,IAAK,aAAc,CAAA,OAAA,EAAS,IAAI;;;;;;;;"}
@@ -10,6 +10,7 @@ var columnUtils = require('./column-utils.js');
10
10
  var cookieUtils = require('./cookie-utils.js');
11
11
  var componentRegistry = require('./component-registry.js');
12
12
  var DataWindow = require('./DataWindow.js');
13
+ var Clock = require('./Clock.js');
13
14
  var commonTypes = require('./common-types.js');
14
15
  var cssUtils = require('./css-utils.js');
15
16
  var dataUtils = require('./data-utils.js');
@@ -183,6 +184,7 @@ exports.isView = componentRegistry.isView;
183
184
  exports.registerComponent = componentRegistry.registerComponent;
184
185
  exports.registerConfigurationEditor = componentRegistry.registerConfigurationEditor;
185
186
  exports.DataWindow = DataWindow.DataWindow;
187
+ exports.Clock = Clock.Clock;
186
188
  exports.MEASURES = commonTypes.MEASURES;
187
189
  exports.importCSS = cssUtils.importCSS;
188
190
  exports.DOWN1 = dataUtils.DOWN1;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,49 @@
1
+ var __typeError = (msg) => {
2
+ throw TypeError(msg);
3
+ };
4
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
8
+ var _millisSinceEpoch;
9
+ class Clock {
10
+ constructor(props) {
11
+ __privateAdd(this, _millisSinceEpoch, 0);
12
+ const today = /* @__PURE__ */ new Date();
13
+ const offset = today.getTimezoneOffset();
14
+ if (props) {
15
+ const dateProvided = typeof props.year === "number" && typeof props.month === "number" && typeof props.day === "number";
16
+ const year = props.year ?? today.getFullYear();
17
+ const month = props.month !== void 0 ? props.month - 1 : today.getMonth();
18
+ const day = props.day ?? today.getDay();
19
+ const hours = props.hours !== void 0 ? offset === 0 ? props.hours : (
20
+ // oversimplified, assumes BST
21
+ props.hours + 1
22
+ ) : dateProvided ? offset ? 1 : 0 : today.getUTCHours();
23
+ const minutes = props.minutes ?? (dateProvided ? 0 : today.getMinutes());
24
+ const seconds = props.seconds ?? (dateProvided ? 0 : today.getSeconds());
25
+ const ms = props.milliseconds ?? (dateProvided ? 0 : today.getMilliseconds());
26
+ const date = new Date(year, month, day, hours, minutes, seconds, ms);
27
+ __privateSet(this, _millisSinceEpoch, date.getTime());
28
+ } else {
29
+ __privateSet(this, _millisSinceEpoch, today.getTime());
30
+ }
31
+ }
32
+ advance(value, units = "ms") {
33
+ const multiplier = units === "ms" ? 1 : units === "seconds" ? 1e3 : 6e4;
34
+ __privateSet(this, _millisSinceEpoch, __privateGet(this, _millisSinceEpoch) + value * multiplier);
35
+ }
36
+ toString() {
37
+ return new Date(__privateGet(this, _millisSinceEpoch)).toISOString();
38
+ }
39
+ get now() {
40
+ return __privateGet(this, _millisSinceEpoch);
41
+ }
42
+ get date() {
43
+ return new Date(__privateGet(this, _millisSinceEpoch));
44
+ }
45
+ }
46
+ _millisSinceEpoch = new WeakMap();
47
+
48
+ export { Clock };
49
+ //# sourceMappingURL=Clock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Clock.js","sources":["../../../../src/Clock.ts"],"sourcesContent":["export interface ClockProps {\n year?: number;\n month?: number;\n day?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n}\n\nexport type TimeUnit = \"minutes\" | \"seconds\" | \"ms\";\nexport class Clock {\n #millisSinceEpoch = 0;\n\n constructor(props?: ClockProps) {\n const today = new Date();\n const offset = today.getTimezoneOffset();\n if (props) {\n const dateProvided =\n typeof props.year === \"number\" &&\n typeof props.month === \"number\" &&\n typeof props.day === \"number\";\n\n const year = props.year ?? today.getFullYear();\n const month =\n props.month !== undefined ? props.month - 1 : today.getMonth();\n const day = props.day ?? today.getDay();\n\n const hours =\n props.hours !== undefined\n ? offset === 0\n ? props.hours\n : // oversimplified, assumes BST\n props.hours + 1\n : dateProvided\n ? offset\n ? 1 // assumed BST\n : 0\n : today.getUTCHours();\n const minutes = props.minutes ?? (dateProvided ? 0 : today.getMinutes());\n const seconds = props.seconds ?? (dateProvided ? 0 : today.getSeconds());\n const ms =\n props.milliseconds ?? (dateProvided ? 0 : today.getMilliseconds());\n const date = new Date(year, month, day, hours, minutes, seconds, ms);\n this.#millisSinceEpoch = date.getTime();\n } else {\n this.#millisSinceEpoch = today.getTime();\n }\n }\n\n advance(value: number, units: TimeUnit = \"ms\") {\n const multiplier = units === \"ms\" ? 1 : units === \"seconds\" ? 1000 : 60_000;\n this.#millisSinceEpoch += value * multiplier;\n }\n\n toString() {\n return new Date(this.#millisSinceEpoch).toISOString();\n }\n\n get now() {\n return this.#millisSinceEpoch;\n }\n\n get date() {\n return new Date(this.#millisSinceEpoch);\n }\n}\n"],"names":[],"mappings":";;;;;;;AAAA,IAAA,iBAAA;AAWO,MAAM,KAAM,CAAA;AAAA,EAGjB,YAAY,KAAoB,EAAA;AAFhC,IAAoB,YAAA,CAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,CAAA;AAGlB,IAAM,MAAA,KAAA,uBAAY,IAAK,EAAA;AACvB,IAAM,MAAA,MAAA,GAAS,MAAM,iBAAkB,EAAA;AACvC,IAAA,IAAI,KAAO,EAAA;AACT,MAAM,MAAA,YAAA,GACJ,OAAO,KAAA,CAAM,IAAS,KAAA,QAAA,IACtB,OAAO,KAAA,CAAM,KAAU,KAAA,QAAA,IACvB,OAAO,KAAA,CAAM,GAAQ,KAAA,QAAA;AAEvB,MAAA,MAAM,IAAO,GAAA,KAAA,CAAM,IAAQ,IAAA,KAAA,CAAM,WAAY,EAAA;AAC7C,MAAM,MAAA,KAAA,GACJ,MAAM,KAAU,KAAA,KAAA,CAAA,GAAY,MAAM,KAAQ,GAAA,CAAA,GAAI,MAAM,QAAS,EAAA;AAC/D,MAAA,MAAM,GAAM,GAAA,KAAA,CAAM,GAAO,IAAA,KAAA,CAAM,MAAO,EAAA;AAEtC,MAAA,MAAM,QACJ,KAAM,CAAA,KAAA,KAAU,KACZ,CAAA,GAAA,MAAA,KAAW,IACT,KAAM,CAAA,KAAA;AAAA;AAAA,QAEN,MAAM,KAAQ,GAAA;AAAA,OAAA,GAChB,YACE,GAAA,MAAA,GACE,CACA,GAAA,CAAA,GACF,MAAM,WAAY,EAAA;AAC1B,MAAA,MAAM,UAAU,KAAM,CAAA,OAAA,KAAY,YAAe,GAAA,CAAA,GAAI,MAAM,UAAW,EAAA,CAAA;AACtE,MAAA,MAAM,UAAU,KAAM,CAAA,OAAA,KAAY,YAAe,GAAA,CAAA,GAAI,MAAM,UAAW,EAAA,CAAA;AACtE,MAAA,MAAM,KACJ,KAAM,CAAA,YAAA,KAAiB,YAAe,GAAA,CAAA,GAAI,MAAM,eAAgB,EAAA,CAAA;AAClE,MAAM,MAAA,IAAA,GAAO,IAAI,IAAK,CAAA,IAAA,EAAM,OAAO,GAAK,EAAA,KAAA,EAAO,OAAS,EAAA,OAAA,EAAS,EAAE,CAAA;AACnE,MAAK,YAAA,CAAA,IAAA,EAAA,iBAAA,EAAoB,KAAK,OAAQ,EAAA,CAAA;AAAA,KACjC,MAAA;AACL,MAAK,YAAA,CAAA,IAAA,EAAA,iBAAA,EAAoB,MAAM,OAAQ,EAAA,CAAA;AAAA;AACzC;AACF,EAEA,OAAA,CAAQ,KAAe,EAAA,KAAA,GAAkB,IAAM,EAAA;AAC7C,IAAA,MAAM,aAAa,KAAU,KAAA,IAAA,GAAO,CAAI,GAAA,KAAA,KAAU,YAAY,GAAO,GAAA,GAAA;AACrE,IAAK,YAAA,CAAA,IAAA,EAAA,iBAAA,EAAL,YAAK,CAAA,IAAA,EAAA,iBAAA,CAAA,GAAqB,KAAQ,GAAA,UAAA,CAAA;AAAA;AACpC,EAEA,QAAW,GAAA;AACT,IAAA,OAAO,IAAI,IAAA,CAAK,YAAK,CAAA,IAAA,EAAA,iBAAA,CAAiB,EAAE,WAAY,EAAA;AAAA;AACtD,EAEA,IAAI,GAAM,GAAA;AACR,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,iBAAA,CAAA;AAAA;AACd,EAEA,IAAI,IAAO,GAAA;AACT,IAAO,OAAA,IAAI,IAAK,CAAA,YAAA,CAAA,IAAA,EAAK,iBAAiB,CAAA,CAAA;AAAA;AAE1C;AAtDE,iBAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
@@ -14,6 +14,14 @@ const formatConfigByTimePatterns = {
14
14
  "hh:mm:ss a": {
15
15
  locale: "en-GB",
16
16
  options: { ...baseTimeFormatOptions, hour12: true }
17
+ },
18
+ "hh:mm:ss.ms": {
19
+ locale: "en-GB",
20
+ options: {
21
+ ...baseTimeFormatOptions,
22
+ hour12: false,
23
+ fractionalSecondDigits: 3
24
+ }
17
25
  }
18
26
  };
19
27
  const baseDateFormatOptions = {
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sources":["../../../../../src/date/formatter.ts"],"sourcesContent":["import { DateFormatter } from \"@internationalized/date\";\nimport { isNotNullOrUndefined } from \"../ts-utils\";\nimport { DatePattern, DateTimePattern, TimePattern } from \"./types\";\n\ntype DateTimeFormatConfig = {\n locale: string;\n options: Intl.DateTimeFormatOptions;\n};\n\n// Time format config\nconst baseTimeFormatOptions: Intl.DateTimeFormatOptions = {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n};\nconst formatConfigByTimePatterns: Record<TimePattern, DateTimeFormatConfig> = {\n \"hh:mm:ss\": {\n locale: \"en-GB\",\n options: { ...baseTimeFormatOptions, hour12: false },\n },\n \"hh:mm:ss a\": {\n locale: \"en-GB\",\n options: { ...baseTimeFormatOptions, hour12: true },\n },\n};\n\n// Date format config\nconst baseDateFormatOptions: Intl.DateTimeFormatOptions = {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n};\nconst formatConfigByDatePatterns: Record<DatePattern, DateTimeFormatConfig> = {\n \"dd.mm.yyyy\": {\n locale: \"de-De\",\n options: { ...baseDateFormatOptions },\n },\n \"dd/mm/yyyy\": { locale: \"en-GB\", options: { ...baseDateFormatOptions } },\n \"dd MMM yyyy\": {\n locale: \"en-GB\",\n options: { ...baseDateFormatOptions, month: \"short\" },\n },\n \"dd MMMM yyyy\": {\n locale: \"en-GB\",\n options: { ...baseDateFormatOptions, month: \"long\" },\n },\n \"mm/dd/yyyy\": { locale: \"en-US\", options: { ...baseDateFormatOptions } },\n \"MMM dd, yyyy\": {\n locale: \"en-US\",\n options: { ...baseDateFormatOptions, month: \"short\" },\n },\n \"MMMM dd, yyyy\": {\n locale: \"en-US\",\n options: { ...baseDateFormatOptions, month: \"long\" },\n },\n};\n\nfunction getFormatConfigs(pattern: DateTimePattern) {\n return [\n pattern.date ? formatConfigByDatePatterns[pattern.date] : null,\n pattern.time ? formatConfigByTimePatterns[pattern.time] : null,\n ];\n}\n\nexport function formatDate(pattern: DateTimePattern): (d: Date) => string {\n const formatters = getFormatConfigs(pattern)\n .filter(isNotNullOrUndefined)\n .map((c) => getDateFormatter(c.locale, c.options));\n\n return (d) => formatters.map((f) => f.format(d)).join(\" \");\n}\n\nexport function getDateFormatter(\n locale: string,\n options?: Intl.DateTimeFormatOptions\n) {\n return new DateFormatter(locale, options);\n}\n"],"names":[],"mappings":";;;AAUA,MAAM,qBAAoD,GAAA;AAAA,EACxD,IAAM,EAAA,SAAA;AAAA,EACN,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA;AACV,CAAA;AACA,MAAM,0BAAwE,GAAA;AAAA,EAC5E,UAAY,EAAA;AAAA,IACV,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,QAAQ,KAAM;AAAA,GACrD;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,QAAQ,IAAK;AAAA;AAEtD,CAAA;AAGA,MAAM,qBAAoD,GAAA;AAAA,EACxD,GAAK,EAAA,SAAA;AAAA,EACL,KAAO,EAAA,SAAA;AAAA,EACP,IAAM,EAAA;AACR,CAAA;AACA,MAAM,0BAAwE,GAAA;AAAA,EAC5E,YAAc,EAAA;AAAA,IACZ,MAAQ,EAAA,OAAA;AAAA,IACR,OAAA,EAAS,EAAE,GAAG,qBAAsB;AAAA,GACtC;AAAA,EACA,YAAA,EAAc,EAAE,MAAQ,EAAA,OAAA,EAAS,SAAS,EAAE,GAAG,uBAAwB,EAAA;AAAA,EACvE,aAAe,EAAA;AAAA,IACb,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,OAAQ;AAAA,GACtD;AAAA,EACA,cAAgB,EAAA;AAAA,IACd,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,MAAO;AAAA,GACrD;AAAA,EACA,YAAA,EAAc,EAAE,MAAQ,EAAA,OAAA,EAAS,SAAS,EAAE,GAAG,uBAAwB,EAAA;AAAA,EACvE,cAAgB,EAAA;AAAA,IACd,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,OAAQ;AAAA,GACtD;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,MAAO;AAAA;AAEvD,CAAA;AAEA,SAAS,iBAAiB,OAA0B,EAAA;AAClD,EAAO,OAAA;AAAA,IACL,OAAQ,CAAA,IAAA,GAAO,0BAA2B,CAAA,OAAA,CAAQ,IAAI,CAAI,GAAA,IAAA;AAAA,IAC1D,OAAQ,CAAA,IAAA,GAAO,0BAA2B,CAAA,OAAA,CAAQ,IAAI,CAAI,GAAA;AAAA,GAC5D;AACF;AAEO,SAAS,WAAW,OAA+C,EAAA;AACxE,EAAA,MAAM,UAAa,GAAA,gBAAA,CAAiB,OAAO,CAAA,CACxC,OAAO,oBAAoB,CAAA,CAC3B,GAAI,CAAA,CAAC,MAAM,gBAAiB,CAAA,CAAA,CAAE,MAAQ,EAAA,CAAA,CAAE,OAAO,CAAC,CAAA;AAEnD,EAAA,OAAO,CAAC,CAAA,KAAM,UAAW,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,CAAE,CAAA,MAAA,CAAO,CAAC,CAAC,CAAE,CAAA,IAAA,CAAK,GAAG,CAAA;AAC3D;AAEgB,SAAA,gBAAA,CACd,QACA,OACA,EAAA;AACA,EAAO,OAAA,IAAI,aAAc,CAAA,MAAA,EAAQ,OAAO,CAAA;AAC1C;;;;"}
1
+ {"version":3,"file":"formatter.js","sources":["../../../../../src/date/formatter.ts"],"sourcesContent":["import { DateFormatter } from \"@internationalized/date\";\nimport { isNotNullOrUndefined } from \"../ts-utils\";\nimport { DatePattern, DateTimePattern, TimePattern } from \"./types\";\n\ntype DateTimeFormatConfig = {\n locale: string;\n options: Intl.DateTimeFormatOptions;\n};\n\n// Time format config\nconst baseTimeFormatOptions: Intl.DateTimeFormatOptions = {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n};\nconst formatConfigByTimePatterns: Record<TimePattern, DateTimeFormatConfig> = {\n \"hh:mm:ss\": {\n locale: \"en-GB\",\n options: { ...baseTimeFormatOptions, hour12: false },\n },\n \"hh:mm:ss a\": {\n locale: \"en-GB\",\n options: { ...baseTimeFormatOptions, hour12: true },\n },\n \"hh:mm:ss.ms\": {\n locale: \"en-GB\",\n options: {\n ...baseTimeFormatOptions,\n hour12: false,\n fractionalSecondDigits: 3,\n },\n },\n};\n\n// Date format config\nconst baseDateFormatOptions: Intl.DateTimeFormatOptions = {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n};\nconst formatConfigByDatePatterns: Record<DatePattern, DateTimeFormatConfig> = {\n \"dd.mm.yyyy\": {\n locale: \"de-De\",\n options: { ...baseDateFormatOptions },\n },\n \"dd/mm/yyyy\": { locale: \"en-GB\", options: { ...baseDateFormatOptions } },\n \"dd MMM yyyy\": {\n locale: \"en-GB\",\n options: { ...baseDateFormatOptions, month: \"short\" },\n },\n \"dd MMMM yyyy\": {\n locale: \"en-GB\",\n options: { ...baseDateFormatOptions, month: \"long\" },\n },\n \"mm/dd/yyyy\": { locale: \"en-US\", options: { ...baseDateFormatOptions } },\n \"MMM dd, yyyy\": {\n locale: \"en-US\",\n options: { ...baseDateFormatOptions, month: \"short\" },\n },\n \"MMMM dd, yyyy\": {\n locale: \"en-US\",\n options: { ...baseDateFormatOptions, month: \"long\" },\n },\n};\n\nfunction getFormatConfigs(pattern: DateTimePattern) {\n return [\n pattern.date ? formatConfigByDatePatterns[pattern.date] : null,\n pattern.time ? formatConfigByTimePatterns[pattern.time] : null,\n ];\n}\n\nexport function formatDate(pattern: DateTimePattern): (d: Date) => string {\n const formatters = getFormatConfigs(pattern)\n .filter(isNotNullOrUndefined)\n .map((c) => getDateFormatter(c.locale, c.options));\n\n return (d) => formatters.map((f) => f.format(d)).join(\" \");\n}\n\nexport function getDateFormatter(\n locale: string,\n options?: Intl.DateTimeFormatOptions,\n) {\n return new DateFormatter(locale, options);\n}\n"],"names":[],"mappings":";;;AAUA,MAAM,qBAAoD,GAAA;AAAA,EACxD,IAAM,EAAA,SAAA;AAAA,EACN,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA;AACV,CAAA;AACA,MAAM,0BAAwE,GAAA;AAAA,EAC5E,UAAY,EAAA;AAAA,IACV,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,QAAQ,KAAM;AAAA,GACrD;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,QAAQ,IAAK;AAAA,GACpD;AAAA,EACA,aAAe,EAAA;AAAA,IACb,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA;AAAA,MACP,GAAG,qBAAA;AAAA,MACH,MAAQ,EAAA,KAAA;AAAA,MACR,sBAAwB,EAAA;AAAA;AAC1B;AAEJ,CAAA;AAGA,MAAM,qBAAoD,GAAA;AAAA,EACxD,GAAK,EAAA,SAAA;AAAA,EACL,KAAO,EAAA,SAAA;AAAA,EACP,IAAM,EAAA;AACR,CAAA;AACA,MAAM,0BAAwE,GAAA;AAAA,EAC5E,YAAc,EAAA;AAAA,IACZ,MAAQ,EAAA,OAAA;AAAA,IACR,OAAA,EAAS,EAAE,GAAG,qBAAsB;AAAA,GACtC;AAAA,EACA,YAAA,EAAc,EAAE,MAAQ,EAAA,OAAA,EAAS,SAAS,EAAE,GAAG,uBAAwB,EAAA;AAAA,EACvE,aAAe,EAAA;AAAA,IACb,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,OAAQ;AAAA,GACtD;AAAA,EACA,cAAgB,EAAA;AAAA,IACd,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,MAAO;AAAA,GACrD;AAAA,EACA,YAAA,EAAc,EAAE,MAAQ,EAAA,OAAA,EAAS,SAAS,EAAE,GAAG,uBAAwB,EAAA;AAAA,EACvE,cAAgB,EAAA;AAAA,IACd,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,OAAQ;AAAA,GACtD;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,MAAQ,EAAA,OAAA;AAAA,IACR,OAAS,EAAA,EAAE,GAAG,qBAAA,EAAuB,OAAO,MAAO;AAAA;AAEvD,CAAA;AAEA,SAAS,iBAAiB,OAA0B,EAAA;AAClD,EAAO,OAAA;AAAA,IACL,OAAQ,CAAA,IAAA,GAAO,0BAA2B,CAAA,OAAA,CAAQ,IAAI,CAAI,GAAA,IAAA;AAAA,IAC1D,OAAQ,CAAA,IAAA,GAAO,0BAA2B,CAAA,OAAA,CAAQ,IAAI,CAAI,GAAA;AAAA,GAC5D;AACF;AAEO,SAAS,WAAW,OAA+C,EAAA;AACxE,EAAA,MAAM,UAAa,GAAA,gBAAA,CAAiB,OAAO,CAAA,CACxC,OAAO,oBAAoB,CAAA,CAC3B,GAAI,CAAA,CAAC,MAAM,gBAAiB,CAAA,CAAA,CAAE,MAAQ,EAAA,CAAA,CAAE,OAAO,CAAC,CAAA;AAEnD,EAAA,OAAO,CAAC,CAAA,KAAM,UAAW,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,CAAE,CAAA,MAAA,CAAO,CAAC,CAAC,CAAE,CAAA,IAAA,CAAK,GAAG,CAAA;AAC3D;AAEgB,SAAA,gBAAA,CACd,QACA,OACA,EAAA;AACA,EAAO,OAAA,IAAI,aAAc,CAAA,MAAA,EAAQ,OAAO,CAAA;AAC1C;;;;"}
@@ -7,7 +7,11 @@ const supportedDatePatterns = [
7
7
  "MMM dd, yyyy",
8
8
  "MMMM dd, yyyy"
9
9
  ];
10
- const supportedTimePatterns = ["hh:mm:ss", "hh:mm:ss a"];
10
+ const supportedTimePatterns = [
11
+ "hh:mm:ss",
12
+ "hh:mm:ss a",
13
+ "hh:mm:ss.ms"
14
+ ];
11
15
  const supportedDateTimePatterns = {
12
16
  date: supportedDatePatterns,
13
17
  time: supportedTimePatterns
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../../../src/date/types.ts"],"sourcesContent":["import { ColumnTypeFormatting } from \"@vuu-ui/vuu-table-types\";\n\nconst supportedDatePatterns = [\n \"dd.mm.yyyy\",\n \"dd/mm/yyyy\",\n \"dd MMM yyyy\",\n \"dd MMMM yyyy\",\n \"mm/dd/yyyy\",\n \"MMM dd, yyyy\",\n \"MMMM dd, yyyy\",\n] as const;\n\nconst supportedTimePatterns = [\"hh:mm:ss\", \"hh:mm:ss a\"] as const;\n\nexport const supportedDateTimePatterns = {\n date: supportedDatePatterns,\n time: supportedTimePatterns,\n};\nexport const dateTimeLabelByType = { date: \"Date\", time: \"Time\" } as const;\n\nexport type DatePattern = (typeof supportedDatePatterns)[number];\nexport type TimePattern = (typeof supportedTimePatterns)[number];\n\nexport type DateTimePattern =\n | { date?: DatePattern; time: TimePattern }\n | { date: DatePattern; time?: TimePattern };\n\nexport const isDatePattern = (pattern?: string): pattern is DatePattern =>\n supportedDatePatterns.includes(pattern as DatePattern);\n\nexport const isTimePattern = (pattern?: string): pattern is TimePattern =>\n supportedTimePatterns.includes(pattern as TimePattern);\n\nexport const isDateTimePattern = (\n pattern?: ColumnTypeFormatting[\"pattern\"],\n): pattern is DateTimePattern =>\n isDatePattern(pattern?.date) || isTimePattern(pattern?.time);\n"],"names":[],"mappings":"AAEA,MAAM,qBAAwB,GAAA;AAAA,EAC5B,YAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAEA,MAAM,qBAAA,GAAwB,CAAC,UAAA,EAAY,YAAY,CAAA;AAEhD,MAAM,yBAA4B,GAAA;AAAA,EACvC,IAAM,EAAA,qBAAA;AAAA,EACN,IAAM,EAAA;AACR;AACO,MAAM,mBAAsB,GAAA,EAAE,IAAM,EAAA,MAAA,EAAQ,MAAM,MAAO;AASzD,MAAM,aAAgB,GAAA,CAAC,OAC5B,KAAA,qBAAA,CAAsB,SAAS,OAAsB;AAEhD,MAAM,aAAgB,GAAA,CAAC,OAC5B,KAAA,qBAAA,CAAsB,SAAS,OAAsB;AAE1C,MAAA,iBAAA,GAAoB,CAC/B,OAEA,KAAA,aAAA,CAAc,SAAS,IAAI,CAAA,IAAK,aAAc,CAAA,OAAA,EAAS,IAAI;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../../../src/date/types.ts"],"sourcesContent":["import { ColumnTypeFormatting } from \"@vuu-ui/vuu-table-types\";\n\nconst supportedDatePatterns = [\n \"dd.mm.yyyy\",\n \"dd/mm/yyyy\",\n \"dd MMM yyyy\",\n \"dd MMMM yyyy\",\n \"mm/dd/yyyy\",\n \"MMM dd, yyyy\",\n \"MMMM dd, yyyy\",\n] as const;\n\nconst supportedTimePatterns = [\n \"hh:mm:ss\",\n \"hh:mm:ss a\",\n \"hh:mm:ss.ms\",\n] as const;\n\nexport const supportedDateTimePatterns = {\n date: supportedDatePatterns,\n time: supportedTimePatterns,\n};\nexport const dateTimeLabelByType = { date: \"Date\", time: \"Time\" } as const;\n\nexport type DatePattern = (typeof supportedDatePatterns)[number];\nexport type TimePattern = (typeof supportedTimePatterns)[number];\n\nexport type DateTimePattern =\n | { date?: DatePattern; time: TimePattern }\n | { date: DatePattern; time?: TimePattern };\n\nexport const isDatePattern = (pattern?: string): pattern is DatePattern =>\n supportedDatePatterns.includes(pattern as DatePattern);\n\nexport const isTimePattern = (pattern?: string): pattern is TimePattern =>\n supportedTimePatterns.includes(pattern as TimePattern);\n\nexport const isDateTimePattern = (\n pattern?: ColumnTypeFormatting[\"pattern\"],\n): pattern is DateTimePattern =>\n isDatePattern(pattern?.date) || isTimePattern(pattern?.time);\n"],"names":[],"mappings":"AAEA,MAAM,qBAAwB,GAAA;AAAA,EAC5B,YAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAEA,MAAM,qBAAwB,GAAA;AAAA,EAC5B,UAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAEO,MAAM,yBAA4B,GAAA;AAAA,EACvC,IAAM,EAAA,qBAAA;AAAA,EACN,IAAM,EAAA;AACR;AACO,MAAM,mBAAsB,GAAA,EAAE,IAAM,EAAA,MAAA,EAAQ,MAAM,MAAO;AASzD,MAAM,aAAgB,GAAA,CAAC,OAC5B,KAAA,qBAAA,CAAsB,SAAS,OAAsB;AAEhD,MAAM,aAAgB,GAAA,CAAC,OAC5B,KAAA,qBAAA,CAAsB,SAAS,OAAsB;AAE1C,MAAA,iBAAA,GAAoB,CAC/B,OAEA,KAAA,aAAA,CAAc,SAAS,IAAI,CAAA,IAAK,aAAc,CAAA,OAAA,EAAS,IAAI;;;;"}
@@ -8,6 +8,7 @@ export { AggregationType, addColumnToSubscribedColumns, applyDefaultColumnConfig
8
8
  export { getCookieValue } from './cookie-utils.js';
9
9
  export { getCellConfigPanelRenderer, getCellRenderer, getCellRendererOptions, getColumnHeaderContentRenderer, getColumnHeaderLabelRenderer, getConfigurationEditor, getEditRuleValidator, getLayoutComponent, getRegisteredCellRenderers, getRowClassNameGenerator, isContainer, isLayoutComponent, isView, registerComponent, registerConfigurationEditor } from './component-registry.js';
10
10
  export { DataWindow } from './DataWindow.js';
11
+ export { Clock } from './Clock.js';
11
12
  export { MEASURES } from './common-types.js';
12
13
  export { importCSS } from './css-utils.js';
13
14
  export { DOWN1, DOWN2, UP1, UP2, asInteger, getMovingValueDirection, isValidNumber, numericTypeOfStringValue, shallowEquals, stringIsValidDecimal, stringIsValidInt, stringIsValidNumber } from './data-utils.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
- "version": "0.13.12",
2
+ "version": "0.13.13",
3
3
  "author": "heswell",
4
4
  "license": "Apache-2.0",
5
5
  "types": "types/index.d.ts",
6
6
  "devDependencies": {
7
- "@vuu-ui/vuu-data-types": "0.13.12",
8
- "@vuu-ui/vuu-table-types": "0.13.12",
9
- "@vuu-ui/vuu-filter-types": "0.13.12",
10
- "@vuu-ui/vuu-protocol-types": "0.13.12"
7
+ "@vuu-ui/vuu-data-types": "0.13.13",
8
+ "@vuu-ui/vuu-table-types": "0.13.13",
9
+ "@vuu-ui/vuu-filter-types": "0.13.13",
10
+ "@vuu-ui/vuu-protocol-types": "0.13.13"
11
11
  },
12
12
  "peerDependencies": {
13
13
  "@internationalized/date": "^3.0.0",
14
- "@vuu-ui/vuu-filter-parser": "0.13.12",
14
+ "@vuu-ui/vuu-filter-parser": "0.13.13",
15
15
  "clsx": "^2.0.0",
16
16
  "react": "^19.1.0",
17
17
  "react-dom": "^19.1.0"
@@ -0,0 +1,18 @@
1
+ export interface ClockProps {
2
+ year?: number;
3
+ month?: number;
4
+ day?: number;
5
+ hours?: number;
6
+ minutes?: number;
7
+ seconds?: number;
8
+ milliseconds?: number;
9
+ }
10
+ export type TimeUnit = "minutes" | "seconds" | "ms";
11
+ export declare class Clock {
12
+ #private;
13
+ constructor(props?: ClockProps);
14
+ advance(value: number, units?: TimeUnit): void;
15
+ toString(): string;
16
+ get now(): number;
17
+ get date(): Date;
18
+ }
@@ -1,9 +1,9 @@
1
1
  import { ColumnTypeFormatting } from "@vuu-ui/vuu-table-types";
2
2
  declare const supportedDatePatterns: readonly ["dd.mm.yyyy", "dd/mm/yyyy", "dd MMM yyyy", "dd MMMM yyyy", "mm/dd/yyyy", "MMM dd, yyyy", "MMMM dd, yyyy"];
3
- declare const supportedTimePatterns: readonly ["hh:mm:ss", "hh:mm:ss a"];
3
+ declare const supportedTimePatterns: readonly ["hh:mm:ss", "hh:mm:ss a", "hh:mm:ss.ms"];
4
4
  export declare const supportedDateTimePatterns: {
5
5
  date: readonly ["dd.mm.yyyy", "dd/mm/yyyy", "dd MMM yyyy", "dd MMMM yyyy", "mm/dd/yyyy", "MMM dd, yyyy", "MMMM dd, yyyy"];
6
- time: readonly ["hh:mm:ss", "hh:mm:ss a"];
6
+ time: readonly ["hh:mm:ss", "hh:mm:ss a", "hh:mm:ss.ms"];
7
7
  };
8
8
  export declare const dateTimeLabelByType: {
9
9
  readonly date: "Date";
package/types/index.d.ts CHANGED
@@ -11,6 +11,7 @@ export * from "./column-utils";
11
11
  export * from "./cookie-utils";
12
12
  export * from "./component-registry";
13
13
  export * from "./DataWindow";
14
+ export { Clock } from "./Clock";
14
15
  export * from "./common-types";
15
16
  export * from "./css-utils";
16
17
  export * from "./data-utils";