@arbor-css/functions 0.0.102 → 0.0.104
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common.d.ts +29 -5
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js +59 -19
- package/dist/common.js.map +1 -1
- package/dist/functions.d.ts +16 -7
- package/dist/functions.d.ts.map +1 -1
- package/dist/functions.js +19 -14
- package/dist/functions.js.map +1 -1
- package/dist/mixins.d.ts +52 -14
- package/dist/mixins.d.ts.map +1 -1
- package/dist/mixins.js +58 -44
- package/dist/mixins.js.map +1 -1
- package/package.json +3 -3
package/dist/common.d.ts
CHANGED
|
@@ -1,17 +1,41 @@
|
|
|
1
|
-
import { CalcInterpolation } from '@arbor-css/calc';
|
|
2
|
-
import {
|
|
1
|
+
import { CalcInterpolation, Equation } from '@arbor-css/calc';
|
|
2
|
+
import { PropertyType, Token } from '@arbor-css/tokens';
|
|
3
3
|
export type CssProperty = `--${string}`;
|
|
4
4
|
export type FunctionParamWithMeta = {
|
|
5
5
|
name: CssProperty;
|
|
6
|
-
type?:
|
|
6
|
+
type?: PropertyType;
|
|
7
7
|
fallback?: string;
|
|
8
|
+
description?: string;
|
|
8
9
|
};
|
|
9
10
|
export type FunctionParam = CssProperty | FunctionParamWithMeta;
|
|
10
11
|
export type FunctionParams = readonly FunctionParam[];
|
|
11
12
|
export type ParamsAsInterpolations<TParams extends FunctionParams> = {
|
|
12
13
|
[K in keyof TParams]: CalcInterpolation;
|
|
13
14
|
};
|
|
15
|
+
export type ParamsAsNames<TParams extends FunctionParams> = {
|
|
16
|
+
[K in keyof TParams]: TParams[K] extends FunctionParamWithMeta ? TParams[K]['name'] : TParams[K] extends CssProperty ? TParams[K] : never;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Converts a function params list into an input record which makes
|
|
20
|
+
* parameters with defaults optional.
|
|
21
|
+
*/
|
|
22
|
+
export type ParamsAsCallInputs<TParams extends FunctionParams> = {
|
|
23
|
+
[K in keyof TParams as TParams[K] extends {
|
|
24
|
+
fallback: string;
|
|
25
|
+
} ? never : TParams[K] extends FunctionParamWithMeta ? TParams[K]['name'] : TParams[K] extends CssProperty ? TParams[K] : never]: CalcInterpolation;
|
|
26
|
+
} & {
|
|
27
|
+
[K in keyof TParams as TParams[K] extends ({
|
|
28
|
+
name: CssProperty;
|
|
29
|
+
fallback: string;
|
|
30
|
+
}) ? TParams[K]['name'] : never]?: CalcInterpolation;
|
|
31
|
+
};
|
|
14
32
|
export declare function isFunctionParamWithMeta(param: CssProperty | FunctionParamWithMeta): param is FunctionParamWithMeta;
|
|
15
|
-
export declare function paramsAsString<TParams extends FunctionParams>(params: TParams, keepEmpty
|
|
16
|
-
|
|
33
|
+
export declare function paramsAsString<TParams extends FunctionParams>(params: TParams, { keepEmpty, nonce, }: {
|
|
34
|
+
keepEmpty?: boolean;
|
|
35
|
+
nonce?: string;
|
|
36
|
+
}): string;
|
|
37
|
+
export declare function getParamName(param: FunctionParam): string;
|
|
38
|
+
export declare function paramAsToken(param: FunctionParam, nonce: string): Token;
|
|
39
|
+
export declare function paramsAsInterpolations<TParams extends FunctionParams>(params: TParams, nonce: string): ParamsAsInterpolations<TParams>;
|
|
40
|
+
export declare function applyParameters(params: FunctionParams, inputs: Record<string, string>, nonce: string, apply: (name: string, value: Equation) => void): void;
|
|
17
41
|
//# sourceMappingURL=common.d.ts.map
|
package/dist/common.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAO,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAGN,YAAY,EACZ,KAAK,EACL,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,WAAW,GAAG,KAAK,MAAM,EAAE,CAAC;AACxC,MAAM,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AACF,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,qBAAqB,CAAC;AAChE,MAAM,MAAM,cAAc,GAAG,SAAS,aAAa,EAAE,CAAC;AACtD,MAAM,MAAM,sBAAsB,CAAC,OAAO,SAAS,cAAc,IAAI;KACnE,CAAC,IAAI,MAAM,OAAO,GAAG,iBAAiB;CACvC,CAAC;AACF,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,cAAc,IAAI;KAC1D,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,qBAAqB,GAC7D,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GACjB,OAAO,CAAC,CAAC,CAAC,SAAS,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,GAC3C,KAAK;CACP,CAAC;AACF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,CAAC,OAAO,SAAS,cAAc,IAAI;KAC/D,CAAC,IAAI,MAAM,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,KAAK,GACpE,OAAO,CAAC,CAAC,CAAC,SAAS,qBAAqB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAC7D,OAAO,CAAC,CAAC,CAAC,SAAS,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,GAC3C,KAAK,GAAG,iBAAiB;CAC3B,GAAG;KACF,CAAC,IAAI,MAAM,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,SAAS,CACzC;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CACvC,GACA,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GACjB,KAAK,CAAC,CAAC,EAAE,iBAAiB;CAC5B,CAAC;AAEF,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,WAAW,GAAG,qBAAqB,GACxC,KAAK,IAAI,qBAAqB,CAEhC;AAED,wBAAgB,cAAc,CAAC,OAAO,SAAS,cAAc,EAC5D,MAAM,EAAE,OAAO,EACf,EACC,SAAS,EACT,KAAK,GACL,EAAE;IACF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,GACC,MAAM,CAqBR;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAQzD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAcvE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,SAAS,cAAc,EACpE,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,GACX,sBAAsB,CAAC,OAAO,CAAC,CAYjC;AAED,wBAAgB,eAAe,CAC9B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,QAmB9C"}
|
package/dist/common.js
CHANGED
|
@@ -1,40 +1,80 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isToken } from '@arbor-css/tokens';
|
|
1
|
+
import { css } from '@arbor-css/calc';
|
|
2
|
+
import { createTokenFactory, isToken, } from '@arbor-css/tokens';
|
|
3
3
|
export function isFunctionParamWithMeta(param) {
|
|
4
4
|
return typeof param === 'object' && 'name' in param;
|
|
5
5
|
}
|
|
6
|
-
export function paramsAsString(params, keepEmpty) {
|
|
6
|
+
export function paramsAsString(params, { keepEmpty, nonce, }) {
|
|
7
7
|
if (!params.length) {
|
|
8
8
|
return keepEmpty ? '()' : '';
|
|
9
9
|
}
|
|
10
10
|
const list = params
|
|
11
11
|
.map((p) => {
|
|
12
|
+
const name = nonce ? paramAsToken(p, nonce).name : getParamName(p);
|
|
13
|
+
if (isFunctionParamWithMeta(p)) {
|
|
14
|
+
const type = p.type ?? '*';
|
|
15
|
+
const typeAnnotation = type === '*' ? '' : ` <${type}>`;
|
|
16
|
+
return `${name}${typeAnnotation}`;
|
|
17
|
+
}
|
|
12
18
|
if (isToken(p)) {
|
|
13
19
|
const type = p.type ?? '*';
|
|
14
20
|
const typeAnnotation = type === '*' ? '' : ` <${type}>`;
|
|
15
|
-
return
|
|
21
|
+
return `${name}${typeAnnotation}`;
|
|
16
22
|
}
|
|
17
|
-
return
|
|
23
|
+
return name;
|
|
18
24
|
})
|
|
19
25
|
.join(', ');
|
|
20
26
|
return `(${list})`;
|
|
21
27
|
}
|
|
22
|
-
export function
|
|
28
|
+
export function getParamName(param) {
|
|
29
|
+
if (isFunctionParamWithMeta(param)) {
|
|
30
|
+
return param.name;
|
|
31
|
+
}
|
|
32
|
+
if (isToken(param)) {
|
|
33
|
+
return param.name;
|
|
34
|
+
}
|
|
35
|
+
return param;
|
|
36
|
+
}
|
|
37
|
+
export function paramAsToken(param, nonce) {
|
|
38
|
+
const createParamToken = createTokenFactory({
|
|
39
|
+
tokenPrefix: `--_-param-${nonce}-`,
|
|
40
|
+
});
|
|
41
|
+
if (isToken(param)) {
|
|
42
|
+
return param.prefixed(`--_-param-${nonce}-`);
|
|
43
|
+
}
|
|
44
|
+
if (isFunctionParamWithMeta(param)) {
|
|
45
|
+
return createParamToken(param.name.replace('--', ''), {
|
|
46
|
+
type: param.type,
|
|
47
|
+
description: param.description,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return createParamToken(param.replace('--', ''), {});
|
|
51
|
+
}
|
|
52
|
+
export function paramsAsInterpolations(params, nonce) {
|
|
23
53
|
return params.map((p) => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (p.fallback) {
|
|
30
|
-
return $.val(`var(${name}, ${p.fallback})`);
|
|
31
|
-
}
|
|
32
|
-
return $.val(`var(${name})`);
|
|
54
|
+
const asToken = paramAsToken(p, nonce);
|
|
55
|
+
if (isFunctionParamWithMeta(p) && p.fallback) {
|
|
56
|
+
return css `
|
|
57
|
+
${[asToken, p.fallback]}
|
|
58
|
+
`;
|
|
33
59
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return $.val(p);
|
|
60
|
+
return css `
|
|
61
|
+
${asToken}
|
|
62
|
+
`;
|
|
38
63
|
});
|
|
39
64
|
}
|
|
65
|
+
export function applyParameters(params, inputs, nonce, apply) {
|
|
66
|
+
for (const param of params) {
|
|
67
|
+
const name = getParamName(param);
|
|
68
|
+
const asToken = paramAsToken(param, nonce);
|
|
69
|
+
const fallback = isFunctionParamWithMeta(param) && param.fallback ?
|
|
70
|
+
param.fallback
|
|
71
|
+
: undefined;
|
|
72
|
+
const inputValue = inputs[name] ?? fallback;
|
|
73
|
+
if (inputValue) {
|
|
74
|
+
apply(asToken.name, css `
|
|
75
|
+
${inputValue}
|
|
76
|
+
`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
40
80
|
//# sourceMappingURL=common.js.map
|
package/dist/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"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"}
|
package/dist/functions.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Css, type Equation } from '@arbor-css/calc';
|
|
2
|
-
import {
|
|
1
|
+
import { CalcEvaluationContext, Css, type Equation } from '@arbor-css/calc';
|
|
2
|
+
import { Token } from '@arbor-css/tokens';
|
|
3
|
+
import { FunctionParams, ParamsAsCallInputs, ParamsAsInterpolations } from './common.js';
|
|
3
4
|
export declare const DEFAULT_FUNCTION_NAME_PREFIX = "--fn-";
|
|
4
5
|
export type ParameterSchema = {
|
|
5
6
|
name: string;
|
|
@@ -31,7 +32,7 @@ export type CreateFunctionParameters<TParams extends FunctionParams> = {
|
|
|
31
32
|
* spacing.definition // @function --spacing-scale(--base <length>, --scale <number>) { result: (var(--base) * var(--scale)); }
|
|
32
33
|
* spacing.compute({ base: '8px', scale: 2 }) // 'calc(var(--base) * 2)' or '16px'
|
|
33
34
|
*/
|
|
34
|
-
export type CreateFunction = (name: string, parameters: CreateFunctionParameters<
|
|
35
|
+
export type CreateFunction = <TParams extends FunctionParams>(name: string, parameters: CreateFunctionParameters<TParams>) => ArborFunction<TParams>;
|
|
35
36
|
export declare function createFunctionFactory({ namePrefix, }?: {
|
|
36
37
|
namePrefix?: string;
|
|
37
38
|
}): <TParams extends FunctionParams>(name: string, { description, parameters, definition }: CreateFunctionParameters<TParams>) => ArborFunction<TParams>;
|
|
@@ -40,12 +41,20 @@ export type ArborFunction<TParams extends FunctionParams = FunctionParams> = {
|
|
|
40
41
|
name: string;
|
|
41
42
|
description?: string;
|
|
42
43
|
parameters: TParams;
|
|
44
|
+
parameterTokens: Token[];
|
|
43
45
|
equation: Equation;
|
|
44
46
|
definition: string;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
compute: (params: ParamsAsCallInputs<TParams>, ctx?: CalcEvaluationContext) => string;
|
|
48
|
+
/**
|
|
49
|
+
* A printed representation of the function call signature, for use in
|
|
50
|
+
* documentation and error messages
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* --fn-spacing-scale(--base <length>, --scale <number>)
|
|
54
|
+
*/
|
|
55
|
+
signature: string;
|
|
47
56
|
};
|
|
48
|
-
export type PresetFunctions = Record<string, ArborFunction
|
|
49
|
-
export declare function isFunction(value: unknown): value is ArborFunction<
|
|
57
|
+
export type PresetFunctions = Record<string, ArborFunction<any>>;
|
|
58
|
+
export declare function isFunction(value: unknown): value is ArborFunction<any>;
|
|
50
59
|
export {};
|
|
51
60
|
//# sourceMappingURL=functions.d.ts.map
|
package/dist/functions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../src/functions.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../src/functions.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,qBAAqB,EAGrB,GAAG,EACH,KAAK,QAAQ,EAGb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAEN,cAAc,EAEd,kBAAkB,EAClB,sBAAsB,EAGtB,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,4BAA4B,UAAU,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,QAAA,MAAM,cAAc,iBAAiB,CAAC;AAEtC,MAAM,MAAM,wBAAwB,CAAC,OAAO,SAAS,cAAc,IAAI;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,CACX,GAAG,EAAE,GAAG,EACR,GAAG,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC,KACtC,QAAQ,CAAC;CACd,CAAC;AACF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,SAAS,cAAc,EAC3D,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,wBAAwB,CAAC,OAAO,CAAC,KACzC,aAAa,CAAC,OAAO,CAAC,CAAC;AAE5B,wBAAgB,qBAAqB,CAAC,EACrC,UAAyC,GACzC,GAAE;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;CACf,IAG0B,OAAO,SAAS,cAAc,QACtD,MAAM,2CAC6B,wBAAwB,CAAC,OAAO,CAAC,KACxE,aAAa,CAAC,OAAO,CAAC,CA0CzB;AAED,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,IAAI;IAC5E,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,KAAK,EAAE,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,CACR,MAAM,EAAE,kBAAkB,CAAC,OAAO,CAAC,EACnC,GAAG,CAAC,EAAE,qBAAqB,KACvB,MAAM,CAAC;IACZ;;;;;;OAMG;IACH,SAAS,EAAE,MAAM,CAAC;CAClB,CAAC;AACF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjE,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAAC,GAAG,CAAC,CAEtE"}
|
package/dist/functions.js
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { computeEquation, css, printComputationResult, printEquation, } from '@arbor-css/calc';
|
|
2
|
-
import {
|
|
2
|
+
import { applyParameters, paramAsToken, paramsAsInterpolations, paramsAsString, } from './common.js';
|
|
3
3
|
export const DEFAULT_FUNCTION_NAME_PREFIX = '--fn-';
|
|
4
4
|
const FUNCTION_BRAND = '@@FUNCTION@@';
|
|
5
5
|
export function createFunctionFactory({ namePrefix = DEFAULT_FUNCTION_NAME_PREFIX, } = {}) {
|
|
6
6
|
const functionPrefix = namePrefix;
|
|
7
7
|
return function createFunction(name, { description, parameters, definition }) {
|
|
8
8
|
const cssName = `${functionPrefix}${name}`;
|
|
9
|
-
const paramsList = paramsAsString(parameters,
|
|
10
|
-
|
|
9
|
+
const paramsList = paramsAsString(parameters, {
|
|
10
|
+
keepEmpty: true,
|
|
11
|
+
nonce: name,
|
|
12
|
+
});
|
|
13
|
+
const paramsAsTokens = parameters.map((p) => paramAsToken(p, name));
|
|
14
|
+
const equation = definition(css, ...paramsAsInterpolations(parameters, name));
|
|
11
15
|
const body = printEquation(equation);
|
|
12
16
|
const cssDefinition = `@function ${cssName}${paramsList} { result: ${body}; }`;
|
|
13
17
|
return {
|
|
@@ -15,23 +19,24 @@ export function createFunctionFactory({ namePrefix = DEFAULT_FUNCTION_NAME_PREFI
|
|
|
15
19
|
name: cssName,
|
|
16
20
|
description,
|
|
17
21
|
parameters,
|
|
22
|
+
parameterTokens: paramsAsTokens,
|
|
18
23
|
equation,
|
|
19
24
|
definition: cssDefinition,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const cssParameterName = isFunctionParamWithMeta(parameter) ? parameter.name : parameter;
|
|
26
|
-
const fallback = isFunctionParamWithMeta(parameter) ? parameter.fallback : undefined;
|
|
27
|
-
propertyValues[cssParameterName] = String(params[cssParameterName] ?? fallback);
|
|
28
|
-
}
|
|
25
|
+
compute(params, ctx) {
|
|
26
|
+
const parameterValues = {};
|
|
27
|
+
applyParameters(parameters, params, name, (paramName, value) => {
|
|
28
|
+
parameterValues[paramName] = value;
|
|
29
|
+
});
|
|
29
30
|
const result = computeEquation(equation, {
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
...ctx,
|
|
32
|
+
propertyValues: {
|
|
33
|
+
...ctx?.propertyValues,
|
|
34
|
+
...parameterValues,
|
|
35
|
+
},
|
|
32
36
|
});
|
|
33
37
|
return printComputationResult(result);
|
|
34
38
|
},
|
|
39
|
+
signature: `${cssName}${paramsAsString(parameters, { keepEmpty: true })}`,
|
|
35
40
|
};
|
|
36
41
|
};
|
|
37
42
|
}
|
package/dist/functions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../src/functions.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../src/functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,eAAe,EACf,GAAG,EAGH,sBAAsB,EACtB,aAAa,GACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACN,eAAe,EAEf,YAAY,EAGZ,sBAAsB,EACtB,cAAc,GACd,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,MAAM,4BAA4B,GAAG,OAAO,CAAC;AAWpD,MAAM,cAAc,GAAG,cAAc,CAAC;AA+BtC,MAAM,UAAU,qBAAqB,CAAC,EACrC,UAAU,GAAG,4BAA4B,MAGtC,EAAE;IACL,MAAM,cAAc,GAAG,UAAU,CAAC;IAElC,OAAO,SAAS,cAAc,CAC7B,IAAY,EACZ,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAqC;QAE1E,MAAM,OAAO,GAAG,GAAG,cAAc,GAAG,IAAI,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,cAAc,CAAC,UAAU,EAAE;YAC7C,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI;SACX,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,UAAU,CAC1B,GAAG,EACH,GAAG,sBAAsB,CAAC,UAAU,EAAE,IAAI,CAAC,CAC3C,CAAC;QACF,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,aAAa,GAAG,aAAa,OAAO,GAAG,UAAU,cAAc,IAAI,KAAK,CAAC;QAE/E,OAAO;YACN,CAAC,cAAc,CAAC,EAAE,IAAa;YAC/B,IAAI,EAAE,OAAO;YACb,WAAW;YACX,UAAU;YACV,eAAe,EAAE,cAAc;YAC/B,QAAQ;YACR,UAAU,EAAE,aAAa;YACzB,OAAO,CACN,MAAmC,EACnC,GAA2B;gBAE3B,MAAM,eAAe,GAAsC,EAAE,CAAC;gBAC9D,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;oBAC9D,eAAe,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;gBACpC,CAAC,CAAC,CAAC;gBACH,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,EAAE;oBACxC,GAAG,GAAG;oBACN,cAAc,EAAE;wBACf,GAAG,GAAG,EAAE,cAAc;wBACtB,GAAG,eAAe;qBAClB;iBACD,CAAC,CAAC;gBACH,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;YACvC,CAAC;YACD,SAAS,EAAE,GAAG,OAAO,GAAG,cAAc,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE;SACzE,CAAC;IACH,CAA0B,CAAC;AAC5B,CAAC;AAyBD,MAAM,UAAU,UAAU,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,cAAc,IAAI,KAAK,CAAC;AAC/E,CAAC"}
|
package/dist/mixins.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CalcInterpolation, Css, type Equation } from '@arbor-css/calc';
|
|
2
|
-
import { CreateToken, SimpleTokensAsTokenDefinitions, SimpleTokenSchema, TokenSchema } from '@arbor-css/tokens';
|
|
3
|
-
import { FunctionParams, ParamsAsInterpolations } from './common.js';
|
|
2
|
+
import { CreateToken, SimpleTokensAsTokenDefinitions, SimpleTokenSchema, Token, TokenSchema } from '@arbor-css/tokens';
|
|
3
|
+
import { FunctionParams, ParamsAsCallInputs, ParamsAsInterpolations } from './common.js';
|
|
4
4
|
export declare const DEFAULT_MIXIN_NAME_PREFIX = "--mx-";
|
|
5
5
|
declare const MIXIN_BRAND = "@@MIXIN@@";
|
|
6
6
|
export type ArborMixinDeclaration = {
|
|
@@ -16,21 +16,28 @@ export type ArborMixinBody = ArborMixinBodyEntry[];
|
|
|
16
16
|
type MixinValue = CalcInterpolation | Equation;
|
|
17
17
|
type MixinScopedBodyObject = Record<string, MixinValue>;
|
|
18
18
|
type MixinBodyObject = Record<string, MixinValue | MixinScopedBodyObject | MixinBodyList>;
|
|
19
|
-
type MixinBodyListItem = {
|
|
19
|
+
export type MixinBodyListItem = {
|
|
20
20
|
prop: string;
|
|
21
21
|
value: MixinValue;
|
|
22
22
|
} | {
|
|
23
23
|
scope: string;
|
|
24
24
|
children: MixinBodyObject | MixinBodyList;
|
|
25
|
-
};
|
|
25
|
+
} | MixinBodyObject;
|
|
26
26
|
type MixinBodyList = readonly MixinBodyListItem[];
|
|
27
|
+
export declare function isMixinPropertyDeclaration(entry: ArborMixinBodyEntry): entry is ArborMixinDeclaration;
|
|
28
|
+
export declare function isMixinScope(entry: ArborMixinBodyEntry): entry is ArborMixinScope;
|
|
29
|
+
export declare function normalizeMixinBody(body: MixinBodyObject | MixinBodyList): ArborMixinBody;
|
|
30
|
+
export type ArborMixinDefinition = MixinBodyObject | MixinBodyList;
|
|
27
31
|
export interface CreateMixinParameters<TParams extends FunctionParams, TTokens extends SimpleTokenSchema = SimpleTokenSchema> {
|
|
28
|
-
description?: string
|
|
32
|
+
description?: string | ((info: {
|
|
33
|
+
parameters: ParamsAsInterpolations<TParams>;
|
|
34
|
+
tokens: SimpleTokensAsTokenDefinitions<TTokens>;
|
|
35
|
+
}) => string);
|
|
29
36
|
parameters?: TParams;
|
|
30
37
|
definition: (css: Css, inputs: {
|
|
31
38
|
parameters: ParamsAsInterpolations<TParams>;
|
|
32
39
|
tokens: SimpleTokensAsTokenDefinitions<TTokens>;
|
|
33
|
-
}) =>
|
|
40
|
+
}) => ArborMixinDefinition;
|
|
34
41
|
contributeTokens?: TTokens;
|
|
35
42
|
}
|
|
36
43
|
/**
|
|
@@ -46,9 +53,9 @@ export interface CreateMixinParameters<TParams extends FunctionParams, TTokens e
|
|
|
46
53
|
* parameters: [
|
|
47
54
|
* '--default-ring-color',
|
|
48
55
|
* ],
|
|
49
|
-
* definition: (css,
|
|
56
|
+
* definition: (css, { parameters }) => ({
|
|
50
57
|
* '--shadow': css`0 0 0 0 transparent`,
|
|
51
|
-
* '--ring': css`0 0 0 0
|
|
58
|
+
* '--ring': css`0 0 0 0 ${parameters[0]}`,
|
|
52
59
|
* 'box-shadow': css`var(--ring), var(--shadow)`,
|
|
53
60
|
* }),
|
|
54
61
|
*/
|
|
@@ -57,20 +64,51 @@ export declare function createMixinFactory({ namePrefix, createToken, }: {
|
|
|
57
64
|
namePrefix?: string;
|
|
58
65
|
createToken: CreateToken;
|
|
59
66
|
}): <TParams extends FunctionParams, TTokens extends SimpleTokenSchema>(name: string, { description, definition, parameters, contributeTokens: contributeTokensInput, }: CreateMixinParameters<TParams, TTokens>) => ArborMixin<TParams, SimpleTokensAsTokenDefinitions<TTokens>>;
|
|
60
|
-
export type ArborMixin<TParams extends FunctionParams
|
|
67
|
+
export type ArborMixin<TParams extends FunctionParams, TTokens extends TokenSchema = TokenSchema> = {
|
|
61
68
|
[MIXIN_BRAND]: true;
|
|
62
69
|
name: string;
|
|
63
70
|
description?: string;
|
|
64
71
|
body: ArborMixinBody;
|
|
65
|
-
declarations: ArborMixinDeclaration[];
|
|
66
72
|
definition: string;
|
|
67
|
-
|
|
68
|
-
|
|
73
|
+
/**
|
|
74
|
+
* Computes the mixin's body based on provided parameters. This
|
|
75
|
+
* can be used to compose mixins together, by applying one mixin from
|
|
76
|
+
* an extended preset "into" another mixin you define by spreading the
|
|
77
|
+
* result of this method.
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* const baseMixin = createMixin('base', {
|
|
81
|
+
* parameters: ['--color'] as const,
|
|
82
|
+
* definition: (colorParam) => ({
|
|
83
|
+
* color: colorParam,
|
|
84
|
+
* padding: '8px',
|
|
85
|
+
* }),
|
|
86
|
+
* });
|
|
87
|
+
*
|
|
88
|
+
* const extendedMixin = createMixin('extended', {
|
|
89
|
+
* definition: (css, { parameters }, { mixins }) => [
|
|
90
|
+
* ...mixins.base.apply('red'),
|
|
91
|
+
* {
|
|
92
|
+
* background: 'black',
|
|
93
|
+
* },
|
|
94
|
+
* ],
|
|
95
|
+
* });
|
|
96
|
+
*/
|
|
97
|
+
apply: (params: ParamsAsCallInputs<TParams>) => MixinBodyList;
|
|
69
98
|
parameters: TParams;
|
|
99
|
+
parameterTokens: Token[];
|
|
70
100
|
contributeTokens: TTokens;
|
|
101
|
+
/**
|
|
102
|
+
* A printed representation of the mixin call signature, for use in
|
|
103
|
+
* documentation and error messages
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* --mx-shadow(--default-ring-color <color>)
|
|
107
|
+
*/
|
|
108
|
+
signature: string;
|
|
71
109
|
};
|
|
72
|
-
export type PresetMixins = Record<string, ArborMixin
|
|
73
|
-
export declare function isMixin(value: unknown): value is ArborMixin
|
|
110
|
+
export type PresetMixins = Record<string, ArborMixin<any>>;
|
|
111
|
+
export declare function isMixin(value: unknown): value is ArborMixin<any>;
|
|
74
112
|
export type MixinTokens<TMixins extends PresetMixins> = {
|
|
75
113
|
[K in keyof TMixins]: TMixins[K] extends ArborMixin<any, infer TTokens> ? TTokens : never;
|
|
76
114
|
};
|
package/dist/mixins.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mixins.d.ts","sourceRoot":"","sources":["../src/mixins.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EAEjB,GAAG,EACH,KAAK,QAAQ,EAGb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEN,WAAW,EAEX,8BAA8B,EAC9B,iBAAiB,EACjB,WAAW,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,
|
|
1
|
+
{"version":3,"file":"mixins.d.ts","sourceRoot":"","sources":["../src/mixins.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EAEjB,GAAG,EACH,KAAK,QAAQ,EAGb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEN,WAAW,EAEX,8BAA8B,EAC9B,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEN,cAAc,EAEd,kBAAkB,EAElB,sBAAsB,EAEtB,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,yBAAyB,UAAU,CAAC;AAEjD,QAAA,MAAM,WAAW,cAAc,CAAC;AAEhC,MAAM,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,qBAAqB,GAAG,eAAe,CAAC;AAC1E,MAAM,MAAM,cAAc,GAAG,mBAAmB,EAAE,CAAC;AAEnD,KAAK,UAAU,GAAG,iBAAiB,GAAG,QAAQ,CAAC;AAC/C,KAAK,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACxD,KAAK,eAAe,GAAG,MAAM,CAC5B,MAAM,EACN,UAAU,GAAG,qBAAqB,GAAG,aAAa,CAClD,CAAC;AACF,MAAM,MAAM,iBAAiB,GAC1B;IACA,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;CACjB,GACD;IACA,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,eAAe,GAAG,aAAa,CAAC;CACzC,GACD,eAAe,CAAC;AACnB,KAAK,aAAa,GAAG,SAAS,iBAAiB,EAAE,CAAC;AAElD,wBAAgB,0BAA0B,CACzC,KAAK,EAAE,mBAAmB,GACxB,KAAK,IAAI,qBAAqB,CAEhC;AAED,wBAAgB,YAAY,CAC3B,KAAK,EAAE,mBAAmB,GACxB,KAAK,IAAI,eAAe,CAE1B;AAYD,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,eAAe,GAAG,aAAa,GACnC,cAAc,CAwChB;AAkBD,MAAM,MAAM,oBAAoB,GAAG,eAAe,GAAG,aAAa,CAAC;AAEnE,MAAM,WAAW,qBAAqB,CACrC,OAAO,SAAS,cAAc,EAC9B,OAAO,SAAS,iBAAiB,GAAG,iBAAiB;IAErD,WAAW,CAAC,EACT,MAAM,GACN,CAAC,CAAC,IAAI,EAAE;QACR,UAAU,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC;KAC/C,KAAK,MAAM,CAAC,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,CACX,GAAG,EAAE,GAAG,EACR,MAAM,EAAE;QACP,UAAU,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC;KAChD,KACG,oBAAoB,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,WAAW,GAAG,CACzB,OAAO,SAAS,cAAc,EAC9B,OAAO,SAAS,iBAAiB,EAEjC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,KAC/C,UAAU,CAAC,OAAO,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC,CAAC;AAElE,wBAAgB,kBAAkB,CAAC,EAClC,UAAsC,EACtC,WAAW,GACX,EAAE;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;CACzB,IAIC,OAAO,SAAS,cAAc,EAC9B,OAAO,SAAS,iBAAiB,EAEjC,MAAM,MAAM,EACZ,mFAKG,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,KACxC,UAAU,CAAC,OAAO,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC,CAwD/D;AAED,MAAM,MAAM,UAAU,CACrB,OAAO,SAAS,cAAc,EAC9B,OAAO,SAAS,WAAW,GAAG,WAAW,IACtC;IACH,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,KAAK,EAAE,CAAC,MAAM,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,aAAa,CAAC;IAC9D,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,KAAK,EAAE,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B;;;;;;OAMG;IACH,SAAS,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAE3D,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,CAEhE;AAED,MAAM,MAAM,WAAW,CAAC,OAAO,SAAS,YAAY,IAAI;KACtD,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,MAAM,OAAO,CAAC,GACtE,OAAO,GACN,KAAK;CACP,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,OAAO,SAAS,YAAY,EAC9D,MAAM,EAAE,OAAO,GACb,WAAW,CAAC,OAAO,CAAC,CAWtB"}
|
package/dist/mixins.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import { css, isCalcEquation, printEquation, } from '@arbor-css/calc';
|
|
2
2
|
import { convertSimpleTokenSchema, isToken, } from '@arbor-css/tokens';
|
|
3
|
-
import { paramsAsInterpolations, paramsAsString, } from './common.js';
|
|
3
|
+
import { applyParameters, paramAsToken, paramsAsInterpolations, paramsAsString, } from './common.js';
|
|
4
4
|
export const DEFAULT_MIXIN_NAME_PREFIX = '--mx-';
|
|
5
5
|
const MIXIN_BRAND = '@@MIXIN@@';
|
|
6
|
+
export function isMixinPropertyDeclaration(entry) {
|
|
7
|
+
return 'prop' in entry;
|
|
8
|
+
}
|
|
9
|
+
export function isMixinScope(entry) {
|
|
10
|
+
return 'scope' in entry;
|
|
11
|
+
}
|
|
6
12
|
function toEquation(value) {
|
|
7
13
|
if (isCalcEquation(value)) {
|
|
8
14
|
return value;
|
|
@@ -11,20 +17,27 @@ function toEquation(value) {
|
|
|
11
17
|
${value}
|
|
12
18
|
`;
|
|
13
19
|
}
|
|
14
|
-
function
|
|
20
|
+
export function normalizeMixinBody(body) {
|
|
15
21
|
if (Array.isArray(body)) {
|
|
16
|
-
|
|
22
|
+
const collected = [];
|
|
23
|
+
body.forEach((item) => {
|
|
17
24
|
if ('scope' in item) {
|
|
18
|
-
|
|
25
|
+
collected.push({
|
|
19
26
|
scope: item.scope,
|
|
20
|
-
children:
|
|
21
|
-
};
|
|
27
|
+
children: normalizeMixinBody(item.children),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
else if ('prop' in item) {
|
|
31
|
+
collected.push({
|
|
32
|
+
prop: item.prop,
|
|
33
|
+
value: toEquation(item.value),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
collected.push(...normalizeMixinBody(item));
|
|
22
38
|
}
|
|
23
|
-
return {
|
|
24
|
-
prop: item.prop,
|
|
25
|
-
value: toEquation(item.value),
|
|
26
|
-
};
|
|
27
39
|
});
|
|
40
|
+
return collected;
|
|
28
41
|
}
|
|
29
42
|
return Object.entries(body).map(([propOrScope, value]) => {
|
|
30
43
|
if (typeof value === 'object' &&
|
|
@@ -33,7 +46,7 @@ function normalizeBody(body) {
|
|
|
33
46
|
!isToken(value)) {
|
|
34
47
|
return {
|
|
35
48
|
scope: propOrScope,
|
|
36
|
-
children:
|
|
49
|
+
children: normalizeMixinBody(value),
|
|
37
50
|
};
|
|
38
51
|
}
|
|
39
52
|
return {
|
|
@@ -42,24 +55,16 @@ function normalizeBody(body) {
|
|
|
42
55
|
};
|
|
43
56
|
});
|
|
44
57
|
}
|
|
45
|
-
function collectDeclarations(body) {
|
|
46
|
-
const declarations = [];
|
|
47
|
-
for (const entry of body) {
|
|
48
|
-
if ('prop' in entry) {
|
|
49
|
-
declarations.push(entry);
|
|
50
|
-
continue;
|
|
51
|
-
}
|
|
52
|
-
declarations.push(...collectDeclarations(entry.children));
|
|
53
|
-
}
|
|
54
|
-
return declarations;
|
|
55
|
-
}
|
|
56
58
|
function printBody(body) {
|
|
57
59
|
return body
|
|
58
60
|
.map((entry) => {
|
|
59
|
-
if (
|
|
61
|
+
if (isMixinPropertyDeclaration(entry)) {
|
|
60
62
|
return `${entry.prop}: ${printEquation(entry.value)};`;
|
|
61
63
|
}
|
|
62
|
-
|
|
64
|
+
if (isMixinScope(entry)) {
|
|
65
|
+
return `${entry.scope} { ${printBody(entry.children)} }`;
|
|
66
|
+
}
|
|
67
|
+
return '';
|
|
63
68
|
})
|
|
64
69
|
.join(' ');
|
|
65
70
|
}
|
|
@@ -70,34 +75,43 @@ export function createMixinFactory({ namePrefix = DEFAULT_MIXIN_NAME_PREFIX, cre
|
|
|
70
75
|
const contributeTokens = convertSimpleTokenSchema(contributeTokensInput, name, createToken, {
|
|
71
76
|
contributedBy: cssName,
|
|
72
77
|
});
|
|
73
|
-
const
|
|
74
|
-
parameters: paramsAsInterpolations(parameters),
|
|
78
|
+
const tokensAndParams = {
|
|
79
|
+
parameters: paramsAsInterpolations(parameters, name),
|
|
75
80
|
tokens: contributeTokens,
|
|
76
|
-
}
|
|
77
|
-
const
|
|
81
|
+
};
|
|
82
|
+
const body = normalizeMixinBody(definition(css, tokensAndParams));
|
|
78
83
|
const cssBody = printBody(body);
|
|
84
|
+
const parameterTokens = parameters.map((p) => paramAsToken(p, name));
|
|
79
85
|
return {
|
|
80
86
|
[MIXIN_BRAND]: true,
|
|
81
87
|
name: cssName,
|
|
82
|
-
description
|
|
88
|
+
description: typeof description === 'function' ?
|
|
89
|
+
description(tokensAndParams)
|
|
90
|
+
: description,
|
|
83
91
|
body,
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
})
|
|
92
|
+
definition: `@mixin ${cssName}${paramsAsString(parameters, {
|
|
93
|
+
nonce: name,
|
|
94
|
+
})} { ${cssBody} }`,
|
|
95
|
+
apply: (values) => {
|
|
96
|
+
// we "apply" a mixin within another mixin by assigning
|
|
97
|
+
// the provided parameters to properties matching their names,
|
|
98
|
+
// prepending that to this mixin's body statements, and
|
|
99
|
+
// returning it all.
|
|
100
|
+
const parameterDeclarations = [];
|
|
101
|
+
applyParameters(parameters, values, name, (name, value) => {
|
|
102
|
+
parameterDeclarations.push({
|
|
103
|
+
prop: name,
|
|
104
|
+
value,
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
return [...parameterDeclarations, ...body];
|
|
108
|
+
},
|
|
99
109
|
parameters,
|
|
110
|
+
parameterTokens,
|
|
100
111
|
contributeTokens,
|
|
112
|
+
signature: `${cssName}${paramsAsString(parameters, {
|
|
113
|
+
keepEmpty: false,
|
|
114
|
+
})}`,
|
|
101
115
|
};
|
|
102
116
|
};
|
|
103
117
|
}
|
package/dist/mixins.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mixins.js","sourceRoot":"","sources":["../src/mixins.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,GAAG,EAGH,cAAc,EACd,aAAa,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,wBAAwB,EAExB,OAAO,
|
|
1
|
+
{"version":3,"file":"mixins.js","sourceRoot":"","sources":["../src/mixins.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arbor-css/functions",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.104",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"vite": "^8.0.13"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@arbor-css/calc": "0.0.
|
|
30
|
-
"@arbor-css/tokens": "0.0.
|
|
29
|
+
"@arbor-css/calc": "0.0.104",
|
|
30
|
+
"@arbor-css/tokens": "0.0.104"
|
|
31
31
|
},
|
|
32
32
|
"scripts": {
|
|
33
33
|
"build": "tsc",
|