@frame-kit/utils 0.0.1

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 FrameKit
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,37 @@
1
+ # @frame-kit/utils
2
+
3
+ Framework-agnostic **color** and **date** utilities for FrameKit — no Angular, no framework
4
+ dependency. Pure ESM, fully tree-shakeable.
5
+
6
+ ## Install
7
+
8
+ ```bash
9
+ npm i @frame-kit/utils
10
+ ```
11
+
12
+ ## Usage
13
+
14
+ ```ts
15
+ import { Color, DateUtil } from '@frame-kit/utils';
16
+
17
+ // Color — parse, convert, manipulate, contrast, palette generation
18
+ const c = new Color('#2563eb');
19
+ c.toRgb(); // { r, g, b }
20
+ c.lighten(0.2).toHex();
21
+ c.contrastRatio('#ffffff'); // WCAG ratio
22
+
23
+ // DateUtil — parse, format, relative time, contextual labels, ranges
24
+ DateUtil.format(Date.now(), 'medium');
25
+ DateUtil.relative('2026-01-01'); // "5 months ago"
26
+ DateUtil.expiresIn(expiry); // contextual "Expires in 3 days"
27
+ ```
28
+
29
+ Exposes `Color` and `DateUtil` plus their supporting types (`RgbColor`, `HslColor`,
30
+ `TailwindPalette`, `DateInput`, `DateFormatPreset`, `ExpiryStatus`).
31
+
32
+ > These were previously bundled inside `@frame-kit/ui-ng` as Angular services. They now live here,
33
+ > framework-agnostic — wrap them in your own DI service if you want injectable access.
34
+
35
+ ## License
36
+
37
+ MIT
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@frame-kit/utils",
3
+ "version": "0.0.1",
4
+ "description": "Framework-agnostic color and date utilities for FrameKit.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/frame-kit/packages.git",
9
+ "directory": "packages/utils"
10
+ },
11
+ "homepage": "https://github.com/frame-kit/packages/tree/main/packages/utils#readme",
12
+ "bugs": "https://github.com/frame-kit/packages/issues",
13
+ "type": "module",
14
+ "main": "./src/index.js",
15
+ "types": "./src/index.d.ts",
16
+ "sideEffects": false,
17
+ "dependencies": {
18
+ "tslib": "^2.3.0",
19
+ "date-fns": "^4.0.0"
20
+ },
21
+ "publishConfig": {
22
+ "access": "public"
23
+ },
24
+ "module": "./src/index.js"
25
+ }
package/src/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from './lib/color/color.js';
2
+ export * from './lib/color/color.types.js';
3
+ export * from './lib/date/date.js';
4
+ export * from './lib/date/date.types.js';
package/src/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from './lib/color/color.js';
2
+ export * from './lib/color/color.types.js';
3
+ export * from './lib/date/date.js';
4
+ export * from './lib/date/date.types.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/utils/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,77 @@
1
+ import type { HslColor, RgbColor, TailwindPalette } from './color.types.js';
2
+ /**
3
+ * Lightweight, dependency-free color utility class.
4
+ *
5
+ * Supports parsing hex, rgb, hsl, and object formats.
6
+ * All manipulation methods return new instances (immutable).
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * const base = new Color("#3498db");
11
+ * const darker = base.darken(0.15).toHex();
12
+ * const palette = base.palette();
13
+ * const shades = base.shades(7);
14
+ * ```
15
+ */
16
+ export declare class Color {
17
+ private readonly _r;
18
+ private readonly _g;
19
+ private readonly _b;
20
+ private readonly _a;
21
+ constructor(input: string | RgbColor | HslColor);
22
+ static random(): Color;
23
+ static mix(color1: Color | string, color2: Color | string, amount?: number): Color;
24
+ static scale(colors: (Color | string)[], steps: number): string[];
25
+ private static parse;
26
+ private static parseString;
27
+ private static parseHex;
28
+ toHex(): string;
29
+ toRgb(): RgbColor;
30
+ toRgbString(): string;
31
+ toHsl(): HslColor;
32
+ toHslString(): string;
33
+ lighten(amount: number): Color;
34
+ darken(amount: number): Color;
35
+ saturate(amount: number): Color;
36
+ desaturate(amount: number): Color;
37
+ alpha(value: number): Color;
38
+ /**
39
+ * Step-based shading.
40
+ * Positive steps = lighter, negative steps = darker.
41
+ */
42
+ shade(steps: number, stepSize?: number): Color;
43
+ /**
44
+ * Generate an array of shades — lighter on one end, darker on the other.
45
+ * The original color sits in the middle.
46
+ */
47
+ shades(count: number): string[];
48
+ /**
49
+ * Generate a Tailwind-style 10-step palette.
50
+ * 50 = lightest, 900 = darkest, 500 = base color.
51
+ */
52
+ palette(): TailwindPalette;
53
+ mix(other: Color | string, amount?: number): Color;
54
+ /**
55
+ * Relative luminance (WCAG).
56
+ * Returns 0 (darkest) to 1 (lightest).
57
+ */
58
+ luminance(): number;
59
+ isLight(): boolean;
60
+ isDark(): boolean;
61
+ /**
62
+ * WCAG contrast ratio between two colors.
63
+ * Returns a value between 1 and 21.
64
+ */
65
+ contrast(other: Color | string): number;
66
+ /**
67
+ * Check if text is readable against a background.
68
+ * Default threshold is WCAG AA (4.5:1).
69
+ */
70
+ isReadable(other: Color | string, threshold?: number): boolean;
71
+ private static fromHsl;
72
+ private static hslToRgb;
73
+ private static rgbToHsl;
74
+ private static linearize;
75
+ private static clamp;
76
+ private static toHexPart;
77
+ }
@@ -0,0 +1,389 @@
1
+ /**
2
+ * Lightweight, dependency-free color utility class.
3
+ *
4
+ * Supports parsing hex, rgb, hsl, and object formats.
5
+ * All manipulation methods return new instances (immutable).
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * const base = new Color("#3498db");
10
+ * const darker = base.darken(0.15).toHex();
11
+ * const palette = base.palette();
12
+ * const shades = base.shades(7);
13
+ * ```
14
+ */
15
+ export class Color {
16
+ constructor(input) {
17
+ var _c;
18
+ const parsed = Color.parse(input);
19
+ this._r = parsed.r;
20
+ this._g = parsed.g;
21
+ this._b = parsed.b;
22
+ this._a = (_c = parsed.a) !== null && _c !== void 0 ? _c : 1;
23
+ }
24
+ // ---------------------------------------------------------------------------
25
+ // Static factory
26
+ // ---------------------------------------------------------------------------
27
+ static random() {
28
+ return new Color({
29
+ r: Math.floor(Math.random() * 256),
30
+ g: Math.floor(Math.random() * 256),
31
+ b: Math.floor(Math.random() * 256),
32
+ });
33
+ }
34
+ static mix(color1, color2, amount = 0.5) {
35
+ const c1 = color1 instanceof Color ? color1 : new Color(color1);
36
+ const c2 = color2 instanceof Color ? color2 : new Color(color2);
37
+ return c1.mix(c2, amount);
38
+ }
39
+ static scale(colors, steps) {
40
+ if (colors.length < 2 || steps < 2) {
41
+ return colors.map((c) => (c instanceof Color ? c : new Color(c)).toHex());
42
+ }
43
+ const result = [];
44
+ const segments = colors.length - 1;
45
+ const stepsPerSegment = Math.max(1, Math.floor((steps - 1) / segments));
46
+ for (let i = 0; i < segments; i++) {
47
+ const c1 = colors[i] instanceof Color
48
+ ? colors[i]
49
+ : new Color(colors[i]);
50
+ const c2 = colors[i + 1] instanceof Color
51
+ ? colors[i + 1]
52
+ : new Color(colors[i + 1]);
53
+ const count = i === segments - 1 ? steps - result.length : stepsPerSegment;
54
+ for (let j = 0; j < count; j++) {
55
+ const t = count === 1 ? 0 : j / (count - 1);
56
+ result.push(c1.mix(c2, t).toHex());
57
+ }
58
+ }
59
+ return result;
60
+ }
61
+ // ---------------------------------------------------------------------------
62
+ // Parsing
63
+ // ---------------------------------------------------------------------------
64
+ static parse(input) {
65
+ if (typeof input === 'string') {
66
+ return Color.parseString(input);
67
+ }
68
+ if ('r' in input) {
69
+ return {
70
+ r: Color.clamp(input.r, 0, 255),
71
+ g: Color.clamp(input.g, 0, 255),
72
+ b: Color.clamp(input.b, 0, 255),
73
+ a: input.a != null ? Color.clamp(input.a, 0, 1) : 1,
74
+ };
75
+ }
76
+ if ('h' in input) {
77
+ const rgb = Color.hslToRgb(input.h, input.s, input.l);
78
+ return Object.assign(Object.assign({}, rgb), { a: input.a != null ? Color.clamp(input.a, 0, 1) : 1 });
79
+ }
80
+ throw new Error(`Invalid color input: ${JSON.stringify(input)}`);
81
+ }
82
+ static parseString(str) {
83
+ const s = str.trim();
84
+ // Hex
85
+ if (s.startsWith('#')) {
86
+ return Color.parseHex(s);
87
+ }
88
+ // RGB/RGBA
89
+ const rgbMatch = s.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\s*\)/);
90
+ if (rgbMatch) {
91
+ return {
92
+ r: Color.clamp(parseInt(rgbMatch[1], 10), 0, 255),
93
+ g: Color.clamp(parseInt(rgbMatch[2], 10), 0, 255),
94
+ b: Color.clamp(parseInt(rgbMatch[3], 10), 0, 255),
95
+ a: rgbMatch[4] != null ? Color.clamp(parseFloat(rgbMatch[4]), 0, 1) : 1,
96
+ };
97
+ }
98
+ // HSL/HSLA
99
+ const hslMatch = s.match(/hsla?\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%\s*(?:,\s*([\d.]+))?\s*\)/);
100
+ if (hslMatch) {
101
+ const h = parseFloat(hslMatch[1]);
102
+ const sat = parseFloat(hslMatch[2]) / 100;
103
+ const l = parseFloat(hslMatch[3]) / 100;
104
+ const a = hslMatch[4] != null ? Color.clamp(parseFloat(hslMatch[4]), 0, 1) : 1;
105
+ const rgb = Color.hslToRgb(h, sat, l);
106
+ return Object.assign(Object.assign({}, rgb), { a });
107
+ }
108
+ throw new Error(`Cannot parse color string: "${str}"`);
109
+ }
110
+ static parseHex(hex) {
111
+ let h = hex.replace('#', '');
112
+ if (h.length === 3) {
113
+ h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];
114
+ }
115
+ if (h.length === 8) {
116
+ return {
117
+ r: parseInt(h.substring(0, 2), 16),
118
+ g: parseInt(h.substring(2, 4), 16),
119
+ b: parseInt(h.substring(4, 6), 16),
120
+ a: parseInt(h.substring(6, 8), 16) / 255,
121
+ };
122
+ }
123
+ if (h.length !== 6) {
124
+ throw new Error(`Invalid hex color: "${hex}"`);
125
+ }
126
+ return {
127
+ r: parseInt(h.substring(0, 2), 16),
128
+ g: parseInt(h.substring(2, 4), 16),
129
+ b: parseInt(h.substring(4, 6), 16),
130
+ a: 1,
131
+ };
132
+ }
133
+ // ---------------------------------------------------------------------------
134
+ // Conversion outputs
135
+ // ---------------------------------------------------------------------------
136
+ toHex() {
137
+ const r = Color.toHexPart(this._r);
138
+ const g = Color.toHexPart(this._g);
139
+ const b = Color.toHexPart(this._b);
140
+ return `#${r}${g}${b}`;
141
+ }
142
+ toRgb() {
143
+ return { r: this._r, g: this._g, b: this._b, a: this._a };
144
+ }
145
+ toRgbString() {
146
+ if (this._a < 1) {
147
+ return `rgba(${this._r}, ${this._g}, ${this._b}, ${this._a})`;
148
+ }
149
+ return `rgb(${this._r}, ${this._g}, ${this._b})`;
150
+ }
151
+ toHsl() {
152
+ const hsl = Color.rgbToHsl(this._r, this._g, this._b);
153
+ return Object.assign(Object.assign({}, hsl), { a: this._a });
154
+ }
155
+ toHslString() {
156
+ const hsl = this.toHsl();
157
+ const h = Math.round(hsl.h);
158
+ const s = Math.round(hsl.s * 100);
159
+ const l = Math.round(hsl.l * 100);
160
+ if (this._a < 1) {
161
+ return `hsla(${h}, ${s}%, ${l}%, ${this._a})`;
162
+ }
163
+ return `hsl(${h}, ${s}%, ${l}%)`;
164
+ }
165
+ // ---------------------------------------------------------------------------
166
+ // Manipulation (immutable — returns new Color)
167
+ // ---------------------------------------------------------------------------
168
+ lighten(amount) {
169
+ const hsl = this.toHsl();
170
+ return Color.fromHsl(hsl.h, hsl.s, Color.clamp(hsl.l + amount, 0, 1), hsl.a);
171
+ }
172
+ darken(amount) {
173
+ const hsl = this.toHsl();
174
+ return Color.fromHsl(hsl.h, hsl.s, Color.clamp(hsl.l - amount, 0, 1), hsl.a);
175
+ }
176
+ saturate(amount) {
177
+ const hsl = this.toHsl();
178
+ return Color.fromHsl(hsl.h, Color.clamp(hsl.s + amount, 0, 1), hsl.l, hsl.a);
179
+ }
180
+ desaturate(amount) {
181
+ const hsl = this.toHsl();
182
+ return Color.fromHsl(hsl.h, Color.clamp(hsl.s - amount, 0, 1), hsl.l, hsl.a);
183
+ }
184
+ alpha(value) {
185
+ return new Color({
186
+ r: this._r,
187
+ g: this._g,
188
+ b: this._b,
189
+ a: Color.clamp(value, 0, 1),
190
+ });
191
+ }
192
+ // ---------------------------------------------------------------------------
193
+ // Shade system
194
+ // ---------------------------------------------------------------------------
195
+ /**
196
+ * Step-based shading.
197
+ * Positive steps = lighter, negative steps = darker.
198
+ */
199
+ shade(steps, stepSize = 0.1) {
200
+ const amount = steps * stepSize;
201
+ if (amount > 0) {
202
+ return this.lighten(amount);
203
+ }
204
+ return this.darken(Math.abs(amount));
205
+ }
206
+ /**
207
+ * Generate an array of shades — lighter on one end, darker on the other.
208
+ * The original color sits in the middle.
209
+ */
210
+ shades(count) {
211
+ if (count <= 0) {
212
+ return [];
213
+ }
214
+ if (count === 1) {
215
+ return [this.toHex()];
216
+ }
217
+ const result = [];
218
+ const half = Math.floor(count / 2);
219
+ for (let i = half; i > 0; i--) {
220
+ result.push(this.lighten(i * 0.08).toHex());
221
+ }
222
+ result.push(this.toHex());
223
+ for (let i = 1; i <= count - half - 1; i++) {
224
+ result.push(this.darken(i * 0.08).toHex());
225
+ }
226
+ return result;
227
+ }
228
+ /**
229
+ * Generate a Tailwind-style 10-step palette.
230
+ * 50 = lightest, 900 = darkest, 500 = base color.
231
+ */
232
+ palette() {
233
+ const hsl = this.toHsl();
234
+ return {
235
+ 50: Color.fromHsl(hsl.h, hsl.s, Color.clamp(hsl.l + 0.4, 0, 0.97), hsl.a).toHex(),
236
+ 100: Color.fromHsl(hsl.h, hsl.s, Color.clamp(hsl.l + 0.34, 0, 0.95), hsl.a).toHex(),
237
+ 200: Color.fromHsl(hsl.h, hsl.s, Color.clamp(hsl.l + 0.26, 0, 0.9), hsl.a).toHex(),
238
+ 300: Color.fromHsl(hsl.h, hsl.s, Color.clamp(hsl.l + 0.18, 0, 0.85), hsl.a).toHex(),
239
+ 400: Color.fromHsl(hsl.h, hsl.s, Color.clamp(hsl.l + 0.09, 0, 0.8), hsl.a).toHex(),
240
+ 500: this.toHex(),
241
+ 600: Color.fromHsl(hsl.h, hsl.s, Color.clamp(hsl.l - 0.08, 0.05, 1), hsl.a).toHex(),
242
+ 700: Color.fromHsl(hsl.h, hsl.s, Color.clamp(hsl.l - 0.16, 0.05, 1), hsl.a).toHex(),
243
+ 800: Color.fromHsl(hsl.h, hsl.s, Color.clamp(hsl.l - 0.24, 0.05, 1), hsl.a).toHex(),
244
+ 900: Color.fromHsl(hsl.h, hsl.s, Color.clamp(hsl.l - 0.32, 0.05, 1), hsl.a).toHex(),
245
+ };
246
+ }
247
+ // ---------------------------------------------------------------------------
248
+ // Mixing & blending
249
+ // ---------------------------------------------------------------------------
250
+ mix(other, amount = 0.5) {
251
+ const c2 = other instanceof Color ? other : new Color(other);
252
+ const t = Color.clamp(amount, 0, 1);
253
+ return new Color({
254
+ r: Math.round(this._r + (c2._r - this._r) * t),
255
+ g: Math.round(this._g + (c2._g - this._g) * t),
256
+ b: Math.round(this._b + (c2._b - this._b) * t),
257
+ a: this._a + (c2._a - this._a) * t,
258
+ });
259
+ }
260
+ // ---------------------------------------------------------------------------
261
+ // Analysis
262
+ // ---------------------------------------------------------------------------
263
+ /**
264
+ * Relative luminance (WCAG).
265
+ * Returns 0 (darkest) to 1 (lightest).
266
+ */
267
+ luminance() {
268
+ const rLin = Color.linearize(this._r / 255);
269
+ const gLin = Color.linearize(this._g / 255);
270
+ const bLin = Color.linearize(this._b / 255);
271
+ return 0.2126 * rLin + 0.7152 * gLin + 0.0722 * bLin;
272
+ }
273
+ isLight() {
274
+ return this.luminance() > 0.5;
275
+ }
276
+ isDark() {
277
+ return !this.isLight();
278
+ }
279
+ // ---------------------------------------------------------------------------
280
+ // Accessibility
281
+ // ---------------------------------------------------------------------------
282
+ /**
283
+ * WCAG contrast ratio between two colors.
284
+ * Returns a value between 1 and 21.
285
+ */
286
+ contrast(other) {
287
+ const c2 = other instanceof Color ? other : new Color(other);
288
+ const l1 = this.luminance();
289
+ const l2 = c2.luminance();
290
+ const lighter = Math.max(l1, l2);
291
+ const darker = Math.min(l1, l2);
292
+ return (lighter + 0.05) / (darker + 0.05);
293
+ }
294
+ /**
295
+ * Check if text is readable against a background.
296
+ * Default threshold is WCAG AA (4.5:1).
297
+ */
298
+ isReadable(other, threshold = 4.5) {
299
+ return this.contrast(other) >= threshold;
300
+ }
301
+ // ---------------------------------------------------------------------------
302
+ // Internal helpers
303
+ // ---------------------------------------------------------------------------
304
+ static fromHsl(h, s, l, a = 1) {
305
+ const rgb = Color.hslToRgb(h, s, l);
306
+ return new Color(Object.assign(Object.assign({}, rgb), { a }));
307
+ }
308
+ static hslToRgb(h, s, l) {
309
+ const hNorm = ((h % 360) + 360) % 360;
310
+ const c = (1 - Math.abs(2 * l - 1)) * s;
311
+ const x = c * (1 - Math.abs(((hNorm / 60) % 2) - 1));
312
+ const m = l - c / 2;
313
+ let r = 0;
314
+ let g = 0;
315
+ let b = 0;
316
+ if (hNorm < 60) {
317
+ r = c;
318
+ g = x;
319
+ b = 0;
320
+ }
321
+ else if (hNorm < 120) {
322
+ r = x;
323
+ g = c;
324
+ b = 0;
325
+ }
326
+ else if (hNorm < 180) {
327
+ r = 0;
328
+ g = c;
329
+ b = x;
330
+ }
331
+ else if (hNorm < 240) {
332
+ r = 0;
333
+ g = x;
334
+ b = c;
335
+ }
336
+ else if (hNorm < 300) {
337
+ r = x;
338
+ g = 0;
339
+ b = c;
340
+ }
341
+ else {
342
+ r = c;
343
+ g = 0;
344
+ b = x;
345
+ }
346
+ return {
347
+ r: Math.round((r + m) * 255),
348
+ g: Math.round((g + m) * 255),
349
+ b: Math.round((b + m) * 255),
350
+ };
351
+ }
352
+ static rgbToHsl(r, g, b) {
353
+ const rNorm = r / 255;
354
+ const gNorm = g / 255;
355
+ const bNorm = b / 255;
356
+ const max = Math.max(rNorm, gNorm, bNorm);
357
+ const min = Math.min(rNorm, gNorm, bNorm);
358
+ const delta = max - min;
359
+ let h = 0;
360
+ let s = 0;
361
+ const l = (max + min) / 2;
362
+ if (delta !== 0) {
363
+ s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);
364
+ if (max === rNorm) {
365
+ h = ((gNorm - bNorm) / delta + (gNorm < bNorm ? 6 : 0)) * 60;
366
+ }
367
+ else if (max === gNorm) {
368
+ h = ((bNorm - rNorm) / delta + 2) * 60;
369
+ }
370
+ else {
371
+ h = ((rNorm - gNorm) / delta + 4) * 60;
372
+ }
373
+ }
374
+ return { h, s, l };
375
+ }
376
+ static linearize(channel) {
377
+ return channel <= 0.03928
378
+ ? channel / 12.92
379
+ : Math.pow((channel + 0.055) / 1.055, 2.4);
380
+ }
381
+ static clamp(value, min, max) {
382
+ return Math.min(max, Math.max(min, value));
383
+ }
384
+ static toHexPart(n) {
385
+ const hex = Math.round(Color.clamp(n, 0, 255)).toString(16);
386
+ return hex.length === 1 ? `0${hex}` : hex;
387
+ }
388
+ }
389
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../../../../../../packages/utils/src/lib/color/color.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface RgbColor {
2
+ r: number;
3
+ g: number;
4
+ b: number;
5
+ a?: number;
6
+ }
7
+ export interface HslColor {
8
+ h: number;
9
+ s: number;
10
+ l: number;
11
+ a?: number;
12
+ }
13
+ export interface TailwindPalette {
14
+ 50: string;
15
+ 100: string;
16
+ 200: string;
17
+ 300: string;
18
+ 400: string;
19
+ 500: string;
20
+ 600: string;
21
+ 700: string;
22
+ 800: string;
23
+ 900: string;
24
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=color.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.types.js","sourceRoot":"","sources":["../../../../../../packages/utils/src/lib/color/color.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,146 @@
1
+ import type { DateFormatPreset, DateInput, ExpiryStatus } from './date.types.js';
2
+ /**
3
+ * Lightweight date utility class built on date-fns.
4
+ *
5
+ * All methods accept flexible input (Date, string, number, null) and
6
+ * return a safe fallback for invalid values. No Angular dependency —
7
+ * can be used standalone or via the DateService injectable wrapper.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const d = new DateUtil("2026-03-28T14:45:00Z");
12
+ *
13
+ * d.shortDate(); // "Mar 28, 2026"
14
+ * d.longDate(); // "March 28, 2026"
15
+ * d.shortDateTime(); // "Mar 28, 2026, 2:45 PM"
16
+ * d.timeAgo(); // "3 hours ago"
17
+ * d.smartRelative(); // "3 hours ago" or "Mar 25, 2026"
18
+ * d.sinceDate(); // "Member since Mar 2026"
19
+ * d.expiryStatus(); // { label: "Expires in 5 days", severity: "warning", expired: false }
20
+ *
21
+ * // Static helpers
22
+ * DateUtil.isToday(someDate);
23
+ * DateUtil.isPast(someDate);
24
+ * DateUtil.parse("2026-03-28");
25
+ * ```
26
+ */
27
+ export declare class DateUtil {
28
+ private readonly _date;
29
+ /** Default fallback string for null/invalid dates. */
30
+ static readonly FALLBACK = "\u2014";
31
+ /** Threshold in days for switching from relative to absolute in smartRelative. */
32
+ static readonly RELATIVE_THRESHOLD_DAYS = 7;
33
+ constructor(input: DateInput);
34
+ /**
35
+ * Parse any date-like input into a Date object.
36
+ * Returns null for invalid/null/undefined values.
37
+ */
38
+ static parse(input: DateInput): Date | null;
39
+ /**
40
+ * Check if a value is a valid, parseable date.
41
+ */
42
+ static isValidDate(input: DateInput): boolean;
43
+ static isToday(input: DateInput): boolean;
44
+ static isYesterday(input: DateInput): boolean;
45
+ static isTomorrow(input: DateInput): boolean;
46
+ static isPast(input: DateInput): boolean;
47
+ static isFuture(input: DateInput): boolean;
48
+ static isWithinDays(input: DateInput, days: number): boolean;
49
+ static startOfDay(input: DateInput): Date | null;
50
+ static endOfDay(input: DateInput): Date | null;
51
+ static toISOString(input: DateInput): string;
52
+ /**
53
+ * "Mar 28, 2026"
54
+ */
55
+ shortDate(): string;
56
+ /**
57
+ * "March 28, 2026"
58
+ */
59
+ longDate(): string;
60
+ /**
61
+ * "03/28/2026"
62
+ */
63
+ numericDate(): string;
64
+ /**
65
+ * "2026-03-28"
66
+ */
67
+ isoDate(): string;
68
+ /**
69
+ * "Mar 28, 2026, 2:45 PM"
70
+ */
71
+ shortDateTime(): string;
72
+ /**
73
+ * "March 28, 2026 at 2:45:30 PM"
74
+ */
75
+ longDateTime(): string;
76
+ /**
77
+ * "2:45 PM"
78
+ */
79
+ time(): string;
80
+ /**
81
+ * "2:45:30 PM"
82
+ */
83
+ timePrecise(): string;
84
+ /**
85
+ * Format using a preset name.
86
+ */
87
+ format(preset: DateFormatPreset): string;
88
+ /**
89
+ * Format using a custom date-fns format string.
90
+ */
91
+ custom(formatStr: string): string;
92
+ /**
93
+ * "3 hours ago", "2 days ago", "about 1 month ago"
94
+ */
95
+ timeAgo(): string;
96
+ /**
97
+ * "3h", "2d", "1mo" — compact relative time.
98
+ */
99
+ timeAgoShort(): string;
100
+ /**
101
+ * "in 5 days", "in 2 hours"
102
+ */
103
+ timeUntil(): string;
104
+ /**
105
+ * Auto-switches from relative to absolute after a threshold.
106
+ * Recent: "3 hours ago" | Older: "Mar 25, 2026"
107
+ */
108
+ smartRelative(thresholdDays?: number): string;
109
+ /**
110
+ * "Today", "Yesterday", "Tomorrow", "Last Tuesday", "Mar 20, 2026"
111
+ */
112
+ calendarDate(): string;
113
+ /**
114
+ * "Member since Mar 2026"
115
+ */
116
+ sinceDate(prefix?: string): string;
117
+ /**
118
+ * Expiry status with label and severity.
119
+ */
120
+ expiryStatus(warningDays?: number): ExpiryStatus;
121
+ /**
122
+ * "Mar 15 – Mar 28, 2026" or "Mar 15 – Jun 30, 2026"
123
+ */
124
+ rangeTo(endInput: DateInput): string;
125
+ /**
126
+ * "13 days", "2 hours", "45 minutes"
127
+ */
128
+ durationTo(endInput: DateInput): string;
129
+ /**
130
+ * "13d", "2h 15m"
131
+ */
132
+ durationToShort(endInput: DateInput): string;
133
+ /**
134
+ * The underlying Date object, or null if input was invalid.
135
+ */
136
+ toDate(): Date | null;
137
+ /**
138
+ * ISO string, or empty string if invalid.
139
+ */
140
+ toISOString(): string;
141
+ /**
142
+ * Unix timestamp in milliseconds, or 0 if invalid.
143
+ */
144
+ valueOf(): number;
145
+ toString(): string;
146
+ }
@@ -0,0 +1,395 @@
1
+ import { differenceInDays, differenceInHours, differenceInMinutes, endOfDay as _endOfDay, format, formatDistance, formatDistanceToNow, isFuture as _isFuture, isPast as _isPast, isToday as _isToday, isTomorrow as _isTomorrow, isValid, isYesterday as _isYesterday, parseISO, startOfDay as _startOfDay, } from 'date-fns';
2
+ /**
3
+ * Lightweight date utility class built on date-fns.
4
+ *
5
+ * All methods accept flexible input (Date, string, number, null) and
6
+ * return a safe fallback for invalid values. No Angular dependency —
7
+ * can be used standalone or via the DateService injectable wrapper.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const d = new DateUtil("2026-03-28T14:45:00Z");
12
+ *
13
+ * d.shortDate(); // "Mar 28, 2026"
14
+ * d.longDate(); // "March 28, 2026"
15
+ * d.shortDateTime(); // "Mar 28, 2026, 2:45 PM"
16
+ * d.timeAgo(); // "3 hours ago"
17
+ * d.smartRelative(); // "3 hours ago" or "Mar 25, 2026"
18
+ * d.sinceDate(); // "Member since Mar 2026"
19
+ * d.expiryStatus(); // { label: "Expires in 5 days", severity: "warning", expired: false }
20
+ *
21
+ * // Static helpers
22
+ * DateUtil.isToday(someDate);
23
+ * DateUtil.isPast(someDate);
24
+ * DateUtil.parse("2026-03-28");
25
+ * ```
26
+ */
27
+ export class DateUtil {
28
+ constructor(input) {
29
+ this._date = DateUtil.parse(input);
30
+ }
31
+ // ---------------------------------------------------------------------------
32
+ // Static parsing & validation
33
+ // ---------------------------------------------------------------------------
34
+ /**
35
+ * Parse any date-like input into a Date object.
36
+ * Returns null for invalid/null/undefined values.
37
+ */
38
+ static parse(input) {
39
+ if (input == null) {
40
+ return null;
41
+ }
42
+ if (input instanceof Date) {
43
+ return isValid(input) ? input : null;
44
+ }
45
+ if (typeof input === 'number') {
46
+ const d = new Date(input);
47
+ return isValid(d) ? d : null;
48
+ }
49
+ if (typeof input === 'string') {
50
+ const d = parseISO(input);
51
+ if (isValid(d)) {
52
+ return d;
53
+ }
54
+ const fallback = new Date(input);
55
+ return isValid(fallback) ? fallback : null;
56
+ }
57
+ return null;
58
+ }
59
+ /**
60
+ * Check if a value is a valid, parseable date.
61
+ */
62
+ static isValidDate(input) {
63
+ return DateUtil.parse(input) !== null;
64
+ }
65
+ // ---------------------------------------------------------------------------
66
+ // Static boolean checks
67
+ // ---------------------------------------------------------------------------
68
+ static isToday(input) {
69
+ const d = DateUtil.parse(input);
70
+ return d !== null && _isToday(d);
71
+ }
72
+ static isYesterday(input) {
73
+ const d = DateUtil.parse(input);
74
+ return d !== null && _isYesterday(d);
75
+ }
76
+ static isTomorrow(input) {
77
+ const d = DateUtil.parse(input);
78
+ return d !== null && _isTomorrow(d);
79
+ }
80
+ static isPast(input) {
81
+ const d = DateUtil.parse(input);
82
+ return d !== null && _isPast(d);
83
+ }
84
+ static isFuture(input) {
85
+ const d = DateUtil.parse(input);
86
+ return d !== null && _isFuture(d);
87
+ }
88
+ static isWithinDays(input, days) {
89
+ const d = DateUtil.parse(input);
90
+ if (!d) {
91
+ return false;
92
+ }
93
+ return Math.abs(differenceInDays(new Date(), d)) <= days;
94
+ }
95
+ // ---------------------------------------------------------------------------
96
+ // Static boundary helpers
97
+ // ---------------------------------------------------------------------------
98
+ static startOfDay(input) {
99
+ const d = DateUtil.parse(input);
100
+ return d ? _startOfDay(d) : null;
101
+ }
102
+ static endOfDay(input) {
103
+ const d = DateUtil.parse(input);
104
+ return d ? _endOfDay(d) : null;
105
+ }
106
+ static toISOString(input) {
107
+ const d = DateUtil.parse(input);
108
+ return d ? d.toISOString() : '';
109
+ }
110
+ // ---------------------------------------------------------------------------
111
+ // Instance — absolute formats
112
+ // ---------------------------------------------------------------------------
113
+ /**
114
+ * "Mar 28, 2026"
115
+ */
116
+ shortDate() {
117
+ return this._date ? format(this._date, 'MMM d, yyyy') : DateUtil.FALLBACK;
118
+ }
119
+ /**
120
+ * "March 28, 2026"
121
+ */
122
+ longDate() {
123
+ return this._date ? format(this._date, 'MMMM d, yyyy') : DateUtil.FALLBACK;
124
+ }
125
+ /**
126
+ * "03/28/2026"
127
+ */
128
+ numericDate() {
129
+ return this._date ? format(this._date, 'MM/dd/yyyy') : DateUtil.FALLBACK;
130
+ }
131
+ /**
132
+ * "2026-03-28"
133
+ */
134
+ isoDate() {
135
+ return this._date ? format(this._date, 'yyyy-MM-dd') : DateUtil.FALLBACK;
136
+ }
137
+ /**
138
+ * "Mar 28, 2026, 2:45 PM"
139
+ */
140
+ shortDateTime() {
141
+ return this._date
142
+ ? format(this._date, 'MMM d, yyyy, h:mm a')
143
+ : DateUtil.FALLBACK;
144
+ }
145
+ /**
146
+ * "March 28, 2026 at 2:45:30 PM"
147
+ */
148
+ longDateTime() {
149
+ return this._date
150
+ ? format(this._date, "MMMM d, yyyy 'at' h:mm:ss a")
151
+ : DateUtil.FALLBACK;
152
+ }
153
+ /**
154
+ * "2:45 PM"
155
+ */
156
+ time() {
157
+ return this._date ? format(this._date, 'h:mm a') : DateUtil.FALLBACK;
158
+ }
159
+ /**
160
+ * "2:45:30 PM"
161
+ */
162
+ timePrecise() {
163
+ return this._date ? format(this._date, 'h:mm:ss a') : DateUtil.FALLBACK;
164
+ }
165
+ /**
166
+ * Format using a preset name.
167
+ */
168
+ format(preset) {
169
+ switch (preset) {
170
+ case 'shortDate':
171
+ return this.shortDate();
172
+ case 'longDate':
173
+ return this.longDate();
174
+ case 'numericDate':
175
+ return this.numericDate();
176
+ case 'isoDate':
177
+ return this.isoDate();
178
+ case 'shortDateTime':
179
+ return this.shortDateTime();
180
+ case 'longDateTime':
181
+ return this.longDateTime();
182
+ case 'time':
183
+ return this.time();
184
+ case 'timePrecise':
185
+ return this.timePrecise();
186
+ }
187
+ }
188
+ /**
189
+ * Format using a custom date-fns format string.
190
+ */
191
+ custom(formatStr) {
192
+ return this._date ? format(this._date, formatStr) : DateUtil.FALLBACK;
193
+ }
194
+ // ---------------------------------------------------------------------------
195
+ // Instance — relative formats
196
+ // ---------------------------------------------------------------------------
197
+ /**
198
+ * "3 hours ago", "2 days ago", "about 1 month ago"
199
+ */
200
+ timeAgo() {
201
+ return this._date
202
+ ? formatDistanceToNow(this._date, { addSuffix: true })
203
+ : DateUtil.FALLBACK;
204
+ }
205
+ /**
206
+ * "3h", "2d", "1mo" — compact relative time.
207
+ */
208
+ timeAgoShort() {
209
+ if (!this._date) {
210
+ return DateUtil.FALLBACK;
211
+ }
212
+ const now = new Date();
213
+ const mins = Math.abs(differenceInMinutes(now, this._date));
214
+ if (mins < 1) {
215
+ return 'now';
216
+ }
217
+ if (mins < 60) {
218
+ return `${mins}m`;
219
+ }
220
+ const hours = Math.abs(differenceInHours(now, this._date));
221
+ if (hours < 24) {
222
+ return `${hours}h`;
223
+ }
224
+ const days = Math.abs(differenceInDays(now, this._date));
225
+ if (days < 30) {
226
+ return `${days}d`;
227
+ }
228
+ if (days < 365) {
229
+ return `${Math.floor(days / 30)}mo`;
230
+ }
231
+ return `${Math.floor(days / 365)}y`;
232
+ }
233
+ /**
234
+ * "in 5 days", "in 2 hours"
235
+ */
236
+ timeUntil() {
237
+ return this._date
238
+ ? formatDistanceToNow(this._date, { addSuffix: true })
239
+ : DateUtil.FALLBACK;
240
+ }
241
+ /**
242
+ * Auto-switches from relative to absolute after a threshold.
243
+ * Recent: "3 hours ago" | Older: "Mar 25, 2026"
244
+ */
245
+ smartRelative(thresholdDays = DateUtil.RELATIVE_THRESHOLD_DAYS) {
246
+ if (!this._date) {
247
+ return DateUtil.FALLBACK;
248
+ }
249
+ const days = Math.abs(differenceInDays(new Date(), this._date));
250
+ if (days <= thresholdDays) {
251
+ return this.timeAgo();
252
+ }
253
+ return this.shortDate();
254
+ }
255
+ // ---------------------------------------------------------------------------
256
+ // Instance — contextual formats
257
+ // ---------------------------------------------------------------------------
258
+ /**
259
+ * "Today", "Yesterday", "Tomorrow", "Last Tuesday", "Mar 20, 2026"
260
+ */
261
+ calendarDate() {
262
+ if (!this._date) {
263
+ return DateUtil.FALLBACK;
264
+ }
265
+ if (_isToday(this._date)) {
266
+ return 'Today';
267
+ }
268
+ if (_isYesterday(this._date)) {
269
+ return 'Yesterday';
270
+ }
271
+ if (_isTomorrow(this._date)) {
272
+ return 'Tomorrow';
273
+ }
274
+ const days = differenceInDays(new Date(), this._date);
275
+ if (days > 0 && days < 7) {
276
+ return format(this._date, "'Last' EEEE");
277
+ }
278
+ return this.shortDate();
279
+ }
280
+ /**
281
+ * "Member since Mar 2026"
282
+ */
283
+ sinceDate(prefix = 'Member since') {
284
+ return this._date
285
+ ? `${prefix} ${format(this._date, 'MMM yyyy')}`
286
+ : DateUtil.FALLBACK;
287
+ }
288
+ /**
289
+ * Expiry status with label and severity.
290
+ */
291
+ expiryStatus(warningDays = 7) {
292
+ if (!this._date) {
293
+ return { label: DateUtil.FALLBACK, severity: 'default', expired: false };
294
+ }
295
+ if (_isPast(this._date)) {
296
+ const ago = formatDistanceToNow(this._date, { addSuffix: true });
297
+ return { label: `Expired ${ago}`, severity: 'danger', expired: true };
298
+ }
299
+ const days = differenceInDays(this._date, new Date());
300
+ if (days <= warningDays) {
301
+ const until = formatDistanceToNow(this._date, { addSuffix: true });
302
+ return { label: `Expires ${until}`, severity: 'warning', expired: false };
303
+ }
304
+ return { label: 'Active', severity: 'success', expired: false };
305
+ }
306
+ // ---------------------------------------------------------------------------
307
+ // Instance — range & duration
308
+ // ---------------------------------------------------------------------------
309
+ /**
310
+ * "Mar 15 – Mar 28, 2026" or "Mar 15 – Jun 30, 2026"
311
+ */
312
+ rangeTo(endInput) {
313
+ if (!this._date) {
314
+ return DateUtil.FALLBACK;
315
+ }
316
+ const end = DateUtil.parse(endInput);
317
+ if (!end) {
318
+ return this.shortDate();
319
+ }
320
+ const sameYear = this._date.getFullYear() === end.getFullYear();
321
+ const sameMonth = sameYear && this._date.getMonth() === end.getMonth();
322
+ if (sameMonth) {
323
+ return `${format(this._date, 'MMM d')} – ${format(end, 'd, yyyy')}`;
324
+ }
325
+ if (sameYear) {
326
+ return `${format(this._date, 'MMM d')} – ${format(end, 'MMM d, yyyy')}`;
327
+ }
328
+ return `${format(this._date, 'MMM d, yyyy')} – ${format(end, 'MMM d, yyyy')}`;
329
+ }
330
+ /**
331
+ * "13 days", "2 hours", "45 minutes"
332
+ */
333
+ durationTo(endInput) {
334
+ if (!this._date) {
335
+ return DateUtil.FALLBACK;
336
+ }
337
+ const end = DateUtil.parse(endInput);
338
+ if (!end) {
339
+ return DateUtil.FALLBACK;
340
+ }
341
+ return formatDistance(this._date, end);
342
+ }
343
+ /**
344
+ * "13d", "2h 15m"
345
+ */
346
+ durationToShort(endInput) {
347
+ if (!this._date) {
348
+ return DateUtil.FALLBACK;
349
+ }
350
+ const end = DateUtil.parse(endInput);
351
+ if (!end) {
352
+ return DateUtil.FALLBACK;
353
+ }
354
+ const mins = Math.abs(differenceInMinutes(this._date, end));
355
+ if (mins < 60) {
356
+ return `${mins}m`;
357
+ }
358
+ const hours = Math.abs(differenceInHours(this._date, end));
359
+ if (hours < 24) {
360
+ const remainMins = mins % 60;
361
+ return remainMins > 0 ? `${hours}h ${remainMins}m` : `${hours}h`;
362
+ }
363
+ const days = Math.abs(differenceInDays(this._date, end));
364
+ return `${days}d`;
365
+ }
366
+ // ---------------------------------------------------------------------------
367
+ // Instance — access underlying Date
368
+ // ---------------------------------------------------------------------------
369
+ /**
370
+ * The underlying Date object, or null if input was invalid.
371
+ */
372
+ toDate() {
373
+ return this._date;
374
+ }
375
+ /**
376
+ * ISO string, or empty string if invalid.
377
+ */
378
+ toISOString() {
379
+ return this._date ? this._date.toISOString() : '';
380
+ }
381
+ /**
382
+ * Unix timestamp in milliseconds, or 0 if invalid.
383
+ */
384
+ valueOf() {
385
+ return this._date ? this._date.getTime() : 0;
386
+ }
387
+ toString() {
388
+ return this.shortDateTime();
389
+ }
390
+ }
391
+ /** Default fallback string for null/invalid dates. */
392
+ DateUtil.FALLBACK = '—';
393
+ /** Threshold in days for switching from relative to absolute in smartRelative. */
394
+ DateUtil.RELATIVE_THRESHOLD_DAYS = 7;
395
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../../../../../packages/utils/src/lib/date/date.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Any value that can be interpreted as a date.
3
+ */
4
+ export type DateInput = Date | string | number | null | undefined;
5
+ /**
6
+ * Preset format names for the DateUtil class.
7
+ */
8
+ export type DateFormatPreset = 'shortDate' | 'longDate' | 'numericDate' | 'isoDate' | 'shortDateTime' | 'longDateTime' | 'time' | 'timePrecise';
9
+ /**
10
+ * Result of an expiry status check.
11
+ */
12
+ export interface ExpiryStatus {
13
+ label: string;
14
+ severity: 'success' | 'warning' | 'danger' | 'default';
15
+ expired: boolean;
16
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=date.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.types.js","sourceRoot":"","sources":["../../../../../../packages/utils/src/lib/date/date.types.ts"],"names":[],"mappings":""}