udf-cli 0.3.1 → 0.4.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.
Files changed (54) hide show
  1. package/README.md +130 -7
  2. package/dist/bin/udf-cli.d.ts +0 -1
  3. package/dist/bin/udf-cli.js +1 -125
  4. package/dist/chunk-6564CQ7U.js +1 -0
  5. package/dist/module-resolve-XD725NCC.js +1 -0
  6. package/dist/pin-prompt-FSXBDU36.js +1 -0
  7. package/dist/sign-BNEXYCMC.js +1 -0
  8. package/dist/src/index.d.ts +117 -6
  9. package/dist/src/index.js +1 -6
  10. package/package.json +19 -3
  11. package/dist/bin/udf-cli.js.map +0 -1
  12. package/dist/src/converters/html-to-udf.d.ts +0 -1
  13. package/dist/src/converters/html-to-udf.js +0 -7
  14. package/dist/src/converters/html-to-udf.js.map +0 -1
  15. package/dist/src/converters/markdown-to-udf.d.ts +0 -1
  16. package/dist/src/converters/markdown-to-udf.js +0 -7
  17. package/dist/src/converters/markdown-to-udf.js.map +0 -1
  18. package/dist/src/converters/udf-to-html.d.ts +0 -1
  19. package/dist/src/converters/udf-to-html.js +0 -7
  20. package/dist/src/converters/udf-to-html.js.map +0 -1
  21. package/dist/src/converters/udf-to-markdown.d.ts +0 -1
  22. package/dist/src/converters/udf-to-markdown.js +0 -7
  23. package/dist/src/converters/udf-to-markdown.js.map +0 -1
  24. package/dist/src/html/markdown-parser.d.ts +0 -2
  25. package/dist/src/html/markdown-parser.js +0 -172
  26. package/dist/src/html/markdown-parser.js.map +0 -1
  27. package/dist/src/html/markdown-serializer.d.ts +0 -2
  28. package/dist/src/html/markdown-serializer.js +0 -156
  29. package/dist/src/html/markdown-serializer.js.map +0 -1
  30. package/dist/src/html/parser.d.ts +0 -2
  31. package/dist/src/html/parser.js +0 -576
  32. package/dist/src/html/parser.js.map +0 -1
  33. package/dist/src/html/serializer.d.ts +0 -6
  34. package/dist/src/html/serializer.js +0 -285
  35. package/dist/src/html/serializer.js.map +0 -1
  36. package/dist/src/index.js.map +0 -1
  37. package/dist/src/model/document.d.ts +0 -107
  38. package/dist/src/model/document.js +0 -88
  39. package/dist/src/model/document.js.map +0 -1
  40. package/dist/src/udf/cdata-builder.d.ts +0 -14
  41. package/dist/src/udf/cdata-builder.js +0 -71
  42. package/dist/src/udf/cdata-builder.js.map +0 -1
  43. package/dist/src/udf/parser.d.ts +0 -2
  44. package/dist/src/udf/parser.js +0 -325
  45. package/dist/src/udf/parser.js.map +0 -1
  46. package/dist/src/udf/serializer.d.ts +0 -5
  47. package/dist/src/udf/serializer.js +0 -267
  48. package/dist/src/udf/serializer.js.map +0 -1
  49. package/dist/src/utils/color.d.ts +0 -9
  50. package/dist/src/utils/color.js +0 -87
  51. package/dist/src/utils/color.js.map +0 -1
  52. package/dist/src/utils/style.d.ts +0 -23
  53. package/dist/src/utils/style.js +0 -80
  54. package/dist/src/utils/style.js.map +0 -1
