@medialane/ui 0.146.0 → 0.147.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,13 +18,25 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var time_exports = {};
20
20
  __export(time_exports, {
21
+ isExpired: () => isExpired,
21
22
  timeAgo: () => timeAgo,
22
23
  timeUntil: () => timeUntil
23
24
  });
24
25
  module.exports = __toCommonJS(time_exports);
25
- function timeUntil(dateStr) {
26
+ function toMs(dateStr) {
26
27
  const raw = typeof dateStr === "string" && /^\d+$/.test(dateStr.trim()) ? Number(dateStr) : dateStr;
27
- const ms = typeof raw === "number" ? raw * 1e3 : new Date(raw).getTime();
28
+ return typeof raw === "number" ? raw * 1e3 : new Date(raw).getTime();
29
+ }
30
+ function isExpired(endTime) {
31
+ if (endTime === null || endTime === void 0 || endTime === "" || endTime === 0 || endTime === "0") {
32
+ return false;
33
+ }
34
+ const ms = toMs(endTime);
35
+ if (!Number.isFinite(ms)) return false;
36
+ return ms - Date.now() <= 0;
37
+ }
38
+ function timeUntil(dateStr) {
39
+ const ms = toMs(dateStr);
28
40
  const diff = ms - Date.now();
29
41
  if (diff <= 0) return "Expired";
30
42
  const days = Math.floor(diff / 864e5);
@@ -49,6 +61,7 @@ function timeAgo(iso) {
49
61
  }
50
62
  // Annotate the CommonJS export names for ESM import in node:
51
63
  0 && (module.exports = {
64
+ isExpired,
52
65
  timeAgo,
53
66
  timeUntil
54
67
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/time.ts"],"sourcesContent":["\nexport function timeUntil(dateStr: string | number): string {\n\n const raw = typeof dateStr === \"string\" && /^\\d+$/.test(dateStr.trim())\n ? Number(dateStr)\n : dateStr;\n const ms = typeof raw === \"number\" ? raw * 1000 : new Date(raw).getTime();\n const diff = ms - Date.now();\n if (diff <= 0) return \"Expired\";\n const days = Math.floor(diff / 86400000);\n const hours = Math.floor((diff % 86400000) / 3600000);\n if (days > 0) return `${days}d ${hours}h`;\n const mins = Math.floor((diff % 3600000) / 60000);\n return `${hours}h ${mins}m`;\n}\n\nexport function timeAgo(iso: string): string {\n const diff = Date.now() - new Date(iso).getTime();\n const s = Math.floor(diff / 1000);\n if (s < 60) return \"just now\";\n const m = Math.floor(s / 60);\n if (m < 60) return `${m}m ago`;\n const h = Math.floor(m / 60);\n if (h < 24) return `${h}h ago`;\n const d = Math.floor(h / 24);\n if (d < 30) return `${d}d ago`;\n const mo = Math.floor(d / 30);\n if (mo < 12) return `${mo}mo ago`;\n return `${Math.floor(mo / 12)}y ago`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACO,SAAS,UAAU,SAAkC;AAE1D,QAAM,MAAM,OAAO,YAAY,YAAY,QAAQ,KAAK,QAAQ,KAAK,CAAC,IAClE,OAAO,OAAO,IACd;AACJ,QAAM,KAAK,OAAO,QAAQ,WAAW,MAAM,MAAO,IAAI,KAAK,GAAG,EAAE,QAAQ;AACxE,QAAM,OAAO,KAAK,KAAK,IAAI;AAC3B,MAAI,QAAQ,EAAG,QAAO;AACtB,QAAM,OAAO,KAAK,MAAM,OAAO,KAAQ;AACvC,QAAM,QAAQ,KAAK,MAAO,OAAO,QAAY,IAAO;AACpD,MAAI,OAAO,EAAG,QAAO,GAAG,IAAI,KAAK,KAAK;AACtC,QAAM,OAAO,KAAK,MAAO,OAAO,OAAW,GAAK;AAChD,SAAO,GAAG,KAAK,KAAK,IAAI;AAC1B;AAEO,SAAS,QAAQ,KAAqB;AAC3C,QAAM,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,QAAQ;AAChD,QAAM,IAAI,KAAK,MAAM,OAAO,GAAI;AAChC,MAAI,IAAI,GAAI,QAAO;AACnB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,KAAK,KAAK,MAAM,IAAI,EAAE;AAC5B,MAAI,KAAK,GAAI,QAAO,GAAG,EAAE;AACzB,SAAO,GAAG,KAAK,MAAM,KAAK,EAAE,CAAC;AAC/B;","names":[]}
1
+ {"version":3,"sources":["../../src/utils/time.ts"],"sourcesContent":["\n// Epoch seconds arrive as a string from the API, ISO strings from elsewhere.\nfunction toMs(dateStr: string | number): number {\n const raw = typeof dateStr === \"string\" && /^\\d+$/.test(dateStr.trim())\n ? Number(dateStr)\n : dateStr;\n return typeof raw === \"number\" ? raw * 1000 : new Date(raw).getTime();\n}\n\n// An order past its window cannot be filled on chain. `timeUntil` already knew\n// this and rendered \"Expired\", but callers gated their buttons on order status\n// alone, so an expired order still offered Accept or Buy and the transaction\n// reverted. Anything that decides whether an order is actionable uses this.\n// endTime 0 conventionally means no expiry.\nexport function isExpired(endTime: string | number | null | undefined): boolean {\n if (endTime === null || endTime === undefined || endTime === \"\" || endTime === 0 || endTime === \"0\") {\n return false;\n }\n const ms = toMs(endTime);\n if (!Number.isFinite(ms)) return false;\n return ms - Date.now() <= 0;\n}\n\nexport function timeUntil(dateStr: string | number): string {\n const ms = toMs(dateStr);\n const diff = ms - Date.now();\n if (diff <= 0) return \"Expired\";\n const days = Math.floor(diff / 86400000);\n const hours = Math.floor((diff % 86400000) / 3600000);\n if (days > 0) return `${days}d ${hours}h`;\n const mins = Math.floor((diff % 3600000) / 60000);\n return `${hours}h ${mins}m`;\n}\n\nexport function timeAgo(iso: string): string {\n const diff = Date.now() - new Date(iso).getTime();\n const s = Math.floor(diff / 1000);\n if (s < 60) return \"just now\";\n const m = Math.floor(s / 60);\n if (m < 60) return `${m}m ago`;\n const h = Math.floor(m / 60);\n if (h < 24) return `${h}h ago`;\n const d = Math.floor(h / 24);\n if (d < 30) return `${d}d ago`;\n const mo = Math.floor(d / 30);\n if (mo < 12) return `${mo}mo ago`;\n return `${Math.floor(mo / 12)}y ago`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,SAAS,KAAK,SAAkC;AAC9C,QAAM,MAAM,OAAO,YAAY,YAAY,QAAQ,KAAK,QAAQ,KAAK,CAAC,IAClE,OAAO,OAAO,IACd;AACJ,SAAO,OAAO,QAAQ,WAAW,MAAM,MAAO,IAAI,KAAK,GAAG,EAAE,QAAQ;AACtE;AAOO,SAAS,UAAU,SAAsD;AAC9E,MAAI,YAAY,QAAQ,YAAY,UAAa,YAAY,MAAM,YAAY,KAAK,YAAY,KAAK;AACnG,WAAO;AAAA,EACT;AACA,QAAM,KAAK,KAAK,OAAO;AACvB,MAAI,CAAC,OAAO,SAAS,EAAE,EAAG,QAAO;AACjC,SAAO,KAAK,KAAK,IAAI,KAAK;AAC5B;AAEO,SAAS,UAAU,SAAkC;AAC1D,QAAM,KAAK,KAAK,OAAO;AACvB,QAAM,OAAO,KAAK,KAAK,IAAI;AAC3B,MAAI,QAAQ,EAAG,QAAO;AACtB,QAAM,OAAO,KAAK,MAAM,OAAO,KAAQ;AACvC,QAAM,QAAQ,KAAK,MAAO,OAAO,QAAY,IAAO;AACpD,MAAI,OAAO,EAAG,QAAO,GAAG,IAAI,KAAK,KAAK;AACtC,QAAM,OAAO,KAAK,MAAO,OAAO,OAAW,GAAK;AAChD,SAAO,GAAG,KAAK,KAAK,IAAI;AAC1B;AAEO,SAAS,QAAQ,KAAqB;AAC3C,QAAM,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,QAAQ;AAChD,QAAM,IAAI,KAAK,MAAM,OAAO,GAAI;AAChC,MAAI,IAAI,GAAI,QAAO;AACnB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,KAAK,KAAK,MAAM,IAAI,EAAE;AAC5B,MAAI,KAAK,GAAI,QAAO,GAAG,EAAE;AACzB,SAAO,GAAG,KAAK,MAAM,KAAK,EAAE,CAAC;AAC/B;","names":[]}
@@ -1,4 +1,5 @@
1
+ declare function isExpired(endTime: string | number | null | undefined): boolean;
1
2
  declare function timeUntil(dateStr: string | number): string;
2
3
  declare function timeAgo(iso: string): string;
3
4
 
4
- export { timeAgo, timeUntil };
5
+ export { isExpired, timeAgo, timeUntil };
@@ -1,4 +1,5 @@
1
+ declare function isExpired(endTime: string | number | null | undefined): boolean;
1
2
  declare function timeUntil(dateStr: string | number): string;
2
3
  declare function timeAgo(iso: string): string;
3
4
 
4
- export { timeAgo, timeUntil };
5
+ export { isExpired, timeAgo, timeUntil };
@@ -1,6 +1,17 @@
1
- function timeUntil(dateStr) {
1
+ function toMs(dateStr) {
2
2
  const raw = typeof dateStr === "string" && /^\d+$/.test(dateStr.trim()) ? Number(dateStr) : dateStr;
3
- const ms = typeof raw === "number" ? raw * 1e3 : new Date(raw).getTime();
3
+ return typeof raw === "number" ? raw * 1e3 : new Date(raw).getTime();
4
+ }
5
+ function isExpired(endTime) {
6
+ if (endTime === null || endTime === void 0 || endTime === "" || endTime === 0 || endTime === "0") {
7
+ return false;
8
+ }
9
+ const ms = toMs(endTime);
10
+ if (!Number.isFinite(ms)) return false;
11
+ return ms - Date.now() <= 0;
12
+ }
13
+ function timeUntil(dateStr) {
14
+ const ms = toMs(dateStr);
4
15
  const diff = ms - Date.now();
5
16
  if (diff <= 0) return "Expired";
6
17
  const days = Math.floor(diff / 864e5);
@@ -24,6 +35,7 @@ function timeAgo(iso) {
24
35
  return `${Math.floor(mo / 12)}y ago`;
25
36
  }
26
37
  export {
38
+ isExpired,
27
39
  timeAgo,
28
40
  timeUntil
29
41
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/time.ts"],"sourcesContent":["\nexport function timeUntil(dateStr: string | number): string {\n\n const raw = typeof dateStr === \"string\" && /^\\d+$/.test(dateStr.trim())\n ? Number(dateStr)\n : dateStr;\n const ms = typeof raw === \"number\" ? raw * 1000 : new Date(raw).getTime();\n const diff = ms - Date.now();\n if (diff <= 0) return \"Expired\";\n const days = Math.floor(diff / 86400000);\n const hours = Math.floor((diff % 86400000) / 3600000);\n if (days > 0) return `${days}d ${hours}h`;\n const mins = Math.floor((diff % 3600000) / 60000);\n return `${hours}h ${mins}m`;\n}\n\nexport function timeAgo(iso: string): string {\n const diff = Date.now() - new Date(iso).getTime();\n const s = Math.floor(diff / 1000);\n if (s < 60) return \"just now\";\n const m = Math.floor(s / 60);\n if (m < 60) return `${m}m ago`;\n const h = Math.floor(m / 60);\n if (h < 24) return `${h}h ago`;\n const d = Math.floor(h / 24);\n if (d < 30) return `${d}d ago`;\n const mo = Math.floor(d / 30);\n if (mo < 12) return `${mo}mo ago`;\n return `${Math.floor(mo / 12)}y ago`;\n}\n"],"mappings":"AACO,SAAS,UAAU,SAAkC;AAE1D,QAAM,MAAM,OAAO,YAAY,YAAY,QAAQ,KAAK,QAAQ,KAAK,CAAC,IAClE,OAAO,OAAO,IACd;AACJ,QAAM,KAAK,OAAO,QAAQ,WAAW,MAAM,MAAO,IAAI,KAAK,GAAG,EAAE,QAAQ;AACxE,QAAM,OAAO,KAAK,KAAK,IAAI;AAC3B,MAAI,QAAQ,EAAG,QAAO;AACtB,QAAM,OAAO,KAAK,MAAM,OAAO,KAAQ;AACvC,QAAM,QAAQ,KAAK,MAAO,OAAO,QAAY,IAAO;AACpD,MAAI,OAAO,EAAG,QAAO,GAAG,IAAI,KAAK,KAAK;AACtC,QAAM,OAAO,KAAK,MAAO,OAAO,OAAW,GAAK;AAChD,SAAO,GAAG,KAAK,KAAK,IAAI;AAC1B;AAEO,SAAS,QAAQ,KAAqB;AAC3C,QAAM,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,QAAQ;AAChD,QAAM,IAAI,KAAK,MAAM,OAAO,GAAI;AAChC,MAAI,IAAI,GAAI,QAAO;AACnB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,KAAK,KAAK,MAAM,IAAI,EAAE;AAC5B,MAAI,KAAK,GAAI,QAAO,GAAG,EAAE;AACzB,SAAO,GAAG,KAAK,MAAM,KAAK,EAAE,CAAC;AAC/B;","names":[]}
1
+ {"version":3,"sources":["../../src/utils/time.ts"],"sourcesContent":["\n// Epoch seconds arrive as a string from the API, ISO strings from elsewhere.\nfunction toMs(dateStr: string | number): number {\n const raw = typeof dateStr === \"string\" && /^\\d+$/.test(dateStr.trim())\n ? Number(dateStr)\n : dateStr;\n return typeof raw === \"number\" ? raw * 1000 : new Date(raw).getTime();\n}\n\n// An order past its window cannot be filled on chain. `timeUntil` already knew\n// this and rendered \"Expired\", but callers gated their buttons on order status\n// alone, so an expired order still offered Accept or Buy and the transaction\n// reverted. Anything that decides whether an order is actionable uses this.\n// endTime 0 conventionally means no expiry.\nexport function isExpired(endTime: string | number | null | undefined): boolean {\n if (endTime === null || endTime === undefined || endTime === \"\" || endTime === 0 || endTime === \"0\") {\n return false;\n }\n const ms = toMs(endTime);\n if (!Number.isFinite(ms)) return false;\n return ms - Date.now() <= 0;\n}\n\nexport function timeUntil(dateStr: string | number): string {\n const ms = toMs(dateStr);\n const diff = ms - Date.now();\n if (diff <= 0) return \"Expired\";\n const days = Math.floor(diff / 86400000);\n const hours = Math.floor((diff % 86400000) / 3600000);\n if (days > 0) return `${days}d ${hours}h`;\n const mins = Math.floor((diff % 3600000) / 60000);\n return `${hours}h ${mins}m`;\n}\n\nexport function timeAgo(iso: string): string {\n const diff = Date.now() - new Date(iso).getTime();\n const s = Math.floor(diff / 1000);\n if (s < 60) return \"just now\";\n const m = Math.floor(s / 60);\n if (m < 60) return `${m}m ago`;\n const h = Math.floor(m / 60);\n if (h < 24) return `${h}h ago`;\n const d = Math.floor(h / 24);\n if (d < 30) return `${d}d ago`;\n const mo = Math.floor(d / 30);\n if (mo < 12) return `${mo}mo ago`;\n return `${Math.floor(mo / 12)}y ago`;\n}\n"],"mappings":"AAEA,SAAS,KAAK,SAAkC;AAC9C,QAAM,MAAM,OAAO,YAAY,YAAY,QAAQ,KAAK,QAAQ,KAAK,CAAC,IAClE,OAAO,OAAO,IACd;AACJ,SAAO,OAAO,QAAQ,WAAW,MAAM,MAAO,IAAI,KAAK,GAAG,EAAE,QAAQ;AACtE;AAOO,SAAS,UAAU,SAAsD;AAC9E,MAAI,YAAY,QAAQ,YAAY,UAAa,YAAY,MAAM,YAAY,KAAK,YAAY,KAAK;AACnG,WAAO;AAAA,EACT;AACA,QAAM,KAAK,KAAK,OAAO;AACvB,MAAI,CAAC,OAAO,SAAS,EAAE,EAAG,QAAO;AACjC,SAAO,KAAK,KAAK,IAAI,KAAK;AAC5B;AAEO,SAAS,UAAU,SAAkC;AAC1D,QAAM,KAAK,KAAK,OAAO;AACvB,QAAM,OAAO,KAAK,KAAK,IAAI;AAC3B,MAAI,QAAQ,EAAG,QAAO;AACtB,QAAM,OAAO,KAAK,MAAM,OAAO,KAAQ;AACvC,QAAM,QAAQ,KAAK,MAAO,OAAO,QAAY,IAAO;AACpD,MAAI,OAAO,EAAG,QAAO,GAAG,IAAI,KAAK,KAAK;AACtC,QAAM,OAAO,KAAK,MAAO,OAAO,OAAW,GAAK;AAChD,SAAO,GAAG,KAAK,KAAK,IAAI;AAC1B;AAEO,SAAS,QAAQ,KAAqB;AAC3C,QAAM,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,QAAQ;AAChD,QAAM,IAAI,KAAK,MAAM,OAAO,GAAI;AAChC,MAAI,IAAI,GAAI,QAAO;AACnB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,KAAK,KAAK,MAAM,IAAI,EAAE;AAC5B,MAAI,KAAK,GAAI,QAAO,GAAG,EAAE;AACzB,SAAO,GAAG,KAAK,MAAM,KAAK,EAAE,CAAC;AAC/B;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medialane/ui",
3
- "version": "0.146.0",
3
+ "version": "0.147.0",
4
4
  "description": "Shared UI components for Medialane apps",
5
5
  "type": "module",
6
6
  "sideEffects": false,