qstd 0.3.81 → 0.3.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/index.cjs +4 -2
- package/dist/client/index.js +5 -3
- package/dist/preset/index.cjs +67 -0
- package/dist/preset/index.d.ts.map +1 -1
- package/dist/preset/index.js +67 -0
- package/dist/server/index.cjs +4 -2
- package/dist/server/index.js +5 -3
- package/dist/shared/time.d.ts +10 -0
- package/dist/shared/time.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/client/index.cjs
CHANGED
|
@@ -366,9 +366,11 @@ var formatDuration = (value, options = {}) => {
|
|
|
366
366
|
return parts.join(separator);
|
|
367
367
|
};
|
|
368
368
|
var formatDate = (input, options = {}) => {
|
|
369
|
-
const { style = "medium", pattern, includeTime = false } = options;
|
|
369
|
+
const { style = "medium", pattern, includeTime = false, parseFormat } = options;
|
|
370
370
|
let date2;
|
|
371
|
-
if (typeof input === "string") {
|
|
371
|
+
if (typeof input === "string" && parseFormat) {
|
|
372
|
+
date2 = dateFns.parse(input, parseFormat, /* @__PURE__ */ new Date());
|
|
373
|
+
} else if (typeof input === "string") {
|
|
372
374
|
date2 = new Date(input);
|
|
373
375
|
} else if (typeof input === "number") {
|
|
374
376
|
date2 = new Date(input);
|
package/dist/client/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { format, formatISO, formatDistanceToNow, isSameYear, isSameMonth, isSameDay, addSeconds, addMinutes, addHours, addDays, addWeeks, addBusinessDays, addMonths, addYears } from 'date-fns';
|
|
1
|
+
import { parse, format, formatISO, formatDistanceToNow, isSameYear, isSameMonth, isSameDay, addSeconds, addMinutes, addHours, addDays, addWeeks, addBusinessDays, addMonths, addYears } from 'date-fns';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -359,9 +359,11 @@ var formatDuration = (value, options = {}) => {
|
|
|
359
359
|
return parts.join(separator);
|
|
360
360
|
};
|
|
361
361
|
var formatDate = (input, options = {}) => {
|
|
362
|
-
const { style = "medium", pattern, includeTime = false } = options;
|
|
362
|
+
const { style = "medium", pattern, includeTime = false, parseFormat } = options;
|
|
363
363
|
let date2;
|
|
364
|
-
if (typeof input === "string") {
|
|
364
|
+
if (typeof input === "string" && parseFormat) {
|
|
365
|
+
date2 = parse(input, parseFormat, /* @__PURE__ */ new Date());
|
|
366
|
+
} else if (typeof input === "string") {
|
|
365
367
|
date2 = new Date(input);
|
|
366
368
|
} else if (typeof input === "number") {
|
|
367
369
|
date2 = new Date(input);
|
package/dist/preset/index.cjs
CHANGED
|
@@ -1,6 +1,51 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
// src/preset/index.ts
|
|
4
|
+
var normalizeBorderColor = (raw) => {
|
|
5
|
+
const borderColor = raw.trim();
|
|
6
|
+
const isKeyword = /^(currentColor|transparent|inherit|initial|unset|revert)$/i.test(
|
|
7
|
+
borderColor
|
|
8
|
+
);
|
|
9
|
+
const isHex = /^#/.test(borderColor);
|
|
10
|
+
const isFunc = /^(rgb|rgba|hsl|hsla|lab|lch|oklab|oklch|color)\(/i.test(
|
|
11
|
+
borderColor
|
|
12
|
+
);
|
|
13
|
+
const isVarRef = /^var\(/.test(borderColor);
|
|
14
|
+
const looksLikeScaleToken = /^[a-zA-Z][\w-]*\.\d{2,3}$/.test(borderColor);
|
|
15
|
+
const looksLikeSemanticToken = /^[a-zA-Z][\w-]*-[\w-]+$/.test(borderColor);
|
|
16
|
+
const shouldWrap = !isKeyword && !isHex && !isFunc && !isVarRef && (looksLikeScaleToken || looksLikeSemanticToken);
|
|
17
|
+
return shouldWrap ? `var(--colors-${borderColor.replace(/\./g, "-")})` : borderColor;
|
|
18
|
+
};
|
|
19
|
+
var parseBorderShorthand = (value) => {
|
|
20
|
+
const raw = value.trim();
|
|
21
|
+
if (raw === "none" || raw === "0" || raw === "0px" || raw === "0rem" || raw === "0em") {
|
|
22
|
+
return {
|
|
23
|
+
width: "0",
|
|
24
|
+
style: "none",
|
|
25
|
+
color: void 0
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const parts = raw.split(/\s+/);
|
|
29
|
+
let width = "";
|
|
30
|
+
let style = "";
|
|
31
|
+
let color = "";
|
|
32
|
+
parts.forEach((part) => {
|
|
33
|
+
if (/^\d+(\.\d+)?(px|em|rem|%|pt|pc|in|cm|mm|ex|ch|vw|vh|vmin|vmax)$/.test(
|
|
34
|
+
part
|
|
35
|
+
))
|
|
36
|
+
width = part;
|
|
37
|
+
else if (/^(none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset)$/.test(
|
|
38
|
+
part
|
|
39
|
+
))
|
|
40
|
+
style = part;
|
|
41
|
+
else color = part;
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
width: width || void 0,
|
|
45
|
+
style: style || void 0,
|
|
46
|
+
color: color ? normalizeBorderColor(color) : void 0
|
|
47
|
+
};
|
|
48
|
+
};
|
|
4
49
|
var preset = {
|
|
5
50
|
name: "qstd-preset",
|
|
6
51
|
globalCss: {
|
|
@@ -240,6 +285,28 @@ var preset = {
|
|
|
240
285
|
return { "&, & path": { strokeWidth: value } };
|
|
241
286
|
}
|
|
242
287
|
},
|
|
288
|
+
borderBottom: {
|
|
289
|
+
transform(value) {
|
|
290
|
+
if (typeof value !== "string") return {};
|
|
291
|
+
const parsed = parseBorderShorthand(value);
|
|
292
|
+
return {
|
|
293
|
+
...parsed.width && { borderBottomWidth: parsed.width },
|
|
294
|
+
...parsed.style && { borderBottomStyle: parsed.style },
|
|
295
|
+
...parsed.color && { borderBottomColor: parsed.color }
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
},
|
|
299
|
+
borderTop: {
|
|
300
|
+
transform(value) {
|
|
301
|
+
if (typeof value !== "string") return {};
|
|
302
|
+
const parsed = parseBorderShorthand(value);
|
|
303
|
+
return {
|
|
304
|
+
...parsed.width && { borderTopWidth: parsed.width },
|
|
305
|
+
...parsed.style && { borderTopStyle: parsed.style },
|
|
306
|
+
...parsed.color && { borderTopColor: parsed.color }
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
},
|
|
243
310
|
debug: {
|
|
244
311
|
values: { type: "boolean" },
|
|
245
312
|
transform(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/preset/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/preset/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAwE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,QAAA,MAAM,MAAM,EAAE,MAskBb,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/preset/index.js
CHANGED
|
@@ -1,4 +1,49 @@
|
|
|
1
1
|
// src/preset/index.ts
|
|
2
|
+
var normalizeBorderColor = (raw) => {
|
|
3
|
+
const borderColor = raw.trim();
|
|
4
|
+
const isKeyword = /^(currentColor|transparent|inherit|initial|unset|revert)$/i.test(
|
|
5
|
+
borderColor
|
|
6
|
+
);
|
|
7
|
+
const isHex = /^#/.test(borderColor);
|
|
8
|
+
const isFunc = /^(rgb|rgba|hsl|hsla|lab|lch|oklab|oklch|color)\(/i.test(
|
|
9
|
+
borderColor
|
|
10
|
+
);
|
|
11
|
+
const isVarRef = /^var\(/.test(borderColor);
|
|
12
|
+
const looksLikeScaleToken = /^[a-zA-Z][\w-]*\.\d{2,3}$/.test(borderColor);
|
|
13
|
+
const looksLikeSemanticToken = /^[a-zA-Z][\w-]*-[\w-]+$/.test(borderColor);
|
|
14
|
+
const shouldWrap = !isKeyword && !isHex && !isFunc && !isVarRef && (looksLikeScaleToken || looksLikeSemanticToken);
|
|
15
|
+
return shouldWrap ? `var(--colors-${borderColor.replace(/\./g, "-")})` : borderColor;
|
|
16
|
+
};
|
|
17
|
+
var parseBorderShorthand = (value) => {
|
|
18
|
+
const raw = value.trim();
|
|
19
|
+
if (raw === "none" || raw === "0" || raw === "0px" || raw === "0rem" || raw === "0em") {
|
|
20
|
+
return {
|
|
21
|
+
width: "0",
|
|
22
|
+
style: "none",
|
|
23
|
+
color: void 0
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const parts = raw.split(/\s+/);
|
|
27
|
+
let width = "";
|
|
28
|
+
let style = "";
|
|
29
|
+
let color = "";
|
|
30
|
+
parts.forEach((part) => {
|
|
31
|
+
if (/^\d+(\.\d+)?(px|em|rem|%|pt|pc|in|cm|mm|ex|ch|vw|vh|vmin|vmax)$/.test(
|
|
32
|
+
part
|
|
33
|
+
))
|
|
34
|
+
width = part;
|
|
35
|
+
else if (/^(none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset)$/.test(
|
|
36
|
+
part
|
|
37
|
+
))
|
|
38
|
+
style = part;
|
|
39
|
+
else color = part;
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
width: width || void 0,
|
|
43
|
+
style: style || void 0,
|
|
44
|
+
color: color ? normalizeBorderColor(color) : void 0
|
|
45
|
+
};
|
|
46
|
+
};
|
|
2
47
|
var preset = {
|
|
3
48
|
name: "qstd-preset",
|
|
4
49
|
globalCss: {
|
|
@@ -238,6 +283,28 @@ var preset = {
|
|
|
238
283
|
return { "&, & path": { strokeWidth: value } };
|
|
239
284
|
}
|
|
240
285
|
},
|
|
286
|
+
borderBottom: {
|
|
287
|
+
transform(value) {
|
|
288
|
+
if (typeof value !== "string") return {};
|
|
289
|
+
const parsed = parseBorderShorthand(value);
|
|
290
|
+
return {
|
|
291
|
+
...parsed.width && { borderBottomWidth: parsed.width },
|
|
292
|
+
...parsed.style && { borderBottomStyle: parsed.style },
|
|
293
|
+
...parsed.color && { borderBottomColor: parsed.color }
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
borderTop: {
|
|
298
|
+
transform(value) {
|
|
299
|
+
if (typeof value !== "string") return {};
|
|
300
|
+
const parsed = parseBorderShorthand(value);
|
|
301
|
+
return {
|
|
302
|
+
...parsed.width && { borderTopWidth: parsed.width },
|
|
303
|
+
...parsed.style && { borderTopStyle: parsed.style },
|
|
304
|
+
...parsed.color && { borderTopColor: parsed.color }
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
},
|
|
241
308
|
debug: {
|
|
242
309
|
values: { type: "boolean" },
|
|
243
310
|
transform(value) {
|
package/dist/server/index.cjs
CHANGED
|
@@ -378,9 +378,11 @@ var formatDuration = (value, options = {}) => {
|
|
|
378
378
|
return parts.join(separator);
|
|
379
379
|
};
|
|
380
380
|
var formatDate = (input, options = {}) => {
|
|
381
|
-
const { style = "medium", pattern, includeTime = false } = options;
|
|
381
|
+
const { style = "medium", pattern, includeTime = false, parseFormat } = options;
|
|
382
382
|
let date2;
|
|
383
|
-
if (typeof input === "string") {
|
|
383
|
+
if (typeof input === "string" && parseFormat) {
|
|
384
|
+
date2 = dateFns.parse(input, parseFormat, /* @__PURE__ */ new Date());
|
|
385
|
+
} else if (typeof input === "string") {
|
|
384
386
|
date2 = new Date(input);
|
|
385
387
|
} else if (typeof input === "number") {
|
|
386
388
|
date2 = new Date(input);
|
package/dist/server/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { format, formatISO, formatDistanceToNow, isSameYear, isSameMonth, isSameDay, addSeconds, addMinutes, addHours, addDays, addWeeks, addBusinessDays, addMonths, addYears } from 'date-fns';
|
|
1
|
+
import { parse, format, formatISO, formatDistanceToNow, isSameYear, isSameMonth, isSameDay, addSeconds, addMinutes, addHours, addDays, addWeeks, addBusinessDays, addMonths, addYears } from 'date-fns';
|
|
2
2
|
import awaitSpawn from 'await-spawn';
|
|
3
3
|
import { promises } from 'fs';
|
|
4
4
|
import { ArkErrors } from 'arktype';
|
|
@@ -370,9 +370,11 @@ var formatDuration = (value, options = {}) => {
|
|
|
370
370
|
return parts.join(separator);
|
|
371
371
|
};
|
|
372
372
|
var formatDate = (input, options = {}) => {
|
|
373
|
-
const { style = "medium", pattern, includeTime = false } = options;
|
|
373
|
+
const { style = "medium", pattern, includeTime = false, parseFormat } = options;
|
|
374
374
|
let date2;
|
|
375
|
-
if (typeof input === "string") {
|
|
375
|
+
if (typeof input === "string" && parseFormat) {
|
|
376
|
+
date2 = parse(input, parseFormat, /* @__PURE__ */ new Date());
|
|
377
|
+
} else if (typeof input === "string") {
|
|
376
378
|
date2 = new Date(input);
|
|
377
379
|
} else if (typeof input === "number") {
|
|
378
380
|
date2 = new Date(input);
|
package/dist/shared/time.d.ts
CHANGED
|
@@ -106,6 +106,15 @@ type DateOptions = {
|
|
|
106
106
|
pattern?: string;
|
|
107
107
|
/** Include time component */
|
|
108
108
|
includeTime?: boolean;
|
|
109
|
+
/**
|
|
110
|
+
* date-fns parse format for the input string.
|
|
111
|
+
* When provided and input is a string, uses `date-fns/parse` instead of `new Date()`.
|
|
112
|
+
* Useful for non-standard date formats (e.g., PDF dates: "yyyyMMddHHmmss").
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* formatDate("20240115120000", { parseFormat: "yyyyMMddHHmmss" })
|
|
116
|
+
*/
|
|
117
|
+
parseFormat?: string;
|
|
109
118
|
};
|
|
110
119
|
/**
|
|
111
120
|
* Flexible date formatter that handles multiple input types and format styles
|
|
@@ -119,6 +128,7 @@ type DateOptions = {
|
|
|
119
128
|
* formatDate(date, { style: "long" }) // "December 1, 2023"
|
|
120
129
|
* formatDate(date, { includeTime: true }) // "Dec 1, 2023 3:30 PM"
|
|
121
130
|
* formatDate(date, { pattern: "yyyy-MM-dd" }) // Custom format
|
|
131
|
+
* formatDate("20240115120000", { parseFormat: "yyyyMMddHHmmss", includeTime: true }) // Parse non-standard input
|
|
122
132
|
*/
|
|
123
133
|
export declare const formatDate: (input: DateInput, options?: DateOptions) => string;
|
|
124
134
|
type TimeAgoInput = Date | string | number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/shared/time.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/shared/time.ts"],"names":[],"mappings":"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"}
|