@zambit/elevate-ts 0.1.2
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/CLA-CORPORATE.md +72 -0
- package/CLA-INDIVIDUAL.md +71 -0
- package/DUAL-PUBLISHING-STRATEGY.md +571 -0
- package/LICENSE +610 -0
- package/README.md +77 -0
- package/dist/cjs/Either.d.ts +67 -0
- package/dist/cjs/Either.d.ts.map +1 -0
- package/dist/cjs/Either.js +147 -0
- package/dist/cjs/Either.js.map +1 -0
- package/dist/cjs/EitherAsync.d.ts +139 -0
- package/dist/cjs/EitherAsync.d.ts.map +1 -0
- package/dist/cjs/EitherAsync.js +171 -0
- package/dist/cjs/EitherAsync.js.map +1 -0
- package/dist/cjs/Function.d.ts +153 -0
- package/dist/cjs/Function.d.ts.map +1 -0
- package/dist/cjs/Function.js +110 -0
- package/dist/cjs/Function.js.map +1 -0
- package/dist/cjs/List.d.ts +134 -0
- package/dist/cjs/List.d.ts.map +1 -0
- package/dist/cjs/List.js +243 -0
- package/dist/cjs/List.js.map +1 -0
- package/dist/cjs/Maybe.d.ts +64 -0
- package/dist/cjs/Maybe.d.ts.map +1 -0
- package/dist/cjs/Maybe.js +122 -0
- package/dist/cjs/Maybe.js.map +1 -0
- package/dist/cjs/MaybeAsync.d.ts +115 -0
- package/dist/cjs/MaybeAsync.d.ts.map +1 -0
- package/dist/cjs/MaybeAsync.js +151 -0
- package/dist/cjs/MaybeAsync.js.map +1 -0
- package/dist/cjs/NonEmptyList.d.ts +86 -0
- package/dist/cjs/NonEmptyList.d.ts.map +1 -0
- package/dist/cjs/NonEmptyList.js +128 -0
- package/dist/cjs/NonEmptyList.js.map +1 -0
- package/dist/cjs/Reader.d.ts +53 -0
- package/dist/cjs/Reader.d.ts.map +1 -0
- package/dist/cjs/Reader.js +60 -0
- package/dist/cjs/Reader.js.map +1 -0
- package/dist/cjs/State.d.ts +71 -0
- package/dist/cjs/State.d.ts.map +1 -0
- package/dist/cjs/State.js +94 -0
- package/dist/cjs/State.js.map +1 -0
- package/dist/cjs/Tuple.d.ts +69 -0
- package/dist/cjs/Tuple.d.ts.map +1 -0
- package/dist/cjs/Tuple.js +73 -0
- package/dist/cjs/Tuple.js.map +1 -0
- package/dist/cjs/Validation.d.ts +53 -0
- package/dist/cjs/Validation.d.ts.map +1 -0
- package/dist/cjs/Validation.js +77 -0
- package/dist/cjs/Validation.js.map +1 -0
- package/dist/cjs/index.d.ts +12 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/tokens/config.d.ts +43 -0
- package/dist/cjs/tokens/config.d.ts.map +1 -0
- package/dist/cjs/tokens/config.js +162 -0
- package/dist/cjs/tokens/config.js.map +1 -0
- package/dist/cjs/tokens/cssGen.d.ts +18 -0
- package/dist/cjs/tokens/cssGen.d.ts.map +1 -0
- package/dist/cjs/tokens/cssGen.js +144 -0
- package/dist/cjs/tokens/cssGen.js.map +1 -0
- package/dist/cjs/tokens/generateCSS.d.ts +18 -0
- package/dist/cjs/tokens/generateCSS.d.ts.map +1 -0
- package/dist/cjs/tokens/generateCSS.js +83 -0
- package/dist/cjs/tokens/generateCSS.js.map +1 -0
- package/dist/cjs/tokens/index.d.ts +13 -0
- package/dist/cjs/tokens/index.d.ts.map +1 -0
- package/dist/cjs/tokens/index.js +12 -0
- package/dist/cjs/tokens/index.js.map +1 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/Either.d.ts +67 -0
- package/dist/esm/Either.d.ts.map +1 -0
- package/dist/esm/Either.js +136 -0
- package/dist/esm/Either.js.map +1 -0
- package/dist/esm/EitherAsync.d.ts +139 -0
- package/dist/esm/EitherAsync.d.ts.map +1 -0
- package/dist/esm/EitherAsync.js +173 -0
- package/dist/esm/EitherAsync.js.map +1 -0
- package/dist/esm/Function.d.ts +153 -0
- package/dist/esm/Function.d.ts.map +1 -0
- package/dist/esm/Function.js +109 -0
- package/dist/esm/Function.js.map +1 -0
- package/dist/esm/List.d.ts +134 -0
- package/dist/esm/List.d.ts.map +1 -0
- package/dist/esm/List.js +243 -0
- package/dist/esm/List.js.map +1 -0
- package/dist/esm/Maybe.d.ts +64 -0
- package/dist/esm/Maybe.d.ts.map +1 -0
- package/dist/esm/Maybe.js +113 -0
- package/dist/esm/Maybe.js.map +1 -0
- package/dist/esm/MaybeAsync.d.ts +115 -0
- package/dist/esm/MaybeAsync.d.ts.map +1 -0
- package/dist/esm/MaybeAsync.js +150 -0
- package/dist/esm/MaybeAsync.js.map +1 -0
- package/dist/esm/NonEmptyList.d.ts +86 -0
- package/dist/esm/NonEmptyList.d.ts.map +1 -0
- package/dist/esm/NonEmptyList.js +128 -0
- package/dist/esm/NonEmptyList.js.map +1 -0
- package/dist/esm/Reader.d.ts +53 -0
- package/dist/esm/Reader.d.ts.map +1 -0
- package/dist/esm/Reader.js +60 -0
- package/dist/esm/Reader.js.map +1 -0
- package/dist/esm/State.d.ts +71 -0
- package/dist/esm/State.d.ts.map +1 -0
- package/dist/esm/State.js +94 -0
- package/dist/esm/State.js.map +1 -0
- package/dist/esm/Tuple.d.ts +69 -0
- package/dist/esm/Tuple.d.ts.map +1 -0
- package/dist/esm/Tuple.js +73 -0
- package/dist/esm/Tuple.js.map +1 -0
- package/dist/esm/Validation.d.ts +53 -0
- package/dist/esm/Validation.d.ts.map +1 -0
- package/dist/esm/Validation.js +79 -0
- package/dist/esm/Validation.js.map +1 -0
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +22 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/src/Either.d.ts +67 -0
- package/dist/esm/src/Either.d.ts.map +1 -0
- package/dist/esm/src/Either.js +147 -0
- package/dist/esm/src/Either.js.map +1 -0
- package/dist/esm/src/EitherAsync.d.ts +139 -0
- package/dist/esm/src/EitherAsync.d.ts.map +1 -0
- package/dist/esm/src/EitherAsync.js +171 -0
- package/dist/esm/src/EitherAsync.js.map +1 -0
- package/dist/esm/src/Function.d.ts +153 -0
- package/dist/esm/src/Function.d.ts.map +1 -0
- package/dist/esm/src/Function.js +110 -0
- package/dist/esm/src/Function.js.map +1 -0
- package/dist/esm/src/List.d.ts +134 -0
- package/dist/esm/src/List.d.ts.map +1 -0
- package/dist/esm/src/List.js +243 -0
- package/dist/esm/src/List.js.map +1 -0
- package/dist/esm/src/Maybe.d.ts +64 -0
- package/dist/esm/src/Maybe.d.ts.map +1 -0
- package/dist/esm/src/Maybe.js +122 -0
- package/dist/esm/src/Maybe.js.map +1 -0
- package/dist/esm/src/MaybeAsync.d.ts +115 -0
- package/dist/esm/src/MaybeAsync.d.ts.map +1 -0
- package/dist/esm/src/MaybeAsync.js +151 -0
- package/dist/esm/src/MaybeAsync.js.map +1 -0
- package/dist/esm/src/NonEmptyList.d.ts +86 -0
- package/dist/esm/src/NonEmptyList.d.ts.map +1 -0
- package/dist/esm/src/NonEmptyList.js +128 -0
- package/dist/esm/src/NonEmptyList.js.map +1 -0
- package/dist/esm/src/Reader.d.ts +53 -0
- package/dist/esm/src/Reader.d.ts.map +1 -0
- package/dist/esm/src/Reader.js +60 -0
- package/dist/esm/src/Reader.js.map +1 -0
- package/dist/esm/src/State.d.ts +71 -0
- package/dist/esm/src/State.d.ts.map +1 -0
- package/dist/esm/src/State.js +94 -0
- package/dist/esm/src/State.js.map +1 -0
- package/dist/esm/src/Tuple.d.ts +69 -0
- package/dist/esm/src/Tuple.d.ts.map +1 -0
- package/dist/esm/src/Tuple.js +73 -0
- package/dist/esm/src/Tuple.js.map +1 -0
- package/dist/esm/src/Validation.d.ts +53 -0
- package/dist/esm/src/Validation.d.ts.map +1 -0
- package/dist/esm/src/Validation.js +77 -0
- package/dist/esm/src/Validation.js.map +1 -0
- package/dist/esm/src/index.d.ts +12 -0
- package/dist/esm/src/index.d.ts.map +1 -0
- package/dist/esm/src/index.js +25 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/elevate-ts-vs-effect-critique.md +806 -0
- package/eslint.config.js +104 -0
- package/package.json +139 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// Validation — Accumulating Errors
|
|
2
|
+
/** Create a Failure with one or more errors. */
|
|
3
|
+
export const Failure = (errors) => ({
|
|
4
|
+
tag: 'Failure',
|
|
5
|
+
errors
|
|
6
|
+
});
|
|
7
|
+
/** Create a Success value. */
|
|
8
|
+
export const Success = (value) => ({
|
|
9
|
+
tag: 'Success',
|
|
10
|
+
value
|
|
11
|
+
});
|
|
12
|
+
/** Test if a Validation is Failure. */
|
|
13
|
+
export const isFailure = (va) => va.tag === 'Failure';
|
|
14
|
+
/** Test if a Validation is Success. */
|
|
15
|
+
export const isSuccess = (va) => va.tag === 'Success';
|
|
16
|
+
/** Lift an Either into Validation. */
|
|
17
|
+
export const fromEither = (ea) => (ea.tag === 'Left' ? Failure([ea.left]) : Success(ea.right));
|
|
18
|
+
/** Convert Validation to Either with errors array. */
|
|
19
|
+
export const toEither = (va) => (va.tag === 'Failure' ? { tag: 'Left', left: va.errors } : { tag: 'Right', right: va.value });
|
|
20
|
+
/** Construct Success if predicate holds, Failure otherwise. */
|
|
21
|
+
export const fromPredicate = (predicate, onFalse) => (a) => predicate(a) ? Success(a) : Failure([onFalse(a)]);
|
|
22
|
+
/** Functor map over Success. */
|
|
23
|
+
export const map = (f) => (va) => va.tag === 'Success' ? Success(f(va.value)) : va;
|
|
24
|
+
/** Applicative ap: accumulates errors when both are Failures. */
|
|
25
|
+
export const ap = (vf) => (va) => {
|
|
26
|
+
if (vf.tag === 'Failure' && va.tag === 'Failure') {
|
|
27
|
+
return Failure([...vf.errors, ...va.errors]);
|
|
28
|
+
}
|
|
29
|
+
if (vf.tag === 'Failure')
|
|
30
|
+
return vf;
|
|
31
|
+
if (va.tag === 'Failure')
|
|
32
|
+
return va;
|
|
33
|
+
return Success(vf.value(va.value));
|
|
34
|
+
};
|
|
35
|
+
/** Monadic bind (short-circuits on first Failure). */
|
|
36
|
+
export const chain = (f) => (va) => va.tag === 'Failure' ? va : f(va.value);
|
|
37
|
+
/** Extract Success or default. */
|
|
38
|
+
export const getOrElse = (a) => (va) => va.tag === 'Success' ? va.value : a;
|
|
39
|
+
/** Case analysis. */
|
|
40
|
+
export const fold = (onFailure, onSuccess) => (va) => va.tag === 'Failure' ? onFailure(va.errors) : onSuccess(va.value);
|
|
41
|
+
/** Merge two Validations; if both are Failure, concatenate errors. */
|
|
42
|
+
export const concat = (va2) => (va1) => {
|
|
43
|
+
if (va1.tag === 'Failure' && va2.tag === 'Failure') {
|
|
44
|
+
return Failure([...va1.errors, ...va2.errors]);
|
|
45
|
+
}
|
|
46
|
+
if (va1.tag === 'Failure')
|
|
47
|
+
return va1;
|
|
48
|
+
return va2;
|
|
49
|
+
};
|
|
50
|
+
/** Sequence all-or-Failure, collecting all errors. */
|
|
51
|
+
export const sequence = (validations) => {
|
|
52
|
+
const result = [];
|
|
53
|
+
const errors = [];
|
|
54
|
+
for (const va of validations) {
|
|
55
|
+
if (va.tag === 'Failure') {
|
|
56
|
+
errors.push(...va.errors);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
result.push(va.value);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return errors.length > 0 ? Failure(errors) : Success(result);
|
|
63
|
+
};
|
|
64
|
+
/** Traverse a sequence, collecting all errors. */
|
|
65
|
+
export const traverse = (f) => (as) => sequence(as.map(f));
|
|
66
|
+
// Fantasy Land symbols
|
|
67
|
+
// Note: FL methods are excluded to work around vitest coverage serialization issues.
|
|
68
|
+
// The core functionality is complete and all point-free functions work correctly.
|
|
69
|
+
// TODO: Re-enable Fantasy Land methods when vitest issue is resolved.
|
|
70
|
+
//
|
|
71
|
+
// Object.defineProperty(Success, 'fantasy-land/of', { value: Success })
|
|
72
|
+
// Object.defineProperty(Failure, 'fantasy-land/zero', { value: Failure([]) })
|
|
73
|
+
//
|
|
74
|
+
// const successProto = Object.getPrototypeOf(Success(0))
|
|
75
|
+
// successProto['fantasy-land/map'] = ...
|
|
76
|
+
// etc.
|
|
77
|
+
//# sourceMappingURL=Validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Validation.js","sourceRoot":"","sources":["../../src/Validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * as Maybe from './Maybe.js';
|
|
2
|
+
export * as Either from './Either.js';
|
|
3
|
+
export * as Validation from './Validation.js';
|
|
4
|
+
export * as Reader from './Reader.js';
|
|
5
|
+
export * as State from './State.js';
|
|
6
|
+
export * as Tuple from './Tuple.js';
|
|
7
|
+
export * as NonEmptyList from './NonEmptyList.js';
|
|
8
|
+
export * as List from './List.js';
|
|
9
|
+
export * as Function from './Function.js';
|
|
10
|
+
export * as MaybeAsync from './MaybeAsync.js';
|
|
11
|
+
export * as EitherAsync from './EitherAsync.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later OR LicenseRef-Commercial
|
|
2
|
+
// Copyright (C) 2024 Zambit Technologies Corp
|
|
3
|
+
// See LICENSE or COMMERCIAL-LICENSE.md in the package root.
|
|
4
|
+
// elevate-ts
|
|
5
|
+
// Re-exports added as each module is implemented.
|
|
6
|
+
// See prompts/README.md for implementation order.
|
|
7
|
+
//
|
|
8
|
+
// TODO(audit): add @paralleldrive/cuid2 when time-travel audit subsystem
|
|
9
|
+
// is implemented. Each audited operation will receive a cuid2-stamped ID
|
|
10
|
+
// (monotonically sortable, collision-resistant across distributed Worker
|
|
11
|
+
// instances) enabling deterministic replay and rewind of operation sequences.
|
|
12
|
+
// Note: Individual modules are exported with namespace prefixes to avoid
|
|
13
|
+
// naming conflicts (all monads export map, chain, ap, etc.)
|
|
14
|
+
export * as Maybe from './Maybe.js';
|
|
15
|
+
export * as Either from './Either.js';
|
|
16
|
+
export * as Validation from './Validation.js';
|
|
17
|
+
export * as Reader from './Reader.js';
|
|
18
|
+
export * as State from './State.js';
|
|
19
|
+
export * as Tuple from './Tuple.js';
|
|
20
|
+
export * as NonEmptyList from './NonEmptyList.js';
|
|
21
|
+
export * as List from './List.js';
|
|
22
|
+
export * as Function from './Function.js';
|
|
23
|
+
export * as MaybeAsync from './MaybeAsync.js';
|
|
24
|
+
export * as EitherAsync from './EitherAsync.js';
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,8CAA8C;AAC9C,4DAA4D;AAE5D,aAAa;AACb,kDAAkD;AAClD,kDAAkD;AAClD,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AACzE,yEAAyE;AACzE,8EAA8E;AAE9E,yEAAyE;AACzE,4DAA4D;AAC5D,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design Token Configuration
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for all design tokens across all samples.
|
|
5
|
+
* This config is processed at build time to generate tokens.css in each sample.
|
|
6
|
+
*/
|
|
7
|
+
export interface TokenConfig {
|
|
8
|
+
colors: Record<string, string>;
|
|
9
|
+
typography: {
|
|
10
|
+
fontFamilies: Record<string, string>;
|
|
11
|
+
fontSizes: Record<string, string>;
|
|
12
|
+
fontWeights: Record<string, number>;
|
|
13
|
+
lineHeights: Record<string, number>;
|
|
14
|
+
};
|
|
15
|
+
spacing: Record<string, string>;
|
|
16
|
+
radius: Record<string, string>;
|
|
17
|
+
shadows: Record<string, string>;
|
|
18
|
+
transitions: Record<string, string>;
|
|
19
|
+
zIndex: Record<string, number>;
|
|
20
|
+
}
|
|
21
|
+
export declare const tokenConfig: TokenConfig;
|
|
22
|
+
/**
|
|
23
|
+
* Extract all color token names as a union type.
|
|
24
|
+
* Useful for component props: type ColorName = ColorTokens
|
|
25
|
+
*/
|
|
26
|
+
export type ColorTokens = keyof typeof tokenConfig.colors;
|
|
27
|
+
/**
|
|
28
|
+
* Extract all spacing token names as a union type.
|
|
29
|
+
*/
|
|
30
|
+
export type SpacingTokens = keyof typeof tokenConfig.spacing;
|
|
31
|
+
/**
|
|
32
|
+
* Extract all font size names as a union type.
|
|
33
|
+
*/
|
|
34
|
+
export type FontSizeTokens = keyof typeof tokenConfig.typography.fontSizes;
|
|
35
|
+
/**
|
|
36
|
+
* Extract all radius names as a union type.
|
|
37
|
+
*/
|
|
38
|
+
export type RadiusTokens = keyof typeof tokenConfig.radius;
|
|
39
|
+
/**
|
|
40
|
+
* Extract all transition names as a union type.
|
|
41
|
+
*/
|
|
42
|
+
export type TransitionTokens = keyof typeof tokenConfig.transitions;
|
|
43
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/tokens/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,UAAU,EAAE;QACV,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACrC,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AA2HD,eAAO,MAAM,WAAW,EAAE,WAiEzB,CAAC;AAMF;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,WAAW,CAAC,MAAM,CAAC;AAE1D;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,WAAW,CAAC,OAAO,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,WAAW,CAAC,MAAM,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,WAAW,CAAC,WAAW,CAAC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design Token Configuration
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for all design tokens across all samples.
|
|
5
|
+
* This config is processed at build time to generate tokens.css in each sample.
|
|
6
|
+
*/
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// COLOR GENERATION
|
|
9
|
+
// ============================================================================
|
|
10
|
+
/**
|
|
11
|
+
* Generate neutral color scale using HSL adjustments.
|
|
12
|
+
* Base: 50% lightness, no saturation (pure gray)
|
|
13
|
+
*/
|
|
14
|
+
function generateNeutralScale() {
|
|
15
|
+
const colors = {};
|
|
16
|
+
// Neutral scale: 50 (lightest) to 900 (darkest)
|
|
17
|
+
// Each step adjusts lightness by ~5%
|
|
18
|
+
const steps = [
|
|
19
|
+
{ name: '50', lightness: 97.5 },
|
|
20
|
+
{ name: '100', lightness: 95 },
|
|
21
|
+
{ name: '200', lightness: 90 },
|
|
22
|
+
{ name: '300', lightness: 83 },
|
|
23
|
+
{ name: '400', lightness: 60 },
|
|
24
|
+
{ name: '500', lightness: 42 },
|
|
25
|
+
{ name: '600', lightness: 32 },
|
|
26
|
+
{ name: '700', lightness: 21 },
|
|
27
|
+
{ name: '800', lightness: 12 },
|
|
28
|
+
{ name: '900', lightness: 6 }
|
|
29
|
+
];
|
|
30
|
+
steps.forEach(({ name, lightness }) => {
|
|
31
|
+
colors[`neutral-${name}`] = `hsl(0, 0%, ${lightness}%)`;
|
|
32
|
+
});
|
|
33
|
+
return colors;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Generate semantic color scales using HSL.
|
|
37
|
+
*/
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
39
|
+
function generateColorScale(name, hue, baseSaturation) {
|
|
40
|
+
const colors = {};
|
|
41
|
+
const steps = [
|
|
42
|
+
{ suffix: '', lightness: 95 },
|
|
43
|
+
{ suffix: '-dark', lightness: 47 },
|
|
44
|
+
{ suffix: '-light', lightness: 93 }
|
|
45
|
+
];
|
|
46
|
+
steps.forEach(({ suffix, lightness }) => {
|
|
47
|
+
colors[`${name}${suffix}`] = `hsl(${hue}, ${baseSaturation}%, ${lightness}%)`;
|
|
48
|
+
});
|
|
49
|
+
return colors;
|
|
50
|
+
}
|
|
51
|
+
// ============================================================================
|
|
52
|
+
// SPACING GENERATION
|
|
53
|
+
// ============================================================================
|
|
54
|
+
function generateSpacing() {
|
|
55
|
+
const base = 0.25; // rem
|
|
56
|
+
const spacing = {
|
|
57
|
+
'0': '0'
|
|
58
|
+
};
|
|
59
|
+
// Linear scale: 1-16
|
|
60
|
+
for (let i = 1; i <= 16; i++) {
|
|
61
|
+
spacing[i.toString()] = `${base * i}rem`;
|
|
62
|
+
}
|
|
63
|
+
return spacing;
|
|
64
|
+
}
|
|
65
|
+
// ============================================================================
|
|
66
|
+
// FONT SIZE GENERATION (MODULAR SCALE)
|
|
67
|
+
// ============================================================================
|
|
68
|
+
function generateFontSizes() {
|
|
69
|
+
const base = 1; // 1rem = 16px
|
|
70
|
+
const ratio = 1.125; // 12.5% step (perfect fifth in music)
|
|
71
|
+
return {
|
|
72
|
+
xs: `${(base / (ratio * ratio)).toFixed(3)}rem`, // ~0.704rem
|
|
73
|
+
sm: `${(base / ratio).toFixed(3)}rem`, // ~0.889rem
|
|
74
|
+
base: `${base}rem`, // 1rem
|
|
75
|
+
lg: `${(base * ratio).toFixed(3)}rem`, // ~1.125rem
|
|
76
|
+
xl: `${(base * ratio * ratio).toFixed(3)}rem`, // ~1.266rem
|
|
77
|
+
'2xl': `${(base * ratio * ratio * ratio).toFixed(3)}rem` // ~1.424rem
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
// ============================================================================
|
|
81
|
+
// BORDER RADIUS GENERATION
|
|
82
|
+
// ============================================================================
|
|
83
|
+
function generateRadius() {
|
|
84
|
+
const base = 0.25; // rem
|
|
85
|
+
return {
|
|
86
|
+
sm: `${base}rem`,
|
|
87
|
+
md: `${base * 1.5}rem`,
|
|
88
|
+
lg: `${base * 2}rem`,
|
|
89
|
+
xl: `${base * 3}rem`,
|
|
90
|
+
'2xl': `${base * 4}rem`
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
// ============================================================================
|
|
94
|
+
// TRANSITION GENERATION
|
|
95
|
+
// ============================================================================
|
|
96
|
+
function generateTransitions() {
|
|
97
|
+
const base = 150; // ms
|
|
98
|
+
return {
|
|
99
|
+
fast: `${base}ms ease-in-out`,
|
|
100
|
+
normal: `${Math.round(base * 1.67)}ms ease-in-out`, // ~250ms
|
|
101
|
+
slow: `${Math.round(base * 2.33)}ms ease-in-out` // ~350ms
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// ============================================================================
|
|
105
|
+
// MAIN CONFIG
|
|
106
|
+
// ============================================================================
|
|
107
|
+
export const tokenConfig = {
|
|
108
|
+
colors: {
|
|
109
|
+
// Brand color — customize this when brand identity is finalized
|
|
110
|
+
brand: 'hsl(260, 85%, 55%)',
|
|
111
|
+
'brand-dark': 'hsl(260, 85%, 35%)',
|
|
112
|
+
'brand-light': 'hsl(260, 85%, 92%)',
|
|
113
|
+
// Semantic colors
|
|
114
|
+
primary: 'hsl(217, 91%, 60%)',
|
|
115
|
+
'primary-dark': 'hsl(217, 91%, 31%)',
|
|
116
|
+
'primary-light': 'hsl(217, 100%, 87%)',
|
|
117
|
+
success: 'hsl(142, 71%, 45%)',
|
|
118
|
+
'success-dark': 'hsl(142, 77%, 36%)',
|
|
119
|
+
'success-light': 'hsl(142, 71%, 82%)',
|
|
120
|
+
error: 'hsl(0, 91%, 71%)',
|
|
121
|
+
'error-dark': 'hsl(0, 91%, 48%)',
|
|
122
|
+
'error-light': 'hsl(0, 91%, 95%)',
|
|
123
|
+
warning: 'hsl(38, 92%, 50%)',
|
|
124
|
+
'warning-dark': 'hsl(38, 92%, 48%)',
|
|
125
|
+
'warning-light': 'hsl(38, 100%, 92%)',
|
|
126
|
+
// Neutral scale
|
|
127
|
+
...generateNeutralScale()
|
|
128
|
+
},
|
|
129
|
+
typography: {
|
|
130
|
+
fontFamilies: {
|
|
131
|
+
sans: "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
|
|
132
|
+
mono: "'Menlo', 'Monaco', 'Courier New', monospace"
|
|
133
|
+
},
|
|
134
|
+
fontSizes: generateFontSizes(),
|
|
135
|
+
fontWeights: {
|
|
136
|
+
normal: 400,
|
|
137
|
+
medium: 500,
|
|
138
|
+
semibold: 600,
|
|
139
|
+
bold: 700
|
|
140
|
+
},
|
|
141
|
+
lineHeights: {
|
|
142
|
+
tight: 1.25,
|
|
143
|
+
normal: 1.5,
|
|
144
|
+
relaxed: 1.625
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
spacing: generateSpacing(),
|
|
148
|
+
radius: generateRadius(),
|
|
149
|
+
shadows: {
|
|
150
|
+
sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',
|
|
151
|
+
md: '0 4px 6px -1px rgba(0, 0, 0, 0.1)',
|
|
152
|
+
lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1)',
|
|
153
|
+
xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1)'
|
|
154
|
+
},
|
|
155
|
+
transitions: generateTransitions(),
|
|
156
|
+
zIndex: {
|
|
157
|
+
dropdown: 1000,
|
|
158
|
+
modal: 1050,
|
|
159
|
+
tooltip: 1100
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/tokens/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;GAGG;AACH,SAAS,oBAAoB;IAC3B,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,gDAAgD;IAChD,qCAAqC;IACrC,MAAM,KAAK,GAAG;QACZ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;QAC/B,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;QAC9B,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;QAC9B,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;QAC9B,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;QAC9B,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;QAC9B,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;QAC9B,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;QAC9B,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;QAC9B,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE;KAC9B,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;QACpC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,GAAG,cAAc,SAAS,IAAI,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,6DAA6D;AAC7D,SAAS,kBAAkB,CAAC,IAAY,EAAE,GAAW,EAAE,cAAsB;IAC3E,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,MAAM,KAAK,GAAG;QACZ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QAC7B,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;QAClC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;KACpC,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;QACtC,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC,GAAG,OAAO,GAAG,KAAK,cAAc,MAAM,SAAS,IAAI,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM;IACzB,MAAM,OAAO,GAA2B;QACtC,GAAG,EAAE,GAAG;KACT,CAAC;IAEF,qBAAqB;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;IAC3C,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+EAA+E;AAC/E,uCAAuC;AACvC,+EAA+E;AAE/E,SAAS,iBAAiB;IACxB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,cAAc;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,sCAAsC;IAE3D,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY;QAC7D,EAAE,EAAE,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY;QACnD,IAAI,EAAE,GAAG,IAAI,KAAK,EAAE,OAAO;QAC3B,EAAE,EAAE,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY;QACnD,EAAE,EAAE,GAAG,CAAC,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY;QAC3D,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY;KACtE,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM;IACzB,OAAO;QACL,EAAE,EAAE,GAAG,IAAI,KAAK;QAChB,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,KAAK;QACtB,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,KAAK;QACpB,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,KAAK;QACpB,KAAK,EAAE,GAAG,IAAI,GAAG,CAAC,KAAK;KACxB,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,SAAS,mBAAmB;IAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK;IACvB,OAAO;QACL,IAAI,EAAE,GAAG,IAAI,gBAAgB;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,SAAS;QAC7D,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS;KAC3D,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,MAAM,CAAC,MAAM,WAAW,GAAgB;IACtC,MAAM,EAAE;QACN,gEAAgE;QAChE,KAAK,EAAE,oBAAoB;QAC3B,YAAY,EAAE,oBAAoB;QAClC,aAAa,EAAE,oBAAoB;QAEnC,kBAAkB;QAClB,OAAO,EAAE,oBAAoB;QAC7B,cAAc,EAAE,oBAAoB;QACpC,eAAe,EAAE,qBAAqB;QAEtC,OAAO,EAAE,oBAAoB;QAC7B,cAAc,EAAE,oBAAoB;QACpC,eAAe,EAAE,oBAAoB;QAErC,KAAK,EAAE,kBAAkB;QACzB,YAAY,EAAE,kBAAkB;QAChC,aAAa,EAAE,kBAAkB;QAEjC,OAAO,EAAE,mBAAmB;QAC5B,cAAc,EAAE,mBAAmB;QACnC,eAAe,EAAE,oBAAoB;QAErC,gBAAgB;QAChB,GAAG,oBAAoB,EAAE;KAC1B;IAED,UAAU,EAAE;QACV,YAAY,EAAE;YACZ,IAAI,EAAE,mJAAmJ;YACzJ,IAAI,EAAE,6CAA6C;SACpD;QACD,SAAS,EAAE,iBAAiB,EAAE;QAC9B,WAAW,EAAE;YACX,MAAM,EAAE,GAAG;YACX,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,GAAG;YACb,IAAI,EAAE,GAAG;SACV;QACD,WAAW,EAAE;YACX,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,KAAK;SACf;KACF;IAED,OAAO,EAAE,eAAe,EAAE;IAE1B,MAAM,EAAE,cAAc,EAAE;IAExB,OAAO,EAAE;QACP,EAAE,EAAE,iCAAiC;QACrC,EAAE,EAAE,mCAAmC;QACvC,EAAE,EAAE,qCAAqC;QACzC,EAAE,EAAE,qCAAqC;KAC1C;IAED,WAAW,EAAE,mBAAmB,EAAE;IAElC,MAAM,EAAE;QACN,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI;KACd;CACF,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design Token CSS Generation — Pure Functions
|
|
3
|
+
*
|
|
4
|
+
* Extracted pure functions for CSS generation.
|
|
5
|
+
* These can be imported and tested without side effects.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Convert token names from camelCase/kebab-case to CSS variable names.
|
|
9
|
+
* Examples:
|
|
10
|
+
* primaryDark -> primary-dark
|
|
11
|
+
* colorNeutral500 -> color-neutral-500
|
|
12
|
+
*/
|
|
13
|
+
export declare function toCSSVarName(prefix: string, name: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Generate CSS custom properties from token config.
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateCSS(): string;
|
|
18
|
+
//# sourceMappingURL=cssGen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cssGen.d.ts","sourceRoot":"","sources":["../../../src/tokens/cssGen.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAuIpC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design Token CSS Generation — Pure Functions
|
|
3
|
+
*
|
|
4
|
+
* Extracted pure functions for CSS generation.
|
|
5
|
+
* These can be imported and tested without side effects.
|
|
6
|
+
*/
|
|
7
|
+
import { tokenConfig } from './config.js';
|
|
8
|
+
/**
|
|
9
|
+
* Convert token names from camelCase/kebab-case to CSS variable names.
|
|
10
|
+
* Examples:
|
|
11
|
+
* primaryDark -> primary-dark
|
|
12
|
+
* colorNeutral500 -> color-neutral-500
|
|
13
|
+
*/
|
|
14
|
+
export function toCSSVarName(prefix, name) {
|
|
15
|
+
// Insert hyphens before capital letters, convert to lowercase
|
|
16
|
+
const kebab = name.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
|
|
17
|
+
return `--${prefix}-${kebab}`;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Generate CSS custom properties from token config.
|
|
21
|
+
*/
|
|
22
|
+
export function generateCSS() {
|
|
23
|
+
const lines = [
|
|
24
|
+
'/* Design Tokens - GENERATED FILE */',
|
|
25
|
+
'/* Do not edit manually. Update src/tokens/config.ts in workspace root and run: npm run generate:tokens */',
|
|
26
|
+
'/* This file is auto-generated at build time for immutability */',
|
|
27
|
+
'',
|
|
28
|
+
':root {'
|
|
29
|
+
];
|
|
30
|
+
// ========================================================================
|
|
31
|
+
// COLORS
|
|
32
|
+
// ========================================================================
|
|
33
|
+
lines.push(' /* Colors */');
|
|
34
|
+
Object.entries(tokenConfig.colors).forEach(([name, value]) => {
|
|
35
|
+
const varName = toCSSVarName('color', name);
|
|
36
|
+
lines.push(` ${varName}: ${value};`);
|
|
37
|
+
});
|
|
38
|
+
lines.push('');
|
|
39
|
+
// ========================================================================
|
|
40
|
+
// TYPOGRAPHY
|
|
41
|
+
// ========================================================================
|
|
42
|
+
lines.push(' /* Typography */');
|
|
43
|
+
// Font families
|
|
44
|
+
Object.entries(tokenConfig.typography.fontFamilies).forEach(([name, value]) => {
|
|
45
|
+
const varName = toCSSVarName('font', name);
|
|
46
|
+
lines.push(` ${varName}: ${value};`);
|
|
47
|
+
});
|
|
48
|
+
lines.push('');
|
|
49
|
+
// Font sizes
|
|
50
|
+
Object.entries(tokenConfig.typography.fontSizes).forEach(([name, value]) => {
|
|
51
|
+
const varName = toCSSVarName('font-size', name);
|
|
52
|
+
lines.push(` ${varName}: ${value};`);
|
|
53
|
+
});
|
|
54
|
+
lines.push('');
|
|
55
|
+
// Font weights
|
|
56
|
+
Object.entries(tokenConfig.typography.fontWeights).forEach(([name, value]) => {
|
|
57
|
+
const varName = toCSSVarName('font-weight', name);
|
|
58
|
+
lines.push(` ${varName}: ${value};`);
|
|
59
|
+
});
|
|
60
|
+
lines.push('');
|
|
61
|
+
// Line heights
|
|
62
|
+
Object.entries(tokenConfig.typography.lineHeights).forEach(([name, value]) => {
|
|
63
|
+
const varName = toCSSVarName('line-height', name);
|
|
64
|
+
lines.push(` ${varName}: ${value};`);
|
|
65
|
+
});
|
|
66
|
+
lines.push('');
|
|
67
|
+
// ========================================================================
|
|
68
|
+
// SPACING
|
|
69
|
+
// ========================================================================
|
|
70
|
+
lines.push(' /* Spacing */');
|
|
71
|
+
Object.entries(tokenConfig.spacing).forEach(([name, value]) => {
|
|
72
|
+
const varName = toCSSVarName('spacing', name);
|
|
73
|
+
lines.push(` ${varName}: ${value};`);
|
|
74
|
+
});
|
|
75
|
+
lines.push('');
|
|
76
|
+
// ========================================================================
|
|
77
|
+
// BORDER RADIUS
|
|
78
|
+
// ========================================================================
|
|
79
|
+
lines.push(' /* Border Radius */');
|
|
80
|
+
Object.entries(tokenConfig.radius).forEach(([name, value]) => {
|
|
81
|
+
const varName = toCSSVarName('radius', name);
|
|
82
|
+
lines.push(` ${varName}: ${value};`);
|
|
83
|
+
});
|
|
84
|
+
lines.push('');
|
|
85
|
+
// ========================================================================
|
|
86
|
+
// SHADOWS
|
|
87
|
+
// ========================================================================
|
|
88
|
+
lines.push(' /* Shadows */');
|
|
89
|
+
Object.entries(tokenConfig.shadows).forEach(([name, value]) => {
|
|
90
|
+
const varName = toCSSVarName('shadow', name);
|
|
91
|
+
lines.push(` ${varName}: ${value};`);
|
|
92
|
+
});
|
|
93
|
+
lines.push('');
|
|
94
|
+
// ========================================================================
|
|
95
|
+
// TRANSITIONS
|
|
96
|
+
// ========================================================================
|
|
97
|
+
lines.push(' /* Transitions */');
|
|
98
|
+
Object.entries(tokenConfig.transitions).forEach(([name, value]) => {
|
|
99
|
+
const varName = toCSSVarName('transition', name);
|
|
100
|
+
lines.push(` ${varName}: ${value};`);
|
|
101
|
+
});
|
|
102
|
+
lines.push('');
|
|
103
|
+
// ========================================================================
|
|
104
|
+
// Z-INDEX
|
|
105
|
+
// ========================================================================
|
|
106
|
+
lines.push(' /* Z-Index */');
|
|
107
|
+
Object.entries(tokenConfig.zIndex).forEach(([name, value]) => {
|
|
108
|
+
const varName = toCSSVarName('z', name);
|
|
109
|
+
lines.push(` ${varName}: ${value};`);
|
|
110
|
+
});
|
|
111
|
+
lines.push('}');
|
|
112
|
+
lines.push('');
|
|
113
|
+
// ========================================================================
|
|
114
|
+
// GLOBAL STYLES
|
|
115
|
+
// ========================================================================
|
|
116
|
+
lines.push('/* Global Styles */');
|
|
117
|
+
lines.push('* {');
|
|
118
|
+
lines.push(' box-sizing: border-box;');
|
|
119
|
+
lines.push('}');
|
|
120
|
+
lines.push('');
|
|
121
|
+
lines.push('html {');
|
|
122
|
+
lines.push(' font-family: var(--font-sans);');
|
|
123
|
+
lines.push(' font-size: 16px;');
|
|
124
|
+
lines.push(' -webkit-font-smoothing: antialiased;');
|
|
125
|
+
lines.push(' -moz-osx-font-smoothing: grayscale;');
|
|
126
|
+
lines.push('}');
|
|
127
|
+
lines.push('');
|
|
128
|
+
lines.push('body {');
|
|
129
|
+
lines.push(' margin: 0;');
|
|
130
|
+
lines.push(' padding: 0;');
|
|
131
|
+
lines.push(' background-color: var(--color-neutral-50);');
|
|
132
|
+
lines.push(' color: var(--color-neutral-900);');
|
|
133
|
+
lines.push(' font-size: var(--font-size-base);');
|
|
134
|
+
lines.push(' line-height: var(--line-height-normal);');
|
|
135
|
+
lines.push('}');
|
|
136
|
+
lines.push('');
|
|
137
|
+
lines.push('#app {');
|
|
138
|
+
lines.push(' min-height: 100vh;');
|
|
139
|
+
lines.push(' display: flex;');
|
|
140
|
+
lines.push(' flex-direction: column;');
|
|
141
|
+
lines.push('}');
|
|
142
|
+
return lines.join('\n');
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=cssGen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cssGen.js","sourceRoot":"","sources":["../../../src/tokens/cssGen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design Token CSS Generator
|
|
3
|
+
*
|
|
4
|
+
* Shared generator for all samples. Reads the workspace token configuration
|
|
5
|
+
* and generates immutable CSS variables for each sample.
|
|
6
|
+
*
|
|
7
|
+
* Usage (from workspace root):
|
|
8
|
+
* npx tsx src/tokens/generateCSS.ts
|
|
9
|
+
* OR with npm script:
|
|
10
|
+
* npm run generate:tokens
|
|
11
|
+
*
|
|
12
|
+
* Generates CSS files in:
|
|
13
|
+
* samples/spa-examples/[name]/src/styles/tokens.css
|
|
14
|
+
* samples/worker-examples/[name]/src/styles/tokens.css
|
|
15
|
+
* samples/fullstack-examples/[name]/src/styles/tokens.css
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=generateCSS.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateCSS.d.ts","sourceRoot":"","sources":["../../../src/tokens/generateCSS.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;GAeG"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
/**
|
|
3
|
+
* Design Token CSS Generator
|
|
4
|
+
*
|
|
5
|
+
* Shared generator for all samples. Reads the workspace token configuration
|
|
6
|
+
* and generates immutable CSS variables for each sample.
|
|
7
|
+
*
|
|
8
|
+
* Usage (from workspace root):
|
|
9
|
+
* npx tsx src/tokens/generateCSS.ts
|
|
10
|
+
* OR with npm script:
|
|
11
|
+
* npm run generate:tokens
|
|
12
|
+
*
|
|
13
|
+
* Generates CSS files in:
|
|
14
|
+
* samples/spa-examples/[name]/src/styles/tokens.css
|
|
15
|
+
* samples/worker-examples/[name]/src/styles/tokens.css
|
|
16
|
+
* samples/fullstack-examples/[name]/src/styles/tokens.css
|
|
17
|
+
*/
|
|
18
|
+
import { writeFileSync, mkdirSync } from 'fs';
|
|
19
|
+
import { dirname, resolve } from 'path';
|
|
20
|
+
import { glob } from 'glob';
|
|
21
|
+
import { tokenConfig } from './config.js';
|
|
22
|
+
import { generateCSS } from './cssGen.js';
|
|
23
|
+
/**
|
|
24
|
+
* Find all sample directories that need tokens generated.
|
|
25
|
+
*/
|
|
26
|
+
async function findSampleDirs() {
|
|
27
|
+
const patterns = ['samples/spa-examples/*/src/styles', 'samples/worker-examples/*/src/styles', 'samples/fullstack-examples/*/src/styles'];
|
|
28
|
+
const dirs = new Set();
|
|
29
|
+
for (const pattern of patterns) {
|
|
30
|
+
try {
|
|
31
|
+
const matches = await glob(pattern, { cwd: process.cwd() });
|
|
32
|
+
matches.forEach((dir) => dirs.add(dir));
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Pattern may not have matches yet, that's OK
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return Array.from(dirs).sort();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Main function: generate and write CSS file to each sample.
|
|
42
|
+
*/
|
|
43
|
+
async function main() {
|
|
44
|
+
try {
|
|
45
|
+
const css = generateCSS();
|
|
46
|
+
const sampleDirs = await findSampleDirs();
|
|
47
|
+
if (sampleDirs.length === 0) {
|
|
48
|
+
console.log('⚠ No sample directories found. Create samples and run again.');
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
let successCount = 0;
|
|
52
|
+
const errors = [];
|
|
53
|
+
for (const sampleDir of sampleDirs) {
|
|
54
|
+
try {
|
|
55
|
+
const outputPath = resolve(sampleDir, 'tokens.css');
|
|
56
|
+
mkdirSync(dirname(outputPath), { recursive: true });
|
|
57
|
+
writeFileSync(outputPath, css, 'utf-8');
|
|
58
|
+
console.log(`✓ ${sampleDir}/tokens.css`);
|
|
59
|
+
successCount++;
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
errors.push(`✗ ${sampleDir}: ${error instanceof Error ? error.message : String(error)}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
console.log('');
|
|
66
|
+
console.log(`Generated tokens for ${successCount} sample(s)`);
|
|
67
|
+
console.log(` ${css.split('\n').length} lines per file`);
|
|
68
|
+
console.log(` ${Object.keys(tokenConfig.colors).length} colors`);
|
|
69
|
+
console.log(` ${Object.keys(tokenConfig.spacing).length} spacing tokens`);
|
|
70
|
+
console.log(` ${Object.keys(tokenConfig.typography.fontSizes).length} font sizes`);
|
|
71
|
+
if (errors.length > 0) {
|
|
72
|
+
console.error('\nErrors:');
|
|
73
|
+
errors.forEach((err) => console.error(` ${err}`));
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error('✗ Failed to generate tokens CSS:', error);
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
main();
|
|
83
|
+
//# sourceMappingURL=generateCSS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateCSS.js","sourceRoot":"","sources":["../../../src/tokens/generateCSS.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,KAAK,UAAU,cAAc;IAC3B,MAAM,QAAQ,GAAG,CAAC,mCAAmC,EAAE,sCAAsC,EAAE,yCAAyC,CAAC,CAAC;IAE1I,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;QAE1C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;YAC5E,OAAO;QACT,CAAC;QAED,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBACpD,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpD,aAAa,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,aAAa,CAAC,CAAC;gBACzC,YAAY,EAAE,CAAC;YACjB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,wBAAwB,YAAY,YAAY,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,iBAAiB,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,iBAAiB,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,aAAa,CAAC,CAAC;QAEpF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|