@arbor-css/postcss 0.0.59 → 0.0.62

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.
@@ -1 +1 @@
1
- {"version":3,"file":"colorSystemProps.d.ts","sourceRoot":"","sources":["../src/colorSystemProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC9B,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,MAAM,CAAC,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,uFAAuF;QACvF,KAAK,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,WAAW,GACjB,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAyChC"}
1
+ {"version":3,"file":"colorSystemProps.d.ts","sourceRoot":"","sources":["../src/colorSystemProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC9B,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,MAAM,CAAC,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,uFAAuF;QACvF,KAAK,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,WAAW,GACjB,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CA0ChC"}
@@ -3,44 +3,46 @@
3
3
  * Mirrors the behavior of the `classes` package color rules.
4
4
  */
5
5
  export function getColorPropEntries(preset) {
6
+ if (!preset.$?.system)
7
+ return {};
6
8
  const systemProps = preset.$.system;
7
9
  return {
8
10
  color: {
9
- applied: systemProps.fg.applied.name,
10
- final: systemProps.fg.$root.name,
11
- opacity: systemProps.fg.opacity.name,
11
+ applied: systemProps.ref.fg.applied.name,
12
+ final: systemProps.ref.fg.$root.name,
13
+ opacity: systemProps.ref.fg.opacity.name,
12
14
  },
13
15
  'background-color': {
14
- applied: systemProps.bg.applied.name,
15
- final: systemProps.bg.$root.name,
16
- opacity: systemProps.bg.opacity.name,
17
- extras: [{ prop: systemProps.bg.contrast.name, value: 'applied' }],
16
+ applied: systemProps.ref.bg.applied.name,
17
+ final: systemProps.ref.bg.$root.name,
18
+ opacity: systemProps.ref.bg.opacity.name,
19
+ extras: [{ prop: systemProps.ref.bg.contrast.name, value: 'applied' }],
18
20
  },
19
21
  background: {
20
- applied: systemProps.bg.applied.name,
21
- final: systemProps.bg.$root.name,
22
- opacity: systemProps.bg.opacity.name,
23
- extras: [{ prop: systemProps.bg.contrast.name, value: 'applied' }],
22
+ applied: systemProps.ref.bg.applied.name,
23
+ final: systemProps.ref.bg.$root.name,
24
+ opacity: systemProps.ref.bg.opacity.name,
25
+ extras: [{ prop: systemProps.ref.bg.contrast.name, value: 'applied' }],
24
26
  },
25
27
  'border-color': {
26
- applied: systemProps.borderColor[''].applied.name,
27
- final: systemProps.borderColor[''].$root.name,
28
- opacity: systemProps.borderColor[''].opacity.name,
28
+ applied: systemProps.ref.borderColor[''].applied.name,
29
+ final: systemProps.ref.borderColor[''].$root.name,
30
+ opacity: systemProps.ref.borderColor[''].opacity.name,
29
31
  },
30
32
  fill: {
31
- applied: systemProps.fill.applied.name,
32
- final: systemProps.fill.$root.name,
33
- opacity: systemProps.fill.opacity.name,
33
+ applied: systemProps.ref.fill.applied.name,
34
+ final: systemProps.ref.fill.$root.name,
35
+ opacity: systemProps.ref.fill.opacity.name,
34
36
  },
35
37
  stroke: {
36
- applied: systemProps.stroke.applied.name,
37
- final: systemProps.stroke.$root.name,
38
- opacity: systemProps.stroke.opacity.name,
38
+ applied: systemProps.ref.stroke.applied.name,
39
+ final: systemProps.ref.stroke.$root.name,
40
+ opacity: systemProps.ref.stroke.opacity.name,
39
41
  },
40
42
  'accent-color': {
41
- applied: systemProps.accent.applied.name,
42
- final: systemProps.accent.$root.name,
43
- opacity: systemProps.accent.opacity.name,
43
+ applied: systemProps.ref.accent.applied.name,
44
+ final: systemProps.ref.accent.$root.name,
45
+ opacity: systemProps.ref.accent.opacity.name,
44
46
  },
45
47
  };
46
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"colorSystemProps.js","sourceRoot":"","sources":["../src/colorSystemProps.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAClC,MAAmB;IAEnB,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO;QACN,KAAK,EAAE;YACN,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI;YACpC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI;YAChC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI;SACpC;QACD,kBAAkB,EAAE;YACnB,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI;YACpC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI;YAChC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI;YACpC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;SAClE;QACD,UAAU,EAAE;YACX,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI;YACpC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI;YAChC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI;YACpC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;SAClE;QACD,cAAc,EAAE;YACf,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI;YACjD,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI;YAC7C,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI;SACjD;QACD,IAAI,EAAE;YACL,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;YACtC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;YAClC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;SACtC;QACD,MAAM,EAAE;YACP,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;YACxC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;YACpC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;SACxC;QACD,cAAc,EAAE;YACf,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;YACxC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;YACpC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;SACxC;KACD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"colorSystemProps.js","sourceRoot":"","sources":["../src/colorSystemProps.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAClC,MAAmB;IAEnB,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO;QACN,KAAK,EAAE;YACN,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI;YACxC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI;YACpC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI;SACxC;QACD,kBAAkB,EAAE;YACnB,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI;YACxC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI;YACpC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI;YACxC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;SACtE;QACD,UAAU,EAAE;YACX,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI;YACxC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI;YACpC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI;YACxC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;SACtE;QACD,cAAc,EAAE;YACf,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI;YACrD,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI;YACjD,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI;SACrD;QACD,IAAI,EAAE;YACL,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;YAC1C,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;YACtC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;SAC1C;QACD,MAAM,EAAE;YACP,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;YAC5C,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;YACxC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;SAC5C;QACD,cAAc,EAAE;YACf,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;YAC5C,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;YACxC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;SAC5C;KACD,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAI1C,MAAM,WAAW,kBAAkB;IAClC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAUD,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CA+GpE;yBA/Ge,WAAW;;;AAmH3B,eAAO,MAAM,QAAQ,oBAAc,CAAC;AAEpC,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAI1C,MAAM,WAAW,kBAAkB;IAClC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAUD,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CA4NpE;yBA5Ne,WAAW;;;AAoO3B,eAAO,MAAM,QAAQ,oBAAc,CAAC;AAEpC,eAAe,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
+ import { printEquation } from '@arbor-css/calc';
1
2
  import { generateStylesheet } from '@arbor-css/core';
3
+ import { isFunction, isFunctionParamWithMeta, isMixin, } from '@arbor-css/functions';
2
4
  import { stat } from 'node:fs/promises';
3
5
  import postcss from 'postcss';
4
6
  import { getColorPropEntries } from './colorSystemProps.js';
@@ -29,11 +31,18 @@ export function ArborPlugin(options = {}) {
29
31
  }
30
32
  return null;
31
33
  }
32
- const currentStats = await stat(loaded.configPath);
34
+ let mtimeMs = 0;
35
+ try {
36
+ const currentStats = await stat(loaded.configPath);
37
+ mtimeMs = currentStats.mtimeMs;
38
+ }
39
+ catch {
40
+ // config path may be virtual (e.g. in tests); skip mtime caching
41
+ }
33
42
  cachedConfig = {
34
43
  configPath: loaded.configPath,
35
44
  preset: loaded.preset,
36
- mtimeMs: currentStats.mtimeMs,
45
+ mtimeMs,
37
46
  };
38
47
  return cachedConfig;
39
48
  }
@@ -54,7 +63,9 @@ export function ArborPlugin(options = {}) {
54
63
  root.walkComments((comment) => {
55
64
  if (comment.text.trim() === 'inline-arbor-base') {
56
65
  const generatedCss = generateStylesheet(config.preset);
57
- const generatedRoot = postcss.parse(generatedCss);
66
+ const generatedRoot = postcss.parse(generatedCss, {
67
+ from: config.configPath,
68
+ });
58
69
  comment.replaceWith(...generatedRoot.nodes);
59
70
  }
60
71
  });
@@ -64,9 +75,52 @@ export function ArborPlugin(options = {}) {
64
75
  if (!config) {
65
76
  return;
66
77
  }
78
+ const functionNamePrefix = config.preset.context.tokenPrefixes.functionNamePrefix;
79
+ // Inline custom function calls: --fn-name(arg1, arg2, ...)
80
+ if (decl.value.includes(functionNamePrefix)) {
81
+ const fnCallRegex = new RegExp(`(${escapeRegExp(functionNamePrefix)}[\\w-]+)\\(((?:[^()]|\\([^()]*\\))*)\\)`, 'g');
82
+ decl.value = decl.value.replace(fnCallRegex, (match, fnName, argsStr) => {
83
+ const fn = Object.values(config.preset.functions ?? {}).find((f) => isFunction(f) && f.name === fnName);
84
+ if (!fn) {
85
+ helper.result.warn(`[arbor-css] Unknown function: ${fnName}`, {
86
+ plugin: PLUGIN_NAME,
87
+ node: decl,
88
+ });
89
+ return match;
90
+ }
91
+ const args = argsStr
92
+ .split(',')
93
+ .map((a) => a.trim())
94
+ .filter(Boolean);
95
+ const paramValues = {};
96
+ let invalid = false;
97
+ fn.parameters.forEach((param, i) => {
98
+ const paramName = isFunctionParamWithMeta(param) ? param.name : param;
99
+ const required = !isFunctionParamWithMeta(param) || param.fallback === undefined;
100
+ if (i >= args.length && required) {
101
+ invalid = true;
102
+ helper.result.warn(`[arbor-css] Missing argument for parameter "${paramName}" in function call: ${match}`, {
103
+ plugin: PLUGIN_NAME,
104
+ node: decl,
105
+ });
106
+ return;
107
+ }
108
+ paramValues[paramName] = args[i] ?? '';
109
+ });
110
+ console.log(`[arbor-css] Inlining function call: ${match} with values`, paramValues);
111
+ if (invalid) {
112
+ return '/* Invalid function call */';
113
+ }
114
+ return fn.compute(paramValues);
115
+ });
116
+ }
67
117
  const colorPropEntries = getColorPropEntries(config.preset);
68
118
  const systemAssignmentEntry = colorPropEntries[decl.prop];
69
119
  if (systemAssignmentEntry) {
120
+ // Make sure we haven't already processed this assignment
121
+ if (decl.value.toString().includes(`var(${systemAssignmentEntry.final})`)) {
122
+ return;
123
+ }
70
124
  // Inject system color props before this declaration
71
125
  decl.cloneBefore({
72
126
  prop: systemAssignmentEntry.applied,
@@ -96,8 +150,35 @@ export function ArborPlugin(options = {}) {
96
150
  decl.value = `var(${systemAssignmentEntry.final})`;
97
151
  }
98
152
  },
153
+ async AtRule(atRule, helper) {
154
+ if (atRule.name !== 'apply')
155
+ return;
156
+ const config = await getConfig(helper);
157
+ if (!config)
158
+ return;
159
+ const mixinName = atRule.params.trim();
160
+ const mixinNamePrefix = config.preset.context.tokenPrefixes.mixinNamePrefix;
161
+ if (!mixinName.startsWith(mixinNamePrefix))
162
+ return;
163
+ const mixin = Object.values(config.preset.mixins ?? {}).find((m) => isMixin(m) && m.name === mixinName);
164
+ if (!mixin) {
165
+ helper.result.warn(`[arbor-css] Unknown mixin: ${mixinName}`, {
166
+ plugin: PLUGIN_NAME,
167
+ node: atRule,
168
+ });
169
+ return;
170
+ }
171
+ const declarations = mixin.inline();
172
+ for (const decl of declarations) {
173
+ atRule.cloneBefore(postcss.decl({ prop: decl.prop, value: printEquation(decl.value) }));
174
+ }
175
+ atRule.remove();
176
+ },
99
177
  };
100
178
  }
179
+ function escapeRegExp(s) {
180
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
181
+ }
101
182
  ArborPlugin.postcss = true;
102
183
  export const arborCss = ArborPlugin;
103
184
  export default ArborPlugin;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plugin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.test.d.ts","sourceRoot":"","sources":["../src/plugin.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,147 @@
1
+ import { createMixinFactory } from '@arbor-css/functions';
2
+ import { createTokenFactory } from '@arbor-css/tokens';
3
+ import postcss from 'postcss';
4
+ import { beforeEach, expect, it, vi } from 'vitest';
5
+ import { createFunctionFactory } from '../../functions/dist/functions.js';
6
+ import { ArborPlugin } from './index.js';
7
+ import * as loadConfigModule from './loadConfig.js';
8
+ // Mock loadConfig so tests don't need jiti file I/O
9
+ vi.mock('./loadConfig.js', () => ({
10
+ loadConfig: vi.fn(),
11
+ }));
12
+ const mockLoadConfig = vi.mocked(loadConfigModule.loadConfig);
13
+ beforeEach(() => {
14
+ mockLoadConfig.mockReset();
15
+ });
16
+ function makeConfigResult(preset) {
17
+ return {
18
+ configPath: '/fake/arbor.config.ts',
19
+ preset: {
20
+ context: {
21
+ tokenPrefixes: {
22
+ modeTokenPrefix: '--m-',
23
+ primitiveTokenPrefix: '--p-',
24
+ metaTokenPrefix: '--_-',
25
+ refTokenPrefix: '--ref-',
26
+ functionNamePrefix: '--fn-',
27
+ mixinNamePrefix: '--mx-',
28
+ mixinTokenPrefix: '--mx-',
29
+ },
30
+ },
31
+ ...preset,
32
+ },
33
+ };
34
+ }
35
+ it('inlines @apply for an Arbor mixin', async () => {
36
+ const createToken = createTokenFactory({ tokenPrefix: '--mx-' });
37
+ const createMixin = createMixinFactory({ namePrefix: '--mx-', createToken });
38
+ const shadow = createMixin('shadow', {
39
+ description: 'Stacked shadow setup',
40
+ definition: (css) => [
41
+ {
42
+ prop: '--_-system-shadow',
43
+ value: css `
44
+ ${'0 0 0 0 transparent'}
45
+ `,
46
+ },
47
+ {
48
+ prop: '--_-system-ring',
49
+ value: css `
50
+ ${'0 0 0 0 transparent'}
51
+ `,
52
+ },
53
+ {
54
+ prop: 'box-shadow',
55
+ value: css `
56
+ ${'var(--_-system-ring), var(--_-system-shadow)'}
57
+ `,
58
+ },
59
+ ],
60
+ });
61
+ // Fake stat so cache check passes
62
+ mockLoadConfig.mockResolvedValue(makeConfigResult({ functions: {}, mixins: { shadow }, $: undefined }));
63
+ const plugin = ArborPlugin({ cwd: '/fake' });
64
+ const result = await postcss([plugin]).process(`.btn { @apply --mx-shadow; color: red; }`, { from: undefined });
65
+ const output = result.css;
66
+ expect(output).toContain('--_-system-shadow: 0 0 0 0 transparent');
67
+ expect(output).toContain('--_-system-ring: 0 0 0 0 transparent');
68
+ expect(output).toContain('box-shadow: var(--_-system-ring), var(--_-system-shadow)');
69
+ expect(output).not.toContain('@apply');
70
+ });
71
+ it('warns when @apply references an unknown mixin', async () => {
72
+ mockLoadConfig.mockResolvedValue(makeConfigResult({
73
+ context: {
74
+ tokenPrefixes: {
75
+ modeTokenPrefix: '--m-',
76
+ primitiveTokenPrefix: '--p-',
77
+ metaTokenPrefix: '--_-',
78
+ refTokenPrefix: '--ref-',
79
+ functionNamePrefix: '--fn-',
80
+ mixinNamePrefix: '--mx-',
81
+ mixinTokenPrefix: '--mx-',
82
+ },
83
+ },
84
+ functions: {},
85
+ mixins: {},
86
+ $: undefined,
87
+ }));
88
+ const plugin = ArborPlugin({ cwd: '/fake' });
89
+ const result = await postcss([plugin]).process(`.btn { @apply --mx-unknown; }`, { from: undefined });
90
+ const warnings = result.messages
91
+ .filter((m) => m.type === 'warning')
92
+ .map((m) => m.text);
93
+ expect(warnings.some((w) => w.includes('--mx-unknown'))).toBe(true);
94
+ // The unresolved @apply should remain in the output
95
+ expect(result.css).toContain('@apply --mx-unknown');
96
+ });
97
+ it('does not touch @apply rules without the Arbor mixin prefix', async () => {
98
+ mockLoadConfig.mockResolvedValue(makeConfigResult({
99
+ context: {
100
+ tokenPrefixes: {
101
+ modeTokenPrefix: '--m-',
102
+ primitiveTokenPrefix: '--p-',
103
+ metaTokenPrefix: '--_-',
104
+ refTokenPrefix: '--ref-',
105
+ functionNamePrefix: '--fn-',
106
+ mixinNamePrefix: '--mx-',
107
+ mixinTokenPrefix: '--mx-',
108
+ },
109
+ },
110
+ functions: {},
111
+ mixins: {},
112
+ $: undefined,
113
+ }));
114
+ const plugin = ArborPlugin({ cwd: '/fake' });
115
+ const result = await postcss([plugin]).process(`.btn { @apply some-tailwind-class; }`, { from: undefined });
116
+ expect(result.css).toContain('@apply some-tailwind-class');
117
+ });
118
+ it('inlines function calls in declaration values', async () => {
119
+ const createFunction = createFunctionFactory({ namePrefix: '--fn-' });
120
+ const double = createFunction('double', {
121
+ description: 'Doubles a number',
122
+ parameters: ['--value'],
123
+ definition: ($, value) => $ `${value}`,
124
+ });
125
+ mockLoadConfig.mockResolvedValue(makeConfigResult({
126
+ context: {
127
+ tokenPrefixes: {
128
+ modeTokenPrefix: '--m-',
129
+ primitiveTokenPrefix: '--p-',
130
+ metaTokenPrefix: '--_-',
131
+ refTokenPrefix: '--ref-',
132
+ functionNamePrefix: '--fn-',
133
+ mixinNamePrefix: '--mx-',
134
+ mixinTokenPrefix: '--mx-',
135
+ },
136
+ },
137
+ functions: { double },
138
+ mixins: {},
139
+ $: undefined,
140
+ }));
141
+ const plugin = ArborPlugin({ cwd: '/fake' });
142
+ const result = await postcss([plugin]).process(`.btn { font-size: --fn-double(4); }`, { from: undefined });
143
+ // The function call should be replaced with the computed value
144
+ expect(result.css).not.toContain('--fn-double(');
145
+ expect(result.css).toContain('4');
146
+ });
147
+ //# sourceMappingURL=plugin.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.test.js","sourceRoot":"","sources":["../src/plugin.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arbor-css/postcss",
3
- "version": "0.0.59",
3
+ "version": "0.0.62",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -23,9 +23,11 @@
23
23
  "dependencies": {
24
24
  "jiti": "^2.4.2",
25
25
  "postcss": "^8.5.4",
26
- "@arbor-css/tokens": "0.0.59",
27
- "@arbor-css/globals": "0.0.59",
28
- "@arbor-css/core": "0.0.59"
26
+ "@arbor-css/calc": "0.0.62",
27
+ "@arbor-css/core": "0.0.62",
28
+ "@arbor-css/functions": "0.0.62",
29
+ "@arbor-css/tokens": "0.0.62",
30
+ "@arbor-css/globals": "0.0.62"
29
31
  },
30
32
  "devDependencies": {
31
33
  "typescript": "^6.0.3",
@@ -1,20 +0,0 @@
1
- import { ArborPreset } from '@arbor-css/core';
2
- import { type Token } from '@arbor-css/tokens';
3
- export interface TokenMapEntry {
4
- /** The CSS var() expression, e.g. `var(--$-color-main-mid)` */
5
- cssVar: string;
6
- /** Raw CSS custom property name, e.g. `--$-color-main-mid` */
7
- name: string;
8
- /** Token purpose (color, spacing, etc.) */
9
- purpose: Token['purpose'];
10
- }
11
- /** Flat map from dot-path string to token info */
12
- export type TokenMap = Map<string, TokenMapEntry>;
13
- /**
14
- * Builds a flat Map<dotPath, TokenMapEntry> from a preset.
15
- *
16
- * Mode tokens are registered under their plain path (e.g. "color.main.mid").
17
- * Primitive tokens are registered under "primitives.x.y" (e.g. "primitives.spacing.md").
18
- */
19
- export declare function buildTokenMap(preset: ArborPreset<any, any>): TokenMap;
20
- //# sourceMappingURL=tokenMap.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokenMap.d.ts","sourceRoot":"","sources":["../src/tokenMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,EAAsB,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAW,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC7B,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;CAC1B;AAED,kDAAkD;AAClD,MAAM,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,QAAQ,CA+BrE"}
package/dist/tokenMap.js DELETED
@@ -1,58 +0,0 @@
1
- import { $systemProps, flattenToPropsList } from '@arbor-css/core';
2
- import { isToken } from '@arbor-css/tokens';
3
- /**
4
- * Builds a flat Map<dotPath, TokenMapEntry> from a preset.
5
- *
6
- * Mode tokens are registered under their plain path (e.g. "color.main.mid").
7
- * Primitive tokens are registered under "primitives.x.y" (e.g. "primitives.spacing.md").
8
- */
9
- export function buildTokenMap(preset) {
10
- const map = new Map();
11
- // Mode tokens from base mode schema
12
- const modeTokens = preset?.modes?.base?.schema?.$tokens;
13
- if (modeTokens) {
14
- walkTokenTree(modeTokens, '', map);
15
- }
16
- // Primitive tokens — prefix with "primitives."
17
- const primitiveTokens = preset?.primitives?.$tokens;
18
- if (primitiveTokens) {
19
- walkTokenTree(primitiveTokens, 'primitives', map);
20
- }
21
- // System tokens from $systemProps - "final" tokens are also made available
22
- // for cross-property references: e.g. "$.system.color.fg" references the "final"
23
- // token for the foreground color, and can be used to set the value of another
24
- // property like border-color.
25
- const systemFinalProps = flattenToPropsList($systemProps).filter((prop) => prop.name.endsWith('final'));
26
- for (const prop of systemFinalProps) {
27
- map.set(`system.${prop.name}`, {
28
- cssVar: prop.var,
29
- name: prop.name,
30
- purpose: prop.purpose,
31
- });
32
- }
33
- return map;
34
- }
35
- function walkTokenTree(node, prefix, map) {
36
- if (typeof node !== 'object' || node === null)
37
- return;
38
- for (const key of Object.keys(node)) {
39
- const value = node[key];
40
- const currentPath = prefix ? `${prefix}.${key}` : key;
41
- if (isToken(value)) {
42
- const entry = {
43
- cssVar: value.var,
44
- name: value.name,
45
- purpose: value.purpose,
46
- };
47
- map.set(currentPath, entry);
48
- // $root tokens are also accessible at the parent path (without the .$root segment)
49
- if (key === '$root' && prefix) {
50
- map.set(prefix, entry);
51
- }
52
- }
53
- else if (typeof value === 'object' && value !== null) {
54
- walkTokenTree(value, currentPath, map);
55
- }
56
- }
57
- }
58
- //# sourceMappingURL=tokenMap.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokenMap.js","sourceRoot":"","sources":["../src/tokenMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,OAAO,EAAc,MAAM,mBAAmB,CAAC;AAcxD;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAA6B;IAC1D,MAAM,GAAG,GAAa,IAAI,GAAG,EAAE,CAAC;IAEhC,oCAAoC;IACpC,MAAM,UAAU,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;IACxD,IAAI,UAAU,EAAE,CAAC;QAChB,aAAa,CAAC,UAAU,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,+CAA+C;IAC/C,MAAM,eAAe,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC;IACpD,IAAI,eAAe,EAAE,CAAC;QACrB,aAAa,CAAC,eAAe,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,2EAA2E;IAC3E,iFAAiF;IACjF,8EAA8E;IAC9E,8BAA8B;IAC9B,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACzE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC3B,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;QACrC,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,EAAE,IAAI,CAAC,GAAG;YAChB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,SAAS,aAAa,CAAC,IAAS,EAAE,MAAc,EAAE,GAAa;IAC9D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO;IAEtD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAEtD,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,KAAK,GAAkB;gBAC5B,MAAM,EAAE,KAAK,CAAC,GAAG;gBACjB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;aACtB,CAAC;YACF,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAE5B,mFAAmF;YACnF,IAAI,GAAG,KAAK,OAAO,IAAI,MAAM,EAAE,CAAC;gBAC/B,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;QACF,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACxD,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;QACxC,CAAC;IACF,CAAC;AACF,CAAC"}
@@ -1,15 +0,0 @@
1
- import { AnyArborPreset } from '@arbor-css/core';
2
- /**
3
- * Transforms CSS source by:
4
- * 1. Replacing `@import 'arbor:css'` with the generated Arbor stylesheet.
5
- * 2. For color-related properties, injecting Arbor system prop declarations
6
- * (mirroring the behavior of the `classes` package utility rules).
7
- *
8
- * @param cssSource - Raw CSS source string
9
- * @param preset - Loaded Arbor preset for `@import 'arbor:css'` expansion
10
- */
11
- export declare function transform(cssSource: string, preset: AnyArborPreset): TransformResult;
12
- export interface TransformResult {
13
- css: string;
14
- }
15
- //# sourceMappingURL=transform.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAsB,MAAM,iBAAiB,CAAC;AAMrE;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,GACpB,eAAe,CAoDjB;AAED,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;CACZ"}
package/dist/transform.js DELETED
@@ -1,64 +0,0 @@
1
- import { generateStylesheet } from '@arbor-css/core';
2
- import postcss from 'postcss';
3
- import { getColorPropEntries } from './colorSystemProps.js';
4
- const ARBOR_IMPORT_RE = /^['"]arbor:css['"]$/;
5
- /**
6
- * Transforms CSS source by:
7
- * 1. Replacing `@import 'arbor:css'` with the generated Arbor stylesheet.
8
- * 2. For color-related properties, injecting Arbor system prop declarations
9
- * (mirroring the behavior of the `classes` package utility rules).
10
- *
11
- * @param cssSource - Raw CSS source string
12
- * @param preset - Loaded Arbor preset for `@import 'arbor:css'` expansion
13
- */
14
- export function transform(cssSource, preset) {
15
- const root = postcss.parse(cssSource);
16
- const colorPropEntries = getColorPropEntries(preset);
17
- // Replace @import 'arbor:css' with the full generated stylesheet
18
- if (preset) {
19
- root.walkAtRules('import', (rule) => {
20
- if (!ARBOR_IMPORT_RE.test(rule.params.trim()))
21
- return;
22
- const generated = generateStylesheet(preset);
23
- const generatedRoot = postcss.parse(generated);
24
- rule.replaceWith(...generatedRoot.nodes);
25
- });
26
- }
27
- // inject color system prop assignments to matching css properties
28
- root.walkDecls((decl) => {
29
- const systemAssignmentEntry = colorPropEntries[decl.prop];
30
- if (systemAssignmentEntry) {
31
- // Inject system color props before this declaration
32
- decl.cloneBefore({
33
- prop: systemAssignmentEntry.applied,
34
- value: decl.value,
35
- raws: {},
36
- });
37
- decl.cloneBefore({
38
- prop: systemAssignmentEntry.final,
39
- value: `var(${systemAssignmentEntry.applied})`,
40
- raws: {},
41
- });
42
- decl.cloneBefore({
43
- prop: systemAssignmentEntry.opacity,
44
- value: '1',
45
- raws: {},
46
- });
47
- for (const extra of systemAssignmentEntry.extras ?? []) {
48
- decl.cloneBefore({
49
- prop: extra.prop,
50
- value: extra.value === 'applied' ?
51
- `var(${systemAssignmentEntry.applied})`
52
- : extra.value,
53
- raws: {},
54
- });
55
- }
56
- // Point the actual CSS property at the system final var for runtime flexibility
57
- decl.value = `var(${systemAssignmentEntry.final})`;
58
- }
59
- });
60
- return {
61
- css: root.toResult().css,
62
- };
63
- }
64
- //# sourceMappingURL=transform.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CACxB,SAAiB,EACjB,MAAsB;IAEtB,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAErD,iEAAiE;IACjE,IAAI,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;YACnC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAAE,OAAO;YACtD,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAa,CAAC,CAAC;YACpD,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,CAAC,WAAW,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;QACvB,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,qBAAqB,EAAE,CAAC;YAC3B,oDAAoD;YACpD,IAAI,CAAC,WAAW,CAAC;gBAChB,IAAI,EAAE,qBAAqB,CAAC,OAAO;gBACnC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,EAAE;aACR,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,CAAC;gBAChB,IAAI,EAAE,qBAAqB,CAAC,KAAK;gBACjC,KAAK,EAAE,OAAO,qBAAqB,CAAC,OAAO,GAAG;gBAC9C,IAAI,EAAE,EAAE;aACR,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,CAAC;gBAChB,IAAI,EAAE,qBAAqB,CAAC,OAAO;gBACnC,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,EAAE;aACR,CAAC,CAAC;YACH,KAAK,MAAM,KAAK,IAAI,qBAAqB,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;gBACxD,IAAI,CAAC,WAAW,CAAC;oBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,KAAK,EACJ,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;wBAC1B,OAAO,qBAAqB,CAAC,OAAO,GAAG;wBACxC,CAAC,CAAC,KAAK,CAAC,KAAK;oBACd,IAAI,EAAE,EAAE;iBACR,CAAC,CAAC;YACJ,CAAC;YACD,gFAAgF;YAChF,IAAI,CAAC,KAAK,GAAG,OAAO,qBAAqB,CAAC,KAAK,GAAG,CAAC;QACpD,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,OAAO;QACN,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG;KACxB,CAAC;AACH,CAAC"}