@@ -1,87 +0,0 @@
1
- const NAMED_COLORS = {
2
- black: [0, 0, 0],
3
- white: [255, 255, 255],
4
- red: [255, 0, 0],
5
- green: [0, 128, 0],
6
- blue: [0, 0, 255],
7
- yellow: [255, 255, 0],
8
- cyan: [0, 255, 255],
9
- magenta: [255, 0, 255],
10
- orange: [255, 165, 0],
11
- purple: [128, 0, 128],
12
- gray: [128, 128, 128],
13
- grey: [128, 128, 128],
14
- navy: [0, 0, 128],
15
- teal: [0, 128, 128],
16
- maroon: [128, 0, 0],
17
- olive: [128, 128, 0],
18
- silver: [192, 192, 192],
19
- lime: [0, 255, 0],
20
- aqua: [0, 255, 255],
21
- fuchsia: [255, 0, 255],
22
- transparent: [0, 0, 0], // alpha=0, but we use alpha=FF
23
- };
24
- function rgbToArgbInt(r, g, b) {
25
- // ARGB with alpha=0xFF, stored as signed 32-bit int
26
- const unsigned = ((0xFF << 24) | (r << 16) | (g << 8) | b) >>> 0;
27
- // Convert to signed 32-bit
28
- return unsigned | 0;
29
- }
30
- function parseHexColor(hex) {
31
- hex = hex.replace('#', '');
32
- if (hex.length === 3) {
33
- hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
34
- }
35
- if (hex.length !== 6)
36
- return null;
37
- const r = parseInt(hex.slice(0, 2), 16);
38
- const g = parseInt(hex.slice(2, 4), 16);
39
- const b = parseInt(hex.slice(4, 6), 16);
40
- if (isNaN(r) || isNaN(g) || isNaN(b))
41
- return null;
42
- return [r, g, b];
43
- }
44
- function parseRgbColor(str) {
45
- const match = str.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/);
46
- if (!match)
47
- return null;
48
- return [parseInt(match[1]), parseInt(match[2]), parseInt(match[3])];
49
- }
50
- /**
51
- * Convert a CSS color string to a signed ARGB int32 value.
52
- * Supports: hex (#RGB, #RRGGBB), rgb(r,g,b), named colors.
53
- */
54
- export function cssToArgb(color) {
55
- color = color.trim().toLowerCase();
56
- // Hex
57
- if (color.startsWith('#')) {
58
- const rgb = parseHexColor(color);
59
- if (rgb)
60
- return rgbToArgbInt(...rgb);
61
- }
62
- // rgb() / rgba()
63
- if (color.startsWith('rgb')) {
64
- const rgb = parseRgbColor(color);
65
- if (rgb)
66
- return rgbToArgbInt(...rgb);
67
- }
68
- // Named color
69
- const named = NAMED_COLORS[color];
70
- if (named)
71
- return rgbToArgbInt(...named);
72
- // Default: black
73
- return -16777216;
74
- }
75
- /**
76
- * Convert a signed ARGB int32 value to a CSS hex color string.
77
- */
78
- export function argbToCss(argb) {
79
- const unsigned = argb >>> 0;
80
- const r = (unsigned >> 16) & 0xFF;
81
- const g = (unsigned >> 8) & 0xFF;
82
- const b = unsigned & 0xFF;
83
- return '#' + r.toString(16).padStart(2, '0') +
84
- g.toString(16).padStart(2, '0') +
85
- b.toString(16).padStart(2, '0');
86
- }
87
- //# sourceMappingURL=color.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"color.js","sourceRoot":"","sources":["../../../src/utils/color.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- export interface ParsedStyle {
2
- [key: string]: string;
3
- }
4
- /**
5
- * Parse a CSS inline style string into a key-value object.
6
- * Keys are camelCase (e.g. "fontSize", "fontFamily").
7
- */
8
- export declare function parseInlineStyle(style: string): ParsedStyle;
9
- /**
10
- * Parse a font-size CSS value to points.
11
- * Supports: px (converts to pt), pt (as-is), bare numbers (assumed pt).
12
- */
13
- export declare function parseFontSize(value: string): number;
14
- /**
15
- * Parse a CSS length value (px/pt/em/rem/cm/mm/in/unitless) to points.
16
- * Whitespace tolerant. Returns 0 for unparseable input.
17
- */
18
- export declare function parseLengthPt(value: string, defaultUnit?: 'pt' | 'px'): number;
19
- /**
20
- * Build a CSS inline style string from a record of properties.
21
- * Keys should be camelCase, they'll be converted to kebab-case.
22
- */
23
- export declare function buildInlineStyle(props: Record<string, string | number | undefined>): string;
@@ -1,80 +0,0 @@
1
- /**
2
- * Parse a CSS inline style string into a key-value object.
3
- * Keys are camelCase (e.g. "fontSize", "fontFamily").
4
- */
5
- export function parseInlineStyle(style) {
6
- const result = {};
7
- if (!style)
8
- return result;
9
- const declarations = style.split(';');
10
- for (const decl of declarations) {
11
- const colonIdx = decl.indexOf(':');
12
- if (colonIdx === -1)
13
- continue;
14
- const prop = decl.slice(0, colonIdx).trim();
15
- const value = decl.slice(colonIdx + 1).trim();
16
- if (!prop || !value)
17
- continue;
18
- const camelProp = prop.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
19
- result[camelProp] = value;
20
- }
21
- return result;
22
- }
23
- /**
24
- * Parse a font-size CSS value to points.
25
- * Supports: px (converts to pt), pt (as-is), bare numbers (assumed pt).
26
- */
27
- export function parseFontSize(value) {
28
- const match = value.match(/^([\d.]+)\s*(px|pt|em|rem)?$/);
29
- if (!match)
30
- return 12; // default
31
- const num = parseFloat(match[1]);
32
- const unit = match[2] || 'pt';
33
- switch (unit) {
34
- case 'px': return num * 0.75;
35
- case 'pt': return num;
36
- case 'em':
37
- case 'rem': return num * 12; // assume 12pt base
38
- default: return num;
39
- }
40
- }
41
- /**
42
- * Parse a CSS length value (px/pt/em/rem/cm/mm/in/unitless) to points.
43
- * Whitespace tolerant. Returns 0 for unparseable input.
44
- */
45
- export function parseLengthPt(value, defaultUnit = 'pt') {
46
- if (!value)
47
- return 0;
48
- const m = value.trim().match(/^(-?[\d.]+)\s*(px|pt|em|rem|cm|mm|in)?$/);
49
- if (!m)
50
- return 0;
51
- const n = parseFloat(m[1]);
52
- if (isNaN(n))
53
- return 0;
54
- const unit = m[2] ?? defaultUnit;
55
- switch (unit) {
56
- case 'px': return n * 0.75;
57
- case 'pt': return n;
58
- case 'em':
59
- case 'rem': return n * 12;
60
- case 'cm': return n * 28.3465;
61
- case 'mm': return n * 2.83465;
62
- case 'in': return n * 72;
63
- default: return n;
64
- }
65
- }
66
- /**
67
- * Build a CSS inline style string from a record of properties.
68
- * Keys should be camelCase, they'll be converted to kebab-case.
69
- */
70
- export function buildInlineStyle(props) {
71
- const parts = [];
72
- for (const [key, value] of Object.entries(props)) {
73
- if (value === undefined || value === '')
74
- continue;
75
- const kebab = key.replace(/([A-Z])/g, '-$1').toLowerCase();
76
- parts.push(`${kebab}:${value}`);
77
- }
78
- return parts.join(';');
79
- }
80
- //# sourceMappingURL=style.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"style.js","sourceRoot":"","sources":["../../../src/utils/style.ts"],"names":[],"mappings":"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"}