@plumeria/utils 19.14.4 → 20.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/compile.js CHANGED
@@ -43,6 +43,7 @@ const rs = __importStar(require("@rust-gear/glob"));
43
43
  const index_1 = require("./index");
44
44
  const index_2 = require("./index");
45
45
  const dynamicKey_1 = require("./dynamicKey");
46
+ const varType_1 = require("./varType");
46
47
  const unwrapExport = (node) => {
47
48
  if (node?.type === 'ExportDeclaration')
48
49
  return node.declaration;
@@ -126,6 +127,8 @@ const isStaticArgValue = (node) => node.type === 'StringLiteral' ||
126
127
  const dynamicTablesOf = (ctx) => ({
127
128
  keyframesHashTable: ctx.mergedKeyframesTable,
128
129
  viewTransitionHashTable: ctx.mergedViewTransitionTable,
130
+ varTypeHashTable: ctx.mergedVarTypeTable,
131
+ positionTryHashTable: ctx.mergedPositionTryTable,
129
132
  createThemeHashTable: ctx.mergedCreateThemeHashTable,
130
133
  createThemeObjectTable: ctx.scannedTables.createThemeObjectTable,
131
134
  createHashTable: ctx.mergedCreateTable,
@@ -345,6 +348,8 @@ function compileCSS(options) {
345
348
  const importMap = {};
346
349
  const keyframesImportMap = {};
347
350
  const viewTransitionImportMap = {};
351
+ const varTypeImportMap = {};
352
+ const positionTryImportMap = {};
348
353
  const createImportMap = {};
349
354
  const createFunctionImportMap = {};
350
355
  const createThemeImportMap = {};
@@ -406,6 +411,12 @@ function compileCSS(options) {
406
411
  if (scannedTables.viewTransitionHashTable[uniqueKey])
407
412
  viewTransitionImportMap[localName] =
408
413
  scannedTables.viewTransitionHashTable[uniqueKey];
414
+ if (scannedTables.varTypeHashTable?.[uniqueKey])
415
+ varTypeImportMap[localName] =
416
+ scannedTables.varTypeHashTable[uniqueKey];
417
+ if (scannedTables.positionTryHashTable?.[uniqueKey])
418
+ positionTryImportMap[localName] =
419
+ scannedTables.positionTryHashTable[uniqueKey];
409
420
  if (scannedTables.createHashTable[uniqueKey])
410
421
  createImportMap[localName] =
411
422
  scannedTables.createHashTable[uniqueKey];
@@ -446,6 +457,25 @@ function compileCSS(options) {
446
457
  for (const key of Object.keys(viewTransitionImportMap)) {
447
458
  mergedViewTransitionTable[key] = viewTransitionImportMap[key];
448
459
  }
460
+ const varTypeHashTable = scannedTables.varTypeHashTable ?? {};
461
+ const mergedVarTypeTable = Object.create(varTypeHashTable);
462
+ for (const key of (0, index_1.fileTableKeys)(resourcePath, 'varTypeHashTable') ?? []) {
463
+ mergedVarTypeTable[key.slice(resourcePath.length + 1)] =
464
+ varTypeHashTable[key];
465
+ }
466
+ for (const key of Object.keys(varTypeImportMap)) {
467
+ mergedVarTypeTable[key] = varTypeImportMap[key];
468
+ }
469
+ const positionTryHashTable = scannedTables.positionTryHashTable ?? {};
470
+ const mergedPositionTryTable = Object.create(positionTryHashTable);
471
+ for (const key of (0, index_1.fileTableKeys)(resourcePath, 'positionTryHashTable') ??
472
+ []) {
473
+ mergedPositionTryTable[key.slice(resourcePath.length + 1)] =
474
+ positionTryHashTable[key];
475
+ }
476
+ for (const key of Object.keys(positionTryImportMap)) {
477
+ mergedPositionTryTable[key] = positionTryImportMap[key];
478
+ }
449
479
  const mergedCreateThemeHashTable = Object.create(scannedTables.createThemeHashTable);
450
480
  for (const key of (0, index_1.fileTableKeys)(resourcePath, 'createThemeHashTable') ??
451
481
  []) {
@@ -477,6 +507,8 @@ function compileCSS(options) {
477
507
  mergedStaticTable,
478
508
  mergedKeyframesTable,
479
509
  mergedViewTransitionTable,
510
+ mergedVarTypeTable,
511
+ mergedPositionTryTable,
480
512
  mergedCreateThemeHashTable,
481
513
  mergedCreateStaticHashTable,
482
514
  mergedCreateTable,
@@ -601,7 +633,7 @@ function compileCSS(options) {
601
633
  return merged;
602
634
  }
603
635
  if (index_1.t.isObjectExpression(expr)) {
604
- return (0, index_1.objectExpressionToObject)(expr, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
636
+ return (0, index_1.objectExpressionToObject)(expr, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable, ctx.mergedPositionTryTable);
605
637
  }
606
638
  else if (index_1.t.isMemberExpression(expr) &&
607
639
  index_1.t.isIdentifier(expr.object) &&
@@ -715,7 +747,7 @@ function compileCSS(options) {
715
747
  properties: argExpr.properties.filter((prop) => prop.type === 'Identifier' ||
716
748
  (prop.type === 'KeyValueProperty' &&
717
749
  isStaticArgValue(prop.value))),
718
- }, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
750
+ }, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable, ctx.mergedPositionTryTable);
719
751
  if (func.named) {
720
752
  const argExpr = callArgs[0]?.expression;
721
753
  if (callArgs.length > 1 ||
@@ -973,7 +1005,7 @@ function compileCSS(options) {
973
1005
  propName = originalName;
974
1006
  }
975
1007
  if (propName) {
976
- if (['create', 'createTheme', 'createStatic'].includes(propName) &&
1008
+ if (['create', 'createTheme', 'createStatic', 'varType'].includes(propName) &&
977
1009
  !registeredStyleCalls.has(node.span.start)) {
978
1010
  throw new Error(`[plumeria] css.${propName} must be assigned to a named top-level variable. ` +
979
1011
  `Destructuring, assignment statements, and default-exported calls cannot be compiled. ` +
@@ -1003,14 +1035,14 @@ function compileCSS(options) {
1003
1035
  else if (propName === 'keyframes' &&
1004
1036
  args.length > 0 &&
1005
1037
  index_1.t.isObjectExpression(args[0].expression)) {
1006
- const obj = (0, index_1.objectExpressionToObject)(args[0].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
1038
+ const obj = (0, index_1.objectExpressionToObject)(args[0].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable, ctx.mergedPositionTryTable);
1007
1039
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
1008
1040
  writes.keyframesObjectTable[hash] = obj;
1009
1041
  }
1010
1042
  else if (propName === 'viewTransition' &&
1011
1043
  args.length > 0 &&
1012
1044
  index_1.t.isObjectExpression(args[0].expression)) {
1013
- const obj = (0, index_1.objectExpressionToObject)(args[0].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
1045
+ const obj = (0, index_1.objectExpressionToObject)(args[0].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable, ctx.mergedPositionTryTable);
1014
1046
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
1015
1047
  writes.viewTransitionObjectTable[hash] = obj;
1016
1048
  }
@@ -1025,9 +1057,9 @@ function compileCSS(options) {
1025
1057
  }
1026
1058
  if (selector.startsWith('@') && !(0, zss_engine_1.isAtRule)(selector)) {
1027
1059
  throw new Error(`[plumeria] Unsupported at-rule: "${selector}". createTheme only supports ` +
1028
- `nesting at-rules such as @media, @container, @supports, @layer, and @scope. (${path.basename(resourcePath)})`);
1060
+ `nesting at-rules such as @media, @container, and @supports. (${path.basename(resourcePath)})`);
1029
1061
  }
1030
- const obj = (0, index_1.objectExpressionToObject)(args[1].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
1062
+ const obj = (0, index_1.objectExpressionToObject)(args[1].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable, ctx.mergedPositionTryTable);
1031
1063
  const hash = (0, index_1.themeHashOf)(selector, obj);
1032
1064
  writes.createThemeObjectTable[hash] = obj;
1033
1065
  if (ctx.scannedTables.createThemeSelectorTable) {
@@ -1037,7 +1069,7 @@ function compileCSS(options) {
1037
1069
  else if (propName === 'createStatic' &&
1038
1070
  args.length > 0 &&
1039
1071
  index_1.t.isObjectExpression(args[0].expression)) {
1040
- const obj = (0, index_1.objectExpressionToObject)(args[0].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
1072
+ const obj = (0, index_1.objectExpressionToObject)(args[0].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable, ctx.mergedPositionTryTable);
1041
1073
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
1042
1074
  writes.createStaticObjectTable[hash] = obj;
1043
1075
  }
@@ -1088,7 +1120,7 @@ function compileCSS(options) {
1088
1120
  ? ctx.scannedTables.createAtomicMapTable[ctx.mergedCreateThemeHashTable[name]]
1089
1121
  : undefined);
1090
1122
  if (pName === 'create') {
1091
- const obj = (0, index_1.objectExpressionToObject)(arg, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, resolveVariable);
1123
+ const obj = (0, index_1.objectExpressionToObject)(arg, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, resolveVariable, ctx.mergedVarTypeTable, ctx.mergedPositionTryTable);
1092
1124
  if (obj) {
1093
1125
  const styleFunctions = (0, index_1.styleFunctionsOf)(arg);
1094
1126
  ctx.localCreateStyles[node.id.value] = {
@@ -1107,9 +1139,9 @@ function compileCSS(options) {
1107
1139
  }
1108
1140
  if (selector.startsWith('@') && !(0, zss_engine_1.isAtRule)(selector)) {
1109
1141
  throw new Error(`[plumeria] Unsupported at-rule: "${selector}". createTheme only supports ` +
1110
- `nesting at-rules such as @media, @container, @supports, @layer, and @scope. (${path.basename(resourcePath)})`);
1142
+ `nesting at-rules such as @media, @container, and @supports. (${path.basename(resourcePath)})`);
1111
1143
  }
1112
- const obj = (0, index_1.objectExpressionToObject)(arg, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
1144
+ const obj = (0, index_1.objectExpressionToObject)(arg, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable, ctx.mergedPositionTryTable);
1113
1145
  const hash = (0, index_1.themeHashOf)(selector, obj);
1114
1146
  const uKey = `${resourcePath}-${node.id.value}`;
1115
1147
  writes.createThemeHashTable[uKey] = hash;
@@ -1129,8 +1161,12 @@ function compileCSS(options) {
1129
1161
  obj: ctx.scannedTables.createAtomicMapTable[hash],
1130
1162
  };
1131
1163
  }
1164
+ else if (pName === 'varType') {
1165
+ const obj = (0, index_1.objectExpressionToObject)(arg, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable, ctx.mergedPositionTryTable);
1166
+ ctx.mergedVarTypeTable[node.id.value] = (0, varType_1.checkedVarTypeHash)(node.id.value, obj);
1167
+ }
1132
1168
  else if (pName === 'createStatic') {
1133
- const obj = (0, index_1.objectExpressionToObject)(arg, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
1169
+ const obj = (0, index_1.objectExpressionToObject)(arg, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable, ctx.mergedPositionTryTable);
1134
1170
  if (obj) {
1135
1171
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
1136
1172
  const uKey = `${resourcePath}-${node.id.value}`;
@@ -1,5 +1,5 @@
1
1
  import type { Expression, ObjectExpression } from '@swc/core';
2
- import type { CSSObject, StaticTable, KeyframesHashTable, ViewTransitionHashTable, CreateHashTable, CreateThemeHashTable, CreateThemeObjectTable, CreateStaticHashTable, CreateStaticObjectTable } from './types';
2
+ import type { CSSObject, StaticTable, KeyframesHashTable, ViewTransitionHashTable, VarTypeHashTable, PositionTryHashTable, CreateHashTable, CreateThemeHashTable, CreateThemeObjectTable, CreateStaticHashTable, CreateStaticObjectTable } from './types';
3
3
  export type NamedParam = {
4
4
  key: string;
5
5
  local: string;
@@ -29,6 +29,8 @@ export declare const applyVarFallback: (style: CSSObject, cssVar: string, litera
29
29
  export type DynamicStyleTables = {
30
30
  keyframesHashTable: KeyframesHashTable;
31
31
  viewTransitionHashTable: ViewTransitionHashTable;
32
+ varTypeHashTable?: VarTypeHashTable;
33
+ positionTryHashTable?: PositionTryHashTable;
32
34
  createThemeHashTable: CreateThemeHashTable;
33
35
  createThemeObjectTable: CreateThemeObjectTable;
34
36
  createHashTable: CreateHashTable;
@@ -381,7 +381,7 @@ const resolveDynamicStyle = (func, runtimeParams, staticTable, tables, providedP
381
381
  value: expr,
382
382
  },
383
383
  ],
384
- }, table, tables.keyframesHashTable, tables.viewTransitionHashTable, tables.createThemeHashTable, tables.createThemeObjectTable, tables.createHashTable, tables.createStaticHashTable, tables.createStaticObjectTable).value;
384
+ }, table, tables.keyframesHashTable, tables.viewTransitionHashTable, tables.createThemeHashTable, tables.createThemeObjectTable, tables.createHashTable, tables.createStaticHashTable, tables.createStaticObjectTable, undefined, tables.varTypeHashTable, tables.positionTryHashTable).value;
385
385
  const withDefault = Object.entries(func.defaults ?? {}).filter(([param]) => providedParams
386
386
  ? !providedParams.has(param)
387
387
  : tempStaticTable[param] === undefined);
@@ -424,7 +424,7 @@ const resolveDynamicStyle = (func, runtimeParams, staticTable, tables, providedP
424
424
  return undefined;
425
425
  }
426
426
  });
427
- const resolveBody = () => (0, parser_1.objectExpressionToObject)(body, tempStaticTable, tables.keyframesHashTable, tables.viewTransitionHashTable, tables.createThemeHashTable, tables.createThemeObjectTable, tables.createHashTable, tables.createStaticHashTable, tables.createStaticObjectTable);
427
+ const resolveBody = () => (0, parser_1.objectExpressionToObject)(body, tempStaticTable, tables.keyframesHashTable, tables.viewTransitionHashTable, tables.createThemeHashTable, tables.createThemeObjectTable, tables.createHashTable, tables.createStaticHashTable, tables.createStaticObjectTable, undefined, tables.varTypeHashTable, tables.positionTryHashTable);
428
428
  const varNames = [...varParams, ...derived.map(({ name }) => name)];
429
429
  if (varNames.length > 0) {
430
430
  varNames.forEach((name) => (tempStaticTable[name] = name));
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type { CSSObject, StaticTable, KeyframesHashTable, ViewTransitionHashTable, CreateHashTable, CreateFunctionTable, CreateThemeHashTable, CreateStaticHashTable, } from './types';
1
+ export type { CSSObject, StaticTable, KeyframesHashTable, ViewTransitionHashTable, VarTypeHashTable, PositionTryHashTable, CreateHashTable, CreateFunctionTable, CreateThemeHashTable, CreateStaticHashTable, } from './types';
2
2
  export { objectExpressionToObject, collectLocalConsts, traverse, t, getRootIdentifier, resolveOriginError, unwrapExpression, extractOndemandStyles, appendSheet, deepMerge, scanAll, scanOverlay, fileTableKeys, resolveFileError, getFileDependencies, resolveExport, resolveComponentKey, resolveThemeSelector, } from './parser';
3
3
  export { resolveExportValue } from './constValue';
4
4
  export type { StyleRecord } from './create';
package/dist/parser.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { CSSObject, Tables, StaticTable, KeyframesHashTable, ViewTransitionHashTable, CreateHashTable, CreateThemeHashTable, CreateThemeObjectTable, CreateStaticHashTable, CreateStaticObjectTable, SheetSink } from './types';
1
+ import type { CSSObject, Tables, StaticTable, KeyframesHashTable, ViewTransitionHashTable, VarTypeHashTable, PositionTryHashTable, CreateHashTable, CreateThemeHashTable, CreateThemeObjectTable, CreateStaticHashTable, CreateStaticObjectTable, SheetSink } from './types';
2
2
  import type { Module, Expression, CallExpression, Identifier, KeyValueProperty, StringLiteral, NumericLiteral, BooleanLiteral, ObjectExpression, MemberExpression, TemplateLiteral, BinaryExpression, UnaryExpression, ParenthesisExpression, VariableDeclaration, VariableDeclarator, ExportDeclaration, ConditionalExpression, JSXExpression, ArrowFunctionExpression, FunctionExpression } from '@swc/core';
3
3
  export declare function unwrapExpression(node: any): any;
4
4
  export declare const getRootIdentifier: (node: Expression) => string | null;
@@ -43,7 +43,7 @@ export declare function traverse(node: Module | JSXExpression, visitor: {
43
43
  stop: () => void;
44
44
  }) => void;
45
45
  }): void;
46
- export declare function objectExpressionToObject(node: ObjectExpression, staticTable: StaticTable, keyframesHashTable: KeyframesHashTable, viewTransitionHashTable: ViewTransitionHashTable, createThemeHashTable: CreateThemeHashTable, createThemeObjectTable: CreateThemeObjectTable, createHashTable: CreateHashTable, createStaticHashTable: CreateStaticHashTable, createStaticObjectTable: CreateStaticObjectTable, resolveVariable?: (name: string) => any): CSSObject;
46
+ export declare function objectExpressionToObject(node: ObjectExpression, staticTable: StaticTable, keyframesHashTable: KeyframesHashTable, viewTransitionHashTable: ViewTransitionHashTable, createThemeHashTable: CreateThemeHashTable, createThemeObjectTable: CreateThemeObjectTable, createHashTable: CreateHashTable, createStaticHashTable: CreateStaticHashTable, createStaticObjectTable: CreateStaticObjectTable, resolveVariable?: (name: string) => any, varTypeHashTable?: VarTypeHashTable, positionTryHashTable?: PositionTryHashTable): CSSObject;
47
47
  export declare function collectLocalConstNodes(ast: Module): Map<string, any>;
48
48
  export declare function collectLocalConsts(ast: Module): Record<string, any>;
49
49
  export declare function readsParams(node: any, params: Set<string>): boolean;
package/dist/parser.js CHANGED
@@ -61,6 +61,8 @@ const fs = __importStar(require("fs"));
61
61
  const rs = __importStar(require("@rust-gear/glob"));
62
62
  const zss_engine_1 = require("zss-engine");
63
63
  const viewTransition_1 = require("./viewTransition");
64
+ const varType_1 = require("./varType");
65
+ const positionTry_1 = require("./positionTry");
64
66
  const constants_1 = require("./constants");
65
67
  const stylePropFilter_1 = require("./stylePropFilter");
66
68
  const create_1 = require("./create");
@@ -274,12 +276,12 @@ function traverse(node, visitor) {
274
276
  }
275
277
  walk(node);
276
278
  }
277
- function objectExpressionToObject(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createHashTable, createStaticHashTable, createStaticObjectTable, resolveVariable) {
279
+ function objectExpressionToObject(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createHashTable, createStaticHashTable, createStaticObjectTable, resolveVariable, varTypeHashTable = {}, positionTryHashTable = {}) {
278
280
  const obj = Object.create(null);
279
281
  node.properties.forEach((prop) => {
280
282
  if (prop.type === 'SpreadElement') {
281
283
  const arg = prop.arguments;
282
- const spreadVal = evaluateExpression(arg, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
284
+ const spreadVal = evaluateExpression(arg, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
283
285
  if (typeof spreadVal === 'object' && spreadVal !== null) {
284
286
  Object.assign(obj, spreadVal);
285
287
  }
@@ -301,7 +303,7 @@ function objectExpressionToObject(node, staticTable, keyframesHashTable, viewTra
301
303
  }
302
304
  if (!exports.t.isObjectProperty(prop))
303
305
  return;
304
- const rawKey = getPropertyKey(prop.key, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
306
+ const rawKey = getPropertyKey(prop.key, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
305
307
  if (!rawKey)
306
308
  return;
307
309
  const key = typeof rawKey === 'string' ? (0, zss_engine_1.stripSelectorComments)(rawKey) : rawKey;
@@ -340,6 +342,15 @@ function objectExpressionToObject(node, staticTable, keyframesHashTable, viewTra
340
342
  obj[key] = 'vt-' + resolvedViewTransitioin;
341
343
  return;
342
344
  }
345
+ if (exports.t.isIdentifier(val) && varTypeHashTable[val.value] !== undefined) {
346
+ obj[key] = '--pr-' + varTypeHashTable[val.value];
347
+ return;
348
+ }
349
+ if (exports.t.isIdentifier(val) &&
350
+ positionTryHashTable[val.value] !== undefined) {
351
+ obj[key] = '--pt-' + positionTryHashTable[val.value];
352
+ return;
353
+ }
343
354
  const resolvedCreate = resolveCreateTableMemberExpression(val, createHashTable);
344
355
  if (resolvedCreate !== undefined) {
345
356
  obj[key] = 'cr-' + resolvedCreate;
@@ -362,13 +373,13 @@ function objectExpressionToObject(node, staticTable, keyframesHashTable, viewTra
362
373
  obj[key] = val.value;
363
374
  }
364
375
  else if (exports.t.isUnaryExpression(val)) {
365
- obj[key] = evaluateExpression(val, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
376
+ obj[key] = evaluateExpression(val, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
366
377
  }
367
378
  else if (exports.t.isObjectExpression(val)) {
368
- obj[key] = objectExpressionToObject(val, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createHashTable, createStaticHashTable, createStaticObjectTable, resolveVariable);
379
+ obj[key] = objectExpressionToObject(val, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createHashTable, createStaticHashTable, createStaticObjectTable, resolveVariable, varTypeHashTable, positionTryHashTable);
369
380
  }
370
381
  else if (exports.t.isBinaryExpression(val) || exports.t.isTemplateLiteral(val)) {
371
- obj[key] = evaluateExpression(val, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
382
+ obj[key] = evaluateExpression(val, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
372
383
  }
373
384
  else if (exports.t.isMemberExpression(val)) {
374
385
  const resolved = resolveStaticTableMemberExpression(val, staticTable);
@@ -439,7 +450,7 @@ function collectLocalConsts(ast) {
439
450
  else if (exports.t.isBinaryExpression(init) ||
440
451
  exports.t.isTemplateLiteral(init) ||
441
452
  exports.t.isUnaryExpression(init)) {
442
- result = evaluateExpression(init, localConsts, {}, {}, {}, {}, {}, {});
453
+ result = evaluateExpression(init, localConsts, {}, {}, {}, {}, {}, {}, {}, {});
443
454
  }
444
455
  }
445
456
  catch (e) {
@@ -670,7 +681,7 @@ function inlineOuterScope(objExpression, resolveProperty) {
670
681
  });
671
682
  return changed ? { ...objExpression, properties } : objExpression;
672
683
  }
673
- function getPropertyKey(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
684
+ function getPropertyKey(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
674
685
  if (exports.t.isIdentifier(node)) {
675
686
  return node.value;
676
687
  }
@@ -690,9 +701,15 @@ function getPropertyKey(node, staticTable, keyframesHashTable, viewTransitionHas
690
701
  typeof staticTable[expr.value] === 'string') {
691
702
  return staticTable[expr.value];
692
703
  }
704
+ if (varTypeHashTable[expr.value] !== undefined) {
705
+ return '--pr-' + varTypeHashTable[expr.value];
706
+ }
707
+ if (positionTryHashTable[expr.value] !== undefined) {
708
+ return '--pt-' + positionTryHashTable[expr.value];
709
+ }
693
710
  }
694
711
  if (exports.t.isCallExpression(expr)) {
695
- const result = evaluateExpression(expr, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
712
+ const result = evaluateExpression(expr, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
696
713
  if (typeof result === 'string')
697
714
  return result;
698
715
  }
@@ -708,28 +725,28 @@ function getPropertyKey(node, staticTable, keyframesHashTable, viewTransitionHas
708
725
  return themeResult;
709
726
  }
710
727
  if (exports.t.isTemplateLiteral(expr)) {
711
- return evaluateTemplateLiteral(expr, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
728
+ return evaluateTemplateLiteral(expr, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
712
729
  }
713
730
  if (exports.t.isBinaryExpression(expr)) {
714
- return evaluateBinaryExpression(expr, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
731
+ return evaluateBinaryExpression(expr, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
715
732
  }
716
733
  return '';
717
734
  }
718
735
  if (exports.t.isTemplateLiteral(node)) {
719
- return evaluateTemplateLiteral(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
736
+ return evaluateTemplateLiteral(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
720
737
  }
721
738
  if (exports.t.isBinaryExpression(node)) {
722
- return evaluateBinaryExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
739
+ return evaluateBinaryExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
723
740
  }
724
741
  return '';
725
742
  }
726
- function evaluateTemplateLiteral(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
743
+ function evaluateTemplateLiteral(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
727
744
  let result = '';
728
745
  for (let i = 0; i < node.quasis.length; i++) {
729
746
  result += node.quasis[i].cooked || node.quasis[i].raw;
730
747
  if (i < node.expressions.length) {
731
748
  const expr = node.expressions[i];
732
- const evaluatedExpr = evaluateExpression(expr, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
749
+ const evaluatedExpr = evaluateExpression(expr, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
733
750
  if (evaluatedExpr === null || typeof evaluatedExpr === 'object')
734
751
  throw new Error(`[plumeria] Template value cannot be resolved to a primitive: ${(0, exports.expressionLabel)(expr)} inside \${} must resolve to a string or number at build time.`);
735
752
  result += String(evaluatedExpr);
@@ -737,15 +754,15 @@ function evaluateTemplateLiteral(node, staticTable, keyframesHashTable, viewTran
737
754
  }
738
755
  return result;
739
756
  }
740
- function evaluateBinaryExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
741
- const left = evaluateExpression(node.left, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
757
+ function evaluateBinaryExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
758
+ const left = evaluateExpression(node.left, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
742
759
  if (node.operator === '&&' && !left)
743
760
  return left;
744
761
  if (node.operator === '||' && left)
745
762
  return left;
746
763
  if (node.operator === '??' && left !== null)
747
764
  return left;
748
- const right = evaluateExpression(node.right, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
765
+ const right = evaluateExpression(node.right, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
749
766
  if (['&&', '||', '??'].includes(node.operator))
750
767
  return right;
751
768
  if (typeof left === 'number' && typeof right === 'number') {
@@ -815,8 +832,8 @@ function evaluateCallExpression(node, staticTable) {
815
832
  if (method === 'marker') {
816
833
  const args = node.arguments;
817
834
  if (args.length >= 2) {
818
- const id = evaluateExpression(args[0].expression, staticTable, {}, {}, {}, {}, {}, {});
819
- const pseudo = evaluateExpression(args[1].expression, staticTable, {}, {}, {}, {}, {}, {});
835
+ const id = evaluateExpression(args[0].expression, staticTable, {}, {}, {}, {}, {}, {}, {}, {});
836
+ const pseudo = evaluateExpression(args[1].expression, staticTable, {}, {}, {}, {}, {}, {}, {}, {});
820
837
  if (typeof id === 'string' && typeof pseudo === 'string') {
821
838
  const varName = getMarkerVar(id, pseudo);
822
839
  return {
@@ -830,8 +847,8 @@ function evaluateCallExpression(node, staticTable) {
830
847
  if (method === 'extended') {
831
848
  const args = node.arguments;
832
849
  if (args.length >= 2) {
833
- const id = evaluateExpression(args[0].expression, staticTable, {}, {}, {}, {}, {}, {});
834
- const pseudo = evaluateExpression(args[1].expression, staticTable, {}, {}, {}, {}, {}, {});
850
+ const id = evaluateExpression(args[0].expression, staticTable, {}, {}, {}, {}, {}, {}, {}, {});
851
+ const pseudo = evaluateExpression(args[1].expression, staticTable, {}, {}, {}, {}, {}, {}, {}, {});
835
852
  if (typeof id === 'string' && typeof pseudo === 'string') {
836
853
  const varName = getMarkerVar(id, pseudo);
837
854
  return `@container style(${varName}: 1)`;
@@ -840,7 +857,7 @@ function evaluateCallExpression(node, staticTable) {
840
857
  }
841
858
  return null;
842
859
  }
843
- function evaluateExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
860
+ function evaluateExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
844
861
  node = unwrapExpression(node);
845
862
  if (exports.t.isCallExpression(node)) {
846
863
  return evaluateCallExpression(node, staticTable);
@@ -867,6 +884,12 @@ function evaluateExpression(node, staticTable, keyframesHashTable, viewTransitio
867
884
  if (viewTransitionHashTable[node.value] !== undefined) {
868
885
  return 'vt-' + viewTransitionHashTable[node.value];
869
886
  }
887
+ if (varTypeHashTable[node.value] !== undefined) {
888
+ return '--pr-' + varTypeHashTable[node.value];
889
+ }
890
+ if (positionTryHashTable[node.value] !== undefined) {
891
+ return '--pt-' + positionTryHashTable[node.value];
892
+ }
870
893
  if (createStaticHashTable[node.value] !== undefined) {
871
894
  const hash = createStaticHashTable[node.value];
872
895
  if (createStaticObjectTable[hash] !== undefined) {
@@ -891,13 +914,13 @@ function evaluateExpression(node, staticTable, keyframesHashTable, viewTransitio
891
914
  throw new Error(`[plumeria] Cannot resolve static member expression: ${(0, exports.expressionLabel)(node)}. Its object must be a const or a value created by css.createStatic or css.createTheme.`);
892
915
  }
893
916
  if (exports.t.isBinaryExpression(node)) {
894
- return evaluateBinaryExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
917
+ return evaluateBinaryExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
895
918
  }
896
919
  if (exports.t.isTemplateLiteral(node)) {
897
- return evaluateTemplateLiteral(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
920
+ return evaluateTemplateLiteral(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
898
921
  }
899
922
  if (exports.t.isUnaryExpression(node)) {
900
- const value = evaluateExpression(node.argument, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
923
+ const value = evaluateExpression(node.argument, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
901
924
  if (node.operator === '!')
902
925
  return !value;
903
926
  if (typeof value === 'number') {
@@ -911,7 +934,7 @@ function evaluateExpression(node, staticTable, keyframesHashTable, viewTransitio
911
934
  throw new Error(`[plumeria] Unsupported unary operand for ${node.operator}: ${(0, exports.expressionLabel)(node.argument)} must resolve to a number at build time.`);
912
935
  }
913
936
  if (exports.t.isParenthesisExpression(node)) {
914
- return evaluateExpression(node.expression, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
937
+ return evaluateExpression(node.expression, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, positionTryHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
915
938
  }
916
939
  throw new Error(`[plumeria] Unsupported expression type: ${(0, exports.expressionLabel)(node)}. Style values must be literals, consts, or arithmetic and template expressions of them.`);
917
940
  }
@@ -1023,7 +1046,7 @@ function resolveCreateStaticTableMemberExpression(node, createStaticHashTable, c
1023
1046
  }
1024
1047
  function resolveThemeSelector(node, staticTable, createStaticHashTable, createStaticObjectTable) {
1025
1048
  try {
1026
- const value = evaluateExpression(node, staticTable, {}, {}, {}, {}, createStaticHashTable, createStaticObjectTable);
1049
+ const value = evaluateExpression(node, staticTable, {}, {}, {}, {}, {}, {}, createStaticHashTable, createStaticObjectTable);
1027
1050
  return typeof value === 'string' ? value : '';
1028
1051
  }
1029
1052
  catch {
@@ -1074,7 +1097,11 @@ const globalAgregatedTables = {
1074
1097
  keyframesHashTable: {},
1075
1098
  keyframesObjectTable: {},
1076
1099
  viewTransitionHashTable: {},
1100
+ varTypeHashTable: {},
1101
+ positionTryHashTable: {},
1077
1102
  viewTransitionObjectTable: {},
1103
+ varTypeObjectTable: {},
1104
+ positionTryObjectTable: {},
1078
1105
  createThemeObjectTable: {},
1079
1106
  createThemeSelectorTable: {},
1080
1107
  createHashTable: {},
@@ -1098,6 +1125,8 @@ const detachedTables = new Set([
1098
1125
  'staticTable',
1099
1126
  'keyframesHashTable',
1100
1127
  'viewTransitionHashTable',
1128
+ 'varTypeHashTable',
1129
+ 'positionTryHashTable',
1101
1130
  'createHashTable',
1102
1131
  'createObjectTable',
1103
1132
  'createFunctionTable',
@@ -1433,6 +1462,8 @@ function runScan(scanCwd, styleProp) {
1433
1462
  keyframesHashTable: {},
1434
1463
  keyframesObjectTable: {},
1435
1464
  viewTransitionHashTable: {},
1465
+ varTypeHashTable: {},
1466
+ positionTryHashTable: {},
1436
1467
  viewTransitionObjectTable: {},
1437
1468
  createThemeHashTable: {},
1438
1469
  createThemeSelectorTable: {},
@@ -1492,7 +1523,11 @@ function runScan(scanCwd, styleProp) {
1492
1523
  const localKeyframesHashTable = {};
1493
1524
  const localKeyframesObjectTable = {};
1494
1525
  const localViewTransitionHashTable = {};
1526
+ const localVarTypeHashTable = {};
1495
1527
  const localViewTransitionObjectTable = {};
1528
+ const localVarTypeObjectTable = {};
1529
+ const localPositionTryHashTable = {};
1530
+ const localPositionTryObjectTable = {};
1496
1531
  const localCreateThemeObjectTable = {};
1497
1532
  const localCreateThemeSelectorTable = {};
1498
1533
  const localCreateHashTable = {};
@@ -1578,6 +1613,22 @@ function runScan(scanCwd, styleProp) {
1578
1613
  localTables.keyframesObjectTable[hash];
1579
1614
  }
1580
1615
  }
1616
+ if (localTables.varTypeHashTable?.[uniqueKey]) {
1617
+ const hash = localTables.varTypeHashTable[uniqueKey];
1618
+ localVarTypeHashTable[localName] = hash;
1619
+ if (localTables.varTypeObjectTable?.[hash]) {
1620
+ localVarTypeObjectTable[hash] =
1621
+ localTables.varTypeObjectTable[hash];
1622
+ }
1623
+ }
1624
+ if (localTables.positionTryHashTable?.[uniqueKey]) {
1625
+ const hash = localTables.positionTryHashTable[uniqueKey];
1626
+ localPositionTryHashTable[localName] = hash;
1627
+ if (localTables.positionTryObjectTable?.[hash]) {
1628
+ localPositionTryObjectTable[hash] =
1629
+ localTables.positionTryObjectTable[hash];
1630
+ }
1631
+ }
1581
1632
  if (localTables.viewTransitionHashTable[uniqueKey]) {
1582
1633
  const hash = localTables.viewTransitionHashTable[uniqueKey];
1583
1634
  localViewTransitionHashTable[localName] = hash;
@@ -1681,6 +1732,8 @@ function runScan(scanCwd, styleProp) {
1681
1732
  'createStatic',
1682
1733
  'keyframes',
1683
1734
  'viewTransition',
1735
+ 'positionTry',
1736
+ 'varType',
1684
1737
  ].includes(method)) {
1685
1738
  const argument = decl.init.arguments[method === 'createTheme' ? 1 : 0];
1686
1739
  if (argument)
@@ -1710,13 +1763,15 @@ function runScan(scanCwd, styleProp) {
1710
1763
  const isPassOneMethod = method === 'createStatic' ||
1711
1764
  method === 'createTheme' ||
1712
1765
  method === 'keyframes' ||
1713
- method === 'viewTransition';
1766
+ method === 'viewTransition' ||
1767
+ method === 'positionTry' ||
1768
+ method === 'varType';
1714
1769
  if (isFirstPass && !isPassOneMethod)
1715
1770
  continue;
1716
1771
  const objExpression = isCreateTheme
1717
1772
  ? init.arguments[1].expression
1718
1773
  : init.arguments[0].expression;
1719
- const obj = objectExpressionToObject(objExpression, scopedStaticTable, localKeyframesHashTable, localViewTransitionHashTable, localCreateThemeHashTable, localCreateThemeObjectTable, localCreateHashTable, localCreateStaticHashTable, localCreateStaticObjectTable, resolveVariable);
1774
+ const obj = objectExpressionToObject(objExpression, scopedStaticTable, localKeyframesHashTable, localViewTransitionHashTable, localCreateThemeHashTable, localCreateThemeObjectTable, localCreateHashTable, localCreateStaticHashTable, localCreateStaticObjectTable, resolveVariable, localVarTypeHashTable, localPositionTryHashTable);
1720
1775
  const uniqueKey = `${filePath}-${name}`;
1721
1776
  if (method === 'createStatic') {
1722
1777
  localStaticTable[name] = obj;
@@ -1739,6 +1794,24 @@ function runScan(scanCwd, styleProp) {
1739
1794
  localKeyframesObjectTable[hash] = obj;
1740
1795
  registerObjectOwner('keyframesObjectTable', hash, filePath);
1741
1796
  }
1797
+ else if (method === 'varType') {
1798
+ const hash = (0, varType_1.checkedVarTypeHash)(name, obj);
1799
+ localVarTypeHashTable[name] = hash;
1800
+ localTables.varTypeHashTable[uniqueKey] = hash;
1801
+ registerFileKey('varTypeHashTable', uniqueKey, filePath);
1802
+ (localTables.varTypeObjectTable ??= {})[hash] = obj;
1803
+ localVarTypeObjectTable[hash] = obj;
1804
+ registerObjectOwner('varTypeObjectTable', hash, filePath);
1805
+ }
1806
+ else if (method === 'positionTry') {
1807
+ const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
1808
+ localPositionTryHashTable[name] = hash;
1809
+ localTables.positionTryHashTable[uniqueKey] = hash;
1810
+ registerFileKey('positionTryHashTable', uniqueKey, filePath);
1811
+ (localTables.positionTryObjectTable ??= {})[hash] = obj;
1812
+ localPositionTryObjectTable[hash] = obj;
1813
+ registerObjectOwner('positionTryObjectTable', hash, filePath);
1814
+ }
1742
1815
  else if (method === 'viewTransition') {
1743
1816
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
1744
1817
  localViewTransitionHashTable[name] = hash;
@@ -1788,7 +1861,7 @@ function runScan(scanCwd, styleProp) {
1788
1861
  inlineOuterScope(objExpression, (property) => objectExpressionToObject({
1789
1862
  ...objExpression,
1790
1863
  properties: [property],
1791
- }, scopedStaticTable, localKeyframesHashTable, localViewTransitionHashTable, localCreateThemeHashTable, localCreateThemeObjectTable, localCreateHashTable, localCreateStaticHashTable, localCreateStaticObjectTable, resolveVariable));
1864
+ }, scopedStaticTable, localKeyframesHashTable, localViewTransitionHashTable, localCreateThemeHashTable, localCreateThemeObjectTable, localCreateHashTable, localCreateStaticHashTable, localCreateStaticObjectTable, resolveVariable, localVarTypeHashTable, localPositionTryHashTable));
1792
1865
  registerFileKey('createFunctionTable', uniqueKey, filePath);
1793
1866
  }
1794
1867
  const hashMap = {};
@@ -1817,7 +1890,11 @@ function runScan(scanCwd, styleProp) {
1817
1890
  localKeyframesHashTable,
1818
1891
  localKeyframesObjectTable,
1819
1892
  localViewTransitionHashTable,
1893
+ localVarTypeHashTable,
1894
+ localPositionTryHashTable,
1820
1895
  localViewTransitionObjectTable,
1896
+ localVarTypeObjectTable,
1897
+ localPositionTryObjectTable,
1821
1898
  localCreateThemeObjectTable,
1822
1899
  localCreateThemeSelectorTable,
1823
1900
  localCreateHashTable,
@@ -1837,7 +1914,7 @@ function runScan(scanCwd, styleProp) {
1837
1914
  for (const entry of jsxPhaseQueue) {
1838
1915
  try {
1839
1916
  delete fileErrors[entry.filePath];
1840
- const { filePath, ast, mtimeMs, localDependencies, localStaticTable, localKeyframesHashTable, localKeyframesObjectTable, localViewTransitionHashTable, localViewTransitionObjectTable, localCreateThemeObjectTable, localCreateThemeSelectorTable, localCreateHashTable, localCreateObjectTable, localCreateAtomicMapTable, localCreateThemeHashTable, localCreateStaticHashTable, localCreateStaticObjectTable, localImports, } = entry;
1917
+ const { filePath, ast, mtimeMs, localDependencies, localStaticTable, localKeyframesHashTable, localKeyframesObjectTable, localViewTransitionHashTable, localVarTypeHashTable, localPositionTryHashTable, localViewTransitionObjectTable, localVarTypeObjectTable, localPositionTryObjectTable, localCreateThemeObjectTable, localCreateThemeSelectorTable, localCreateHashTable, localCreateObjectTable, localCreateAtomicMapTable, localCreateThemeHashTable, localCreateStaticHashTable, localCreateStaticObjectTable, localImports, } = entry;
1841
1918
  const localCreateFunctionTable = {};
1842
1919
  for (const localName of Object.keys(localImports)) {
1843
1920
  const { actualPath, importedName } = localImports[localName];
@@ -1858,6 +1935,8 @@ function runScan(scanCwd, styleProp) {
1858
1935
  const dynamicStyleTables = {
1859
1936
  keyframesHashTable: localKeyframesHashTable,
1860
1937
  viewTransitionHashTable: localViewTransitionHashTable,
1938
+ varTypeHashTable: localVarTypeHashTable,
1939
+ positionTryHashTable: localPositionTryHashTable,
1861
1940
  createThemeHashTable: localCreateThemeHashTable,
1862
1941
  createThemeObjectTable: localTables.createThemeObjectTable,
1863
1942
  createHashTable: localCreateHashTable,
@@ -2273,7 +2352,11 @@ function runScan(scanCwd, styleProp) {
2273
2352
  keyframesHashTable: localKeyframesHashTable,
2274
2353
  keyframesObjectTable: localKeyframesObjectTable,
2275
2354
  viewTransitionHashTable: localViewTransitionHashTable,
2355
+ varTypeHashTable: localVarTypeHashTable,
2356
+ positionTryHashTable: localPositionTryHashTable,
2276
2357
  viewTransitionObjectTable: localViewTransitionObjectTable,
2358
+ varTypeObjectTable: localVarTypeObjectTable,
2359
+ positionTryObjectTable: localPositionTryObjectTable,
2277
2360
  createThemeHashTable: localCreateThemeHashTable,
2278
2361
  createThemeSelectorTable: localCreateThemeSelectorTable,
2279
2362
  createThemeObjectTable: localCreateThemeObjectTable,
@@ -2472,6 +2555,8 @@ function extractAndCacheExports(filePath, ast, mtimeMs) {
2472
2555
  keyframesHashTable: {},
2473
2556
  keyframesObjectTable: {},
2474
2557
  viewTransitionHashTable: {},
2558
+ varTypeHashTable: {},
2559
+ positionTryHashTable: {},
2475
2560
  viewTransitionObjectTable: {},
2476
2561
  createThemeHashTable: {},
2477
2562
  createThemeSelectorTable: {},
@@ -2548,7 +2633,7 @@ function resolveExport(filePath, exportName, visited = new Set()) {
2548
2633
  }
2549
2634
  return null;
2550
2635
  }
2551
- const REFERENCE_MARKER = /(kf|vt|cr)-([0-9a-z]+)/g;
2636
+ const REFERENCE_MARKER = /(kf|vt|pt|cr|pr)-([0-9a-z]+)/g;
2552
2637
  const CUSTOM_PROPERTY = /var\(\s*(--[^\s,)]+)/g;
2553
2638
  const appendSheet = (sheets) => {
2554
2639
  const existingSheets = new Set(sheets);
@@ -2566,16 +2651,35 @@ function extractOndemandStyles(obj, addSheet, t) {
2566
2651
  const visited = new Set();
2567
2652
  const keyframesHashes = new Set();
2568
2653
  const viewTransitionHashes = new Set();
2654
+ const positionTryHashes = new Set();
2655
+ const varTypeHashes = new Set();
2569
2656
  const createHashes = new Set();
2570
2657
  const usedVariables = new Set();
2658
+ function findVarTypes(text) {
2659
+ for (const [, kind, hash] of text.matchAll(REFERENCE_MARKER)) {
2660
+ if (kind === 'pr' && t.varTypeObjectTable?.[hash])
2661
+ varTypeHashes.add(hash);
2662
+ }
2663
+ }
2571
2664
  function walk(n) {
2572
2665
  if (!n || typeof n !== 'object' || visited.has(n))
2573
2666
  return;
2574
2667
  visited.add(n);
2668
+ for (const key of Object.keys(n)) {
2669
+ if (key.includes('pr-'))
2670
+ findVarTypes(key);
2671
+ }
2575
2672
  Object.values(n).forEach((val) => {
2576
2673
  if (typeof val === 'string') {
2577
- if (val.includes('kf-') || val.includes('vt-') || val.includes('cr-')) {
2674
+ if (val.includes('pr-'))
2675
+ findVarTypes(val);
2676
+ if (val.includes('kf-') ||
2677
+ val.includes('vt-') ||
2678
+ val.includes('pt-') ||
2679
+ val.includes('cr-')) {
2578
2680
  for (const [, kind, hash] of val.matchAll(REFERENCE_MARKER)) {
2681
+ if (kind === 'pr')
2682
+ continue;
2579
2683
  if (kind === 'kf') {
2580
2684
  if (!keyframesHashes.has(hash) && t.keyframesObjectTable[hash]) {
2581
2685
  keyframesHashes.add(hash);
@@ -2589,6 +2693,13 @@ function extractOndemandStyles(obj, addSheet, t) {
2589
2693
  walk(t.viewTransitionObjectTable[hash]);
2590
2694
  }
2591
2695
  }
2696
+ else if (kind === 'pt') {
2697
+ if (!positionTryHashes.has(hash) &&
2698
+ t.positionTryObjectTable?.[hash]) {
2699
+ positionTryHashes.add(hash);
2700
+ walk(t.positionTryObjectTable[hash]);
2701
+ }
2702
+ }
2592
2703
  else if (!createHashes.has(hash) && t.createObjectTable[hash]) {
2593
2704
  createHashes.add(hash);
2594
2705
  walk(t.createObjectTable[hash]);
@@ -2616,6 +2727,10 @@ function extractOndemandStyles(obj, addSheet, t) {
2616
2727
  }
2617
2728
  }
2618
2729
  }
2730
+ for (const hash of varTypeHashes) {
2731
+ const { styleSheet } = (0, zss_engine_1.transpile)((0, varType_1.createVarType)(t.varTypeObjectTable[hash], hash), undefined, '--global');
2732
+ addSheet(styleSheet);
2733
+ }
2619
2734
  if (viewTransitionHashes.size > 0) {
2620
2735
  for (const hash of viewTransitionHashes) {
2621
2736
  const obj = t.viewTransitionObjectTable[hash];
@@ -2625,6 +2740,10 @@ function extractOndemandStyles(obj, addSheet, t) {
2625
2740
  }
2626
2741
  }
2627
2742
  }
2743
+ for (const hash of positionTryHashes) {
2744
+ const { styleSheet } = (0, zss_engine_1.transpile)((0, positionTry_1.createPositionTry)(t.positionTryObjectTable[hash], hash), undefined, '--global');
2745
+ addSheet(styleSheet);
2746
+ }
2628
2747
  if (createHashes.size > 0) {
2629
2748
  for (const hash of createHashes) {
2630
2749
  const obj = t.createObjectTable[hash];
@@ -0,0 +1,4 @@
1
+ import type { CSSProperties } from 'zss-engine';
2
+ export declare const createPositionTry: (rule: CSSProperties, hash: string) => {
3
+ [x: string]: CSSProperties;
4
+ };
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createPositionTry = void 0;
4
+ const createPositionTry = (rule, hash) => ({
5
+ [`@position-try --pt-${hash}`]: rule,
6
+ });
7
+ exports.createPositionTry = createPositionTry;
@@ -37,7 +37,7 @@ exports.assertPropertyPolicy = exports.resolvePropertyPolicy = void 0;
37
37
  const path = __importStar(require("path"));
38
38
  const zss_engine_1 = require("zss-engine");
39
39
  const parser_1 = require("./parser");
40
- const STYLE_APIS = ['create', 'keyframes', 'viewTransition'];
40
+ const STYLE_APIS = ['create', 'keyframes', 'viewTransition', 'positionTry'];
41
41
  const MESSAGES = {
42
42
  physical: (name, counterpart) => `'${name}' is the physical name of this property. Write it as '${counterpart}', which follows the writing mode.`,
43
43
  logical: (name, counterpart) => `'${name}' is the logical name of this property. This project is written in physical properties; use '${counterpart}'.`,
@@ -137,6 +137,10 @@ const assertPropertyPolicy = (ast, policy, resourcePath) => {
137
137
  node.arguments.forEach(({ expression }) => {
138
138
  if (!parser_1.t.isObjectExpression(expression))
139
139
  return;
140
+ if (apiName === 'positionTry') {
141
+ check(expression);
142
+ return;
143
+ }
140
144
  expression.properties.forEach((prop) => {
141
145
  if (!parser_1.t.isObjectProperty(prop))
142
146
  return;
package/dist/transform.js CHANGED
@@ -39,6 +39,7 @@ const path = __importStar(require("path"));
39
39
  const zss_engine_1 = require("zss-engine");
40
40
  const parser_1 = require("./parser");
41
41
  const unresolvableValue_1 = require("./unresolvableValue");
42
+ const varType_1 = require("./varType");
42
43
  const spreadValues = (tables, constNodes, sourceOf) => {
43
44
  const spread = (prop) => {
44
45
  let values;
@@ -341,6 +342,8 @@ const transformSource = async (env) => {
341
342
  const importMap = {};
342
343
  const keyframesImportMap = {};
343
344
  const viewTransitionImportMap = {};
345
+ const varTypeImportMap = {};
346
+ const positionTryImportMap = {};
344
347
  const createImportMap = {};
345
348
  const createFunctionImportMap = {};
346
349
  const createThemeImportMap = {};
@@ -404,6 +407,14 @@ const transformSource = async (env) => {
404
407
  viewTransitionImportMap[localName] =
405
408
  scannedTables.viewTransitionHashTable[uniqueKey];
406
409
  }
410
+ if (scannedTables.varTypeHashTable?.[uniqueKey]) {
411
+ varTypeImportMap[localName] =
412
+ scannedTables.varTypeHashTable[uniqueKey];
413
+ }
414
+ if (scannedTables.positionTryHashTable?.[uniqueKey]) {
415
+ positionTryImportMap[localName] =
416
+ scannedTables.positionTryHashTable[uniqueKey];
417
+ }
407
418
  if (scannedTables.createHashTable[uniqueKey]) {
408
419
  createImportMap[localName] =
409
420
  scannedTables.createHashTable[uniqueKey];
@@ -447,6 +458,24 @@ const transformSource = async (env) => {
447
458
  for (const key of Object.keys(viewTransitionImportMap)) {
448
459
  mergedViewTransitionTable[key] = viewTransitionImportMap[key];
449
460
  }
461
+ const varTypeHashTable = scannedTables.varTypeHashTable ?? {};
462
+ const mergedVarTypeTable = Object.create(varTypeHashTable);
463
+ for (const key of (0, parser_1.fileTableKeys)(resourcePath, 'varTypeHashTable') ?? []) {
464
+ mergedVarTypeTable[key.slice(resourcePath.length + 1)] =
465
+ varTypeHashTable[key];
466
+ }
467
+ for (const key of Object.keys(varTypeImportMap)) {
468
+ mergedVarTypeTable[key] = varTypeImportMap[key];
469
+ }
470
+ const positionTryHashTable = scannedTables.positionTryHashTable ?? {};
471
+ const mergedPositionTryTable = Object.create(positionTryHashTable);
472
+ for (const key of (0, parser_1.fileTableKeys)(resourcePath, 'positionTryHashTable') ?? []) {
473
+ mergedPositionTryTable[key.slice(resourcePath.length + 1)] =
474
+ positionTryHashTable[key];
475
+ }
476
+ for (const key of Object.keys(positionTryImportMap)) {
477
+ mergedPositionTryTable[key] = positionTryImportMap[key];
478
+ }
450
479
  const mergedCreateTable = Object.create(scannedTables.createHashTable);
451
480
  for (const key of (0, parser_1.fileTableKeys)(resourcePath, 'createHashTable') ?? []) {
452
481
  mergedCreateTable[key.slice(resourcePath.length + 1)] =
@@ -475,6 +504,8 @@ const transformSource = async (env) => {
475
504
  const dynamicStyleTables = {
476
505
  keyframesHashTable: mergedKeyframesTable,
477
506
  viewTransitionHashTable: mergedViewTransitionTable,
507
+ varTypeHashTable: mergedVarTypeTable,
508
+ positionTryHashTable: mergedPositionTryTable,
478
509
  createThemeHashTable: mergedCreateThemeHashTable,
479
510
  createThemeObjectTable: scannedTables.createThemeObjectTable,
480
511
  createHashTable: mergedCreateTable,
@@ -595,11 +626,11 @@ const transformSource = async (env) => {
595
626
  }
596
627
  }
597
628
  if (propName && init && parser_1.t.isCallExpression(init)) {
598
- if (['create', 'createTheme', 'createStatic'].includes(propName) &&
629
+ if (['create', 'createTheme', 'createStatic', 'varType'].includes(propName) &&
599
630
  !topLevelDeclarators.has(node)) {
600
631
  throwCompilationError(`[plumeria] css.${propName} must be assigned to a top-level variable so its styles can be resolved across files. Move this declaration outside the function or block.`, node);
601
632
  }
602
- if (['create', 'createTheme', 'createStatic'].includes(propName)) {
633
+ if (['create', 'createTheme', 'createStatic', 'varType'].includes(propName)) {
603
634
  const argumentIndex = propName === 'createTheme' ? 1 : 0;
604
635
  const argument = init.arguments[argumentIndex];
605
636
  const object = argument && literalObjectArgument(argument.expression);
@@ -610,7 +641,7 @@ const transformSource = async (env) => {
610
641
  }
611
642
  if (propName === 'create' &&
612
643
  parser_1.t.isObjectExpression(init.arguments[0].expression)) {
613
- const obj = (0, parser_1.objectExpressionToObject)(init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
644
+ const obj = (0, parser_1.objectExpressionToObject)(init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
614
645
  (0, unresolvableValue_1.assertNoDroppedValues)(init.arguments[0].expression, obj, spreadValues([
615
646
  mergedStaticTable,
616
647
  mergedKeyframesTable,
@@ -620,6 +651,9 @@ const transformSource = async (env) => {
620
651
  mergedCreateTable,
621
652
  mergedCreateStaticHashTable,
622
653
  scannedTables.createStaticObjectTable,
654
+ undefined,
655
+ mergedVarTypeTable,
656
+ mergedPositionTryTable,
623
657
  ], localConstNodes, getSource));
624
658
  if (obj) {
625
659
  const hashMap = {};
@@ -668,9 +702,9 @@ const transformSource = async (env) => {
668
702
  `Pass a string literal such as ".dark", or a name this file declares as one.`, selectorExpr);
669
703
  }
670
704
  if (selector.startsWith('@') && !(0, zss_engine_1.isAtRule)(selector)) {
671
- throwCompilationError(`[plumeria] Unsupported at-rule: "${selector}". createTheme only supports nesting at-rules such as @media, @container, @supports, @layer, and @scope.`, selectorExpr);
705
+ throwCompilationError(`[plumeria] Unsupported at-rule: "${selector}". createTheme only supports nesting at-rules such as @media, @container, and @supports.`, selectorExpr);
672
706
  }
673
- const obj = (0, parser_1.objectExpressionToObject)(init.arguments[1].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
707
+ const obj = (0, parser_1.objectExpressionToObject)(init.arguments[1].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
674
708
  (0, unresolvableValue_1.assertNoDroppedValues)(init.arguments[1].expression, obj, spreadValues([
675
709
  mergedStaticTable,
676
710
  mergedKeyframesTable,
@@ -680,6 +714,9 @@ const transformSource = async (env) => {
680
714
  mergedCreateTable,
681
715
  mergedCreateStaticHashTable,
682
716
  scannedTables.createStaticObjectTable,
717
+ undefined,
718
+ mergedVarTypeTable,
719
+ mergedPositionTryTable,
683
720
  ], localConstNodes, getSource));
684
721
  const hash = (0, createTheme_1.themeHashOf)(selector, obj);
685
722
  if (parser_1.t.isIdentifier(node.id)) {
@@ -713,12 +750,45 @@ const transformSource = async (env) => {
713
750
  };
714
751
  }
715
752
  }
753
+ else if (propName === 'varType' &&
754
+ parser_1.t.isIdentifier(node.id) &&
755
+ parser_1.t.isObjectExpression(init.arguments[0].expression)) {
756
+ const expr = init.arguments[0].expression;
757
+ const obj = (0, parser_1.objectExpressionToObject)(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
758
+ (0, unresolvableValue_1.assertNoDroppedValues)(expr, obj, spreadValues([
759
+ mergedStaticTable,
760
+ mergedKeyframesTable,
761
+ mergedViewTransitionTable,
762
+ mergedCreateThemeHashTable,
763
+ scannedTables.createThemeObjectTable,
764
+ mergedCreateTable,
765
+ mergedCreateStaticHashTable,
766
+ scannedTables.createStaticObjectTable,
767
+ undefined,
768
+ mergedVarTypeTable,
769
+ mergedPositionTryTable,
770
+ ], localConstNodes, getSource));
771
+ let hash = '';
772
+ try {
773
+ hash = (0, varType_1.checkedVarTypeHash)(node.id.value, obj);
774
+ }
775
+ catch (error) {
776
+ throwCompilationError(error.message, init);
777
+ }
778
+ mergedVarTypeTable[node.id.value] = hash;
779
+ (scannedTables.varTypeObjectTable ??= {})[hash] = obj;
780
+ replacements.push({
781
+ start: init.span.start - baseByteOffset,
782
+ end: init.span.end - baseByteOffset,
783
+ content: JSON.stringify(`--pr-${hash}`),
784
+ });
785
+ }
716
786
  else if (propName === 'createStatic' &&
717
787
  parser_1.t.isObjectExpression(init.arguments[0].expression)) {
718
788
  if (parser_1.t.isIdentifier(node.id)) {
719
789
  idSpans.add(node.id.span.start);
720
790
  }
721
- const obj = (0, parser_1.objectExpressionToObject)(init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
791
+ const obj = (0, parser_1.objectExpressionToObject)(init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
722
792
  (0, unresolvableValue_1.assertNoDroppedValues)(init.arguments[0].expression, obj, spreadValues([
723
793
  mergedStaticTable,
724
794
  mergedKeyframesTable,
@@ -728,6 +798,9 @@ const transformSource = async (env) => {
728
798
  mergedCreateTable,
729
799
  mergedCreateStaticHashTable,
730
800
  scannedTables.createStaticObjectTable,
801
+ undefined,
802
+ mergedVarTypeTable,
803
+ mergedPositionTryTable,
731
804
  ], localConstNodes, getSource));
732
805
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
733
806
  if (parser_1.t.isIdentifier(node.id)) {
@@ -832,7 +905,7 @@ const transformSource = async (env) => {
832
905
  }
833
906
  }
834
907
  if (propName) {
835
- if (['create', 'createTheme', 'createStatic'].includes(propName) &&
908
+ if (['create', 'createTheme', 'createStatic', 'varType'].includes(propName) &&
836
909
  !registeredStyleCalls.has(node.span.start)) {
837
910
  throwCompilationError(`[plumeria] css.${propName} must be assigned to a named top-level variable. Destructuring, assignment statements, and default-exported calls cannot be compiled.`, node);
838
911
  }
@@ -840,7 +913,7 @@ const transformSource = async (env) => {
840
913
  if (propName === 'keyframes' && args.length > 0) {
841
914
  const expr = args[0].expression;
842
915
  if (parser_1.t.isObjectExpression(expr)) {
843
- const obj = (0, parser_1.objectExpressionToObject)(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
916
+ const obj = (0, parser_1.objectExpressionToObject)(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
844
917
  (0, unresolvableValue_1.assertNoDroppedValues)(expr, obj, spreadValues([
845
918
  mergedStaticTable,
846
919
  mergedKeyframesTable,
@@ -850,6 +923,9 @@ const transformSource = async (env) => {
850
923
  mergedCreateTable,
851
924
  mergedCreateStaticHashTable,
852
925
  scannedTables.createStaticObjectTable,
926
+ undefined,
927
+ mergedVarTypeTable,
928
+ mergedPositionTryTable,
853
929
  ], localConstNodes, getSource));
854
930
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
855
931
  scannedTables.keyframesObjectTable[hash] = obj;
@@ -863,7 +939,7 @@ const transformSource = async (env) => {
863
939
  else if (propName === 'viewTransition' &&
864
940
  args.length > 0 &&
865
941
  parser_1.t.isObjectExpression(args[0].expression)) {
866
- const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
942
+ const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
867
943
  (0, unresolvableValue_1.assertNoDroppedValues)(args[0].expression, obj, spreadValues([
868
944
  mergedStaticTable,
869
945
  mergedKeyframesTable,
@@ -873,6 +949,9 @@ const transformSource = async (env) => {
873
949
  mergedCreateTable,
874
950
  mergedCreateStaticHashTable,
875
951
  scannedTables.createStaticObjectTable,
952
+ undefined,
953
+ mergedVarTypeTable,
954
+ mergedPositionTryTable,
876
955
  ], localConstNodes, getSource));
877
956
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
878
957
  scannedTables.viewTransitionObjectTable[hash] = obj;
@@ -882,6 +961,31 @@ const transformSource = async (env) => {
882
961
  content: JSON.stringify(`vt-${hash}`),
883
962
  });
884
963
  }
964
+ else if (propName === 'positionTry' &&
965
+ args.length > 0 &&
966
+ parser_1.t.isObjectExpression(args[0].expression)) {
967
+ const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
968
+ (0, unresolvableValue_1.assertNoDroppedValues)(args[0].expression, obj, spreadValues([
969
+ mergedStaticTable,
970
+ mergedKeyframesTable,
971
+ mergedViewTransitionTable,
972
+ mergedCreateThemeHashTable,
973
+ scannedTables.createThemeObjectTable,
974
+ mergedCreateTable,
975
+ mergedCreateStaticHashTable,
976
+ scannedTables.createStaticObjectTable,
977
+ undefined,
978
+ mergedVarTypeTable,
979
+ mergedPositionTryTable,
980
+ ], localConstNodes, getSource));
981
+ const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
982
+ (scannedTables.positionTryObjectTable ??= {})[hash] = obj;
983
+ replacements.push({
984
+ start: node.span.start - baseByteOffset,
985
+ end: node.span.end - baseByteOffset,
986
+ content: JSON.stringify(`--pt-${hash}`),
987
+ });
988
+ }
885
989
  else if (propName === 'createTheme' &&
886
990
  args.length >= 2 &&
887
991
  parser_1.t.isObjectExpression(args[1].expression)) {
@@ -892,9 +996,9 @@ const transformSource = async (env) => {
892
996
  `Pass a string literal such as ".dark", or a name this file declares as one.`, selectorExpr);
893
997
  }
894
998
  if (selector.startsWith('@') && !(0, zss_engine_1.isAtRule)(selector)) {
895
- throwCompilationError(`[plumeria] Unsupported at-rule: "${selector}". createTheme only supports nesting at-rules such as @media, @container, @supports, @layer, and @scope.`, selectorExpr);
999
+ throwCompilationError(`[plumeria] Unsupported at-rule: "${selector}". createTheme only supports nesting at-rules such as @media, @container, and @supports.`, selectorExpr);
896
1000
  }
897
- const obj = (0, parser_1.objectExpressionToObject)(args[1].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
1001
+ const obj = (0, parser_1.objectExpressionToObject)(args[1].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
898
1002
  (0, unresolvableValue_1.assertNoDroppedValues)(args[1].expression, obj, spreadValues([
899
1003
  mergedStaticTable,
900
1004
  mergedKeyframesTable,
@@ -904,6 +1008,9 @@ const transformSource = async (env) => {
904
1008
  mergedCreateTable,
905
1009
  mergedCreateStaticHashTable,
906
1010
  scannedTables.createStaticObjectTable,
1011
+ undefined,
1012
+ mergedVarTypeTable,
1013
+ mergedPositionTryTable,
907
1014
  ], localConstNodes, getSource));
908
1015
  const hash = (0, createTheme_1.themeHashOf)(selector, obj);
909
1016
  scannedTables.createThemeObjectTable[hash] = obj;
@@ -914,7 +1021,7 @@ const transformSource = async (env) => {
914
1021
  else if (propName === 'createStatic' &&
915
1022
  args.length > 0 &&
916
1023
  parser_1.t.isObjectExpression(args[0].expression)) {
917
- const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
1024
+ const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
918
1025
  (0, unresolvableValue_1.assertNoDroppedValues)(args[0].expression, obj, spreadValues([
919
1026
  mergedStaticTable,
920
1027
  mergedKeyframesTable,
@@ -924,6 +1031,9 @@ const transformSource = async (env) => {
924
1031
  mergedCreateTable,
925
1032
  mergedCreateStaticHashTable,
926
1033
  scannedTables.createStaticObjectTable,
1034
+ undefined,
1035
+ mergedVarTypeTable,
1036
+ mergedPositionTryTable,
927
1037
  ], localConstNodes, getSource));
928
1038
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
929
1039
  scannedTables.createStaticObjectTable[hash] = obj;
@@ -931,7 +1041,7 @@ const transformSource = async (env) => {
931
1041
  else if (propName === 'create' &&
932
1042
  args.length > 0 &&
933
1043
  parser_1.t.isObjectExpression(args[0].expression)) {
934
- const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
1044
+ const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
935
1045
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
936
1046
  scannedTables.createObjectTable[hash] = obj;
937
1047
  }
@@ -1031,7 +1141,7 @@ const transformSource = async (env) => {
1031
1141
  return merged;
1032
1142
  }
1033
1143
  if (parser_1.t.isObjectExpression(expr)) {
1034
- return (0, parser_1.objectExpressionToObject)(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
1144
+ return (0, parser_1.objectExpressionToObject)(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
1035
1145
  }
1036
1146
  else if (parser_1.t.isMemberExpression(expr) &&
1037
1147
  parser_1.t.isIdentifier(expr.object) &&
@@ -1130,7 +1240,7 @@ const transformSource = async (env) => {
1130
1240
  properties: argExpr.properties.filter((prop) => prop.type === 'Identifier' ||
1131
1241
  (prop.type === 'KeyValueProperty' &&
1132
1242
  isStaticArgValue(prop.value))),
1133
- }, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
1243
+ }, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
1134
1244
  if (func.named) {
1135
1245
  const argExpr = callArgs[0]?.expression;
1136
1246
  if (callArgs.length > 1 ||
package/dist/types.d.ts CHANGED
@@ -9,6 +9,8 @@ export type StaticTable = Record<string, CSSValue>;
9
9
  export type KeyframesHashTable = Record<string, string>;
10
10
  export type KeyframesObjectTable = Record<string, CSSObject>;
11
11
  export type ViewTransitionHashTable = Record<string, string>;
12
+ export type VarTypeHashTable = Record<string, string>;
13
+ export type PositionTryHashTable = Record<string, string>;
12
14
  export type ViewTransitionObjectTable = Record<string, CSSObject>;
13
15
  export type CreateThemeObjectTable = Record<string, CSSObject>;
14
16
  export type CreateHashTable = Record<string, string>;
@@ -38,6 +40,10 @@ export interface Tables {
38
40
  keyframesObjectTable: KeyframesObjectTable;
39
41
  viewTransitionHashTable: ViewTransitionHashTable;
40
42
  viewTransitionObjectTable: ViewTransitionObjectTable;
43
+ varTypeHashTable?: VarTypeHashTable;
44
+ varTypeObjectTable?: Record<string, CSSObject>;
45
+ positionTryHashTable?: PositionTryHashTable;
46
+ positionTryObjectTable?: Record<string, CSSObject>;
41
47
  createThemeHashTable: CreateThemeHashTable;
42
48
  createThemeSelectorTable: CreateThemeSelectorTable;
43
49
  createThemeObjectTable: CreateThemeObjectTable;
@@ -0,0 +1,9 @@
1
+ export declare const varTypeHashOf: (name: string, rule: Record<string, unknown>) => string;
2
+ export declare const createVarType: (rule: Record<string, unknown>, hash: string) => {
3
+ [x: string]: {
4
+ initialValue?: {} | null | undefined;
5
+ syntax: string;
6
+ inherits: string;
7
+ };
8
+ };
9
+ export declare const checkedVarTypeHash: (name: string, rule: Record<string, unknown>) => string;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkedVarTypeHash = exports.createVarType = exports.varTypeHashOf = void 0;
4
+ const lightningcss_1 = require("lightningcss");
5
+ const zss_engine_1 = require("zss-engine");
6
+ const varTypeHashOf = (name, rule) => (0, zss_engine_1.genBase36Hash)({ _varTypeName: name, ...rule }, 1, 8);
7
+ exports.varTypeHashOf = varTypeHashOf;
8
+ const createVarType = (rule, hash) => ({
9
+ [`@property --pr-${hash}`]: {
10
+ syntax: `"${typeof rule.syntax === 'string' ? rule.syntax : '*'}"`,
11
+ inherits: rule.inherits === true ? 'true' : 'false',
12
+ ...(rule.initialValue !== undefined && {
13
+ initialValue: rule.initialValue,
14
+ }),
15
+ },
16
+ });
17
+ exports.createVarType = createVarType;
18
+ const checkedVarTypeHash = (name, rule) => {
19
+ const hash = (0, exports.varTypeHashOf)(name, rule);
20
+ const { styleSheet } = (0, zss_engine_1.transpile)((0, exports.createVarType)(rule, hash), undefined, '--global');
21
+ try {
22
+ (0, lightningcss_1.transform)({ filename: 'global.css', code: Buffer.from(styleSheet) });
23
+ return hash;
24
+ }
25
+ catch {
26
+ const syntax = typeof rule.syntax === 'string' ? `syntax "${rule.syntax}"` : 'no syntax';
27
+ const initial = typeof rule.initialValue === 'string'
28
+ ? `initialValue "${rule.initialValue}"`
29
+ : typeof rule.initialValue === 'number'
30
+ ? `initialValue ${rule.initialValue}`
31
+ : 'no initialValue';
32
+ throw new Error(`[plumeria] css.varType "${name}" is not a valid @property: ${syntax} with ${initial}. The syntax has to be a valid @property syntax, and the initial value has to match it.`);
33
+ }
34
+ };
35
+ exports.checkedVarTypeHash = checkedVarTypeHash;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plumeria/utils",
3
- "version": "19.14.4",
3
+ "version": "20.0.0",
4
4
  "description": "Plumeria Utils",
5
5
  "author": "Refirst 11",
6
6
  "license": "MIT",
@@ -24,7 +24,7 @@
24
24
  "@swc/core": "1.15.47",
25
25
  "lightningcss": "^1.32.0",
26
26
  "postcss": "8.5.26",
27
- "zss-engine": "2.10.0"
27
+ "zss-engine": "3.0.1"
28
28
  },
29
29
  "publishConfig": {
30
30
  "access": "public",